summaryrefslogtreecommitdiff
path: root/board/hatch
diff options
context:
space:
mode:
authorScott Collyer <scollyer@google.com>2018-12-18 11:03:44 -0800
committerchrome-bot <chrome-bot@chromium.org>2019-01-29 21:35:05 -0800
commitd10286cc838c0a51266bd0c162f1cce49d036c2a (patch)
treeef6776845fc5256597a413dec645aef61ad65263 /board/hatch
parentf71c06294fcfa383cefa52d8705b4443c16db8f4 (diff)
downloadchrome-ec-d10286cc838c0a51266bd0c162f1cce49d036c2a.tar.gz
hatch: Add support for 2 color LED
This CL adds board specific files/functions required to support the battery LED. Similar to Coral or Octopus, the LEDs are controlled by GPIO on/off instead of PWM. BRANCH=none BUG=b:122251649 TEST=make buildall. Verfied charging LED turns when external power is connected. Change-Id: Ic16d4192aaeba6e765e97743ded772d52ca47111 Signed-off-by: Scott Collyer <scollyer@google.com> Reviewed-on: https://chromium-review.googlesource.com/1387586 Commit-Ready: Scott Collyer <scollyer@chromium.org> Tested-by: Scott Collyer <scollyer@chromium.org> Reviewed-by: Aseda Aboagye <aaboagye@chromium.org> Reviewed-by: Zack Yang <zack_yang@compal.corp-partner.google.com>
Diffstat (limited to 'board/hatch')
-rw-r--r--board/hatch/board.h1
-rw-r--r--board/hatch/build.mk2
-rw-r--r--board/hatch/gpio.inc4
-rw-r--r--board/hatch/led.c79
4 files changed, 85 insertions, 1 deletions
diff --git a/board/hatch/board.h b/board/hatch/board.h
index 35b3f7351b..bf9c21bf9b 100644
--- a/board/hatch/board.h
+++ b/board/hatch/board.h
@@ -17,6 +17,7 @@
#define CONFIG_POWER_BUTTON
#define CONFIG_KEYBOARD_BOARD_CONFIG
#define CONFIG_KEYBOARD_PROTOCOL_8042
+#define CONFIG_LED_COMMON
#define CONFIG_LOW_POWER_IDLE
#define CONFIG_HOSTCMD_ESPI
diff --git a/board/hatch/build.mk b/board/hatch/build.mk
index dda2da02f0..733912454f 100644
--- a/board/hatch/build.mk
+++ b/board/hatch/build.mk
@@ -11,5 +11,5 @@ CHIP_FAMILY:=npcx7
CHIP_VARIANT:=npcx7m6fc
BASEBOARD:=hatch
-board-y=board.o
+board-y=board.o led.o
board-$(CONFIG_BATTERY_SMART)+=battery.o
diff --git a/board/hatch/gpio.inc b/board/hatch/gpio.inc
index bffbecb830..d7f305fccd 100644
--- a/board/hatch/gpio.inc
+++ b/board/hatch/gpio.inc
@@ -52,6 +52,10 @@ GPIO(EN_USB_A_LOW_PWR_ODL, PIN(9, 4), GPIO_OUT_LOW)
/* Misc Signals */
GPIO(EC_BATT_PRES_ODL, PIN(E, 1), GPIO_INPUT)
+GPIO(LED_1_L, PIN(C, 4), GPIO_OUT_HIGH) /* Yellow (hatch) */
+GPIO(LED_2_L, PIN(C, 3), GPIO_OUT_HIGH) /* White (hatch) */
+GPIO(LED_3_L, PIN(C, 2), GPIO_OUT_HIGH)
+GPIO(LED_4_L, PIN(6, 0), GPIO_OUT_HIGH)
/* I2C pins - Alternate function below configures I2C module on these pins */
GPIO(I2C0_SCL, PIN(B, 5), GPIO_INPUT |
diff --git a/board/hatch/led.c b/board/hatch/led.c
new file mode 100644
index 0000000000..ccba8054cb
--- /dev/null
+++ b/board/hatch/led.c
@@ -0,0 +1,79 @@
+/* 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 Hatch
+ */
+
+#include "ec_commands.h"
+#include "gpio.h"
+#include "led_common.h"
+#include "led_states.h"
+#include "chipset.h"
+
+#define LED_ON_LVL 0
+#define LED_OFF_LVL 1
+
+const int led_charge_lvl_1 = 5;
+
+const int led_charge_lvl_2 = 95;
+
+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} },
+};
+
+const enum ec_led_id supported_led_ids[] = {
+ EC_LED_ID_BATTERY_LED
+};
+
+const int supported_led_ids_count = ARRAY_SIZE(supported_led_ids);
+
+void led_set_color_battery(enum ec_led_colors color)
+{
+ 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);
+ 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);
+ 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);
+ 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_AMBER] = 1;
+ brightness_range[EC_LED_COLOR_WHITE] = 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);
+ }
+
+ return EC_SUCCESS;
+}
+