Re: [RFC PATCH] leds: multicolor: Add sysfs interface definition
Veas On 2/7/19 11:09 PM, Vesa Jääskeläinen wrote: > Hi All, > > On 08/02/2019 6.55, Vesa Jääskeläinen wrote: >> Hi All, >> >> On 31/01/2019 0.35, Pavel Machek wrote: >>> On Wed 2019-01-30 12:30:05, Dan Murphy wrote: Add a documentation of LED Multicolor LED class specific sysfs attributes. >>> >>> No, sorry. This does not most of the requirements. >>> >>> Pavel >>> >>> Requirements for RGB LED interface: >> >> ... >> >> I have tried to capture relevant parts of ideas and requirements and usage >> in a wiki page in github: >> >> https://github.com/vesajaaskelainen/linux-multicolor-leds/wiki >> >> I believe the discussion is good to perform in mailing list -- I am happy to >> update or give you access to update the wiki so we could have easy to use >> summary/details source during discussions. >> >> Ideas on the interface seem to be a bit drifting so I apologize if some of >> Your ideas were not captured. >> >> There has been at least two direct proposals for userspace interface and I >> tried to provide usage example also for Dan's proposal. Feel free to correct >> me if I made a mistake. >> >> I believe it is a good to create summary page as there seems to many aspects >> to be though out. What do you feel on this approach? > > And should we perhaps move this discussion only to linux-leds mailing list > for successive replies :) ? So we don't generate too broad traffic. > Thank you for this. I have posted updated documentation and posted updated code that includes a test file that does nothing but register a dummy node. This was tested on raspberry pi 5.0-rc kernel. Also the code is updated for the LP50xx and a HACK for Droid4. brightness-model is still an open topic on the best way to implement this so we have not introduced the code yet. Here is the ABI doc http://git.ti.com/gitweb/?p=ti-analog-linux-kernel/dmurphy-analog.git;a=blob;f=Documentation/ABI/testing/sysfs-class-led-multicolor;h=45629199791285200e3775fc0b4dde1dfebb130f;hb=ce08183aa24edc0d883550339eef93fd72b4ac45 Here is the class description http://git.ti.com/gitweb/?p=ti-analog-linux-kernel/dmurphy-analog.git;a=blob;f=Documentation/leds/leds-class-multicolor.txt;h=357f045a826aac71d65704891c18e7fb31e5cb9b;hb=refs/heads/multicolor_class Dan > Thanks, > Vesa Jääskeläinen -- -- Dan Murphy
Re: [RFC PATCH] leds: multicolor: Add sysfs interface definition
Hi All, On 08/02/2019 6.55, Vesa Jääskeläinen wrote: Hi All, On 31/01/2019 0.35, Pavel Machek wrote: On Wed 2019-01-30 12:30:05, Dan Murphy wrote: Add a documentation of LED Multicolor LED class specific sysfs attributes. No, sorry. This does not most of the requirements. Pavel Requirements for RGB LED interface: ... I have tried to capture relevant parts of ideas and requirements and usage in a wiki page in github: https://github.com/vesajaaskelainen/linux-multicolor-leds/wiki I believe the discussion is good to perform in mailing list -- I am happy to update or give you access to update the wiki so we could have easy to use summary/details source during discussions. Ideas on the interface seem to be a bit drifting so I apologize if some of Your ideas were not captured. There has been at least two direct proposals for userspace interface and I tried to provide usage example also for Dan's proposal. Feel free to correct me if I made a mistake. I believe it is a good to create summary page as there seems to many aspects to be though out. What do you feel on this approach? And should we perhaps move this discussion only to linux-leds mailing list for successive replies :) ? So we don't generate too broad traffic. Thanks, Vesa Jääskeläinen
Re: [RFC PATCH] leds: multicolor: Add sysfs interface definition
Hi All, On 31/01/2019 0.35, Pavel Machek wrote: On Wed 2019-01-30 12:30:05, Dan Murphy wrote: Add a documentation of LED Multicolor LED class specific sysfs attributes. No, sorry. This does not most of the requirements. Pavel Requirements for RGB LED interface: ... I have tried to capture relevant parts of ideas and requirements and usage in a wiki page in github: https://github.com/vesajaaskelainen/linux-multicolor-leds/wiki I believe the discussion is good to perform in mailing list -- I am happy to update or give you access to update the wiki so we could have easy to use summary/details source during discussions. Ideas on the interface seem to be a bit drifting so I apologize if some of Your ideas were not captured. There has been at least two direct proposals for userspace interface and I tried to provide usage example also for Dan's proposal. Feel free to correct me if I made a mistake. I believe it is a good to create summary page as there seems to many aspects to be though out. What do you feel on this approach? Thanks, Vesa Jääskeläinen
Re: [RFC PATCH] leds: multicolor: Add sysfs interface definition
Hi Dan, On 1/31/19 2:48 PM, Dan Murphy wrote: Jacek On 1/30/19 4:14 PM, Jacek Anaszewski wrote: Dan, On 1/30/19 10:07 PM, Dan Murphy wrote: Jacek On 1/30/19 2:20 PM, Jacek Anaszewski wrote: Dan, On 1/30/19 8:59 PM, Dan Murphy wrote: Jacek On 1/30/19 1:37 PM, Jacek Anaszewski wrote: Hi Dan, Thank you for the RFC. One vital thing is missing - documentation of brightness file must be updated to define its semantics for LED multi color class. Either we need brightness-model file returning only "onoff" option available, or, for time being, fix the max_brightness for LED multi color class to 1 (which will map to max intensity level for each color). I can make max_brightness default to 1 if not set by the LED driver. But the LP50xx has brightness controls so setting max_brightness from the driver should over ride the max of 1 in the upper level. Yes, so the max_brightness should be updated basing on current brightness-model. For LEDn_BRIGHTNESS of LP50xx we could have "hw" or maybe even better just "lp50xx-linear" and "lp50xx-logarithmic" - I just forgot about that capability of the device. OK maybe "hw" would make sense as there may be other devices that have dedicated brightness controls over color controls. Single "hw" doesn't address both linear and logarithmic. This is device specific, so I don't see anything wrong in "lp50xx-*", provided that it will be documented. OK. This would need to be lp50xx specific. Thinking more of it - "hw_logarithmic" and "hw_linear" should also do. It would be even better option as it is generic. My only concern here is how to document them. I we chose lp50xx-* prefixed names, then we could just refer to the data sheet. For generic hw_{logarithmic|linear} brightness models we will need precise description. Actually it will be needed also for DT provided color levels. People must have good reference to know how to arrange DT color arrays. It would be best to refer to standards, e.g. CIECAM02 [0], description of hue [1] and the overall relationship between "six technically defined dimensions of color appearance: brightness (luminance), lightness, colorfulness, chroma, saturation, and hue." I've found also interesting presentation [2]. After we agree on the interface I can try to put these together. Probably need to create a model for non-modeled cases like "rgb-independent". Dumb name but I could not think of anything better. There is no point in having any rgb* brightness model since increasing rgb in an arbitrary way will not give the impression of increasing color intensity (lightness of the same hue). With DT defined hsl- ranges there is no way to verify that levels arrangement makes sense with regard to preserving hue, this is a matter of trust. But we should state that it is highly recommended to obey this constraint so as to not mislead users. OK. I will document this in v2 for discussion For devices that do not support brightness as a separate control we can create a file called max_brightness_ that defines the max that a specific color can be set to. If max_brightness is set to 1 then create max_brightness_. If max_brightness > 1 then do not create the files. Right. We will need dedicated max_brightness for each color. They should be placed also in the colors directory, next to the color files. OK will document this. I don't think we have fully vetted the brightness-model yet so I prefer to omit it and possibly introduce that later. We need to start from something. It will give better overview of the whole idea. OK. Don't get me wrong I don't oppose this idea I am just trying to figure out how the user space would know what models and brightness levels are available. $ cat brightness-model lp50xx-linear lp50xx-logarithmic onoff hsl-green hsl=blue max_brightness will return available number of brightness levels for each brightness model. So max_brightness here would be dynamic? Yes. Or could we read hsl- and get the number of levels and not mess with the max_brightness definition? For hw_{linear|logarithmic| it will return the brightness resolution supported by the hardware. For hsl- (or whatever we will call it) it will return the number of elements in the array the currently chosen brightness-model refers to. Or should that be the current level? Hmm? Current level will be available after executing "cat brightness". I'd not bother with presenting whole range of available color presets. Userspace can verify the brightness->color mapping by reading colors/ files after setting given brightness level. Userspace would have to have knowledge of the values set in order to verify the color values. For the single element array: some-color-model = <0xaabbcc>; user will get this: $ echo some-color-model > brightness-model $ echo 1 > brightness $ cat colors/red // prints 0xaa $ cat colors/green // prints 0xbb $ cat colors/blue // prints 0xcc However, I'm not sure how useful it will b
Re: [RFC PATCH] leds: multicolor: Add sysfs interface definition
Jacek On 1/30/19 4:14 PM, Jacek Anaszewski wrote: > Dan, > > On 1/30/19 10:07 PM, Dan Murphy wrote: >> Jacek >> >> On 1/30/19 2:20 PM, Jacek Anaszewski wrote: >>> Dan, >>> >>> On 1/30/19 8:59 PM, Dan Murphy wrote: Jacek On 1/30/19 1:37 PM, Jacek Anaszewski wrote: > Hi Dan, > > Thank you for the RFC. > > One vital thing is missing - documentation of brightness file must > be updated to define its semantics for LED multi color class. > > Either we need brightness-model file returning only "onoff" option > available, or, for time being, fix the max_brightness for LED multi > color class to 1 (which will map to max intensity level for each color). > I can make max_brightness default to 1 if not set by the LED driver. But the LP50xx has brightness controls so setting max_brightness from the driver should over ride the max of 1 in the upper level. >>> >>> Yes, so the max_brightness should be updated basing on current >>> brightness-model. For LEDn_BRIGHTNESS of LP50xx we could have >>> "hw" or maybe even better just "lp50xx-linear" and "lp50xx-logarithmic" >>> - I just forgot about that capability of the device. >>> >> >> OK maybe "hw" would make sense as there may be other devices that have >> dedicated brightness controls >> over color controls. > > Single "hw" doesn't address both linear and logarithmic. > This is device specific, so I don't see anything wrong in > "lp50xx-*", provided that it will be documented. > OK. This would need to be lp50xx specific. >> Probably need to create a model for non-modeled cases like >> "rgb-independent". Dumb name but I could not >> think of anything better. > > There is no point in having any rgb* brightness model since increasing > rgb in an arbitrary way will not give the impression of increasing color > intensity (lightness of the same hue). With DT defined hsl- > ranges there is no way to verify that levels arrangement makes sense > with regard to preserving hue, this is a matter of trust. But we should > state that it is highly recommended to obey this constraint so as to > not mislead users. > OK. I will document this in v2 for discussion For devices that do not support brightness as a separate control we can create a file called max_brightness_ that defines the max that a specific color can be set to. If max_brightness is set to 1 then create max_brightness_. If max_brightness > 1 then do not create the files. >>> >>> Right. We will need dedicated max_brightness for each color. >>> They should be placed also in the colors directory, next to the color >>> files. >>> >> >> OK will document this. >> I don't think we have fully vetted the brightness-model yet so I prefer to omit it and possibly introduce that later. >>> >>> We need to start from something. It will give better overview of the >>> whole idea. >>> >> >> OK. Don't get me wrong I don't oppose this idea I am just trying to figure >> out how the user space would >> know what models and brightness levels are available. > > $ cat brightness-model > lp50xx-linear lp50xx-logarithmic onoff hsl-green hsl=blue > > max_brightness will return available number of brightness levels > for each brightness model. > So max_brightness here would be dynamic? Or could we read hsl- and get the number of levels and not mess with the max_brightness definition? Or should that be the current level? > I'd not bother with presenting whole range of available color > presets. Userspace can verify the brightness->color mapping > by reading colors/ files after setting given brightness > level. > Userspace would have to have knowledge of the values set in order to verify the color values. > However, I'm not sure how useful it will be. This is a gist > of this whole discussion - we cannot be certain about exact > color effect produced with given settings. > >> I mean we can read the brightness-models and present the available models >> but then how does the user know >> what and how many levels are in each model? And how do we govern putting >> them in the right order? > > `cat max_brightness` will return number of levels for the model > currently set. Regarding the order - we must rely on the DT array > arrangement. In case of hardware originated brightness model we > must trust hardware implementation. > Another question on this is what is the proposed definition of the DT value? is it supposed to be 0xrrggbb? What about other colors like Amber? This was demonstrated in one of the videos you sent. Maybe it should be rgb- and not hsl- because these values are not hsl values but instead RGB values. >> The DT file can get messed up, per the previous example >> rgb-green = <0x277c33 0x37b048 0x47e45d>; >> >> This is assumed to be from dimmest to brightest. But that is just an >> assumption >> >> What if the entry looked like this? >> rgb-green = <0x37b048 0x277c33
Re: [RFC PATCH] leds: multicolor: Add sysfs interface definition
On Wed 2019-01-30 12:30:05, Dan Murphy wrote: > Add a documentation of LED Multicolor LED class specific > sysfs attributes. No, sorry. This does not most of the requirements. Pavel Requirements for RGB LED interface: 1) Userspace should be able to set the white color 2) Userspace should be able to arbitrary color from well known list and it should approximately match what would CRT, LCD or OLED monitor display. Color list is for example here: https://www.rapidtables.com/web/color/RGB_Color.html 2a) LEDs probably slightly change color as they age. That's out of scope, unless the variation is much greater than on monitors. 3a) Manufacturing differences cause small color variation. Again, that's out of scope, unless the variation is much greater than on monitors. Nice to have features: 3) Full range of available colors/intensities should be available to userspace 4) Interface should work well with existing triggers 5) It would be nice if userland knew how many lumens are produced at each wavelength for each setting (again, minus aging and manufacturing variations). 6) Complexity of math in kernel should be low, and preferably it should be integer or fixed point Problems: a) RGB LEDs are usually not balanced. Setting 100% PWM on red/green/blue channels will result in nothing close to white light. In fact, to get white light on N900, blue and green channel's PWM needs to be set pretty low, as in 5%. b) LED class does not define any relation between "brightness" in sysfs and ammount of light in lumens. Some drivers use close to linear relation, some use exponential relation. Human eyes percieve logarithm of lumens. RGB color model uses even more complex function. https://en.wikipedia.org/wiki/Gamma_correction #Windows, Mac, sRGB and TV/video standard gammas https://en.wikipedia.org/wiki/SRGB#Specification_of_the_transformation c) Except for white LEDs, LEDs are basically sources of single wavelength of light, while CRTs and LCDs produce broader spectrums. d) RG, RGBW and probably other LED combinations exist. e) Not all "red" LEDs will produce same wavelength. Similar differences will exist for other colors. f) We have existing RGB LEDs represented as three separate monochromatic LEDs in sysfs. > Signed-off-by: Dan Murphy > --- > .../ABI/testing/sysfs-class-led-multicolor| 38 +++ > 1 file changed, 38 insertions(+) > create mode 100644 Documentation/ABI/testing/sysfs-class-led-multicolor > > diff --git a/Documentation/ABI/testing/sysfs-class-led-multicolor > b/Documentation/ABI/testing/sysfs-class-led-multicolor > new file mode 100644 > index ..19f8da9b150e > --- /dev/null > +++ b/Documentation/ABI/testing/sysfs-class-led-multicolor > @@ -0,0 +1,38 @@ > +What:/sys/class/leds//color/sync_enable > +Date:January 2019 > +KernelVersion: 5.0 > +Contact: Dan Murphy > +Description: read/write > + Writing a 1 to this file will enable the sychronization of all > + the defined color LEDs within the LED node. Writing a 0 to > + this file will disable syncing. > + > +What:/sys/class/leds//color/sync > +Date:January 2019 > +KernelVersion: 5.0 > +Contact: Dan Murphy > +Description: write only > + Writing a 1 to this file while sync_enable is set to 1 will > + synchronize all defined LEDs within the LED node. All LEDs > + defined will be configured based on the brightness that has > + been requested. > + > + If sync_enable is set to 0 then writing a 1 to sync has no > + affect on the LEDs. > + > +What:/sys/class/leds//color/ > +Date:January 2019 > +KernelVersion: 5.0 > +Contact: Dan Murphy > +Description: read/write > + These files are dynamically created based on the colors defined > + by the registrar of the class. > + The led color(s) can be but not limited to red, green, blue, > + white, amber and violet. If sync is enabled then writing the > + brightness value of the LED is deferred until a 1 is > + written to /sys/class/leds//color/sync. If syncing is > + disabled then the LED brightness value will be written > + immediately to the LED driver. > + > + The value of the color is from 0 to > + /sys/class/leds//max_brightness. -- (english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html signature.asc Description: Digital signature
Re: [RFC PATCH] leds: multicolor: Add sysfs interface definition
Dan, On 1/30/19 10:07 PM, Dan Murphy wrote: Jacek On 1/30/19 2:20 PM, Jacek Anaszewski wrote: Dan, On 1/30/19 8:59 PM, Dan Murphy wrote: Jacek On 1/30/19 1:37 PM, Jacek Anaszewski wrote: Hi Dan, Thank you for the RFC. One vital thing is missing - documentation of brightness file must be updated to define its semantics for LED multi color class. Either we need brightness-model file returning only "onoff" option available, or, for time being, fix the max_brightness for LED multi color class to 1 (which will map to max intensity level for each color). I can make max_brightness default to 1 if not set by the LED driver. But the LP50xx has brightness controls so setting max_brightness from the driver should over ride the max of 1 in the upper level. Yes, so the max_brightness should be updated basing on current brightness-model. For LEDn_BRIGHTNESS of LP50xx we could have "hw" or maybe even better just "lp50xx-linear" and "lp50xx-logarithmic" - I just forgot about that capability of the device. OK maybe "hw" would make sense as there may be other devices that have dedicated brightness controls over color controls. Single "hw" doesn't address both linear and logarithmic. This is device specific, so I don't see anything wrong in "lp50xx-*", provided that it will be documented. Probably need to create a model for non-modeled cases like "rgb-independent". Dumb name but I could not think of anything better. There is no point in having any rgb* brightness model since increasing rgb in an arbitrary way will not give the impression of increasing color intensity (lightness of the same hue). With DT defined hsl- ranges there is no way to verify that levels arrangement makes sense with regard to preserving hue, this is a matter of trust. But we should state that it is highly recommended to obey this constraint so as to not mislead users. For devices that do not support brightness as a separate control we can create a file called max_brightness_ that defines the max that a specific color can be set to. If max_brightness is set to 1 then create max_brightness_. If max_brightness > 1 then do not create the files. Right. We will need dedicated max_brightness for each color. They should be placed also in the colors directory, next to the color files. OK will document this. I don't think we have fully vetted the brightness-model yet so I prefer to omit it and possibly introduce that later. We need to start from something. It will give better overview of the whole idea. OK. Don't get me wrong I don't oppose this idea I am just trying to figure out how the user space would know what models and brightness levels are available. $ cat brightness-model lp50xx-linear lp50xx-logarithmic onoff hsl-green hsl=blue max_brightness will return available number of brightness levels for each brightness model. I'd not bother with presenting whole range of available color presets. Userspace can verify the brightness->color mapping by reading colors/ files after setting given brightness level. However, I'm not sure how useful it will be. This is a gist of this whole discussion - we cannot be certain about exact color effect produced with given settings. I mean we can read the brightness-models and present the available models but then how does the user know what and how many levels are in each model? And how do we govern putting them in the right order? `cat max_brightness` will return number of levels for the model currently set. Regarding the order - we must rely on the DT array arrangement. In case of hardware originated brightness model we must trust hardware implementation. The DT file can get messed up, per the previous example rgb-green = <0x277c33 0x37b048 0x47e45d>; This is assumed to be from dimmest to brightest. But that is just an assumption What if the entry looked like this? rgb-green = <0x37b048 0x277c33 0x47e45d>; We can do nothing. It is just the cost of leaving some decisions to DT. Then echo 1 > brightness is not really a lower intensity then echo 2 > brightness. I know this is a product level issue but this can be misused and there is no way for maintainers or reviewers to really catch this error in code reviews. The driver can map the brightness to the appropriate level requested by the class but again not sure how the user space can know what is available. And there is nothing from stopping a definition of up to 2^32 brightness combinations. This I know is unrealistic but the capability is there I am wondering if there should be some sort of coefficient that can be defined that is applied to each color (no complex math). I can see this working in a linear device but logrithimic maybe an issue. Like rgb-green = <0x277c33>; //Coefficient used to set the dimmest allowed brightness for the color model. echo 1 > brightness red = 0x27 green = 0x7c blue = 0x33 echo 2 > brightness red = 0x28 green = 0x7d blue = 0x34 echo 3 > brightness red
Re: [RFC PATCH] leds: multicolor: Add sysfs interface definition
Jacek On 1/30/19 2:20 PM, Jacek Anaszewski wrote: > Dan, > > On 1/30/19 8:59 PM, Dan Murphy wrote: >> Jacek >> >> On 1/30/19 1:37 PM, Jacek Anaszewski wrote: >>> Hi Dan, >>> >>> Thank you for the RFC. >>> >>> One vital thing is missing - documentation of brightness file must >>> be updated to define its semantics for LED multi color class. >>> >>> Either we need brightness-model file returning only "onoff" option >>> available, or, for time being, fix the max_brightness for LED multi >>> color class to 1 (which will map to max intensity level for each color). >>> >> >> I can make max_brightness default to 1 if not set by the LED driver. >> >> But the LP50xx has brightness controls so setting max_brightness from the >> driver should over ride >> the max of 1 in the upper level. > > Yes, so the max_brightness should be updated basing on current > brightness-model. For LEDn_BRIGHTNESS of LP50xx we could have > "hw" or maybe even better just "lp50xx-linear" and "lp50xx-logarithmic" > - I just forgot about that capability of the device. > OK maybe "hw" would make sense as there may be other devices that have dedicated brightness controls over color controls. Probably need to create a model for non-modeled cases like "rgb-independent". Dumb name but I could not think of anything better. >> For devices that do not support brightness as a separate control we can >> create a file called >> max_brightness_ that defines the max that a specific color can be set >> to. If max_brightness >> is set to 1 then create max_brightness_. If max_brightness > 1 then >> do not create the files. > > Right. We will need dedicated max_brightness for each color. > They should be placed also in the colors directory, next to the color > files. > OK will document this. >> I don't think we have fully vetted the brightness-model yet so I prefer to >> omit >> it and possibly introduce that later. > > We need to start from something. It will give better overview of the > whole idea. > OK. Don't get me wrong I don't oppose this idea I am just trying to figure out how the user space would know what models and brightness levels are available. I mean we can read the brightness-models and present the available models but then how does the user know what and how many levels are in each model? And how do we govern putting them in the right order? The DT file can get messed up, per the previous example rgb-green = <0x277c33 0x37b048 0x47e45d>; This is assumed to be from dimmest to brightest. But that is just an assumption What if the entry looked like this? rgb-green = <0x37b048 0x277c33 0x47e45d>; Then echo 1 > brightness is not really a lower intensity then echo 2 > brightness. I know this is a product level issue but this can be misused and there is no way for maintainers or reviewers to really catch this error in code reviews. The driver can map the brightness to the appropriate level requested by the class but again not sure how the user space can know what is available. And there is nothing from stopping a definition of up to 2^32 brightness combinations. This I know is unrealistic but the capability is there I am wondering if there should be some sort of coefficient that can be defined that is applied to each color (no complex math). I can see this working in a linear device but logrithimic maybe an issue. Like rgb-green = <0x277c33>; //Coefficient used to set the dimmest allowed brightness for the color model. echo 1 > brightness red = 0x27 green = 0x7c blue = 0x33 echo 2 > brightness red = 0x28 green = 0x7d blue = 0x34 echo 3 > brightness red = 0x29 green = 0x7e blue = 0x35 This example would give you 132 different brightness levels. green is the brightest defined color so the step calculation is 255-124+1 = 132 (zero based) as 0 is off. There can be a file called rgb_green_max which can be read to indicate how many brightness levels can be achieved. If the user goes beyond the steps then throw -EINVAL at them. These brightness models probably should be put into a separate directory to isolate and not clutter the colors directory. And writing brightness to these models would be immediate no sync involved. Dan > Best regards, > Jacek Anaszewski > >> Dan >> -- -- Dan Murphy
Re: [RFC PATCH] leds: multicolor: Add sysfs interface definition
Dan, On 1/30/19 8:59 PM, Dan Murphy wrote: Jacek On 1/30/19 1:37 PM, Jacek Anaszewski wrote: Hi Dan, Thank you for the RFC. One vital thing is missing - documentation of brightness file must be updated to define its semantics for LED multi color class. Either we need brightness-model file returning only "onoff" option available, or, for time being, fix the max_brightness for LED multi color class to 1 (which will map to max intensity level for each color). I can make max_brightness default to 1 if not set by the LED driver. But the LP50xx has brightness controls so setting max_brightness from the driver should over ride the max of 1 in the upper level. Yes, so the max_brightness should be updated basing on current brightness-model. For LEDn_BRIGHTNESS of LP50xx we could have "hw" or maybe even better just "lp50xx-linear" and "lp50xx-logarithmic" - I just forgot about that capability of the device. For devices that do not support brightness as a separate control we can create a file called max_brightness_ that defines the max that a specific color can be set to. If max_brightness is set to 1 then create max_brightness_. If max_brightness > 1 then do not create the files. Right. We will need dedicated max_brightness for each color. They should be placed also in the colors directory, next to the color files. I don't think we have fully vetted the brightness-model yet so I prefer to omit it and possibly introduce that later. We need to start from something. It will give better overview of the whole idea. Best regards, Jacek Anaszewski Dan Best regards, Jacek Anaszewski On 1/30/19 7:30 PM, Dan Murphy wrote: Add a documentation of LED Multicolor LED class specific sysfs attributes. Signed-off-by: Dan Murphy --- .../ABI/testing/sysfs-class-led-multicolor | 38 +++ 1 file changed, 38 insertions(+) create mode 100644 Documentation/ABI/testing/sysfs-class-led-multicolor diff --git a/Documentation/ABI/testing/sysfs-class-led-multicolor b/Documentation/ABI/testing/sysfs-class-led-multicolor new file mode 100644 index ..19f8da9b150e --- /dev/null +++ b/Documentation/ABI/testing/sysfs-class-led-multicolor @@ -0,0 +1,38 @@ +What: /sys/class/leds//color/sync_enable +Date: January 2019 +KernelVersion: 5.0 +Contact: Dan Murphy +Description: read/write + Writing a 1 to this file will enable the sychronization of all + the defined color LEDs within the LED node. Writing a 0 to + this file will disable syncing. + +What: /sys/class/leds//color/sync +Date: January 2019 +KernelVersion: 5.0 +Contact: Dan Murphy +Description: write only + Writing a 1 to this file while sync_enable is set to 1 will + synchronize all defined LEDs within the LED node. All LEDs + defined will be configured based on the brightness that has + been requested. + + If sync_enable is set to 0 then writing a 1 to sync has no + affect on the LEDs. + +What: /sys/class/leds//color/ +Date: January 2019 +KernelVersion: 5.0 +Contact: Dan Murphy +Description: read/write + These files are dynamically created based on the colors defined + by the registrar of the class. + The led color(s) can be but not limited to red, green, blue, + white, amber and violet. If sync is enabled then writing the + brightness value of the LED is deferred until a 1 is + written to /sys/class/leds//color/sync. If syncing is + disabled then the LED brightness value will be written + immediately to the LED driver. + + The value of the color is from 0 to + /sys/class/leds//max_brightness.
Re: [RFC PATCH] leds: multicolor: Add sysfs interface definition
Jacek On 1/30/19 1:37 PM, Jacek Anaszewski wrote: > Hi Dan, > > Thank you for the RFC. > > One vital thing is missing - documentation of brightness file must > be updated to define its semantics for LED multi color class. > > Either we need brightness-model file returning only "onoff" option > available, or, for time being, fix the max_brightness for LED multi > color class to 1 (which will map to max intensity level for each color). > I can make max_brightness default to 1 if not set by the LED driver. But the LP50xx has brightness controls so setting max_brightness from the driver should over ride the max of 1 in the upper level. For devices that do not support brightness as a separate control we can create a file called max_brightness_ that defines the max that a specific color can be set to. If max_brightness is set to 1 then create max_brightness_. If max_brightness > 1 then do not create the files. I don't think we have fully vetted the brightness-model yet so I prefer to omit it and possibly introduce that later. Dan > Best regards, > Jacek Anaszewski > > On 1/30/19 7:30 PM, Dan Murphy wrote: >> Add a documentation of LED Multicolor LED class specific >> sysfs attributes. >> >> Signed-off-by: Dan Murphy >> --- >> .../ABI/testing/sysfs-class-led-multicolor | 38 +++ >> 1 file changed, 38 insertions(+) >> create mode 100644 Documentation/ABI/testing/sysfs-class-led-multicolor >> >> diff --git a/Documentation/ABI/testing/sysfs-class-led-multicolor >> b/Documentation/ABI/testing/sysfs-class-led-multicolor >> new file mode 100644 >> index ..19f8da9b150e >> --- /dev/null >> +++ b/Documentation/ABI/testing/sysfs-class-led-multicolor >> @@ -0,0 +1,38 @@ >> +What: /sys/class/leds//color/sync_enable >> +Date: January 2019 >> +KernelVersion: 5.0 >> +Contact: Dan Murphy >> +Description: read/write >> + Writing a 1 to this file will enable the sychronization of all >> + the defined color LEDs within the LED node. Writing a 0 to >> + this file will disable syncing. >> + >> +What: /sys/class/leds//color/sync >> +Date: January 2019 >> +KernelVersion: 5.0 >> +Contact: Dan Murphy >> +Description: write only >> + Writing a 1 to this file while sync_enable is set to 1 will >> + synchronize all defined LEDs within the LED node. All LEDs >> + defined will be configured based on the brightness that has >> + been requested. >> + >> + If sync_enable is set to 0 then writing a 1 to sync has no >> + affect on the LEDs. >> + >> +What: /sys/class/leds//color/ >> +Date: January 2019 >> +KernelVersion: 5.0 >> +Contact: Dan Murphy >> +Description: read/write >> + These files are dynamically created based on the colors defined >> + by the registrar of the class. >> + The led color(s) can be but not limited to red, green, blue, >> + white, amber and violet. If sync is enabled then writing the >> + brightness value of the LED is deferred until a 1 is >> + written to /sys/class/leds//color/sync. If syncing is >> + disabled then the LED brightness value will be written >> + immediately to the LED driver. >> + >> + The value of the color is from 0 to >> + /sys/class/leds//max_brightness. >> > -- -- Dan Murphy
Re: [RFC PATCH] leds: multicolor: Add sysfs interface definition
Hi Dan, Thank you for the RFC. One vital thing is missing - documentation of brightness file must be updated to define its semantics for LED multi color class. Either we need brightness-model file returning only "onoff" option available, or, for time being, fix the max_brightness for LED multi color class to 1 (which will map to max intensity level for each color). Best regards, Jacek Anaszewski On 1/30/19 7:30 PM, Dan Murphy wrote: Add a documentation of LED Multicolor LED class specific sysfs attributes. Signed-off-by: Dan Murphy --- .../ABI/testing/sysfs-class-led-multicolor| 38 +++ 1 file changed, 38 insertions(+) create mode 100644 Documentation/ABI/testing/sysfs-class-led-multicolor diff --git a/Documentation/ABI/testing/sysfs-class-led-multicolor b/Documentation/ABI/testing/sysfs-class-led-multicolor new file mode 100644 index ..19f8da9b150e --- /dev/null +++ b/Documentation/ABI/testing/sysfs-class-led-multicolor @@ -0,0 +1,38 @@ +What: /sys/class/leds//color/sync_enable +Date: January 2019 +KernelVersion: 5.0 +Contact: Dan Murphy +Description: read/write + Writing a 1 to this file will enable the sychronization of all + the defined color LEDs within the LED node. Writing a 0 to + this file will disable syncing. + +What: /sys/class/leds//color/sync +Date: January 2019 +KernelVersion: 5.0 +Contact: Dan Murphy +Description: write only + Writing a 1 to this file while sync_enable is set to 1 will + synchronize all defined LEDs within the LED node. All LEDs + defined will be configured based on the brightness that has + been requested. + + If sync_enable is set to 0 then writing a 1 to sync has no + affect on the LEDs. + +What: /sys/class/leds//color/ +Date: January 2019 +KernelVersion: 5.0 +Contact: Dan Murphy +Description: read/write + These files are dynamically created based on the colors defined + by the registrar of the class. + The led color(s) can be but not limited to red, green, blue, + white, amber and violet. If sync is enabled then writing the + brightness value of the LED is deferred until a 1 is + written to /sys/class/leds//color/sync. If syncing is + disabled then the LED brightness value will be written + immediately to the LED driver. + + The value of the color is from 0 to + /sys/class/leds//max_brightness.