summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDiana Z <dzigterman@chromium.org>2018-06-27 12:13:32 -0600
committerchrome-bot <chrome-bot@chromium.org>2018-06-28 09:55:39 -0700
commit013217d91a24a5661d94cc4d5813ad933d2a91bb (patch)
treedf6c72cfdaadf0e0f6a9740b2621cdf92ebbe1e2
parent0fa6368a995418eb0298e63f3ed13501912c12ef (diff)
downloadchrome-ec-013217d91a24a5661d94cc4d5813ad933d2a91bb.tar.gz
bip: implement charging LED
Enable the LED common code for bip. Set up bip's charging LED, which currently shares similar behavior to the yorp charging LED. Since we are not using the PWM on bip, set to just use GPIO pins. BRANCH=none BUG=b:110121794 TEST=verified LED behavior with board charging, fully charged, discharging, discharging in S0ix, and with battery unplugged Change-Id: If874d0d841a77a8816cdcd0f618ab267123cfa17 Signed-off-by: Diana Z <dzigterman@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/1117312 Reviewed-by: Jett Rink <jettrink@chromium.org>
-rw-r--r--board/bip/board.h2
-rw-r--r--board/bip/build.mk2
-rw-r--r--board/bip/gpio.inc5
-rw-r--r--board/bip/led.c68
4 files changed, 75 insertions, 2 deletions
diff --git a/board/bip/board.h b/board/bip/board.h
index 42fdeef709..1859c424ee 100644
--- a/board/bip/board.h
+++ b/board/bip/board.h
@@ -16,6 +16,8 @@
/* Optional features */
#define CONFIG_SYSTEM_UNLOCKED /* Allow dangerous commands while in dev. */
+#define CONFIG_LED_COMMON
+
/* Hardware for proto bip does not support ec keyboard backlight control. */
#undef CONFIG_PWM
#undef CONFIG_PWM_KBLIGHT
diff --git a/board/bip/build.mk b/board/bip/build.mk
index 7ef4b615d9..6118e72e95 100644
--- a/board/bip/build.mk
+++ b/board/bip/build.mk
@@ -9,6 +9,6 @@
CHIP:=it83xx
BASEBOARD:=octopus
-board-y=board.o
+board-y=board.o led.o
board-$(CONFIG_BATTERY_SMART)+=battery.o
board-$(CONFIG_USB_POWER_DELIVERY)+=usb_pd_policy.o \ No newline at end of file
diff --git a/board/bip/gpio.inc b/board/bip/gpio.inc
index 9c78d2e89b..af2cbf9eb8 100644
--- a/board/bip/gpio.inc
+++ b/board/bip/gpio.inc
@@ -101,6 +101,10 @@ GPIO(USB_C1_BC12_VBUS_ON, PIN(J, 5), GPIO_OUT_LOW) /* C1 BC1.2 Power */
GPIO(USB_C1_PD_RST_ODL, PIN(L, 7), GPIO_ODR_HIGH) /* C1 PD Reset */
GPIO(USB2_OTG_ID, PIN(I, 2), GPIO_OUT_LOW) /* OTG ID */
+/* LED */
+GPIO(BAT_LED_ORANGE, PIN(A, 6), GPIO_OUT_LOW) /* LED_1_L */
+GPIO(BAT_LED_BLUE, PIN(A, 3), GPIO_OUT_LOW) /* LED_2_L */
+
/* Not implemented in hardware yet */
UNIMPLEMENTED(KB_BL_PWR_EN)
@@ -113,4 +117,3 @@ ALTERNATE(PIN_MASK(F, 0xC0), 0, MODULE_I2C, 0) /* I2C2 */
ALTERNATE(PIN_MASK(E, 0x81), 0, MODULE_I2C, 0) /* I2C4 */
ALTERNATE(PIN_MASK(A, 0x30), 0, MODULE_I2C, 0) /* I2C5 */
ALTERNATE(PIN_MASK(L, 0x03), 0, MODULE_ADC, 0) /* ADC13 & ADC14: ADC_USB_C0_VBUS & ADC_USB_C1_VBUS */
-ALTERNATE(PIN_MASK(A, 0x48), 0, MODULE_PWM, 0) /* LED_1_L & LED_2_L */
diff --git a/board/bip/led.c b/board/bip/led.c
new file mode 100644
index 0000000000..823df237e9
--- /dev/null
+++ b/board/bip/led.c
@@ -0,0 +1,68 @@
+/* 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 Bip
+ */
+
+#include "ec_commands.h"
+#include "gpio.h"
+#include "led_common.h"
+#include "led_states.h"
+
+#define LED_OFF_LVL 0
+#define LED_ON_LVL 1
+
+/* Bip: Note there is only LED for charge / power */
+const struct led_descriptor
+ led_bat_state_table[LED_NUM_STATES][LED_NUM_PHASES] = {
+ [STATE_CHARGING] = {{EC_LED_COLOR_AMBER, LED_INDEFINITE} },
+ [STATE_CHARGING_FULL_CHARGE] = {{EC_LED_COLOR_BLUE, LED_INDEFINITE} },
+ [STATE_DISCHARGE_S0] = {{EC_LED_COLOR_BLUE, LED_INDEFINITE} },
+ [STATE_DISCHARGE_S3] = {{EC_LED_COLOR_AMBER, 4 * LED_ONE_SEC},
+ {LED_OFF, 1 * LED_ONE_SEC} },
+ [STATE_DISCHARGE_S5] = {{LED_OFF, LED_INDEFINITE} },
+ [STATE_BATTERY_ERROR] = {{EC_LED_COLOR_BLUE, 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_BLUE:
+ gpio_set_level(GPIO_BAT_LED_BLUE, LED_ON_LVL);
+ gpio_set_level(GPIO_BAT_LED_ORANGE, LED_OFF_LVL);
+ break;
+ case EC_LED_COLOR_AMBER:
+ gpio_set_level(GPIO_BAT_LED_BLUE, LED_OFF_LVL);
+ gpio_set_level(GPIO_BAT_LED_ORANGE, LED_ON_LVL);
+ break;
+ default: /* LED_OFF and other unsupported colors */
+ gpio_set_level(GPIO_BAT_LED_BLUE, LED_OFF_LVL);
+ gpio_set_level(GPIO_BAT_LED_ORANGE, LED_OFF_LVL);
+ break;
+ }
+}
+
+void led_get_brightness_range(enum ec_led_id led_id, uint8_t *brightness_range)
+{
+ brightness_range[EC_LED_COLOR_BLUE] = 1;
+ brightness_range[EC_LED_COLOR_AMBER] = 1;
+}
+
+int led_set_brightness(enum ec_led_id led_id, const uint8_t *brightness)
+{
+ if (brightness[EC_LED_COLOR_BLUE] != 0)
+ led_set_color_battery(EC_LED_COLOR_BLUE);
+ else if (brightness[EC_LED_COLOR_AMBER] != 0)
+ led_set_color_battery(EC_LED_COLOR_AMBER);
+ else
+ led_set_color_battery(LED_OFF);
+
+ return EC_SUCCESS;
+}
+