diff options
author | Aaron Weng <aaron.weng@quantatw.com> | 2014-06-05 20:10:00 +0800 |
---|---|---|
committer | chrome-internal-fetch <chrome-internal-fetch@google.com> | 2014-06-06 07:44:59 +0000 |
commit | 379d420897ea9c77ad1046c5dc5913923574dd6b (patch) | |
tree | 8432cc1397edcd508d0306655edfc3b668058b2a | |
parent | dd5f048a52a32af96ccc7ed26d990aea33cac7d5 (diff) | |
download | chrome-ec-379d420897ea9c77ad1046c5dc5913923574dd6b.tar.gz |
Swanky: To implement power led.
BUG=chrome-os-partner:29077
BRANCH=rambi
TEST=make buildall -j and power led can be operated normally.
Change-Id: Iaf69859fdaa6e511d8e19810f38bed85209a226c
Signed-off-by: Aaron Weng <aaron.weng@quantatw.com>
Reviewed-on: https://chromium-review.googlesource.com/202655
Reviewed-by: Dave Parker <dparker@chromium.org>
-rw-r--r-- | board/swanky/battery.c | 2 | ||||
-rw-r--r-- | board/swanky/board.c | 2 | ||||
-rw-r--r-- | board/swanky/board.h | 2 | ||||
-rw-r--r-- | board/swanky/led.c | 35 |
4 files changed, 36 insertions, 5 deletions
diff --git a/board/swanky/battery.c b/board/swanky/battery.c index 783fd923bd..f7df07d129 100644 --- a/board/swanky/battery.c +++ b/board/swanky/battery.c @@ -65,7 +65,7 @@ DECLARE_DEFERRED(wakeup_deferred); static void wakeup(void) { /* - * The deferred call ensures thet wakeup_deferred is called from a + * The deferred call ensures that wakeup_deferred is called from a * task. This is required to talk to the battery over I2C. */ hook_call_deferred(wakeup_deferred, 0); diff --git a/board/swanky/board.c b/board/swanky/board.c index 6e0ef2109e..e0c2cb00df 100644 --- a/board/swanky/board.c +++ b/board/swanky/board.c @@ -125,6 +125,7 @@ const struct gpio_alt_func gpio_alt_funcs[] = { {GPIO_D, 0x0f, 2, MODULE_SPI}, /* SPI1 */ {GPIO_L, 0x3f, 15, MODULE_LPC}, /* LPC */ {GPIO_M, 0x21, 15, MODULE_LPC}, /* LPC */ + {GPIO_M, 0x40, 1, MODULE_PWM_LED}, /* FAN0PWM 0 */ {GPIO_N, 0x50, 1, MODULE_PWM_LED, GPIO_OPEN_DRAIN}, /* FAN0PWM 3&4 */ }; const int gpio_alt_funcs_count = ARRAY_SIZE(gpio_alt_funcs); @@ -171,6 +172,7 @@ BUILD_ASSERT(ARRAY_SIZE(adc_channels) == ADC_CH_COUNT); const struct pwm_t pwm_channels[] = { {4, PWM_CONFIG_ACTIVE_LOW}, {3, PWM_CONFIG_ACTIVE_LOW}, + {0, 0} }; BUILD_ASSERT(ARRAY_SIZE(pwm_channels) == PWM_CH_COUNT); diff --git a/board/swanky/board.h b/board/swanky/board.h index 0e3798f76b..c2d04b2a1d 100644 --- a/board/swanky/board.h +++ b/board/swanky/board.h @@ -168,7 +168,7 @@ enum adc_channel { enum pwm_channel { PWM_CH_LED_GREEN, PWM_CH_LED_ORANGE, - + PWM_CH_POWER_LED_WHITE, /* Number of PWM channels */ PWM_CH_COUNT }; diff --git a/board/swanky/led.c b/board/swanky/led.c index e0415a8221..13bcb5bbc2 100644 --- a/board/swanky/led.c +++ b/board/swanky/led.c @@ -13,12 +13,13 @@ #include "pwm.h" #include "util.h" -const enum ec_led_id supported_led_ids[] = {EC_LED_ID_BATTERY_LED}; +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); enum led_color { LED_OFF = 0, - LED_RED, + LED_WHITE, LED_ORANGE, LED_YELLOW, LED_GREEN, @@ -47,6 +48,11 @@ static void set_battery_led_color(enum led_color color) pwm_set_duty(PWM_CH_LED_GREEN, color_brightness[color][1]); } +static void set_power_led_color(enum led_color color) +{ + pwm_set_duty(PWM_CH_POWER_LED_WHITE, color_brightness[color][0]); +} + void led_get_brightness_range(enum ec_led_id led_id, uint8_t *brightness_range) { brightness_range[EC_LED_COLOR_YELLOW] = 100; @@ -72,13 +78,14 @@ static void led_init(void) pwm_enable(PWM_CH_LED_ORANGE, 1); pwm_enable(PWM_CH_LED_GREEN, 1); set_battery_led_color(LED_OFF); + set_power_led_color(LED_OFF); } DECLARE_HOOK(HOOK_INIT, led_init, HOOK_PRIO_DEFAULT); /** * Called by hook task every 250 ms */ -static void led_tick(void) +static void battery_led_tick(void) { static unsigned ticks; int chstate = charge_get_state(); @@ -118,4 +125,26 @@ static void led_tick(void) /* Otherwise, system is off and AC not connected, LED off */ set_battery_led_color(LED_OFF); } + +static void power_led_tick(void) +{ + + /* If we don't control the LED, nothing to do */ + if (!led_auto_control_is_enabled(EC_LED_ID_POWER_LED)) + return; + + if (chipset_in_state(CHIPSET_STATE_ON)) { + set_power_led_color(LED_WHITE); + return; + } + + set_power_led_color(LED_OFF); + +} + +static void led_tick(void) +{ + battery_led_tick(); + power_led_tick(); +} DECLARE_HOOK(HOOK_TICK, led_tick, HOOK_PRIO_DEFAULT); |