Linux LED subsystem development
 help / color / mirror / Atom feed
From: Werner Sembach <wse@tuxedocomputers.com>
To: Pavel Machek <pavel@ucw.cz>
Cc: linux-leds@vger.kernel.org
Subject: Re: Clarification questions regarding multicolor leds
Date: Mon, 22 Aug 2022 14:33:53 +0200	[thread overview]
Message-ID: <7100ac63-d52b-6cec-892c-cc47c10331dc@tuxedocomputers.com> (raw)
In-Reply-To: <20220821181840.GA19796@duo.ucw.cz>

Hi,

thanks for the answers, comments below.

Am 21.08.22 um 20:18 schrieb Pavel Machek:
> Hi!
>> I'm currently implementing the multicolors sysfs leds interface for several
>> Clevo and Tongfang barebones, but I'm unsure how to actually map the leds to
>> the multicolor interface:
>>
>> The keyboards come in 5 variants:
>>
>> Single zone RGB + Brightness
>>
>> Single Zone RGB
>>
>> 3 Zone RGB + Shared Brightness
>>
>> Per Key RGB
>>
>> Per Key RGB + Shared Brightness
>>
>> First question: How do I map multiple zones or per-key leds?
>>
>> Should I register a seperate ::kbd_backlight for zone/key? resulting in
>> ::kbd_backlight, ::kbd_backlight_1, ::kbd_backlight_2, ::kbd_backlight_3,
>> etc?
> For a zone, yes.
Ok
>
>> Should I give them more desciptive names like ::kbd_backlight_left,
>> ::kbd_backlight_center, ::kbd_backlight_right, ::kbd_backlight_a,
>> ::kbd_backlight_b, ::kbd_backlight_enter?
>>
>> Or Should I only create a single ::kbd_backlight instance and map the
>> different zones to subleds? So there are number of zones * 3 subleds, with
>> each tripplet controlling the rgb values of one zone/key? This would help
>> performance, as for the per-key backlight, the firmware in the backend wants
>> an array for all keys at once. So setting each key seperatly would mean
>> sending the whole array for each key individually. And I think what most
>> people want to do is to set the whole keyboard at once anyway and nit key by
>> key.
> Not sure what to do there. And not sure if LED subsystem is suitable
> for this, actually. This starts to look like a display...

Well, the per-key keyboard actually has a 6x20 grid of leds under it of 
which each can be set to a different color.

So in a kind of way it is a Display? Especially if someone wants to 
program a complex animation to it.

What would be a better place/way to implement this? With the numeration 
implementation you have ::kbd_backlight(_0) up to ::kbd_backlight_119. 
And 120 file accesses for each frame of a potentially custom programmed 
keyboard backlight animation.

Also, userspace has no clear way of knowing how these 120 leds are 
actually placed under the keyboard.

Suggestion for the TODO list: Find a suitable interface for single 
devices with many individually controlable leds (per-key-rgb keyboards, 
led stipes with individually controllable leds, rgb ram with 
individually controllable leds, etc.)

A quick idea: Maybe add a multi_coord and a multi_coord_max entry? The 
first first one giving the coordinate of the led on the device (eg a 
keyboard) in an abstract messuring unit in the form "<x> <y>". Defined 
by 0 0 as the upper left corner of the device and multi_coord_max as the 
lower right. In the case the device is "one-dimensional", e.g. a led 
stripe, the second value of coord_max is 0. Alternativly, no 
multi_coord_max, and multi_coord is just 2 float values between 0 and 100.

>
>> Second question: For the keyboards with shared brightness, is it ok to have
>> the brightness values of ::kbd_backlight, ::kbd_backlight_1 etc. just in
>> sync? I did not see a way to have a ::kbd_backlight without the brightness
>> sysfs entry (then I would have just given the brightness switch to
>> ::kbd_backlight and not to ::kbd_backlight_1 and ::kbd_backlight_2)
> Can we simply ignore shared brightness to get reasonable API?
So not use the brightness parameter of the firmware, but do everything 
with RGB values?
>
>> Third question: The 3 zone RGB and the per-key keyboards have firmware
>> accelerated modes, like breathing and rainbow. How do I make them accessible
>> via the multicolor leds interface? the blinking pattern interface does not
>> really match the usecase as these modes are a simple single value toggle
>> (0=static color, 1=breathing, 2=ignore color settings and play predefined
>> moving rainbow pattern, etc).
> Take a look at drivers/leds/trigger/ledtrig-pattern.c . That's
> interface we'd like.

Isn't that the interface described here 
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/devicetree/bindings/leds/leds-trigger-pattern.txt 
? That does not really map to the firmware, es the breathing mode for 
example can't be adjusted, it just goes from max to off and back in a 
predefined timeframe.

As far as I see there is no interface for vendor specific modes. So what 
would the correct place be so expose this to userspace? Only thing I can 
think auf atm is just a sysfs entry in the platform driver complementing 
the leds settings. Albeit a little bit ugly because then you have 2 
different places controlling the leds.

>
> Best regards,
> 								Pavel

Kind regards,

Werner


  reply	other threads:[~2022-08-22 12:34 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-19  7:45 Clarification questions regarding multicolor leds Werner Sembach
2022-08-19 10:20 ` Werner Sembach
2022-08-21 18:18 ` Pavel Machek
2022-08-22 12:33   ` Werner Sembach [this message]
2022-09-18 15:06 ` Jacek Anaszewski

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=7100ac63-d52b-6cec-892c-cc47c10331dc@tuxedocomputers.com \
    --to=wse@tuxedocomputers.com \
    --cc=linux-leds@vger.kernel.org \
    --cc=pavel@ucw.cz \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox