summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorElsie Shih <elsie_shih@wistron.corp-partner.google.com>2022-05-23 14:55:38 +0800
committerChromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com>2022-07-20 05:07:29 +0000
commit88aa96272744417192a149ec6acad664706c0147 (patch)
tree648d486158f40479ffa496688f860d7c8989406a
parent2c476626c7f781ec3e49f230e45a8a19d22d3c2e (diff)
downloadchrome-ec-88aa96272744417192a149ec6acad664706c0147.tar.gz
moli: modify LED behavior
- Follow Moli GPIO Table_20220531.xlsx to modify the GPIO. - Add GPIO_LED_BLUE_CONTROL / GPIO_LED_ORANGE_CONTROL to control LED on/off. - Modify LED behavior and add duty cycle for pulsing. BUG=b:238010311 BRANCH=none TEST=make BOARD=moli Signed-off-by: Elsie Shih <elsie_shih@wistron.corp-partner.google.com> Change-Id: Ic838483c43e201c1ee1d8e619759be027cc99133 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3715186 Reviewed-by: Zhuohao Lee <zhuohao@chromium.org>
-rw-r--r--board/moli/gpio.inc6
-rw-r--r--board/moli/led.c48
2 files changed, 38 insertions, 16 deletions
diff --git a/board/moli/gpio.inc b/board/moli/gpio.inc
index 21336f6245..5dcb1eedc2 100644
--- a/board/moli/gpio.inc
+++ b/board/moli/gpio.inc
@@ -115,6 +115,10 @@ GPIO(USB_C0_C1_TCPC_RST_ODL, PIN(F, 5), GPIO_ODR_LOW)
/* LAN */
GPIO(LAN_PWR_GOOD, PIN(0, 2), GPIO_INPUT)
+/* LED */
+GPIO(LED_ORANGE_CONTROL, PIN(3, 1), GPIO_ODR_LOW)
+GPIO(LED_BLUE_CONTROL, PIN(2, 5), GPIO_ODR_LOW)
+
/* Option Board */
GPIO(HDMI1_MONITOR_ON, PIN(B, 4), GPIO_INPUT)
GPIO(HDMI1_MONON_SIO, PIN(1, 6), GPIO_ODR_LOW)
@@ -153,7 +157,6 @@ ALTERNATE(PIN_MASK(E, 0x02), 0, MODULE_ADC, 0) /* GPIOE1/ADC7 */
/* Unused Pins */
UNUSED(PIN(D, 6)) /* GPOD6/CR_SOUT3/SHDF_ESPI_L */
-UNUSED(PIN(3, 1)) /* KSI0/GPIO31/TRACEDATA3/GP_MOSI */
UNUSED(PIN(3, 2)) /* GPO32/TRIS_L */
UNUSED(PIN(3, 5)) /* GPO35/CR_SOUT4/TEST_L */
UNUSED(PIN(6, 6)) /* GPIO66 */
@@ -169,7 +172,6 @@ UNUSED(PIN(5, 0)) /* GPIO50 */
UNUSED(PIN(9, 4)) /* GPIO94 */
UNUSED(PIN(A, 0)) /* F_CS0_L/GPIOA0 */
UNUSED(PIN(3, 4)) /* GPIO34/PS2_DAT2/ADC6 */
-UNUSED(PIN(2, 5)) /* KSI4/GPIO25/TRACECLK/GP_SCLK */
UNUSED(PIN(F, 3)) /* GPIOF3/I2C4_SCL1 */
UNUSED(PIN(F, 2)) /* GPIOF2/I2C4_SDA1 */
UNUSED(PIN(A, 7)) /* GPIOA7/PS2_DAT3/TB2/F_DIO3 */
diff --git a/board/moli/led.c b/board/moli/led.c
index 8e30f20c5e..d506864056 100644
--- a/board/moli/led.c
+++ b/board/moli/led.c
@@ -61,15 +61,21 @@ static int set_color_power(enum led_color color, int duty)
return EC_ERROR_UNKNOWN;
}
- if (blue)
+ if (blue && duty) {
+ gpio_set_level(GPIO_LED_BLUE_CONTROL, 1);
pwm_set_duty(PWM_CH_LED_BLUE, duty);
- else
+ } else {
+ gpio_set_level(GPIO_LED_BLUE_CONTROL, 0);
pwm_set_duty(PWM_CH_LED_BLUE, 0);
+ }
- if (amber)
+ if (amber && duty) {
+ gpio_set_level(GPIO_LED_ORANGE_CONTROL, 1);
pwm_set_duty(PWM_CH_LED_AMBER, duty);
- else
+ } else {
+ gpio_set_level(GPIO_LED_ORANGE_CONTROL, 0);
pwm_set_duty(PWM_CH_LED_AMBER, 0);
+ }
return EC_SUCCESS;
}
@@ -84,9 +90,11 @@ static int set_color(enum ec_led_id id, enum led_color color, int duty)
}
}
-#define LED_PULSE_US (2 * SECOND)
-/* 40 msec for nice and smooth transition. */
-#define LED_PULSE_TICK_US (40 * MSEC)
+#define LED_PERIOD (4 * SECOND)
+#define LED_DUTY_CYCLE (25)
+#define LED_PULSE_US (LED_PERIOD * LED_DUTY_CYCLE / 100 / 2)
+/* 10 msec for nice and smooth transition. */
+#define LED_PULSE_TICK_US (10 * MSEC)
/*
* When pulsing is enabled, brightness is incremented by <duty_inc> every
@@ -98,17 +106,26 @@ static struct {
int duty_inc;
enum led_color color;
int duty;
+ uint32_t time_off;
} led_pulse;
-#define CONFIG_TICK(interval, color) \
- config_tick((interval), 100 / (LED_PULSE_US / (interval)), (color))
+/*
+ * LED_PERIOD = time_on + time_off;
+ * time_on = LED_PULSE_US * 2;
+ * time_off = LED_PERIOD - LED_PULSE_US * 2;
+ */
+#define CONFIG_TICK(interval, period, color) \
+ config_tick((interval), 100 / (LED_PULSE_US / (interval)), \
+ LED_PERIOD - LED_PULSE_US * 2, (color))
-static void config_tick(uint32_t interval, int duty_inc, enum led_color color)
+static void config_tick(uint32_t interval, int duty_inc, int time_off,
+ enum led_color color)
{
led_pulse.interval = interval;
led_pulse.duty_inc = duty_inc;
led_pulse.color = color;
led_pulse.duty = 0;
+ led_pulse.time_off = time_off;
}
static void pulse_power_led(enum led_color color)
@@ -133,12 +150,15 @@ static void led_tick(void)
pulse_power_led(led_pulse.color);
elapsed = get_time().le.lo - start;
next = led_pulse.interval > elapsed ? led_pulse.interval - elapsed : 0;
+ next = (led_pulse.duty - led_pulse.duty_inc) ?
+ next :
+ next + led_pulse.time_off;
hook_call_deferred(&led_tick_data, next);
}
static void led_suspend(void)
{
- CONFIG_TICK(LED_PULSE_TICK_US, LED_AMBER);
+ CONFIG_TICK(LED_PULSE_TICK_US, LED_PERIOD, LED_BLUE);
led_tick();
}
DECLARE_DEFERRED(led_suspend);
@@ -178,7 +198,7 @@ static void led_resume(void)
hook_call_deferred(&led_suspend_data, -1);
hook_call_deferred(&led_shutdown_data, -1);
if (led_auto_control_is_enabled(EC_LED_ID_POWER_LED))
- set_color(EC_LED_ID_POWER_LED, LED_AMBER, 100);
+ set_color(EC_LED_ID_POWER_LED, LED_BLUE, 100);
}
DECLARE_HOOK(HOOK_CHIPSET_RESUME, led_resume, HOOK_PRIO_DEFAULT);
@@ -186,7 +206,7 @@ void led_alert(int enable)
{
if (enable) {
/* Overwrite the current signal */
- config_tick(1 * SECOND, 100, LED_BLUE);
+ config_tick(1 * SECOND, 100, 0, LED_AMBER);
led_tick();
} else {
/* Restore the previous signal */
@@ -203,7 +223,7 @@ void show_critical_error(void)
{
hook_call_deferred(&led_tick_data, -1);
if (led_auto_control_is_enabled(EC_LED_ID_POWER_LED))
- set_color(EC_LED_ID_POWER_LED, LED_BLUE, 100);
+ set_color(EC_LED_ID_POWER_LED, LED_AMBER, 100);
}
static int command_led(int argc, char **argv)