summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBruce <Bruce.Wan@quantatw.com>2015-11-30 17:31:56 +0800
committerChromeOS bot <3su6n15k.default@developer.gserviceaccount.com>2015-12-02 22:50:05 +0000
commit67914628c92a38fc504d4a0ac69b9a8951c41c99 (patch)
tree78645642822c49de8b90701241a13186d516a887
parentd11f505ec5235580e439a6dfffcd13476ac3594c (diff)
downloadchrome-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.inc4
-rw-r--r--board/reks/led.c114
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);