summaryrefslogtreecommitdiff
path: root/zephyr/shim/src/pwm_led.c
diff options
context:
space:
mode:
authorFabio Baltieri <fabiobaltieri@google.com>2021-10-05 21:50:29 +0000
committerCommit Bot <commit-bot@chromium.org>2021-10-06 00:05:09 +0000
commitcd8f949da6bde55f8993640a05a15dc900692364 (patch)
tree1dc77acb69c7a995b15d4a5d1b22f3a5addc06d2 /zephyr/shim/src/pwm_led.c
parent9b17a09cf339aecb77b462fbac2efbc122ca21da (diff)
downloadchrome-ec-cd8f949da6bde55f8993640a05a15dc900692364.tar.gz
zephyr: shim: implement a default led_set_brightness
Implement a default led_set_brightness, should be good enough to replace all existing pwm leds currently defined: atlas, nocturne: 2 leds with independent channels volteer, boldar, trondo: 2 leds with sidesel terrador, todor, waddledee, wheelie: 1 led brya, kano, liara, waddledoo: 2 leds but only amber/white grunt:1 led with only blue/amber BRANCH=none BUG=b:177452529 TEST=build and run on volteer TEST=gdb disassemble/s led_set_brightness Signed-off-by: Fabio Baltieri <fabiobaltieri@google.com> Change-Id: I24cb10574889ccfbc7c9fddc70ceb81d1e8b2170 Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/3207147 Reviewed-by: Jack Rosenthal <jrosenth@chromium.org>
Diffstat (limited to 'zephyr/shim/src/pwm_led.c')
-rw-r--r--zephyr/shim/src/pwm_led.c40
1 files changed, 40 insertions, 0 deletions
diff --git a/zephyr/shim/src/pwm_led.c b/zephyr/shim/src/pwm_led.c
index 4fef611a76..994c217fcf 100644
--- a/zephyr/shim/src/pwm_led.c
+++ b/zephyr/shim/src/pwm_led.c
@@ -71,4 +71,44 @@ void led_get_brightness_range(enum ec_led_id led_id, uint8_t *brightness_range)
sizeof(dt_brigthness_range));
}
+#define PWM_NAME_TO_ID(node_id) \
+ case DT_STRING_TOKEN(node_id, ec_led_name): \
+ pwm_id = DT_REG_ADDR(node_id); \
+ break;
+
+int led_set_brightness(enum ec_led_id led_id, const uint8_t *brightness)
+{
+ enum pwm_led_id pwm_id;
+
+ switch (led_id) {
+ DT_INST_FOREACH_CHILD(0, PWM_NAME_TO_ID)
+ default:
+ return EC_ERROR_UNKNOWN;
+ }
+
+ if (DT_INST_NODE_HAS_PROP(0, color_map_red) &&
+ brightness[EC_LED_COLOR_RED])
+ set_pwm_led_color(pwm_id, EC_LED_COLOR_RED);
+ else if (DT_INST_NODE_HAS_PROP(0, color_map_green) &&
+ brightness[EC_LED_COLOR_GREEN])
+ set_pwm_led_color(pwm_id, EC_LED_COLOR_GREEN);
+ else if (DT_INST_NODE_HAS_PROP(0, color_map_blue) &&
+ brightness[EC_LED_COLOR_BLUE])
+ set_pwm_led_color(pwm_id, EC_LED_COLOR_BLUE);
+ else if (DT_INST_NODE_HAS_PROP(0, color_map_yellow) &&
+ brightness[EC_LED_COLOR_YELLOW])
+ set_pwm_led_color(pwm_id, EC_LED_COLOR_YELLOW);
+ else if (DT_INST_NODE_HAS_PROP(0, color_map_white) &&
+ brightness[EC_LED_COLOR_WHITE])
+ set_pwm_led_color(pwm_id, EC_LED_COLOR_WHITE);
+ else if (DT_INST_NODE_HAS_PROP(0, color_map_amber) &&
+ 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;
+}
+
#endif /* DT_HAS_COMPAT_STATUS_OKAY */