summaryrefslogtreecommitdiff
path: root/board
diff options
context:
space:
mode:
authorjames_chao <james_chao@asus.com>2015-11-09 21:00:48 +0800
committerChromeOS bot <3su6n15k.default@developer.gserviceaccount.com>2015-11-10 01:45:45 +0000
commit2cba4fb865edf2f91810dff39e776bea6f4f8ecf (patch)
tree2bed7c6bcdd605cb608c9e488974e6ced56c5df8 /board
parent9efcb92fe5c8b87362675017c06492f514cf6d4a (diff)
downloadchrome-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.c9
-rw-r--r--board/terra/board.h11
-rw-r--r--board/terra/build.mk2
-rw-r--r--board/terra/gpio.inc6
-rw-r--r--board/terra/led.c211
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);
-