diff options
author | Bruce <Bruce.Wan@quantatw.com> | 2015-11-30 17:31:56 +0800 |
---|---|---|
committer | ChromeOS bot <3su6n15k.default@developer.gserviceaccount.com> | 2015-12-02 22:50:05 +0000 |
commit | 67914628c92a38fc504d4a0ac69b9a8951c41c99 (patch) | |
tree | 78645642822c49de8b90701241a13186d516a887 | |
parent | d11f505ec5235580e439a6dfffcd13476ac3594c (diff) | |
download | chrome-ec-67914628c92a38fc504d4a0ac69b9a8951c41c99.tar.gz |
Reks: LED behavior setting
Modify led setting from pwm to gpio,let AC LED is not flash when
shutdown the device
BUG=chrome-os-partner:47210
BRANCH=firmware-strago-7287.B
TEST=AC LED is not flash when shutdown the device
Change-Id: Ibe2ec34da3cf643295d77062674a28b412b7ef71
Signed-off-by: Bruce.Wan <Bruce.Wan@quantatw.com>
Reviewed-on: https://chromium-review.googlesource.com/314940
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/reks/gpio.inc | 4 | ||||
-rw-r--r-- | board/reks/led.c | 114 |
2 files changed, 50 insertions, 68 deletions
diff --git a/board/reks/gpio.inc b/board/reks/gpio.inc index 92b8f4ba53..5890aa8003 100644 --- a/board/reks/gpio.inc +++ b/board/reks/gpio.inc @@ -107,6 +107,9 @@ GPIO(USBPD_BST_OFF, PIN(204), GPIO_OUT_LOW) GPIO(BAT_PRESENT_L,PIN(210), GPIO_INPUT) /* SUSPWRDNACK signal from MOIC device to EC */ GPIO(GPIO_3_EC, PIN(211), GPIO_OUT_LOW) /* Sleep SOIX signal from SOC to EC */ +GPIO(BAT_LED_GREEN, PIN(133), GPIO_OUT_HIGH) /*LED color green*/ +GPIO(BAT_LED_AMBER, PIN(136), GPIO_OUT_HIGH) /*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/reks/led.c b/board/reks/led.c index 64cf771d41..d63375a124 100644 --- a/board/reks/led.c +++ b/board/reks/led.c @@ -19,6 +19,9 @@ #define CPRINTF(format, args...) cprintf(CC_PWM, format, ## args) #define CPRINTS(format, args...) cprints(CC_PWM, format, ## args) +#define BAT_LED_ON 0 +#define BAT_LED_OFF 1 + static int led_debug; const enum ec_led_id supported_led_ids[] = { @@ -27,7 +30,6 @@ const int supported_led_ids_count = ARRAY_SIZE(supported_led_ids); enum led_color { LED_OFF = 0, - LED_RED, LED_AMBER, LED_GREEN, @@ -35,60 +37,50 @@ enum led_color { LED_COLOR_COUNT }; -/* Brightness vs. color, in the order of off, red, amber, and green */ -static const uint8_t color_brightness[LED_COLOR_COUNT][3] = { - /* {Red, Amber, Green}, */ - [LED_OFF] = { 0, 0, 0}, - [LED_RED] = { 0, 0, 100}, - [LED_AMBER] = { 0, 100, 0}, - [LED_GREEN] = {100, 0, 0}, -}; - -/** - * Set LED color - * - * @param color Enumerated color value - */ -static void set_color(enum led_color color) +static int bat_led_set_color(enum led_color color) { - pwm_set_duty(PWM_CH_LED_RED, color_brightness[color][0]); - pwm_set_duty(PWM_CH_LED_BLUE, color_brightness[color][1]); - pwm_set_duty(PWM_CH_LED_GREEN, color_brightness[color][2]); + 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; } void led_get_brightness_range(enum ec_led_id led_id, uint8_t *brightness_range) { - brightness_range[EC_LED_COLOR_RED] = 100; - brightness_range[EC_LED_COLOR_BLUE] = 100; - brightness_range[EC_LED_COLOR_GREEN] = 100; + brightness_range[EC_LED_COLOR_RED] = 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_RED, brightness[EC_LED_COLOR_RED]); - pwm_set_duty(PWM_CH_LED_BLUE, brightness[EC_LED_COLOR_BLUE]); - pwm_set_duty(PWM_CH_LED_GREEN, brightness[EC_LED_COLOR_GREEN]); + switch (led_id) { + case EC_LED_ID_BATTERY_LED: + if (brightness[EC_LED_COLOR_GREEN] != 0) + bat_led_set_color(LED_GREEN); + else if (brightness[EC_LED_COLOR_YELLOW] != 0) + bat_led_set_color(LED_AMBER); + else + bat_led_set_color(LED_OFF); + break; + default: + break; + } return EC_SUCCESS; } - -static void led_init(void) -{ - /* Configure GPIOs */ - gpio_config_module(MODULE_PWM_LED, 1); - - /* - * Enable PWMs and set to 0% duty cycle. If they're disabled, - * 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_color(LED_OFF); -} -DECLARE_HOOK(HOOK_INIT, led_init, HOOK_PRIO_DEFAULT); - /** * Called by hook task every 250 ms */ @@ -99,52 +91,44 @@ static void led_tick(void) ticks++; + if (led_debug) + return; + /* If we don't control the LED, nothing to do */ if (!led_auto_control_is_enabled(EC_LED_ID_BATTERY_LED)) return; /* If charging error, blink orange, 25% duty cycle, 4 sec period */ if (chstate == PWR_STATE_ERROR) { - set_color((ticks % 16) < 4 ? LED_AMBER : LED_OFF); + bat_led_set_color((ticks % 16) < 4 ? LED_AMBER : LED_OFF); return; } /* If charge-force-idle, blink green, 50% duty cycle, 2 sec period */ if (chstate == PWR_STATE_IDLE && (charge_get_flags() & CHARGE_FLAG_FORCE_IDLE)) { - set_color((ticks & 0x4) ? LED_GREEN : LED_OFF); + bat_led_set_color((ticks & 0x4) ? LED_GREEN : LED_OFF); return; } /* If the system is charging, solid orange */ if (chstate == PWR_STATE_CHARGE) { - set_color(LED_AMBER); + bat_led_set_color(LED_AMBER); return; } /* If AC connected and fully charged (or close to it), solid green */ if (chstate == PWR_STATE_CHARGE_NEAR_FULL || chstate == PWR_STATE_IDLE) { - set_color(LED_GREEN); + bat_led_set_color(LED_GREEN); return; } /* Otherwise, system is off and AC not connected, LED off */ - set_color(LED_OFF); + bat_led_set_color(LED_OFF); } 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) @@ -154,25 +138,21 @@ static int command_led_color(int argc, char **argv) led_debug ^= 1; CPRINTF("led_debug = %d\n", led_debug); } else if (!strcasecmp(argv[1], "off")) { - set_color(LED_OFF); - } else if (!strcasecmp(argv[1], "red")) { - set_color(LED_RED); + bat_led_set_color(LED_OFF); } else if (!strcasecmp(argv[1], "green")) { - set_color(LED_GREEN); + bat_led_set_color(LED_GREEN); } else if (!strcasecmp(argv[1], "amber")) { - set_color(LED_AMBER); + bat_led_set_color(LED_AMBER); } else { /* maybe handle charger_discharge_on_ac() too? */ return EC_ERROR_PARAM1; } } - if (led_debug == 1) - dump_pwm_channels(); return EC_SUCCESS; } DECLARE_CONSOLE_COMMAND(ledcolor, command_led_color, - "[debug|red|green|amber|off]", + "[debug|green|amber|off]", "Change LED color", NULL); |