summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKevin K Wong <kevin.k.wong@intel.com>2016-03-08 18:10:46 -0800
committerchrome-bot <chrome-bot@chromium.org>2016-04-15 21:29:14 -0700
commit9ac90eeee909249c63a0800d5aac5d3a924f6d3c (patch)
tree66427a74db310f8a2ab9c2dd0147d85bd4960b30
parentafac683448775b4bafad13a60bd3190fee68b6c4 (diff)
downloadchrome-ec-9ac90eeee909249c63a0800d5aac5d3a924f6d3c.tar.gz
amenia: update charge LED control
used the same charge LED control as kunimitsu BUG=none BRANCH=none TEST=make buildall, verified LED is changing with AC present. Change-Id: I20324b21ee832d1187daac2ca57c61b8851f9de3 Signed-off-by: Kevin K Wong <kevin.k.wong@intel.com> Reviewed-on: https://chromium-review.googlesource.com/331784 Reviewed-by: Shawn N <shawnn@chromium.org>
-rw-r--r--board/amenia/board.c4
-rw-r--r--board/amenia/gpio.inc4
-rw-r--r--board/amenia/led.c86
3 files changed, 44 insertions, 50 deletions
diff --git a/board/amenia/board.c b/board/amenia/board.c
index 6121167ebf..767a491883 100644
--- a/board/amenia/board.c
+++ b/board/amenia/board.c
@@ -322,8 +322,8 @@ void board_hibernate_late(void)
int i;
const uint32_t hibernate_pins[][2] = {
/* Turn off LEDs in hibernate */
- {GPIO_CHARGE_LED_1, GPIO_OUTPUT | GPIO_LOW},
- {GPIO_CHARGE_LED_2, GPIO_OUTPUT | GPIO_LOW},
+ {GPIO_BAT_LED_BLUE, GPIO_INPUT | GPIO_PULL_UP},
+ {GPIO_BAT_LED_AMBER, GPIO_INPUT | GPIO_PULL_UP},
/*
* Set PD wake low so that it toggles high to generate a wake
* event once we leave hibernate.
diff --git a/board/amenia/gpio.inc b/board/amenia/gpio.inc
index 38b076405d..be8cb6b159 100644
--- a/board/amenia/gpio.inc
+++ b/board/amenia/gpio.inc
@@ -53,8 +53,8 @@ GPIO(I2C3_SDA, PIN(D, 0), GPIO_INPUT) /* B66
* is functional.
*/
/* LED */
-GPIO(CHARGE_LED_1, PIN(B, 7), GPIO_OUT_LOW) /* A57 - PWM5 for CHARGE_LED1 */
-GPIO(CHARGE_LED_2, PIN(C, 0), GPIO_OUT_LOW) /* B61 - PWM6 for CHARGE_LED2 */
+GPIO(BAT_LED_BLUE, PIN(B, 7), GPIO_OUT_LOW) /* A57 - PWM5 for CHARGE_LED1 */
+GPIO(BAT_LED_AMBER, PIN(C, 0), GPIO_OUT_LOW) /* B61 - PWM6 for CHARGE_LED2 */
/* Power Control*/
GPIO(V5A_EN, PIN(C, 4), GPIO_OUT_LOW) /* B64 - PWM2 for V5A_EN */
diff --git a/board/amenia/led.c b/board/amenia/led.c
index 7f65cccd2e..2380366d85 100644
--- a/board/amenia/led.c
+++ b/board/amenia/led.c
@@ -15,16 +15,16 @@
#include "led_common.h"
#include "util.h"
-#define BAT_LED_ON 1
-#define BAT_LED_OFF 0
+#define BAT_LED_ON 0
+#define BAT_LED_OFF 1
#define CRITICAL_LOW_BATTERY_PERCENTAGE 3
#define LOW_BATTERY_PERCENTAGE 10
-#define LED_TOTAL_4SECS_TICKS 16
-#define LED_TOTAL_2SECS_TICKS 8
-#define LED_ON_1SEC_TICKS 4
-#define LED_ON_2SECS_TICKS 8
+#define LED_TOTAL_4SECS_TICKS 4
+#define LED_TOTAL_2SECS_TICKS 2
+#define LED_ON_1SEC_TICKS 1
+#define LED_ON_2SECS_TICKS 2
const enum ec_led_id supported_led_ids[] = {
EC_LED_ID_BATTERY_LED};
@@ -33,9 +33,8 @@ const int supported_led_ids_count = ARRAY_SIZE(supported_led_ids);
enum led_color {
LED_OFF = 0,
- LED_RED,
+ LED_BLUE,
LED_AMBER,
- LED_GREEN,
LED_COLOR_COUNT /* Number of colors, not a color itself */
};
@@ -43,20 +42,16 @@ static int bat_led_set_color(enum led_color color)
{
switch (color) {
case LED_OFF:
- gpio_set_level(GPIO_BAT_LED_RED, BAT_LED_OFF);
- gpio_set_level(GPIO_BAT_LED_GREEN, BAT_LED_OFF);
+ gpio_set_level(GPIO_BAT_LED_BLUE, BAT_LED_OFF);
+ gpio_set_level(GPIO_BAT_LED_AMBER, BAT_LED_OFF);
break;
- case LED_RED:
- gpio_set_level(GPIO_BAT_LED_RED, BAT_LED_ON);
- gpio_set_level(GPIO_BAT_LED_GREEN, BAT_LED_OFF);
+ case LED_BLUE:
+ gpio_set_level(GPIO_BAT_LED_BLUE, BAT_LED_ON);
+ gpio_set_level(GPIO_BAT_LED_AMBER, BAT_LED_OFF);
break;
case LED_AMBER:
- gpio_set_level(GPIO_BAT_LED_RED, BAT_LED_ON);
- gpio_set_level(GPIO_BAT_LED_GREEN, BAT_LED_ON);
- break;
- case LED_GREEN:
- gpio_set_level(GPIO_BAT_LED_RED, BAT_LED_OFF);
- gpio_set_level(GPIO_BAT_LED_GREEN, BAT_LED_ON);
+ gpio_set_level(GPIO_BAT_LED_BLUE, BAT_LED_OFF);
+ gpio_set_level(GPIO_BAT_LED_AMBER, BAT_LED_ON);
break;
default:
return EC_ERROR_UNKNOWN;
@@ -66,23 +61,23 @@ static int bat_led_set_color(enum led_color color)
void led_get_brightness_range(enum ec_led_id led_id, uint8_t *brightness_range)
{
- brightness_range[EC_LED_COLOR_RED] = 1;
- brightness_range[EC_LED_COLOR_GREEN] = 1;
+ brightness_range[EC_LED_COLOR_BLUE] = 1;
+ brightness_range[EC_LED_COLOR_AMBER] = 1;
}
-static int amenia_led_set_color_battery(enum led_color color)
+static int led_set_color_battery(enum led_color color)
{
return bat_led_set_color(color);
}
-static int amenia_led_set_color(enum ec_led_id led_id, enum led_color color)
+static int led_set_color(enum ec_led_id led_id, enum led_color color)
{
int rv;
led_auto_control(led_id, 0);
switch (led_id) {
case EC_LED_ID_BATTERY_LED:
- rv = amenia_led_set_color_battery(color);
+ rv = led_set_color_battery(color);
break;
default:
return EC_ERROR_UNKNOWN;
@@ -92,20 +87,17 @@ static int amenia_led_set_color(enum ec_led_id led_id, enum led_color color)
int led_set_brightness(enum ec_led_id led_id, const uint8_t *brightness)
{
- if (brightness[EC_LED_COLOR_RED] != 0 &&
- brightness[EC_LED_COLOR_GREEN] != 0)
- amenia_led_set_color(led_id, LED_AMBER);
- else if (brightness[EC_LED_COLOR_RED] != 0)
- amenia_led_set_color(led_id, LED_RED);
- else if (brightness[EC_LED_COLOR_GREEN] != 0)
- amenia_led_set_color(led_id, LED_GREEN);
+ if (brightness[EC_LED_COLOR_BLUE] != 0)
+ led_set_color(led_id, LED_BLUE);
+ else if (brightness[EC_LED_COLOR_AMBER] != 0)
+ led_set_color(led_id, LED_AMBER);
else
- amenia_led_set_color(led_id, LED_OFF);
+ led_set_color(led_id, LED_OFF);
return EC_SUCCESS;
}
-static void amenia_led_set_battery(void)
+static void led_set_battery(void)
{
static int battery_ticks;
uint32_t chflags = charge_get_flags();
@@ -118,37 +110,39 @@ static void amenia_led_set_battery(void)
*/
switch (charge_get_state()) {
case PWR_STATE_CHARGE:
- amenia_led_set_color_battery(LED_AMBER);
+ led_set_color_battery(LED_AMBER);
break;
case PWR_STATE_DISCHARGE:
/* Less than 3%, blink one second every two second */
- if (charge_get_percent() < CRITICAL_LOW_BATTERY_PERCENTAGE)
- amenia_led_set_color_battery(
+ if (!chipset_in_state(CHIPSET_STATE_ANY_OFF) &&
+ charge_get_percent() < CRITICAL_LOW_BATTERY_PERCENTAGE)
+ led_set_color_battery(
(battery_ticks % LED_TOTAL_2SECS_TICKS <
LED_ON_1SEC_TICKS) ? LED_AMBER : LED_OFF);
/* Less than 10%, blink one second every four seconds */
- else if (charge_get_percent() < LOW_BATTERY_PERCENTAGE)
- amenia_led_set_color_battery(
+ else if (!chipset_in_state(CHIPSET_STATE_ANY_OFF) &&
+ charge_get_percent() < LOW_BATTERY_PERCENTAGE)
+ led_set_color_battery(
(battery_ticks % LED_TOTAL_4SECS_TICKS <
LED_ON_1SEC_TICKS) ? LED_AMBER : LED_OFF);
else
- amenia_led_set_color_battery(LED_OFF);
+ led_set_color_battery(LED_OFF);
break;
case PWR_STATE_ERROR:
- amenia_led_set_color_battery(
+ led_set_color_battery(
(battery_ticks % LED_TOTAL_2SECS_TICKS <
- LED_ON_1SEC_TICKS) ? LED_RED : LED_OFF);
+ LED_ON_1SEC_TICKS) ? LED_AMBER : LED_OFF);
break;
case PWR_STATE_CHARGE_NEAR_FULL:
- amenia_led_set_color_battery(LED_GREEN);
+ led_set_color_battery(LED_BLUE);
break;
case PWR_STATE_IDLE: /* External power connected in IDLE */
if (chflags & CHARGE_FLAG_FORCE_IDLE)
- amenia_led_set_color_battery(
+ led_set_color_battery(
(battery_ticks % LED_TOTAL_4SECS_TICKS <
- LED_ON_2SECS_TICKS) ? LED_GREEN : LED_AMBER);
+ LED_ON_2SECS_TICKS) ? LED_AMBER : LED_BLUE);
else
- amenia_led_set_color_battery(LED_GREEN);
+ led_set_color_battery(LED_BLUE);
break;
default:
/* Other states don't alter LED behavior */
@@ -160,6 +154,6 @@ static void amenia_led_set_battery(void)
static void led_second(void)
{
if (led_auto_control_is_enabled(EC_LED_ID_BATTERY_LED))
- amenia_led_set_battery();
+ led_set_battery();
}
DECLARE_HOOK(HOOK_SECOND, led_second, HOOK_PRIO_DEFAULT);