summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYongBeum.Ha <ybha@samsung.corp-partner.google.com>2019-06-18 03:38:06 +0900
committerCommit Bot <commit-bot@chromium.org>2019-09-11 06:43:14 +0000
commit6180c3c38d964128ab819dc5a0710833cd786cce (patch)
tree5d62aa53b26a66a7e9fed791f39c99777515bd3b
parent39a9445c094a1572c5a5f932e029df0cb795d7f0 (diff)
downloadchrome-ec-6180c3c38d964128ab819dc5a0710833cd786cce.tar.gz
kohaku: implement leds
kohaku has 3-color led and one of them is power led. BUG=b:131272926 BRANCH=none TEST=emerge-hatch chromeos-ec, update and check leds Change-Id: I2845ed1717a69010dfba18349e6f1eeb46586aad Signed-off-by: YongBeum.Ha <ybha@samsung.corp-partner.google.com> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/1660526 Reviewed-by: Tim Wawrzynczak <twawrzynczak@chromium.org> Reviewed-by: Scott Collyer <scollyer@chromium.org>
-rw-r--r--board/kohaku/board.h4
-rw-r--r--board/kohaku/led.c115
2 files changed, 86 insertions, 33 deletions
diff --git a/board/kohaku/board.h b/board/kohaku/board.h
index c13ba1c805..9594151d89 100644
--- a/board/kohaku/board.h
+++ b/board/kohaku/board.h
@@ -16,6 +16,7 @@
#define CONFIG_KEYBOARD_PROTOCOL_8042
#define CONFIG_LED_COMMON
#define CONFIG_LOW_POWER_IDLE
+#define CONFIG_LED_POWER_LED
#define CONFIG_HOSTCMD_ESPI
@@ -91,6 +92,9 @@
#define BOARD_TCPC_C1_RESET_POST_DELAY 0
#define GPIO_USB_C0_TCPC_RST GPIO_USB_C0_TCPC_RST_ODL
#define GPIO_USB_C1_TCPC_RST GPIO_USB_C1_TCPC_RST_ODL
+#define GPIO_BAT_LED_RED_L GPIO_LED_1_L
+#define GPIO_BAT_LED_GREEN_L GPIO_LED_3_L
+#define GPIO_PWR_LED_BLUE_L GPIO_LED_2_L
/* BC 1.2 */
#define CONFIG_BC12_DETECT_MAX14637
diff --git a/board/kohaku/led.c b/board/kohaku/led.c
index 7279243861..b7b1df46e3 100644
--- a/board/kohaku/led.c
+++ b/board/kohaku/led.c
@@ -5,52 +5,99 @@
* Power and battery LED control for Kohaku
*/
+#include "chipset.h"
#include "ec_commands.h"
#include "gpio.h"
+#include "hooks.h"
#include "led_common.h"
#include "led_onoff_states.h"
-#include "chipset.h"
-#define LED_ON_LVL 0
-#define LED_OFF_LVL 1
+#define LED_OFF_LVL 1
+#define LED_ON_LVL 0
-const int led_charge_lvl_1 = 5;
+const int led_charge_lvl_1 = 0;
-const int led_charge_lvl_2 = 95;
+const int led_charge_lvl_2 = 100;
+/* Kohaku : There are 3 leds for AC, Battery and Power */
struct led_descriptor led_bat_state_table[LED_NUM_STATES][LED_NUM_PHASES] = {
- [STATE_CHARGING_LVL_1] = {{EC_LED_COLOR_AMBER, LED_INDEFINITE} },
- [STATE_CHARGING_LVL_2] = {{EC_LED_COLOR_AMBER, LED_INDEFINITE} },
- [STATE_CHARGING_FULL_CHARGE] = {{EC_LED_COLOR_WHITE, LED_INDEFINITE} },
- [STATE_DISCHARGE_S0] = {{LED_OFF, LED_INDEFINITE} },
- [STATE_DISCHARGE_S3] = {{LED_OFF, LED_INDEFINITE} },
- [STATE_DISCHARGE_S5] = {{LED_OFF, LED_INDEFINITE} },
- [STATE_BATTERY_ERROR] = {{EC_LED_COLOR_AMBER, 1 * LED_ONE_SEC},
- {LED_OFF, 1 * LED_ONE_SEC} },
- [STATE_FACTORY_TEST] = {{EC_LED_COLOR_WHITE, 2 * LED_ONE_SEC},
- {EC_LED_COLOR_AMBER, 2 * LED_ONE_SEC} },
+ [STATE_CHARGING_LVL_1] = {{EC_LED_COLOR_RED, LED_INDEFINITE} },
+ [STATE_CHARGING_LVL_2] = {{EC_LED_COLOR_RED, LED_INDEFINITE} },
+ [STATE_CHARGING_FULL_CHARGE] = {{EC_LED_COLOR_GREEN, LED_INDEFINITE} },
+ [STATE_DISCHARGE_S0] = {{EC_LED_COLOR_GREEN, LED_INDEFINITE} },
+ [STATE_DISCHARGE_S0_BAT_LOW] = {{LED_OFF, LED_INDEFINITE} },
+ [STATE_DISCHARGE_S3] = {{LED_OFF, LED_INDEFINITE} },
+ [STATE_DISCHARGE_S5] = {{LED_OFF, LED_INDEFINITE} },
+ [STATE_BATTERY_ERROR] = {{EC_LED_COLOR_RED, 0.5 * LED_ONE_SEC},
+ {LED_OFF, 0.5 * LED_ONE_SEC} },
+ [STATE_FACTORY_TEST] = {{EC_LED_COLOR_RED, 1 * LED_ONE_SEC},
+ {LED_OFF, 1 * LED_ONE_SEC} },
+};
+
+const struct led_descriptor
+ led_pwr_state_table[PWR_LED_NUM_STATES][LED_NUM_PHASES] = {
+ [PWR_LED_STATE_ON] = {{EC_LED_COLOR_BLUE, LED_INDEFINITE} },
+ [PWR_LED_STATE_SUSPEND_AC] = {{LED_OFF, LED_INDEFINITE} },
+ [PWR_LED_STATE_SUSPEND_NO_AC] = {{LED_OFF, LED_INDEFINITE} },
+ [PWR_LED_STATE_OFF] = {{LED_OFF, LED_INDEFINITE} },
};
const enum ec_led_id supported_led_ids[] = {
- EC_LED_ID_BATTERY_LED
+ EC_LED_ID_BATTERY_LED,
+ EC_LED_ID_POWER_LED
};
const int supported_led_ids_count = ARRAY_SIZE(supported_led_ids);
+void led_set_color_power(enum ec_led_colors color)
+{
+ /* Don't set led if led_auto_control is disabled. */
+ if (!led_auto_control_is_enabled(EC_LED_ID_POWER_LED) ||
+ !led_auto_control_is_enabled(EC_LED_ID_BATTERY_LED)) {
+ return;
+ }
+
+ if (color == EC_LED_COLOR_BLUE)
+ {
+ gpio_set_level(GPIO_BAT_LED_RED_L, LED_OFF_LVL);
+ gpio_set_level(GPIO_BAT_LED_GREEN_L, LED_OFF_LVL);
+ gpio_set_level(GPIO_PWR_LED_BLUE_L, LED_ON_LVL);
+ } else {
+ /* LED_OFF and unsupported colors */
+ gpio_set_level(GPIO_PWR_LED_BLUE_L, LED_OFF_LVL);
+ }
+}
+
void led_set_color_battery(enum ec_led_colors color)
{
+ /* Don't set led if led_auto_control is disabled. */
+ if (!led_auto_control_is_enabled(EC_LED_ID_POWER_LED) ||
+ !led_auto_control_is_enabled(EC_LED_ID_BATTERY_LED)) {
+ return;
+ }
+
+ /* Battery leds must be turn off when blue led is on
+ * because kohaku has 3-in-1 led.
+ */
+ if(!gpio_get_level(GPIO_PWR_LED_BLUE_L))
+ {
+ gpio_set_level(GPIO_BAT_LED_RED_L, LED_OFF_LVL);
+ gpio_set_level(GPIO_BAT_LED_GREEN_L, LED_OFF_LVL);
+ return;
+ }
+
switch (color) {
- case EC_LED_COLOR_AMBER:
- gpio_set_level(GPIO_LED_2_L, LED_OFF_LVL);
- gpio_set_level(GPIO_LED_1_L, LED_ON_LVL);
+ case EC_LED_COLOR_GREEN:
+ gpio_set_level(GPIO_BAT_LED_RED_L, LED_OFF_LVL);
+ gpio_set_level(GPIO_BAT_LED_GREEN_L, LED_ON_LVL);
break;
- case EC_LED_COLOR_WHITE:
- gpio_set_level(GPIO_LED_1_L, LED_OFF_LVL);
- gpio_set_level(GPIO_LED_2_L, LED_ON_LVL);
+ case EC_LED_COLOR_RED:
+ gpio_set_level(GPIO_BAT_LED_RED_L, LED_ON_LVL);
+ gpio_set_level(GPIO_BAT_LED_GREEN_L, LED_OFF_LVL);
break;
default: /* LED_OFF and other unsupported colors */
- gpio_set_level(GPIO_LED_1_L, LED_OFF_LVL);
- gpio_set_level(GPIO_LED_2_L, LED_OFF_LVL);
+ gpio_set_level(GPIO_BAT_LED_RED_L, LED_OFF_LVL);
+ gpio_set_level(GPIO_BAT_LED_GREEN_L, LED_OFF_LVL);
break;
}
}
@@ -58,22 +105,24 @@ void led_set_color_battery(enum ec_led_colors color)
void led_get_brightness_range(enum ec_led_id led_id, uint8_t *brightness_range)
{
if (led_id == EC_LED_ID_BATTERY_LED) {
- brightness_range[EC_LED_COLOR_AMBER] = 1;
- brightness_range[EC_LED_COLOR_WHITE] = 1;
+ brightness_range[EC_LED_COLOR_GREEN] = 1;
+ brightness_range[EC_LED_COLOR_RED] = 1;
+ } else if (led_id == EC_LED_ID_POWER_LED) {
+ brightness_range[EC_LED_COLOR_BLUE] = 1;
}
}
int led_set_brightness(enum ec_led_id led_id, const uint8_t *brightness)
{
if (led_id == EC_LED_ID_BATTERY_LED) {
- if (brightness[EC_LED_COLOR_AMBER] != 0)
- led_set_color_battery(EC_LED_COLOR_AMBER);
- else if (brightness[EC_LED_COLOR_WHITE] != 0)
- led_set_color_battery(EC_LED_COLOR_WHITE);
- else
- led_set_color_battery(LED_OFF);
+ gpio_set_level(GPIO_PWR_LED_BLUE_L, LED_OFF_LVL);
+ gpio_set_level(GPIO_BAT_LED_GREEN_L, !brightness[EC_LED_COLOR_GREEN]);
+ gpio_set_level(GPIO_BAT_LED_RED_L, !brightness[EC_LED_COLOR_RED]);
+ } else if (led_id == EC_LED_ID_POWER_LED) {
+ gpio_set_level(GPIO_PWR_LED_BLUE_L, !brightness[EC_LED_COLOR_BLUE]);
+ gpio_set_level(GPIO_BAT_LED_GREEN_L, LED_OFF_LVL);
+ gpio_set_level(GPIO_BAT_LED_RED_L, LED_OFF_LVL);
}
return EC_SUCCESS;
}
-