summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDiana Z <dzigterman@chromium.org>2021-04-16 15:37:32 -0600
committerCommit Bot <commit-bot@chromium.org>2021-04-23 15:49:43 +0000
commitfc81c164c4da5581f9ab4d9cf348dd1d0edb8517 (patch)
treeaa494124dbf0d3c16e62a194f1e5668ab0d538f6
parent33fa1073fd5d944f5199bfcccc5a6fc9a782739a (diff)
downloadchrome-ec-fc81c164c4da5581f9ab4d9cf348dd1d0edb8517.tar.gz
Mancomb: Enable LEDs
Enable some basic power LED states for mancomb. Solid green for S0, flashing yellow for suspend, and flashing red for insufficient charger. BRANCH=None BUG=b:185508707 TEST=builds (boards have not SMT'd yet) Signed-off-by: Diana Z <dzigterman@chromium.org> Change-Id: I18369a8b0d51b73e3aa9883feef7441f5cae923c Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2832695 Reviewed-by: Rob Barnes <robbarnes@google.com> Commit-Queue: Rob Barnes <robbarnes@google.com>
-rw-r--r--baseboard/mancomb/base_gpio.inc4
-rw-r--r--baseboard/mancomb/baseboard.c4
-rw-r--r--baseboard/mancomb/baseboard.h4
-rw-r--r--board/mancomb/board.h8
-rw-r--r--board/mancomb/build.mk2
-rw-r--r--board/mancomb/led.c89
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;
+}
+