summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGrover Yen <Grover_Yen@wistron.com>2015-01-05 15:10:26 +0800
committerChromeOS Commit Bot <chromeos-commit-bot@chromium.org>2015-01-13 02:06:42 +0000
commit859b9d2ec3fd7965c664a606a3e05a7aa94600fe (patch)
treeed05689ab44a861e6d90e83014fff14e88db1d34
parentefb3ad942c7401464c1c8584584c1e7b1f45eda9 (diff)
downloadchrome-ec-859b9d2ec3fd7965c664a606a3e05a7aa94600fe.tar.gz
cid: Implement LED control.
Implement LED control for cid. BUG=chrome-os-partner:35115 BRANCH=none TEST=make -j buildall, make -j tests Change-Id: Ie86b2dd28c9c2d309d65bd09c16104e0d7817b6e Signed-off-by: Grover Yen <Grover_Yen@wistron.com> Reviewed-on: https://chromium-review.googlesource.com/238320 Reviewed-by: Mohammed Habibulla <moch@chromium.org>
-rw-r--r--board/cid/gpio.inc6
-rw-r--r--board/cid/led.c97
2 files changed, 29 insertions, 74 deletions
diff --git a/board/cid/gpio.inc b/board/cid/gpio.inc
index 3e275ec397..7b244809bc 100644
--- a/board/cid/gpio.inc
+++ b/board/cid/gpio.inc
@@ -83,10 +83,8 @@ GPIO(PCH_SUSACK_L, F, 3, GPIO_OUT_HIGH, NULL) /* Acknowledge PCH SUSWARN
GPIO(PCH_RTCRST_L, F, 6, GPIO_ODR_HIGH, NULL) /* Not supposed to be here */
GPIO(PCH_SRTCRST_L, F, 7, GPIO_ODR_HIGH, NULL) /* Not supposed to be here */
-GPIO(BAT_LED0_L, D, 0, GPIO_ODR_HIGH, NULL) /* Battery charging LED - blue */
-GPIO(BAT_LED1_L, N, 4, GPIO_ODR_HIGH, NULL) /* Battery charging LED - orange */
-GPIO(PWR_LED0_L, D, 1, GPIO_ODR_HIGH, NULL) /* Power LED - blue */
-GPIO(PWR_LED1_L, N, 6, GPIO_ODR_HIGH, NULL) /* Power LED - orange */
+GPIO(BAT_LED0_L, D, 0, GPIO_ODR_HIGH, NULL) /* Battery charging LED - white */
+GPIO(BAT_LED1_L, D, 1, GPIO_ODR_HIGH, NULL) /* Battery charging LED - amber */
ALTERNATE(A, 0x03, 1, MODULE_UART, GPIO_PULL_UP) /* UART0 */
ALTERNATE(B, 0x04, 3, MODULE_I2C, 0) /* I2C0 SCL */
diff --git a/board/cid/led.c b/board/cid/led.c
index ef1d03de93..2553b4b390 100644
--- a/board/cid/led.c
+++ b/board/cid/led.c
@@ -15,42 +15,37 @@
#include "led_common.h"
#include "util.h"
-#define LED_TOTAL_TICKS 16
-#define LED_ON_TICKS 4
+#define LED_ERROR_FREQ 2 /* LED on 500ms every 1000ms */
+#define LED_FORCE_IDLE_FREQ 4 /* LED on 1000ms every 2000ms */
+#define LED_BATTERY_LOW_LEVEL 15 /* Battery low level: 15% */
enum led_color {
LED_OFF = 0,
- LED_BLUE,
+ LED_WHITE,
LED_AMBER,
- LED_PINK,
-
LED_COLOR_COUNT /* Number of colors, not a color itself */
};
const enum ec_led_id supported_led_ids[] = {
- EC_LED_ID_POWER_LED, EC_LED_ID_BATTERY_LED};
+ EC_LED_ID_BATTERY_LED};
const int supported_led_ids_count = ARRAY_SIZE(supported_led_ids);
static int cid_led_set_gpio(enum led_color color,
- enum gpio_signal gpio_led_blue_l,
- enum gpio_signal gpio_led_amber_l)
+ enum gpio_signal gpio_led_white_l,
+ enum gpio_signal gpio_led_amber_l)
{
switch (color) {
case LED_OFF:
- gpio_set_level(gpio_led_blue_l, 1);
+ gpio_set_level(gpio_led_white_l, 1);
gpio_set_level(gpio_led_amber_l, 1);
break;
- case LED_BLUE:
- gpio_set_level(gpio_led_blue_l, 0);
+ case LED_WHITE:
+ gpio_set_level(gpio_led_white_l, 0);
gpio_set_level(gpio_led_amber_l, 1);
break;
case LED_AMBER:
- gpio_set_level(gpio_led_blue_l, 1);
- gpio_set_level(gpio_led_amber_l, 0);
- break;
- case LED_PINK:
- gpio_set_level(gpio_led_blue_l, 0);
+ gpio_set_level(gpio_led_white_l, 1);
gpio_set_level(gpio_led_amber_l, 0);
break;
default:
@@ -64,11 +59,6 @@ static int cid_led_set_color_battery(enum led_color color)
return cid_led_set_gpio(color, GPIO_BAT_LED0_L, GPIO_BAT_LED1_L);
}
-static int cid_led_set_color_power(enum led_color color)
-{
- return cid_led_set_gpio(color, GPIO_PWR_LED0_L, GPIO_PWR_LED1_L);
-}
-
static int cid_led_set_color(enum ec_led_id led_id, enum led_color color)
{
int rv;
@@ -78,9 +68,6 @@ static int cid_led_set_color(enum ec_led_id led_id, enum led_color color)
case EC_LED_ID_BATTERY_LED:
rv = cid_led_set_color_battery(color);
break;
- case EC_LED_ID_POWER_LED:
- rv = cid_led_set_color_power(color);
- break;
default:
return EC_ERROR_UNKNOWN;
}
@@ -89,11 +76,8 @@ static int cid_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_BLUE] != 0 &&
- brightness[EC_LED_COLOR_YELLOW] != 0)
- cid_led_set_color(led_id, LED_PINK);
- else if (brightness[EC_LED_COLOR_BLUE] != 0)
- cid_led_set_color(led_id, LED_BLUE);
+ if (brightness[EC_LED_COLOR_WHITE] != 0)
+ cid_led_set_color(led_id, LED_WHITE);
else if (brightness[EC_LED_COLOR_YELLOW] != 0)
cid_led_set_color(led_id, LED_AMBER);
else
@@ -105,40 +89,10 @@ int led_set_brightness(enum ec_led_id led_id, const uint8_t *brightness)
void led_get_brightness_range(enum ec_led_id led_id, uint8_t *brightness_range)
{
/* Ignoring led_id as both leds support the same colors */
- brightness_range[EC_LED_COLOR_BLUE] = 1;
+ brightness_range[EC_LED_COLOR_WHITE] = 1;
brightness_range[EC_LED_COLOR_YELLOW] = 1;
}
-static void cid_led_set_power(void)
-{
- static int power_ticks;
- static int previous_state_suspend;
-
- power_ticks++;
-
- if (chipset_in_state(CHIPSET_STATE_SUSPEND)) {
- /* Reset ticks if entering suspend so LED turns amber
- * as soon as possible. */
- if (!previous_state_suspend)
- power_ticks = 0;
-
- /* Blink once every four seconds. */
- cid_led_set_color_power(
- (power_ticks % LED_TOTAL_TICKS < LED_ON_TICKS) ?
- LED_AMBER : LED_OFF);
-
- previous_state_suspend = 1;
- return;
- }
-
- previous_state_suspend = 0;
-
- if (chipset_in_state(CHIPSET_STATE_ANY_OFF))
- cid_led_set_color_power(LED_OFF);
- else if (chipset_in_state(CHIPSET_STATE_ON))
- cid_led_set_color_power(LED_BLUE);
-}
-
static void cid_led_set_battery(void)
{
static int battery_ticks;
@@ -148,25 +102,31 @@ static void cid_led_set_battery(void)
switch (charge_get_state()) {
case PWR_STATE_CHARGE:
- cid_led_set_color_battery(LED_AMBER);
+ cid_led_set_color_battery(LED_WHITE);
break;
case PWR_STATE_CHARGE_NEAR_FULL:
- cid_led_set_color_battery(LED_BLUE);
+ cid_led_set_color_battery(LED_OFF);
break;
case PWR_STATE_DISCHARGE:
- cid_led_set_color_battery(LED_OFF);
+ if (chipset_in_state(CHIPSET_STATE_ON) ||
+ chipset_in_state(CHIPSET_STATE_SUSPEND))
+ cid_led_set_color_battery(
+ (charge_get_percent() < LED_BATTERY_LOW_LEVEL) ?
+ LED_AMBER : LED_OFF);
+ else
+ cid_led_set_color_battery(LED_OFF);
break;
case PWR_STATE_ERROR:
cid_led_set_color_battery(
- (battery_ticks % LED_TOTAL_TICKS < LED_ON_TICKS) ?
- LED_AMBER : LED_OFF);
+ (battery_ticks & LED_ERROR_FREQ) ? LED_AMBER : LED_OFF);
break;
case PWR_STATE_IDLE: /* External power connected in IDLE. */
if (chflags & CHARGE_FLAG_FORCE_IDLE)
cid_led_set_color_battery(
- (battery_ticks & 0x4) ? LED_BLUE : LED_OFF);
+ (battery_ticks & LED_FORCE_IDLE_FREQ) ?
+ LED_WHITE : LED_OFF);
else
- cid_led_set_color_battery(LED_BLUE);
+ cid_led_set_color_battery(LED_OFF);
break;
default:
/* Other states don't alter LED behavior */
@@ -177,9 +137,6 @@ static void cid_led_set_battery(void)
/* Called by hook task every 250mSec */
static void led_tick(void)
{
- if (led_auto_control_is_enabled(EC_LED_ID_POWER_LED))
- cid_led_set_power();
-
if (led_auto_control_is_enabled(EC_LED_ID_BATTERY_LED))
cid_led_set_battery();
}