diff options
author | Daisuke Nojiri <dnojiri@chromium.org> | 2019-04-17 15:54:50 -0700 |
---|---|---|
committer | chrome-bot <chrome-bot@chromium.org> | 2019-04-19 14:45:29 -0700 |
commit | 9cdb714aa64ba36039b78e6d182e719088406f83 (patch) | |
tree | f796228e9f33abe56a6a82a36673962ab7fe07a1 | |
parent | 8f0c15d3febd94f270f04c103c916ca59eedcdc2 (diff) | |
download | chrome-ec-9cdb714aa64ba36039b78e6d182e719088406f83.tar.gz |
Flapjack: Use PWM mode of MT6370 to control LED brightness
This patch makes EC use the PWM mode of MT6370 to control the brightness
of the LEDs. This makes the colors match the requirements.
Current is fixed at 4mA. Brightness is controlled by PWM duty only.
Signed-off-by: Daisuke Nojiri <dnojiri@chromium.org>
BUG=b/130197491
BRANCH=none
TEST=Verify the colors (amber, off, red, white) match the description.
Change-Id: Iacce4cc75af9b278ef77dcb2ececaf67a7631143
Reviewed-on: https://chromium-review.googlesource.com/1572452
Commit-Ready: ChromeOS CL Exonerator Bot <chromiumos-cl-exonerator@appspot.gserviceaccount.com>
Tested-by: Daisuke Nojiri <dnojiri@chromium.org>
Reviewed-by: Daisuke Nojiri <dnojiri@chromium.org>
-rw-r--r-- | board/flapjack/led.c | 48 |
1 files changed, 33 insertions, 15 deletions
diff --git a/board/flapjack/led.c b/board/flapjack/led.c index 513d45a9b9..2d170e45a4 100644 --- a/board/flapjack/led.c +++ b/board/flapjack/led.c @@ -53,18 +53,28 @@ static void led_set_battery(void) */ switch (chstate) { case PWR_STATE_CHARGE: - red = 0xf5; - grn = 0xf1; + /* RGB(current, duty) = (4mA,10/32) (4mA,1/32) (0mA,) */ + red = 1; + grn = 1; + mt6370_led_set_pwm_dim_duty(LED_RED, 9); + mt6370_led_set_pwm_dim_duty(LED_GRN, 0); break; case PWR_STATE_DISCHARGE: + /* RGB(current, duty) = (0mA,) (0mA,) (0mA,) */ break; case PWR_STATE_ERROR: - red = 0xff; + /* RGB(current, duty) = (4mA,8/32) (0mA,) (0mA,) */ + red = 1; + mt6370_led_set_pwm_dim_duty(LED_RED, 7); break; case PWR_STATE_CHARGE_NEAR_FULL: - red = 0xff; - grn = 0xff; - blu = 0xff; + /* RGB(current, duty) = (8mA,2/32) (8mA,1/32) (4mA,1/32) */ + red = 2; + grn = 2; + blu = 1; + mt6370_led_set_pwm_dim_duty(LED_RED, 1); + mt6370_led_set_pwm_dim_duty(LED_GRN, 0); + mt6370_led_set_pwm_dim_duty(LED_BLU, 0); break; default: /* Other states don't alter LED behavior */ @@ -78,32 +88,40 @@ static void led_set_battery(void) void led_get_brightness_range(enum ec_led_id led_id, uint8_t *brightness_range) { + /* Current is fixed at 4mA. Brightness is controlled by duty only. */ + const uint8_t max = MT6370_LED_PWM_DIMDUTY_MAX; if (led_id != EC_LED_ID_BATTERY_LED) return; - - brightness_range[EC_LED_COLOR_GREEN] = MT6370_LED_BRIGHTNESS_MAX; - brightness_range[EC_LED_COLOR_RED] = MT6370_LED_BRIGHTNESS_MAX; - brightness_range[EC_LED_COLOR_BLUE] = MT6370_LED_BRIGHTNESS_MAX; + brightness_range[EC_LED_COLOR_GREEN] = max; + brightness_range[EC_LED_COLOR_RED] = max; + brightness_range[EC_LED_COLOR_BLUE] = max; } int led_set_brightness(enum ec_led_id led_id, const uint8_t *brightness) { if (led_id != EC_LED_ID_BATTERY_LED) return EC_ERROR_INVAL; - - mt6370_led_set_brightness(LED_GRN, brightness[EC_LED_COLOR_GREEN]); - mt6370_led_set_brightness(LED_RED, brightness[EC_LED_COLOR_RED]); - mt6370_led_set_brightness(LED_BLU, brightness[EC_LED_COLOR_BLUE]); + /* Current is fixed at 4mA. Brightness is controlled by duty only. */ + mt6370_led_set_brightness(LED_RED, 1); + mt6370_led_set_brightness(LED_GRN, 1); + mt6370_led_set_brightness(LED_BLU, 1); + mt6370_led_set_pwm_dim_duty(LED_RED, brightness[EC_LED_COLOR_RED]); + mt6370_led_set_pwm_dim_duty(LED_GRN, brightness[EC_LED_COLOR_GREEN]); + mt6370_led_set_pwm_dim_duty(LED_BLU, brightness[EC_LED_COLOR_BLUE]); return EC_SUCCESS; } static void flapjack_led_init(void) { - const enum mt6370_led_dim_mode dim = MT6370_LED_DIM_MODE_REGISTER; + const enum mt6370_led_dim_mode dim = MT6370_LED_DIM_MODE_PWM; + const enum mt6370_led_pwm_freq freq = MT6370_LED_PWM_FREQ1000; mt6370_led_set_color(LED_MASK_RED | LED_MASK_GRN | LED_MASK_BLU); mt6370_led_set_dim_mode(LED_RED, dim); mt6370_led_set_dim_mode(LED_GRN, dim); mt6370_led_set_dim_mode(LED_BLU, dim); + mt6370_led_set_pwm_frequency(LED_RED, freq); + mt6370_led_set_pwm_frequency(LED_GRN, freq); + mt6370_led_set_pwm_frequency(LED_BLU, freq); } DECLARE_HOOK(HOOK_INIT, flapjack_led_init, HOOK_PRIO_DEFAULT); |