diff options
-rw-r--r-- | baseboard/mancomb/base_gpio.inc | 4 | ||||
-rw-r--r-- | baseboard/mancomb/baseboard.c | 4 | ||||
-rw-r--r-- | baseboard/mancomb/baseboard.h | 4 | ||||
-rw-r--r-- | board/mancomb/board.h | 8 | ||||
-rw-r--r-- | board/mancomb/build.mk | 2 | ||||
-rw-r--r-- | board/mancomb/led.c | 89 |
6 files changed, 99 insertions, 12 deletions
diff --git a/baseboard/mancomb/base_gpio.inc b/baseboard/mancomb/base_gpio.inc index 04ed32d3f8..999fafda83 100644 --- a/baseboard/mancomb/base_gpio.inc +++ b/baseboard/mancomb/base_gpio.inc @@ -74,8 +74,8 @@ ALTERNATE( PIN_MASK(3, BIT(4)), 0, MODULE_ADC, 0) /* TEMP_AMBIENT_VR */ /* LED Signals */ GPIO(EC_DISABLE_DISP_BL, PIN(A, 6), GPIO_OUT_HIGH) /* Disable Display Backlight */ -ALTERNATE(/*EC_PWM_LED_CHRG_L*/ PIN_MASK(C, BIT(4)), 0, MODULE_PWM, 0) /* Charging LED */ -ALTERNATE(/*EC_PWM_LED_FULL_L*/ PIN_MASK(8, BIT(0)), 0, MODULE_PWM, 0) /* Full LED */ +ALTERNATE( PIN_MASK(C, BIT(4)), 0, MODULE_PWM, 0) /* EC_PWM_LED1_L */ +ALTERNATE( PIN_MASK(8, BIT(0)), 0, MODULE_PWM, 0) /* EC_PWM_LED2_L */ /* Fan Signals */ ALTERNATE( PIN_MASK(C, BIT(3)), 0, MODULE_PWM, 0) /* EC_FAN_PWM - Fan PWM */ diff --git a/baseboard/mancomb/baseboard.c b/baseboard/mancomb/baseboard.c index 48aaa6d165..991e2acfd0 100644 --- a/baseboard/mancomb/baseboard.c +++ b/baseboard/mancomb/baseboard.c @@ -385,12 +385,12 @@ const struct pwm_t pwm_channels[] = { .flags = PWM_CONFIG_OPEN_DRAIN, .freq = 25000, }, - [PWM_CH_LED_CHRG] = { + [PWM_CH_LED1] = { .channel = 2, .flags = PWM_CONFIG_DSLEEP, .freq = 100, }, - [PWM_CH_LED_FULL] = { + [PWM_CH_LED2] = { .channel = 3, .flags = PWM_CONFIG_DSLEEP, .freq = 100, diff --git a/baseboard/mancomb/baseboard.h b/baseboard/mancomb/baseboard.h index 66703fb317..e7228527b5 100644 --- a/baseboard/mancomb/baseboard.h +++ b/baseboard/mancomb/baseboard.h @@ -286,8 +286,8 @@ enum temp_sensor_id { /* PWM Channels */ enum pwm_channel { PWM_CH_FAN = 0, - PWM_CH_LED_CHRG, - PWM_CH_LED_FULL, + PWM_CH_LED1, + PWM_CH_LED2, PWM_CH_COUNT }; diff --git a/board/mancomb/board.h b/board/mancomb/board.h index 9d651404e9..7cb1fdb0f1 100644 --- a/board/mancomb/board.h +++ b/board/mancomb/board.h @@ -11,11 +11,9 @@ /* Baseboard features */ #include "baseboard.h" -/* Motion sensing drivers */ - -/* Keyboard features */ - -/* Sensors */ +/* LED */ +#define CONFIG_LED_COMMON +#define CONFIG_LED_ONOFF_STATES /* USB Type C and USB PD defines */ diff --git a/board/mancomb/build.mk b/board/mancomb/build.mk index 1630304826..ff7b62d146 100644 --- a/board/mancomb/build.mk +++ b/board/mancomb/build.mk @@ -8,4 +8,4 @@ BASEBOARD:=mancomb -board-y=board.o +board-y=board.o led.o diff --git a/board/mancomb/led.c b/board/mancomb/led.c new file mode 100644 index 0000000000..a36b3a370d --- /dev/null +++ b/board/mancomb/led.c @@ -0,0 +1,89 @@ +/* Copyright 2021 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 Mancomb + */ + +#include "ec_commands.h" +#include "gpio.h" +#include "led_common.h" +#include "led_onoff_states.h" +#include "pwm.h" + +#define LED_OFF_LVL 1 +#define LED_ON_LVL 0 + +#define CPRINTS(format, args...) cprints(CC_PWM, format, ## args) + +__override const struct led_descriptor + led_pwr_state_table[PWR_LED_NUM_STATES][LED_NUM_PHASES] = { + [PWR_LED_STATE_ON] = {{EC_LED_COLOR_GREEN, LED_INDEFINITE} }, + [PWR_LED_STATE_SUSPEND_AC] = {{EC_LED_COLOR_YELLOW, 1 * LED_ONE_SEC}, + {LED_OFF, 1 * LED_ONE_SEC} }, + [PWR_LED_STATE_OFF] = {{LED_OFF, LED_INDEFINITE} }, + [PWR_LED_STATE_OFF_LOW_POWER] = {{EC_LED_COLOR_RED, 1 * LED_ONE_SEC}, + {LED_OFF, 1 * LED_ONE_SEC} }, +}; + +const enum ec_led_id supported_led_ids[] = { + EC_LED_ID_POWER_LED, +}; + +const int supported_led_ids_count = ARRAY_SIZE(supported_led_ids); + +__override void led_set_color_power(enum ec_led_colors color) +{ + switch (color) { + case EC_LED_COLOR_GREEN: + pwm_enable(PWM_CH_LED1, LED_OFF_LVL); + pwm_enable(PWM_CH_LED2, LED_ON_LVL); + break; + case EC_LED_COLOR_RED: + pwm_enable(PWM_CH_LED1, LED_ON_LVL); + pwm_enable(PWM_CH_LED2, LED_OFF_LVL); + break; + case EC_LED_COLOR_YELLOW: + pwm_enable(PWM_CH_LED1, LED_ON_LVL); + pwm_enable(PWM_CH_LED2, LED_ON_LVL); + break; + case LED_OFF: + pwm_enable(PWM_CH_LED1, LED_OFF_LVL); + pwm_enable(PWM_CH_LED2, LED_OFF_LVL); + break; + default: /* Unsupported colors */ + CPRINTS("Unsupported LED color: %d", color); + pwm_enable(PWM_CH_LED1, LED_OFF_LVL); + pwm_enable(PWM_CH_LED2, LED_OFF_LVL); + break; + } +} + +void led_get_brightness_range(enum ec_led_id led_id, uint8_t *brightness_range) +{ + if (led_id == EC_LED_ID_POWER_LED) { + brightness_range[EC_LED_COLOR_RED] = 1; + brightness_range[EC_LED_COLOR_GREEN] = 1; + brightness_range[EC_LED_COLOR_YELLOW] = 1; + } +} + +int led_set_brightness(enum ec_led_id led_id, const uint8_t *brightness) +{ + if (led_id == EC_LED_ID_POWER_LED) { + if (brightness[EC_LED_COLOR_RED] != 0) + led_set_color_power(EC_LED_COLOR_RED); + else if (brightness[EC_LED_COLOR_GREEN] != 0) + led_set_color_power(EC_LED_COLOR_GREEN); + else if (brightness[EC_LED_COLOR_YELLOW] != 0) + led_set_color_power(EC_LED_COLOR_YELLOW); + else + led_set_color_power(LED_OFF); + } else { + CPRINTS("Unsuppored LED set: %d", led_id); + return EC_ERROR_INVAL; + } + + return EC_SUCCESS; +} + |