On Tue, 2019-11-19 at 20:30 +0100, Jacek Anaszewski wrote: > Hi Matti, > > On 11/19/19 8:21 AM, Vaittinen, Matti wrote: > > Hello Jacek, > > > > On Mon, 2019-11-18 at 22:55 +0100, Jacek Anaszewski wrote: > > > Hi Matti, > > > > > > Thank you for the patch. If your driver does not depend > > > on it then please send is separately. > > > > The BD71828 depends on device-tree node look-up. It does not > > utilize > > the common property parsing. I could of course do the child dt-node > > walking in BD71828 driver - but it kind of breaks my motivation to > > do > > the LED core improvement if I anyways need to do the parsing in > > BD71828 > > driver ;) > > If you do not plan on spending too much time on contributing this > set then I propose adhering to the currently used parsing schema :-) I have no objections on doing few iterations of the patches. And I tend to take care of problems my changes cause. So I am prepared to spend the required time fixing the node look-up and common property parsing for drivers I do break. What I am not prepared is to change and test all of the existing drivers - so it's better to not promise such :) > And you have to know that from this development cycle I handed > over LED tree maintenance to Pavel Machek, so you will require > to have his acceptance in the first place. Well, then I for sure wait for Pavel's take on this. In general I have had some positive feedback about doing the DT node look-up and common property parsing in a centralized manner in LED core. So maybe also Pavel sees the value of adding this now for new drivers - instead of adding one more driver with copy-paste node look-up code. I want to thank you for all the comments though, it's nice that you have been active on this topic! > > > Besides, we would require > > > to convert many of current LED drivers to verify how the > > > proposed parsing mechanism will work with them. > > > > I see the risk you are pointing out. And I actually think we could > > default to old mechanism if of_match or match_property is not given > > (for now). I could then see the existing drivers who use init_data > > - > > and ensure those are initializing the new match_property and > > of_match > > in init_data with 0. That would be quite trivial task. > > > > That would allow us to convert and test existing drivers one-by-one > > while allowing new drivers to offload the LED node look-up and > > common > > property parsing to LED core. No risk, but less drivers to convert > > in > > the future - and simpler drivers to maintain when all of them do > > not > > need to duplicate node look-up or basic property parsing ;) > > I personally would prefer to do the massive driver update to using > the new mechanism. I know that this is time consuming but we are not > in a hurry. I understand the preference of massive update - but I also know that if we wait for someone to do a massive update and neglect improvements done in small steps, then there is a risk that there won't be any updates at all... > > To make this more concrete: > > > > We can only do the new DT node look-up if either > > if (init_data->match_property.name && init_data- > > >match_property.size) > > or > > if (init_data->of_match) > > That would keep the node-lookup same for all existing drivers. > > > > Eg, > > led_find_fwnode could for now just do: > > > > struct fwnode_handle *led_find_fwnode(struct device *parent, > > struct led_init_data *init_data) > > { > > /* > > * This should never be called W/O init data. > > */ > > if (!init_data) > > return NULL; > > > > /* > > * For old drivers which do not populate new match information > > * just directly use the given init_data->fwnode no matter if > > * it is NULL or not. - as old functionality did. > > */ > > if ( (!init_data->match_property.name || > > !init_data->match_property.size) && !init_data->of_match) > > return init_data->fwnode; > > > > /* match information was given - do node look-up */ > > ... > > } > > > > Furthermore, the common property parsing could also be (for now) > > done > > only if match data is given: > > > > /* > > * For now only allow core to parse DT properties if > > * parsing is explicitly requested by driver or if core has > > * found new match data from init_data and then set the flag > > */ > > if (INVENT_A_COOL_NEW_FLAG_NAME_HERE) > > led_add_props(led_cdev, &props); > > > > or just simply: > > if ((init_data->match_property.name && > > init_data->match_property.size) || init_data->of_match) > > led_add_props(led_cdev, &props); > > > > (but this won't allow driver to ask for common parsing even if it > > was > > verified for this drv to work - hence I like the flag better) > > > > And if you don't feel confident I can even drop the "common > > property > > parsing" from the series and leave only the "node look-up if match- > > data > > was given" to it. > > > > Anyways, I would like to introduce this support while I am working > > with > > the BD71828 driver which really has the LEDs - but I can modify the > > patch series so that it only impacts to drivers which implement the > > new > > match data in init_data and leave old drivers to be converted one- > > by- > > one when they can be tested. > > > > > I've been testing > > > my LED name composition series using QEMU and stubbing things in > > > drivers where necessary and I propose to use the same approach > > > in this case. > > > > I don't plan to do any mass-conversion as it is somewhat risky. I > > can > > You do not need hardware to test DT parsing as I mentioned before, > so I don't see too much risk involved. Yes - if you have the time to test all the drivers at once - and assuming you don't do some silly mistake there. Final verification should always be done in HW. But as I said, I want to ensure all the drivers I convert to new mechanism will work (the best I can) - and as I can't test all the drivers I won't do mass-conversion. I have offered a initial solution in the patch (and suggested reduced version to mitigate the risk of breaking anything in this email) - and I see this beneficial and as a good starting point enabling the rest of the improvements. But as you said, we need also Pavel's take on this. > > do conversion to some of the drivers (simple ones which I can > > understand without too much of pain) - and ask if anyone having > > access > > to actual HW with LEDs could be kind enough to test the patch for > > the > > device. Tested drivers can then be taken in-tree as examples. And > > who > > knows, maybe there is some developers looking for a hobby project > > with > > access to LED controller to help with the rest ;) I don't have the > > ambition to change all of the LED drivers but I think I can give my > > 10 > > cents by contributing the mechanism and doing few examples :) > > If you want to introduce good, robust mechanism, then it should be > tested against widest possible spectrum of use cases. Yes. OTOH, if the mechanism is sub-optimal, then the beauty of open source is that it can be improved. Preparing in advance for something that never happens is also a waste. But I guess we don't need to discuss this philosphy here :) > > Anyways, please let me know if you think you could accept patch > > which > > won't change existing driver functionality - but allows new drivers > > to > > not duplicate the code. Else I'll just duplicate the lookup code in > > one > > more driver and hope I don't have another PMIC with LED controller > > on > > my table too soon... > > > > (I am having "some" pressure to do few other tasks I recently got. > > So I > > am afraid I won't have too much time to invest on LEDs this year :( > > Thus setting up the qemu and starting with stubbing is really not > > an > > option for me at this phase). > > As mentioned before - I no longer apply patches so you will need to > consult Pavel, but I bet he will have similar opinion. Who knows, maybe he can see this differently :) Thanks anyways! Br, Matti Vaittinen