From a4f1658b909e5ed64debe1da2ecc5d64e178c6f8 Mon Sep 17 00:00:00 2001 From: Caveh Jalali Date: Thu, 21 Jun 2018 20:05:42 -0700 Subject: atlas: enable charge status LEDs this enables the charge status LEDs. this is largely taken from the nocturne config. the color_map is tweaked to produce reasonable colors on atlas - at least as a 1st order approximation. BUG=b:110505328 BRANCH=none TEST=verified LEDs on a reworked board. color pattern is the same as nocturne. Change-Id: I4be4847e7a7d41ab83df8ab173bb3dba83297212 Signed-off-by: Caveh Jalali Reviewed-on: https://chromium-review.googlesource.com/1111576 Commit-Ready: caveh jalali Tested-by: caveh jalali Reviewed-by: Aseda Aboagye Reviewed-by: caveh jalali --- board/atlas/led.c | 84 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 84 insertions(+) create mode 100644 board/atlas/led.c (limited to 'board/atlas/led.c') diff --git a/board/atlas/led.c b/board/atlas/led.c new file mode 100644 index 0000000000..85c1ef9214 --- /dev/null +++ b/board/atlas/led.c @@ -0,0 +1,84 @@ +/* Copyright 2018 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. + */ + +/* Atlas specific PWM LED settings. */ + +#include "common.h" +#include "ec_commands.h" +#include "led_pwm.h" +#include "pwm.h" +#include "util.h" + +const enum ec_led_id supported_led_ids[] = { + EC_LED_ID_LEFT_LED, + EC_LED_ID_RIGHT_LED, +}; +const int supported_led_ids_count = ARRAY_SIZE(supported_led_ids); + +/* We may not be using the blue channel long term. */ +struct pwm_led led_color_map[EC_LED_COLOR_COUNT] = { + /* Red, Green, Blue */ + [EC_LED_COLOR_RED] = { 45, 0, 0 }, + [EC_LED_COLOR_GREEN] = { 0, 30, 0 }, + [EC_LED_COLOR_BLUE] = { 0, 0, 60 }, + [EC_LED_COLOR_YELLOW] = { 25, 15, 0 }, + [EC_LED_COLOR_WHITE] = { 30, 25, 25 }, + [EC_LED_COLOR_AMBER] = { 40, 5, 0 }, +}; + +/* Two tri-color LEDs with red, green, and blue channels. */ +struct pwm_led pwm_leds[CONFIG_LED_PWM_COUNT] = { + [PWM_LED0] = { + PWM_CH_DB0_LED_RED, + PWM_CH_DB0_LED_GREEN, + PWM_CH_DB0_LED_BLUE, + }, + [PWM_LED1] = { + PWM_CH_DB1_LED_RED, + PWM_CH_DB1_LED_GREEN, + PWM_CH_DB1_LED_BLUE, + }, +}; + +void led_get_brightness_range(enum ec_led_id led_id, uint8_t *brightness_range) +{ + brightness_range[EC_LED_COLOR_RED] = 100; + brightness_range[EC_LED_COLOR_GREEN] = 100; + brightness_range[EC_LED_COLOR_YELLOW] = 100; + brightness_range[EC_LED_COLOR_AMBER] = 100; + brightness_range[EC_LED_COLOR_BLUE] = 100; + brightness_range[EC_LED_COLOR_WHITE] = 100; +} + +int led_set_brightness(enum ec_led_id led_id, const uint8_t *brightness) +{ + enum pwm_led_id pwm_id; + + /* Convert ec_led_id to pwm_led_id. */ + if (led_id == EC_LED_ID_LEFT_LED) + pwm_id = PWM_LED1; + else if (led_id == EC_LED_ID_RIGHT_LED) + pwm_id = PWM_LED0; + else + return EC_ERROR_UNKNOWN; + + if (brightness[EC_LED_COLOR_RED]) + set_pwm_led_color(pwm_id, EC_LED_COLOR_RED); + else if (brightness[EC_LED_COLOR_GREEN]) + set_pwm_led_color(pwm_id, EC_LED_COLOR_GREEN); + else if (brightness[EC_LED_COLOR_BLUE]) + set_pwm_led_color(pwm_id, EC_LED_COLOR_BLUE); + else if (brightness[EC_LED_COLOR_YELLOW]) + set_pwm_led_color(pwm_id, EC_LED_COLOR_YELLOW); + else if (brightness[EC_LED_COLOR_WHITE]) + set_pwm_led_color(pwm_id, EC_LED_COLOR_WHITE); + else if (brightness[EC_LED_COLOR_AMBER]) + set_pwm_led_color(pwm_id, EC_LED_COLOR_AMBER); + else + /* Otherwise, the "color" is "off". */ + set_pwm_led_color(pwm_id, -1); + + return EC_SUCCESS; +} -- cgit v1.2.1