summaryrefslogtreecommitdiff
path: root/zephyr/shim/src/led_driver/led_pwm.c
diff options
context:
space:
mode:
Diffstat (limited to 'zephyr/shim/src/led_driver/led_pwm.c')
-rw-r--r--zephyr/shim/src/led_driver/led_pwm.c33
1 files changed, 19 insertions, 14 deletions
diff --git a/zephyr/shim/src/led_driver/led_pwm.c b/zephyr/shim/src/led_driver/led_pwm.c
index bad887a86f..a747c3d3b9 100644
--- a/zephyr/shim/src/led_driver/led_pwm.c
+++ b/zephyr/shim/src/led_driver/led_pwm.c
@@ -31,28 +31,30 @@ BUILD_ASSERT(DT_NUM_INST_STATUS_OKAY(DT_DRV_COMPAT) == 1,
* duty_cycle = 50 %, pulse_ns = (2000000*50)/100 = 1000000ns
*/
-#define SET_PIN(node_id, prop, i) \
- { \
- .pwm = PWM_DT_SPEC_GET(DT_PHANDLE_BY_IDX(node_id, prop, i)), \
- .pulse_ns = DIV_ROUND_NEAREST( \
- DT_PWMS_PERIOD(DT_PHANDLE_BY_IDX(node_id, prop, i)) * \
- DT_PROP_BY_IDX(node_id, led_values, i), \
- 100), \
+#define SET_PIN(node_id, prop, i) \
+ { \
+ .pwm = PWM_DT_SPEC_GET( \
+ DT_PHANDLE_BY_IDX(DT_PARENT(node_id), led_pwms, i)), \
+ .pulse_ns = DIV_ROUND_NEAREST( \
+ DT_PWMS_PERIOD(DT_PHANDLE_BY_IDX(DT_PARENT(node_id), \
+ led_pwms, i)) * \
+ DT_PROP_BY_IDX(node_id, prop, i), \
+ 100), \
},
#define SET_PWM_PIN(node_id) \
- { DT_FOREACH_PROP_ELEM(node_id, led_pwms, SET_PIN) };
+ { DT_FOREACH_PROP_ELEM(node_id, led_values, SET_PIN) };
#define GEN_PINS_ARRAY(id) struct pwm_pin_t PINS_ARRAY(id)[] = SET_PWM_PIN(id)
-DT_INST_FOREACH_CHILD(0, GEN_PINS_ARRAY)
+DT_INST_FOREACH_CHILD_STATUS_OKAY_VARGS(0, DT_FOREACH_CHILD, GEN_PINS_ARRAY)
#define SET_PIN_NODE(node_id) \
{ .led_color = GET_PROP(node_id, led_color), \
- .led_id = GET_PROP(node_id, led_id), \
+ .led_id = GET_PROP(DT_PARENT(node_id), led_id), \
.br_color = GET_COLOR_PROP_NVE(node_id, br_color), \
.pwm_pins = PINS_ARRAY(node_id), \
- .pins_count = DT_PROP_LEN(node_id, led_pwms) };
+ .pins_count = DT_PROP_LEN(node_id, led_values) };
/*
* Initialize led_pins_node_t struct for each pin node defined
@@ -60,14 +62,17 @@ DT_INST_FOREACH_CHILD(0, GEN_PINS_ARRAY)
#define GEN_PINS_NODES(id) \
const struct led_pins_node_t PINS_NODE(id) = SET_PIN_NODE(id)
-DT_INST_FOREACH_CHILD(0, GEN_PINS_NODES)
+DT_INST_FOREACH_CHILD_STATUS_OKAY_VARGS(0, DT_FOREACH_CHILD, GEN_PINS_NODES)
/*
* Array of pointers to each pin node
*/
#define PINS_NODE_PTR(id) &PINS_NODE(id),
-const struct led_pins_node_t *pins_node[] = { DT_INST_FOREACH_CHILD(
- 0, PINS_NODE_PTR) };
+
+const struct led_pins_node_t *pins_node[] = {
+ DT_INST_FOREACH_CHILD_STATUS_OKAY_VARGS(0, DT_FOREACH_CHILD,
+ PINS_NODE_PTR)
+};
/*
* Set all the PWM channels defined in the node to the defined value,