summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAaron Weng <aaron.weng@quantatw.com>2014-06-05 20:10:00 +0800
committerchrome-internal-fetch <chrome-internal-fetch@google.com>2014-06-06 07:44:59 +0000
commit379d420897ea9c77ad1046c5dc5913923574dd6b (patch)
tree8432cc1397edcd508d0306655edfc3b668058b2a
parentdd5f048a52a32af96ccc7ed26d990aea33cac7d5 (diff)
downloadchrome-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.c2
-rw-r--r--board/swanky/board.c2
-rw-r--r--board/swanky/board.h2
-rw-r--r--board/swanky/led.c35
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);