Dan, On 10/25/19 7:57 PM, Dan Murphy wrote: > Jacek > > On 10/22/19 12:41 PM, Jacek Anaszewski wrote: >> Dan, >> >> On 10/22/19 6:37 PM, Dan Murphy wrote: >>> Jacek >>> >>> On 10/18/19 4:56 PM, Jacek Anaszewski wrote: >>>> On 10/18/19 11:48 PM, Jacek Anaszewski wrote: >>>>> Dan, >>>> + ret = lp5xx_parse_channel_child(child, cfg, i); >>>>> I went into details of this parsing and finally came up with >>>>> the code which is a bit greater in size, but IMHO cleaner. >>>>> Note changes in variable naming. It is not even compile-tested. >>>>> >>>>> static int lp55xx_parse_common_child(struct device_node *np, >>>>> struct lp55xx_led_config *cfg, >>>>> int led_number, int *chan_nr) >>>>> { >>>>> int ret; >>>>> >>>>> of_property_read_string(np, "chan-name", >>>>> &cfg[led_number].name); >>>>> of_property_read_u8(np, "led-cur", >>>>> &cfg[led_number].led_current); >>>>> of_property_read_u8(np, "max-cur", >>>>> &cfg[led_number].max_current); >>>>> >>>>> ret = of_property_read_u32(np, "reg", chan_nr); >>>>> if (ret) >>>>> return ret; >>>>> >>>>> if (chan_nr < 0 || chan_nr > cfg->max_chan_nr) /* side note: >>>>> new >>>>> max_chan_nr property needed in cfg */ >>>>> return -EINVAL; >>>>> >>>>> return 0; >>>>> } >>>>> >>>>> static int lp55xx_parse_mutli_led_child(struct device_node *np, >>>>> struct lp55xx_led_config >>>>> *cfg, >>>>> int child_number, >>>>> int color_number) >>>>> { >>>>> int chan_nr, color_id; >>>>> >>>>> ret = lp55xx_parse_common_child(child, cfg, child_number, >>>>> color_number, >>>>> &chan_nr); >>>>> if (ret) >>>>> return ret; >>>>> >>>>> ret = of_property_read_u32(child, "color", &color_id); >>>>> if (ret) >>>>> return ret; >>>>> >>>>> cfg[child_number].color_components[color_number].color_id = >>>>> color_id; >>>>> >>>>> cfg[child_number].color_components[color_number].output_num = >>>>> chan_nr; >>>>> set_bit(color_id, &cfg[child_number].available_colors); >>>>> >>>>> return 0; >>>>> } >>>>> >>>>> staitc int lp55xx_parse_mutli_led(struct device_node *np, >>>>> struct lp55xx_led_config *cfg, >>>>> int child_number) >>>>> { >>>>> struct device_node *child; >>>>> int num_colors = 0, i = 0; >>>> s/, i = 0// >>>> >>>>> for_each_child_of_node(np, child) { >>>>> ret = lp55xx_parse_mutli_led_child(child, cfg, >>>>> num_colors, >>>>> child_number, i)) >>>> Replace above call with below: >>>> >>>> ret = lp55xx_parse_mutli_led_child(child, cfg, child_number, >>>> num_colors); >>>> >>> I applied your DT parser patch from the v13 series. Which eliminates >>> this comment correct? >> Yes, it contains this fix. >> > OK I added your patch and it broke a lot of the DT parsing for the LP55xx. > > I would prefer to stick with the original code without having to > re-write this again. Let me test that with Qemu first. -- Best regards, Jacek Anaszewski