diff options
Diffstat (limited to 'zephyr/shim/src/led_driver/led_pwm.c')
-rw-r--r-- | zephyr/shim/src/led_driver/led_pwm.c | 33 |
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, |