summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruce <Bruce.Wan@quantatw.com>2015-12-01 17:13:35 +0800
committerChromeOS bot <3su6n15k.default@developer.gserviceaccount.com>2015-12-02 22:50:12 +0000
commitadc5bd99c13460ce81774ca08c531c69c3e986dc (patch)
tree95e0e875aba20a6f07ff4d6cca070f0c7765ada2
parent67914628c92a38fc504d4a0ac69b9a8951c41c99 (diff)
downloadchrome-ec-adc5bd99c13460ce81774ca08c531c69c3e986dc.tar.gz
Ultima: LED behavior setting
Modify battery LED pin from pwm to gpio, set led behavior follow OEM spec. BUG=chrome-os-partner:47085 BRANCH=firmware-strago-7287.B TEST=check LED behavior follow OEM spec. Change-Id: Iac42f0f98a008cc5e5bdeea3168b2e0609ee60cd Signed-off-by: Bruce.Wan <Bruce.Wan@quantatw.com> Reviewed-on: https://chromium-review.googlesource.com/314942 Reviewed-by: Shawn N <shawnn@chromium.org> Commit-Queue: Keith Tzeng <keith.tzeng@quantatw.com> Tested-by: Keith Tzeng <keith.tzeng@quantatw.com>
-rw-r--r--board/ultima/board.h1
-rw-r--r--board/ultima/gpio.inc4
-rw-r--r--board/ultima/led.c92
3 files changed, 50 insertions, 47 deletions
diff --git a/board/ultima/board.h b/board/ultima/board.h
index 0bb26a6a51..9dcc56c805 100644
--- a/board/ultima/board.h
+++ b/board/ultima/board.h
@@ -60,6 +60,7 @@
#define CONFIG_CHARGER_DISCHARGE_ON_AC
#define CONFIG_PWM
+#define CONFIG_PWM_DSLEEP
#define CONFIG_LED_COMMON
#define CONFIG_I2C
diff --git a/board/ultima/gpio.inc b/board/ultima/gpio.inc
index 26931695e4..f8105eca69 100644
--- a/board/ultima/gpio.inc
+++ b/board/ultima/gpio.inc
@@ -108,6 +108,9 @@ GPIO(NC_GPIO204, PIN(204), GPIO_INPUT | GPIO_PULL_UP)
GPIO(BAT_PRESENT_L, PIN(210), GPIO_INPUT)
GPIO(GPIO_3_EC, PIN(211), GPIO_OUT_LOW) /* Sleep SOIX signal from SOC to EC */
+GPIO(BAT_LED_GREEN, PIN(133), GPIO_OUT_LOW) /*LED color green*/
+GPIO(BAT_LED_AMBER, PIN(136), GPIO_OUT_LOW) /*LED color amber*/
+
/* Alternate functions GPIO definition */
ALTERNATE(PIN_MASK(16, 0x24), 1, MODULE_UART, 0) /* UART0 */
@@ -130,7 +133,6 @@ ALTERNATE(PIN_MASK(5, 0x10), 1, MODULE_SPI, 0)
ALTERNATE(PIN_MASK(16, 0x10), 1, MODULE_SPI, 0)
ALTERNATE(PIN_MASK(15, 0x08), 1, MODULE_SPI, 0) /* 153: CLK */
-ALTERNATE(PIN_MASK(13, 0x48), 1, MODULE_PWM_LED, GPIO_OUTPUT) /* 133: PWM0, 136: PWM1 */
ALTERNATE(PIN_MASK(14, 0x02), 1, MODULE_PWM_LED, GPIO_OUTPUT) /* 141: PWM3 */
ALTERNATE(PIN_MASK(5, 0x40), 1, MODULE_ADC, 0) /* 56: temperature sensor 1 */
ALTERNATE(PIN_MASK(6, 0x05), 1, MODULE_ADC, 0) /* 60: PC_MON, 62: temperature sensor 3 */
diff --git a/board/ultima/led.c b/board/ultima/led.c
index a8705b654c..176b5c9b70 100644
--- a/board/ultima/led.c
+++ b/board/ultima/led.c
@@ -29,6 +29,9 @@
#define FULL_BATTERY_PERMILLAGE 795
+#define BAT_LED_ON 1
+#define BAT_LED_OFF 0
+
static int led_debug;
static int ticks;
@@ -47,12 +50,10 @@ enum led_color {
};
/* Brightness vs. color, in the order of off, red, amber, and green */
-static const uint8_t color_brightness[LED_COLOR_COUNT][3] = {
+static const uint8_t color_brightness[2] = {
/* {Green, Blue, Red}, */
- [LED_OFF] = {100, 100, 0},
- [LED_RED] = { 0, 0, 100},
- [LED_AMBER] = {100, 0, 0},
- [LED_GREEN] = { 0, 100, 0},
+ [LED_OFF] = 0,
+ [LED_RED] = 100,
};
/**
@@ -60,29 +61,58 @@ static const uint8_t color_brightness[LED_COLOR_COUNT][3] = {
*
* @param color Enumerated color value
*/
-static void set_battery_color(enum led_color color)
+static int set_battery_color(enum led_color color)
{
- pwm_set_duty(PWM_CH_LED_GREEN, color_brightness[color][0]);
- pwm_set_duty(PWM_CH_LED_BLUE, color_brightness[color][1]);
+ switch (color) {
+ case LED_OFF:
+ gpio_set_level(GPIO_BAT_LED_GREEN, BAT_LED_OFF);
+ gpio_set_level(GPIO_BAT_LED_AMBER, BAT_LED_OFF);
+ break;
+ case LED_AMBER:
+ gpio_set_level(GPIO_BAT_LED_GREEN, BAT_LED_OFF);
+ gpio_set_level(GPIO_BAT_LED_AMBER, BAT_LED_ON);
+ break;
+ case LED_GREEN:
+ gpio_set_level(GPIO_BAT_LED_GREEN, BAT_LED_ON);
+ gpio_set_level(GPIO_BAT_LED_AMBER, BAT_LED_OFF);
+ break;
+ default:
+ return EC_ERROR_UNKNOWN;
+ }
+ return EC_SUCCESS;
}
+
static void set_power_color(enum led_color color)
{
- pwm_set_duty(PWM_CH_LED_RED, color_brightness[color][2]);
+ pwm_set_duty(PWM_CH_LED_RED, color_brightness[color]);
}
void led_get_brightness_range(enum ec_led_id led_id, uint8_t *brightness_range)
{
- brightness_range[EC_LED_COLOR_GREEN] = 100;
- brightness_range[EC_LED_COLOR_BLUE] = 100;
brightness_range[EC_LED_COLOR_RED] = 100;
+ brightness_range[EC_LED_COLOR_BLUE] = 1;
+ brightness_range[EC_LED_COLOR_GREEN] = 1;
}
int led_set_brightness(enum ec_led_id led_id, const uint8_t *brightness)
{
- pwm_set_duty(PWM_CH_LED_GREEN, brightness[EC_LED_COLOR_GREEN]);
- pwm_set_duty(PWM_CH_LED_BLUE, brightness[EC_LED_COLOR_BLUE]);
- pwm_set_duty(PWM_CH_LED_RED, brightness[EC_LED_COLOR_RED]);
+ switch (led_id) {
+ case EC_LED_ID_BATTERY_LED:
+ if (brightness[EC_LED_COLOR_BLUE] != 0)
+ set_battery_color(LED_GREEN);
+ else if (brightness[EC_LED_COLOR_GREEN] != 0)
+ set_battery_color(LED_AMBER);
+ else
+ set_battery_color(LED_OFF);
+ break;
+
+ case EC_LED_ID_POWER_LED:
+ pwm_set_duty(PWM_CH_LED_RED, brightness[EC_LED_COLOR_RED]);
+ break;
+ default:
+ break;
+ }
return EC_SUCCESS;
}
@@ -129,6 +159,7 @@ static void ultima_led_set_power(void)
power_ticks++;
+ /* Blink 3 times (0.25s on/0.25s off, repeat 3 times) */
if (extpower_is_present()) {
blink_ticks++;
if (!previous_state_suspend)
@@ -145,24 +176,10 @@ static void ultima_led_set_power(void)
}
if (!extpower_is_present())
blink_ticks = 0;
- if (chipset_in_state(CHIPSET_STATE_SUSPEND | CHIPSET_STATE_SOFT_OFF)) {
- /* Reset ticks if entering suspend so LED turns red
- * as soon as possible. */
- if (!previous_state_suspend)
- power_ticks = 0;
-
- /* Blink twice every one seconds. */
- set_power_color(
- (power_ticks % LED_TOTAL_TICKS) < LED_ON_TICKS ?
- LED_RED : LED_OFF);
-
- previous_state_suspend = 1;
- return;
- }
previous_state_suspend = 0;
- if (chipset_in_state(CHIPSET_STATE_ANY_OFF))
+ if (chipset_in_state(CHIPSET_STATE_SOFT_OFF))
set_power_color(LED_OFF);
if (chipset_in_state(CHIPSET_STATE_ON))
set_power_color(LED_RED);
@@ -203,10 +220,7 @@ static void led_init(void)
* seems to ground the pins instead of letting them float.
*/
pwm_enable(PWM_CH_LED_RED, 1);
- pwm_enable(PWM_CH_LED_GREEN, 1);
- pwm_enable(PWM_CH_LED_BLUE, 1);
- set_battery_color(LED_OFF);
set_power_color(LED_OFF);
}
DECLARE_HOOK(HOOK_INIT, led_init, HOOK_PRIO_DEFAULT);
@@ -226,17 +240,6 @@ static void led_tick(void)
}
DECLARE_HOOK(HOOK_TICK, led_tick, HOOK_PRIO_DEFAULT);
-static void dump_pwm_channels(void)
-{
- int ch;
- for (ch = 0; ch < 4; ch++) {
- CPRINTF("channel = %d\n", ch);
- CPRINTF("0x%04X 0x%04X 0x%04X\n",
- MEC1322_PWM_CFG(ch),
- MEC1322_PWM_ON(ch),
- MEC1322_PWM_OFF(ch));
- }
-}
/******************************************************************/
/* Console commands */
static int command_led_color(int argc, char **argv)
@@ -259,9 +262,6 @@ static int command_led_color(int argc, char **argv)
return EC_ERROR_PARAM1;
}
}
-
- if (led_debug == 1)
- dump_pwm_channels();
return EC_SUCCESS;
}
DECLARE_CONSOLE_COMMAND(ledcolor, command_led_color,