From c0dbf54da811afb13e1f36976586e17db87b6060 Mon Sep 17 00:00:00 2001 From: Devin Lu Date: Mon, 20 Jan 2020 19:29:29 +0800 Subject: kappa: enable led This patch is enabling led temporally for incoming build. Will add gpio control for led after CL:1712887 merged. BUG=b:146844869 BRANCH=kukui TEST=make sure led is showing amber while battery is charging. make sure led is showing white after battery was fully charged. Change-Id: I5b55bbed45360807dceca9fe2896084619fb900a Signed-off-by: Devin Lu Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2009540 Reviewed-by: Ting Shen --- board/kappa/board.c | 9 +++++++-- board/kappa/board.h | 21 ++++++++++++++++++--- board/kappa/build.mk | 2 +- board/kappa/led.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 77 insertions(+), 6 deletions(-) create mode 100644 board/kappa/led.c diff --git a/board/kappa/board.c b/board/kappa/board.c index 6460579664..51ea4de1ef 100644 --- a/board/kappa/board.c +++ b/board/kappa/board.c @@ -33,8 +33,6 @@ #include "lid_switch.h" #include "power.h" #include "power_button.h" -#include "pwm.h" -#include "pwm_chip.h" #include "registers.h" #include "spi.h" #include "system.h" @@ -118,6 +116,13 @@ const struct pi3usb9201_config_t pi3usb9201_bc12_chips[] = { .i2c_addr_flags = PI3USB9201_I2C_ADDR_3_FLAGS, }, }; +/******************************************************************************/ +const struct it8801_pwm_t it8801_pwm_channels[] = { + [PWM_CH_LED_AMBER] = { 1 }, + [PWM_LED_NO_CHANNEL] = { -1 }, + [PWM_CH_LED_WHITE] = { 3 }, +}; +BUILD_ASSERT(ARRAY_SIZE(it8801_pwm_channels) == PWM_CH_COUNT); /******************************************************************************/ const struct tcpc_config_t tcpc_config[CONFIG_USB_PD_PORT_MAX_COUNT] = { diff --git a/board/kappa/board.h b/board/kappa/board.h index db9d40413e..a8a5880074 100644 --- a/board/kappa/board.h +++ b/board/kappa/board.h @@ -20,9 +20,6 @@ #undef CONFIG_CHIPSET_POWER_SEQ_VERSION #define CONFIG_CHIPSET_POWER_SEQ_VERSION 1 -/* TODO(b:135086465) led implementation */ -#undef CONFIG_LED_COMMON - #define CONFIG_BATTERY_HW_PRESENT_CUSTOM #define CONFIG_CHARGER_PSYS @@ -94,6 +91,17 @@ #define PD_OPERATING_POWER_MW 30000 +#undef CONFIG_LED_PWM_NEAR_FULL_COLOR +#undef CONFIG_LED_PWM_CHARGE_ERROR_COLOR + +#define CONFIG_LED_PWM_NEAR_FULL_COLOR EC_LED_COLOR_WHITE +#define CONFIG_LED_PWM_CHARGE_ERROR_COLOR EC_LED_COLOR_WHITE + +#define CONFIG_LED_PWM +#define CONFIG_LED_PWM_CHARGE_STATE_ONLY +#define CONFIG_IO_EXPANDER_IT8801_PWM +#define CONFIG_LED_PWM_COUNT 1 + #ifndef __ASSEMBLER__ enum adc_channel { @@ -134,6 +142,13 @@ enum battery_type { BATTERY_TYPE_COUNT, }; +enum pwm_channel { + PWM_CH_LED_AMBER, + PWM_LED_NO_CHANNEL, + PWM_CH_LED_WHITE, + PWM_CH_COUNT +}; + #include "gpio_signal.h" #include "registers.h" diff --git a/board/kappa/build.mk b/board/kappa/build.mk index 7f9669d7d7..e449fce9fc 100644 --- a/board/kappa/build.mk +++ b/board/kappa/build.mk @@ -12,4 +12,4 @@ CHIP_FAMILY:=stm32f0 CHIP_VARIANT:=stm32f09x BASEBOARD:=kukui -board-y=battery.o board.o +board-y=battery.o board.o led.o diff --git a/board/kappa/led.c b/board/kappa/led.c new file mode 100644 index 0000000000..de4eca8bbf --- /dev/null +++ b/board/kappa/led.c @@ -0,0 +1,51 @@ +/* Copyright 2020 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 Kappa + */ + +#include "common.h" +#include "driver/ioexpander/it8801.h" +#include "ec_commands.h" +#include "led_common.h" +#include "led_pwm.h" + +const enum ec_led_id supported_led_ids[] = { + EC_LED_ID_POWER_LED, +}; +const int supported_led_ids_count = ARRAY_SIZE(supported_led_ids); + +struct pwm_led led_color_map[EC_LED_COLOR_COUNT] = { + [EC_LED_COLOR_AMBER] = {100, 0, 0}, + [EC_LED_COLOR_WHITE] = {0, 0, 100}, +}; + +struct pwm_led pwm_leds[CONFIG_LED_PWM_COUNT] = { + [PWM_LED0] = { + .ch0 = PWM_CH_LED_AMBER, + .ch1 = PWM_LED_NO_CHANNEL, + .ch2 = PWM_CH_LED_WHITE, + .enable = &it8801_pwm_enable, + .set_duty = &it8801_pwm_set_duty, + }, +}; + +void led_get_brightness_range(enum ec_led_id led_id, uint8_t *brightness_range) +{ + brightness_range[EC_LED_COLOR_AMBER] = 100; + brightness_range[EC_LED_COLOR_WHITE] = 100; +} + +int led_set_brightness(enum ec_led_id led_id, const uint8_t *brightness) +{ + if (brightness[EC_LED_COLOR_AMBER]) + set_pwm_led_color(PWM_LED0, EC_LED_COLOR_AMBER); + else if (brightness[EC_LED_COLOR_WHITE]) + set_pwm_led_color(PWM_LED0, EC_LED_COLOR_WHITE); + else + /* Otherwise, the "color" is "off". */ + set_pwm_led_color(PWM_LED0, -1); + + return EC_SUCCESS; +} -- cgit v1.2.1