From 97c2e2ef6375aadac795982ecfc6fdc31fe86b3b Mon Sep 17 00:00:00 2001 From: YongBeum Ha Date: Wed, 23 Jan 2019 09:31:00 +0900 Subject: casta : implement led BUG=b:122489253 BRANCH=master TEST=build, flash ec and check led. Change-Id: I9eaa6f2763c08eaae10fba65fab18548f703e669 Signed-off-by: YongBeum Ha Reviewed-on: https://chromium-review.googlesource.com/1428499 Reviewed-by: Diana Z --- board/casta/board.h | 3 ++ board/casta/build.mk | 2 +- board/casta/gpio.inc | 6 +-- board/casta/led.c | 125 +++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 132 insertions(+), 4 deletions(-) create mode 100644 board/casta/led.c diff --git a/board/casta/board.h b/board/casta/board.h index aa18f515b7..9214e52ace 100644 --- a/board/casta/board.h +++ b/board/casta/board.h @@ -15,6 +15,9 @@ #define VARIANT_OCTOPUS_NO_SENSORS #include "baseboard.h" +#define CONFIG_LED_COMMON +#define OCTOPUS_POWER_LED + /* USB PD */ #undef CONFIG_USB_PD_VBUS_MEASURE_ADC_EACH_PORT #define CONFIG_USB_PD_VBUS_MEASURE_NOT_PRESENT diff --git a/board/casta/build.mk b/board/casta/build.mk index 94c194fa01..3d04b75731 100644 --- a/board/casta/build.mk +++ b/board/casta/build.mk @@ -11,5 +11,5 @@ CHIP_FAMILY:=npcx7 CHIP_VARIANT:=npcx7m6fb BASEBOARD:=octopus -board-y=board.o +board-y=board.o led.o board-$(CONFIG_BATTERY_SMART)+=battery.o diff --git a/board/casta/gpio.inc b/board/casta/gpio.inc index f3e5e04f48..7f4a164605 100644 --- a/board/casta/gpio.inc +++ b/board/casta/gpio.inc @@ -122,9 +122,9 @@ GPIO(USB_C1_HPD_1V8_ODL, PIN(C, 6), GPIO_INPUT | /* C1 DP Hotplug Detect */ GPIO_SEL_1P8V) /* LED */ -GPIO(LED_1_L, PIN(C, 3), GPIO_OUT_HIGH) -GPIO(LED_2_L, PIN(C, 4), GPIO_OUT_HIGH) -GPIO(LED_3_L, PIN(D, 7), GPIO_OUT_HIGH) +GPIO(BAT_LED_RED_L, PIN(C, 3), GPIO_OUT_HIGH) +GPIO(BAT_LED_GREEN_L, PIN(C, 4), GPIO_OUT_HIGH) +GPIO(PWR_LED_BLUE_L, PIN(D, 7), GPIO_OUT_HIGH) /* Not implemented in hardware */ UNIMPLEMENTED(KB_BL_PWR_EN) diff --git a/board/casta/led.c b/board/casta/led.c new file mode 100644 index 0000000000..bd78bf78a1 --- /dev/null +++ b/board/casta/led.c @@ -0,0 +1,125 @@ +/* Copyright 2018 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 and battery LED control for Casta + */ + +#include "chipset.h" +#include "ec_commands.h" +#include "gpio.h" +#include "hooks.h" +#include "led_common.h" +#include "led_states.h" + +#define LED_OFF_LVL 1 +#define LED_ON_LVL 0 + +const int led_charge_lvl_1 = 0; + +const int led_charge_lvl_2 = 100; + +/* Casta : There are 3 leds for AC, Battery and Power */ +struct led_descriptor led_bat_state_table[LED_NUM_STATES][LED_NUM_PHASES] = { + [STATE_CHARGING_LVL_1] = {{EC_LED_COLOR_RED, LED_INDEFINITE} }, + [STATE_CHARGING_LVL_2] = {{EC_LED_COLOR_RED, LED_INDEFINITE} }, + [STATE_CHARGING_FULL_CHARGE] = {{EC_LED_COLOR_GREEN, LED_INDEFINITE} }, + [STATE_DISCHARGE_S0] = {{LED_OFF, LED_INDEFINITE} }, + [STATE_DISCHARGE_S0_BAT_LOW] = {{LED_OFF, LED_INDEFINITE} }, + [STATE_DISCHARGE_S3] = {{LED_OFF, LED_INDEFINITE} }, + [STATE_DISCHARGE_S5] = {{LED_OFF, LED_INDEFINITE} }, + [STATE_BATTERY_ERROR] = {{EC_LED_COLOR_RED, 0.5 * LED_ONE_SEC}, + {LED_OFF, 0.5 * LED_ONE_SEC} }, + [STATE_FACTORY_TEST] = {{EC_LED_COLOR_RED, 1 * LED_ONE_SEC}, + {LED_OFF, 1 * LED_ONE_SEC} }, +}; + +const struct led_descriptor + led_pwr_state_table[PWR_LED_NUM_STATES][LED_NUM_PHASES] = { + [PWR_LED_STATE_ON] = {{EC_LED_COLOR_BLUE, LED_INDEFINITE} }, + [PWR_LED_STATE_SUSPEND_AC] = {{LED_OFF, LED_INDEFINITE} }, + [PWR_LED_STATE_SUSPEND_NO_AC] = {{LED_OFF, LED_INDEFINITE} }, + [PWR_LED_STATE_OFF] = {{LED_OFF, LED_INDEFINITE} }, +}; + +const enum ec_led_id supported_led_ids[] = { + EC_LED_ID_BATTERY_LED, + EC_LED_ID_POWER_LED +}; + +const int supported_led_ids_count = ARRAY_SIZE(supported_led_ids); + +void led_set_color_power(enum ec_led_colors color) +{ + /* Don't set led if led_auto_control is disabled. */ + if (!led_auto_control_is_enabled(EC_LED_ID_POWER_LED) || + !led_auto_control_is_enabled(EC_LED_ID_BATTERY_LED)) { + return; + } + + if (color == EC_LED_COLOR_BLUE) + gpio_set_level(GPIO_PWR_LED_BLUE_L, LED_ON_LVL); + else + /* LED_OFF and unsupported colors */ + gpio_set_level(GPIO_PWR_LED_BLUE_L, LED_OFF_LVL); +} + +void led_set_color_battery(enum ec_led_colors color) +{ + /* Don't set led if led_auto_control is disabled. */ + if (!led_auto_control_is_enabled(EC_LED_ID_POWER_LED) || + !led_auto_control_is_enabled(EC_LED_ID_BATTERY_LED)) { + return; + } + + /* Battery leds must be turn off when blue led is on + * because casta has 3-in-1 led. + */ + if(!gpio_get_level(GPIO_PWR_LED_BLUE_L)) + { + gpio_set_level(GPIO_BAT_LED_RED_L, LED_OFF_LVL); /*red*/ + gpio_set_level(GPIO_BAT_LED_GREEN_L, LED_OFF_LVL); /*green*/ + return; + } + + switch (color) { + case EC_LED_COLOR_GREEN: + gpio_set_level(GPIO_BAT_LED_RED_L, LED_OFF_LVL); /*red*/ + gpio_set_level(GPIO_BAT_LED_GREEN_L, LED_ON_LVL); /*green*/ + break; + case EC_LED_COLOR_RED: + gpio_set_level(GPIO_BAT_LED_RED_L, LED_ON_LVL); /*red*/ + gpio_set_level(GPIO_BAT_LED_GREEN_L, LED_OFF_LVL); /*green*/ + break; + default: /* LED_OFF and other unsupported colors */ + gpio_set_level(GPIO_BAT_LED_RED_L, LED_OFF_LVL); /*red*/ + gpio_set_level(GPIO_BAT_LED_GREEN_L, LED_OFF_LVL); /*green*/ + break; + } +} + +void led_get_brightness_range(enum ec_led_id led_id, uint8_t *brightness_range) +{ + if (led_id == EC_LED_ID_BATTERY_LED) { + brightness_range[EC_LED_COLOR_GREEN] = 1; + brightness_range[EC_LED_COLOR_RED] = 1; + } else if (led_id == EC_LED_ID_POWER_LED) { + brightness_range[EC_LED_COLOR_BLUE] = 1; + } +} + +int led_set_brightness(enum ec_led_id led_id, const uint8_t *brightness) +{ + if (led_id == EC_LED_ID_BATTERY_LED) { + gpio_set_level(GPIO_PWR_LED_BLUE_L, LED_OFF_LVL); + gpio_set_level(GPIO_BAT_LED_GREEN_L, !brightness[EC_LED_COLOR_GREEN]); + gpio_set_level(GPIO_BAT_LED_RED_L, !brightness[EC_LED_COLOR_RED]); + } else if (led_id == EC_LED_ID_POWER_LED) { + gpio_set_level(GPIO_PWR_LED_BLUE_L, !brightness[EC_LED_COLOR_BLUE]); + gpio_set_level(GPIO_BAT_LED_GREEN_L, LED_OFF_LVL); + gpio_set_level(GPIO_BAT_LED_RED_L, LED_OFF_LVL); + } + + return EC_SUCCESS; +} + -- cgit v1.2.1