diff options
author | james_chao <james_chao@asus.com> | 2015-11-09 21:00:48 +0800 |
---|---|---|
committer | ChromeOS bot <3su6n15k.default@developer.gserviceaccount.com> | 2015-11-10 01:45:45 +0000 |
commit | 2cba4fb865edf2f91810dff39e776bea6f4f8ecf (patch) | |
tree | 2bed7c6bcdd605cb608c9e488974e6ced56c5df8 /board | |
parent | 9efcb92fe5c8b87362675017c06492f514cf6d4a (diff) | |
download | chrome-ec-2cba4fb865edf2f91810dff39e776bea6f4f8ecf.tar.gz |
Terra: Config the LED
Terra has four LEDs:
GPIO34: POWER_LED (white, active high)
GPIO133: RF_LED (white, active high)
GPIO136: CHG_LED (red, active low)
GPIO141: CHG_FULL_LED (green, active low)
Terra use the LED_POLICY_STD and do not use PWM control.
BUG=none
BRANCH=firmware-strago-7287.B
TEST=Build/flash, check the LED behavior
Change-Id: I86e9cfcc11474e9e8f5334c6d1bcd42fa47cd412
Signed-off-by: james_chao <james_chao@asus.com>
Reviewed-on: https://chromium-review.googlesource.com/311561
Reviewed-by: Bernie Thompson <bhthompson@chromium.org>
Reviewed-by: Shawn N <shawnn@chromium.org>
Diffstat (limited to 'board')
-rw-r--r-- | board/terra/board.c | 9 | ||||
-rw-r--r-- | board/terra/board.h | 11 | ||||
-rw-r--r-- | board/terra/build.mk | 2 | ||||
-rw-r--r-- | board/terra/gpio.inc | 6 | ||||
-rw-r--r-- | board/terra/led.c | 211 |
5 files changed, 7 insertions, 232 deletions
diff --git a/board/terra/board.c b/board/terra/board.c index d45488e4c3..3e1f7b1c3b 100644 --- a/board/terra/board.c +++ b/board/terra/board.c @@ -39,15 +39,6 @@ #include "gpio_list.h" -/* PWM channels. Must be in the exactly same order as in enum pwm_channel. */ -const struct pwm_t pwm_channels[] = { - {0, PWM_CONFIG_ACTIVE_LOW}, - {1, PWM_CONFIG_ACTIVE_LOW}, - {3, PWM_CONFIG_ACTIVE_LOW}, -}; - -BUILD_ASSERT(ARRAY_SIZE(pwm_channels) == PWM_CH_COUNT); - /* power signal list. Must match order of enum power_signal. */ const struct power_signal_info power_signal_list[] = { {GPIO_ALL_SYS_PGOOD, 1, "ALL_SYS_PWRGD"}, diff --git a/board/terra/board.h b/board/terra/board.h index bc83ed98d2..62fa9012f8 100644 --- a/board/terra/board.h +++ b/board/terra/board.h @@ -59,8 +59,9 @@ #define CONFIG_CHARGER_INPUT_CURRENT 2240 #define CONFIG_CHARGER_DISCHARGE_ON_AC -#define CONFIG_PWM +#define CONFIG_LED_BAT_ACTIVE_LOW #define CONFIG_LED_COMMON +#define CONFIG_LED_POLICY_STD #define CONFIG_I2C @@ -101,14 +102,6 @@ enum power_signal { POWER_SIGNAL_COUNT }; -enum pwm_channel { - PWM_CH_LED_RED, - PWM_CH_LED_BLUE, - PWM_CH_LED_GREEN, - /* Number of PWM channels */ - PWM_CH_COUNT -}; - enum temp_sensor_id { /* TMP432 local and remote sensors */ TEMP_SENSOR_I2C_TMP432_LOCAL, diff --git a/board/terra/build.mk b/board/terra/build.mk index 894de2b191..06e3c66f91 100644 --- a/board/terra/build.mk +++ b/board/terra/build.mk @@ -10,5 +10,5 @@ CHIP:=mec1322 CHIP_SPI_SIZE_KB:=512 -board-y=board.o led.o +board-y=board.o board-$(CONFIG_BATTERY_SMART)+=battery.o diff --git a/board/terra/gpio.inc b/board/terra/gpio.inc index 20a89d08a1..664d6d9b3e 100644 --- a/board/terra/gpio.inc +++ b/board/terra/gpio.inc @@ -36,6 +36,7 @@ GPIO(I2C_PORT3_SDA, PIN(25), GPIO_INPUT) GPIO(PCH_SCI_L, PIN(26), GPIO_ODR_HIGH) /* SCI output */ GPIO(WP_L, PIN(33), GPIO_INPUT) /* EC_SPI_WP_ME_L */ +GPIO(POWER_LED, PIN(34), GPIO_OUT_LOW) GPIO(USB2_ENABLE, PIN(36), GPIO_OUT_LOW) /* Enable power for USB2 Port */ GPIO(ENTERING_RW, PIN(41), GPIO_OUT_LOW) /* Indicate when EC is entering RW code */ @@ -64,6 +65,9 @@ GPIO(EC_VNN_VCLK, PIN(122), GPIO_INPUT | GPIO_PULL_UP) /* Interrupt fro GPIO(STRAP_L, PIN(123), GPIO_OUT_LOW) GPIO(EC_VNN_ALERT_L, PIN(124), GPIO_INPUT | GPIO_PULL_UP) +GPIO(RF_LED, PIN(133), GPIO_ODR_HIGH) +GPIO(BAT_LED_RED, PIN(136), GPIO_ODR_HIGH) +GPIO(BAT_LED_GREEN, PIN(141), GPIO_ODR_HIGH) GPIO(PCH_RSMRST_L, PIN(143), GPIO_OUT_LOW) /* RSMRST_N to PCH */ GPIO(EC_KBD_ALERT, PIN(145), GPIO_OUT_LOW) /* EC_KBD_ALERT */ GPIO(PVT_CS0, PIN(146), GPIO_ODR_HIGH) /* SPI PVT Chip select */ @@ -106,8 +110,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/terra/led.c b/board/terra/led.c deleted file mode 100644 index a8330fc755..0000000000 --- a/board/terra/led.c +++ /dev/null @@ -1,211 +0,0 @@ -/* Copyright 2015 The Chromium OS Authors. All rights reserved. - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - * - * Power/Battery LED control for Terra - */ - -#include "charge_state.h" -#include "chipset.h" -#include "console.h" -#include "extpower.h" -#include "gpio.h" -#include "hooks.h" -#include "led_common.h" -#include "pwm.h" -#include "registers.h" -#include "util.h" - -#define CPRINTF(format, args...) cprintf(CC_PWM, format, ## args) -#define CPRINTS(format, args...) cprints(CC_PWM, format, ## args) - -#define LED_TOTAL_TICKS 16 -#define LED_ON_TICKS 4 - -static int led_debug; - -const enum ec_led_id supported_led_ids[] = { - EC_LED_ID_POWER_LED, EC_LED_ID_BATTERY_LED}; -const int supported_led_ids_count = ARRAY_SIZE(supported_led_ids); - -enum led_color { - LED_OFF = 0, - LED_RED, - LED_AMBER, - LED_GREEN, - - /* Number of colors, not a color itself */ - 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, Blue, Green}, */ - [LED_OFF] = { 0, 0, 0}, - [LED_RED] = {100, 0, 0}, - [LED_AMBER] = { 75, 0, 10}, - [LED_GREEN] = { 0, 0, 100}, -}; - -/** - * Set LED color - * - * @param color Enumerated color value - */ -static void 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]); -} - -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; -} - -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]); - return EC_SUCCESS; -} - -static void terra_led_set_power(void) -{ - static int power_ticks; - static int previous_state_suspend; - - power_ticks++; - - if (chipset_in_state(CHIPSET_STATE_SUSPEND)) { - /* Reset ticks if entering suspend so LED turns amber - * as soon as possible. */ - if (!previous_state_suspend) - power_ticks = 0; - - /* Blink once every four seconds. */ - set_color( - (power_ticks % LED_TOTAL_TICKS) < LED_ON_TICKS ? - LED_AMBER : LED_OFF); - - previous_state_suspend = 1; - return; - } - - previous_state_suspend = 0; - - if (chipset_in_state(CHIPSET_STATE_ANY_OFF)) - set_color(LED_OFF); - else if (chipset_in_state(CHIPSET_STATE_ON)) - set_color(LED_GREEN); -} - -static void terra_led_set_battery(void) -{ - static int battery_ticks; - - battery_ticks++; - - switch (charge_get_state()) { - case PWR_STATE_CHARGE: - set_color(LED_AMBER); - break; - case PWR_STATE_ERROR: - set_color(LED_RED); - break; - case PWR_STATE_CHARGE_NEAR_FULL: - case PWR_STATE_IDLE: /* External power connected in IDLE. */ - set_color(LED_GREEN); - break; - default: - /* Other states don't alter LED behavior */ - break; - } -} - -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 - */ -static void led_tick(void) -{ - if (led_debug) - return; - - if (extpower_is_present()) { - if (led_auto_control_is_enabled(EC_LED_ID_BATTERY_LED)) { - terra_led_set_battery(); - return; - } - } else if (led_auto_control_is_enabled(EC_LED_ID_POWER_LED)) { - terra_led_set_power(); - return; - } - - 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) -{ - if (argc > 1) { - if (!strcasecmp(argv[1], "debug")) { - 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); - } else if (!strcasecmp(argv[1], "green")) { - set_color(LED_GREEN); - } else if (!strcasecmp(argv[1], "amber")) { - 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]", - "Change LED color", - NULL); - |