On 08/09/2018 09:48 AM, Jacek Anaszewski wrote: > Dan, > > On 08/09/2018 03:30 PM, Dan Murphy wrote: >> Jacek and Pavel >> >> On 08/09/2018 07:09 AM, Jacek Anaszewski wrote: >>> Dan, >>> >>> On 08/08/2018 11:45 PM, Dan Murphy wrote: >>>> Jacek >>>> >>>> On 08/08/2018 04:09 PM, Jacek Anaszewski wrote: >>>>> Hi Dan, >>>>> >>>>> On 08/08/2018 11:04 PM, Dan Murphy wrote: >>>>>> On 08/08/2018 04:02 PM, Pavel Machek wrote: >>>>>>> Hi! >>>>>>> >>>>>>>>>> + - #size-cells : 0 >>>>>>>>>> + - control-bank-cfg - : Indicates which sink is connected to which control bank >>>>>>>>>> + 0 - All HVLED outputs are controlled by bank A >>>>>>>>>> + 1 - HVLED1 is controlled bank B, HVLED2/3 are controlled by bank A >>>>>>>>>> + 2 - HVLED2 is controlled bank B, HVLED1/3 are controlled by bank A >>>>>>>>>> + 3 - HVLED1/2 are controlled by bank B, HVLED3 is controlled by bank A >>>>>>>>>> + 4 - HVLED3 is controlled by bank B, HVLED1/2 are controlled by bank A >>>>>>>>>> + 5 - HVLED1/3 is controlled by bank B, HVLED2 is controlled by bank A >>>>>>>>>> + 6 - (default) HVLED1 is controlled by bank A, HVLED2/3 are controlled by bank B >>>>>>>>>> + 7 - All HVLED outputs are controlled by bank B >>>>>>>>> >>>>>>>>> This is quite long way to describe a bitmask, no? Could we make >>>>>>>>> it so that control-bank-cfg is not needed? >>>>>>>> >>>>>>>> The problem we have here is there is a potential to control >>>>>>>> 3 different LED string but only 2 sinks. So control bank A can control 2 LED strings and control >>>>>>>> bank b can control 1 LED string. >>>>>>>> >>>>>>> >>>>>>> Can we forget about the LED strings, and just expose the sinks as >>>>>>> Linux LED devices? >>>>>> >>>>>> 2 sinks 3 LED strings. How do you know which LED string is which and what bank it belongs >>>>>> to when setting the brightness. Each Bank has a separate register for brightness control. >>>>> >>>>> Just a blind shot, without going into details - could you please check >>>>> if led-sources property documented in the common LED bindings couldn't >>>>> help here? >>>>> >>>> >>>> I could change the name to led-sources. But this part does not really follow the 1 output to a >>>> 1 LED string topology. >>> >>> led-sources was designed for describing the topology where one LED can >>> be connected to more then one output, see bindings of >>> max77693-led (in Documentation/devicetree/bindings/mfd/max77693.txt). >>> >>> Here the topology is a bit different - more than one LED (string) can be >>> connected to a single bank, but this is accomplished inside the chip. >>> Logically LEDs configured that way can be treated as a single LED >>> (string) connected to two outputs, and what follows they should be >>> described by a single DT child node. >>> >>> led-sources will fit very well for this purpose. You could do >>> the following mapping: >>> >>> 0 - HVLED1 >>> 1 - HVLED2 >>> 2 - HVLED3 >>> >>> Then, in the child DT nodes you would use these identifiers to describe >>> the topology: >>> >>> Following node would describe strings connected to the outputs >>> HVLED1 and HVLED2 controlled by bank A. >>> >>> led@0 { >>> reg = <0>; >>> led-sources = <0>. <1>; >>> label = "white:first_backlight_cluster"; >>> linux,default-trigger = "backlight"; >>> }; >>> >>> >>> IOW I agree with Pavel, but I propose to use already documented common >>> DT LED property. >>> >> >> I agree to use the led-sources but I still believe this approach may be confusing to other sw devs >> and will lead to configuration issues by users. >> >> This implementation requires the sw dev to know which strings are controlled by which bank. >> And this method may produce a misconfiguration like something below where HVLED2 is declared in >> both bank A and bank B >> >> led@0 { >> reg = <0>; >> led-sources = <0>. <1>; >> label = "white:first_backlight_cluster"; >> linux,default-trigger = "backlight"; >> }; >> >> led@1 { >> reg = <1>; >> led-sources = <1>. <2>; >> label = "white:keypad_cluster"; >> linux,default-trigger = "backlight"; >> }; >> >> The driver will need to be intelligent and declare a miss configuration on the above. >> Not saying this cannot be done but I am not sure why we want to add all of these extra LoC and intelligence >> in the kernel driver. > > It is better do add some complexity to the driver than to the > user configurable settings like DT. Besides - you will only need to > check if given led-source is already taken by another node. Yes I know that the driver can check the string but if the same string is declared by another child then the driver must exit with -EINVAL. Again a lot of code for little pay off. I believe we should keep drivers as simple as possible. I will add the changes. > >> The driver cannot make assumptions on the intention. And the device tree documentation will need to >> pretty much need a lengthy explanation on how to configure the child nodes. > > Some description will be needed for sure, but I don't expect it > to be overwhelmingly lengthy. > >> The implementation I suggested removes that ambiguity. It is a simple integer that is written to the device >> as part of the device configuration, which the config is a setting for the device. > > Your control-bank-cfg seemed like having much room for improvement, > and it would for sure raise questions on why it was implemented that > way. Documenting all available combinations of the configuration is > seldom the best solution. It often obscures the issue. Unfortunately in either case this high level of documentation will need to be done. I believe both solutions will raise questions and concerns. There does not seem to be a good way to describe this device. Both solutions are wrought with issues and concerns. But like I said I will re-write the code with the above suggestion. > >> The child nodes denote which bank the exposed LED node will control. Removing any need >> for the sw developers new or old to know the specific device configurations. > > In your bindings device configuration is scattered among global > control-bank-cfg property and child node's reg property. > In my proposal each child node contains all the needed configuration, > also in the form of two properties - led-sources and reg. IMHO having > all the LED class device related configuration in one place simplifies > the analysis. > Dan -- ------------------ Dan Murphy -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html