summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYongBeum Ha <ybha@samsung.com>2019-01-23 09:31:00 +0900
committerchrome-bot <chrome-bot@chromium.org>2019-01-24 00:51:46 -0800
commit97c2e2ef6375aadac795982ecfc6fdc31fe86b3b (patch)
tree3f7f8513c2ae4f884ee4878ad04ffd60a97518d0
parent788746e4819c0c7d981b2b318446a6c0bb40a0be (diff)
downloadchrome-ec-97c2e2ef6375aadac795982ecfc6fdc31fe86b3b.tar.gz
casta : implement led
BUG=b:122489253 BRANCH=master TEST=build, flash ec and check led. Change-Id: I9eaa6f2763c08eaae10fba65fab18548f703e669 Signed-off-by: YongBeum Ha <ybha@samsung.com> Reviewed-on: https://chromium-review.googlesource.com/1428499 Reviewed-by: Diana Z <dzigterman@chromium.org>
-rw-r--r--board/casta/board.h3
-rw-r--r--board/casta/build.mk2
-rw-r--r--board/casta/gpio.inc6
-rw-r--r--board/casta/led.c125
4 files changed, 132 insertions, 4 deletions
diff --git a/board/casta/board.h b/board/casta/board.h
index aa18f515b7..9214e52ace 100644
--- a/board/casta/board.h
+++ b/board/casta/board.h
@@ -15,6 +15,9 @@
#define VARIANT_OCTOPUS_NO_SENSORS
#include "baseboard.h"
+#define CONFIG_LED_COMMON
+#define OCTOPUS_POWER_LED
+
/* USB PD */
#undef CONFIG_USB_PD_VBUS_MEASURE_ADC_EACH_PORT
#define CONFIG_USB_PD_VBUS_MEASURE_NOT_PRESENT
diff --git a/board/casta/build.mk b/board/casta/build.mk
index 94c194fa01..3d04b75731 100644
--- a/board/casta/build.mk
+++ b/board/casta/build.mk
@@ -11,5 +11,5 @@ CHIP_FAMILY:=npcx7
CHIP_VARIANT:=npcx7m6fb
BASEBOARD:=octopus
-board-y=board.o
+board-y=board.o led.o
board-$(CONFIG_BATTERY_SMART)+=battery.o
diff --git a/board/casta/gpio.inc b/board/casta/gpio.inc
index f3e5e04f48..7f4a164605 100644
--- a/board/casta/gpio.inc
+++ b/board/casta/gpio.inc
@@ -122,9 +122,9 @@ GPIO(USB_C1_HPD_1V8_ODL, PIN(C, 6), GPIO_INPUT | /* C1 DP Hotplug Detect */
GPIO_SEL_1P8V)
/* LED */
-GPIO(LED_1_L, PIN(C, 3), GPIO_OUT_HIGH)
-GPIO(LED_2_L, PIN(C, 4), GPIO_OUT_HIGH)
-GPIO(LED_3_L, PIN(D, 7), GPIO_OUT_HIGH)
+GPIO(BAT_LED_RED_L, PIN(C, 3), GPIO_OUT_HIGH)
+GPIO(BAT_LED_GREEN_L, PIN(C, 4), GPIO_OUT_HIGH)
+GPIO(PWR_LED_BLUE_L, PIN(D, 7), GPIO_OUT_HIGH)
/* Not implemented in hardware */
UNIMPLEMENTED(KB_BL_PWR_EN)
diff --git a/board/casta/led.c b/board/casta/led.c
new file mode 100644
index 0000000000..bd78bf78a1
--- /dev/null
+++ b/board/casta/led.c
@@ -0,0 +1,125 @@
+/* Copyright 2018 The Chromium OS Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ *
+ * Power and battery LED control for Casta
+ */
+
+#include "chipset.h"
+#include "ec_commands.h"
+#include "gpio.h"
+#include "hooks.h"
+#include "led_common.h"
+#include "led_states.h"
+
+#define LED_OFF_LVL 1
+#define LED_ON_LVL 0
+
+const int led_charge_lvl_1 = 0;
+
+const int led_charge_lvl_2 = 100;
+
+/* Casta : 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_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] = {{LED_OFF, 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_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_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 casta 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); /*red*/
+ gpio_set_level(GPIO_BAT_LED_GREEN_L, LED_OFF_LVL); /*green*/
+ return;
+ }
+
+ switch (color) {
+ case EC_LED_COLOR_GREEN:
+ gpio_set_level(GPIO_BAT_LED_RED_L, LED_OFF_LVL); /*red*/
+ gpio_set_level(GPIO_BAT_LED_GREEN_L, LED_ON_LVL); /*green*/
+ break;
+ case EC_LED_COLOR_RED:
+ gpio_set_level(GPIO_BAT_LED_RED_L, LED_ON_LVL); /*red*/
+ gpio_set_level(GPIO_BAT_LED_GREEN_L, LED_OFF_LVL); /*green*/
+ break;
+ default: /* LED_OFF and other unsupported colors */
+ gpio_set_level(GPIO_BAT_LED_RED_L, LED_OFF_LVL); /*red*/
+ gpio_set_level(GPIO_BAT_LED_GREEN_L, LED_OFF_LVL); /*green*/
+ break;
+ }
+}
+
+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_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) {
+ 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;
+}
+