From: Werner Sembach <wse@tuxedocomputers.com>
To: Hans de Goede <hdegoede@redhat.com>, Pavel Machek <pavel@ucw.cz>
Cc: Lee Jones <lee@kernel.org>,
jikos@kernel.org, linux-kernel@vger.kernel.org,
Jelle van der Waa <jelle@vdwaa.nl>,
Miguel Ojeda <miguel.ojeda.sandonis@gmail.com>,
"dri-devel@lists.freedesktop.org"
<dri-devel@lists.freedesktop.org>,
linux-input@vger.kernel.org, ojeda@kernel.org,
linux-leds@vger.kernel.org
Subject: Future handling of complex RGB devices on Linux v2
Date: Wed, 21 Feb 2024 12:12:38 +0100 [thread overview]
Message-ID: <247b5dcd-fda8-45a7-9896-eabc46568281@tuxedocomputers.com> (raw)
In-Reply-To: <e21a7d87-3059-4a51-af04-1062dac977d2@tuxedocomputers.com>
Hi,
so after more feedback from the OpenRGB maintainers I came up with an even more
generic proposal:
https://gitlab.com/CalcProgrammer1/OpenRGB/-/issues/3916#note_1753072869
Copy pasting the relevant part:
>Another, yet more generic, approach:
>
>```
>get-device-info ioctl returning:
>{
> char name[64] /* Device model name / identifier */
> enum device_type /* e.g. keyboard, mouse, lightbar, etc. */
> char firmware_version_string[64] /* if known to the driver, empty
otherwise */
> char serial_number[64] /* if known to the driver, empty
otherwise */
> enum supported_commands[128] /* comands supported by the firmware */
>}
>
>evaluate-set-command ioctl taking:
>{
> enum command /* one of supported_commands */
> union data
> {
> char raw[3072],
> {
> <input struct for command 0>
> },
> {
> <input struct for command 1>
> },
> ...
> }
>}
>
>evaluate-get-command ioctl taking:
>{
> enum command /* one of supported_commands */
> union data
> {
> char raw[3072],
> {
> <input struct for command 0>
> },
> {
> <input struct for command 1>
> },
> ...
> }
>}
>and returning:
>{
> union data
> {
> char raw[3072],
> {
> <return struct for command 0> /* not every command might have
one */
> },
> {
> <return struct for command 1> /* not every command might have
one */
> },
> ...
> }
>}
>```
>
>- char name[64] still includes, if know to the driver, information about
physical or even printed layout.
>- differentiation between evaluate-set-command and evaluate-get-command is
mainly there for performance optimization for direct mode (for
evaluate-set-command the kernel does not have to copy anything back to userspace)
>- commands without a return struct must not be used with evaluate-get-command
>- the input struct might be empty for very simple commands (or "int unused" to
not confuse the compiler if neccessary)
>
>Now is the question: How does userspace know which commands takes/returns
which structs? Define them in one big header file (as struct
clevo_set_breathing_mode_1_input, struct tongfang_set_breathing_mode_1_input,
etc.), or somehow dynamicaly? I'm warming up to Hans suggestion to just do it
statically, unlike my suggestion yesterday.
>
>Min/Max values are documented in the header file (if not implied by variable
type). With different max value -> different command, e.g.
clevo_set_breathing_mode_1 for devices with speed from 0 to 7 and
clevo_set_breathing_mode_2 for devices with speed from 1 to 10.
But at this point it is almost a generic interface that can be used to expose
anything to userspace, looping back to the sanitized-wmiraw idea that was
floating around earlier.
So a new approach (Please correct me if there is already something similar I'm
not aware of):
New subsystem "Platform Device Commands" (short platdevcom) (I'm open for better
name suggestions):
- Registers /sys/class/platdevcom/platdevcom[0-9]* (similar to hidraw)
- Has get-device-info ioctl, evaluate-set-command ioctl, and
evaluate-get-command ioctl as described above
- device_type enum entries for rgb would be for example rgbleds_keyboard,
rgbleds_mouse, etc.
On a high level this subsystem can be used to expose any platform functionality
to userspace that doesn't fit another subsystem in a central location. This
could be for example a nearly 1 to 1 sanitized mapping to wmi calls. Or writing
a specific EC register to control OEM BIOS features like flexi charging (only
charge battery to specific percentage to extend the live).
However I am aware that this is hardly an api. So Maybe it's best to just fall
back on extending the leds subsystem with the deactivate command, and from there
just implement the few rgb devices that are not hidraw as misc devices in a per
OEM fasion without a unified api.
next prev parent reply other threads:[~2024-02-21 11:22 UTC|newest]
Thread overview: 86+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-10-11 19:00 [PATCH] leds: rgb: Implement per-key keyboard backlight for several TUXEDO devices Werner Sembach
2023-10-11 19:21 ` Werner Sembach
2023-10-12 8:58 ` Pavel Machek
2023-10-12 10:02 ` Werner Sembach
2023-10-12 14:05 ` Pavel Machek
2023-10-12 16:35 ` Werner Sembach
2023-10-13 12:19 ` Pavel Machek
2023-10-13 14:38 ` Werner Sembach
2023-10-13 14:54 ` Implement per-key keyboard backlight as auxdisplay? Werner Sembach
2023-10-13 19:56 ` Pavel Machek
2023-10-13 20:03 ` Pavel Machek
2023-10-16 10:57 ` Miguel Ojeda
2023-10-23 11:40 ` Jani Nikula
2023-10-23 11:44 ` Miguel Ojeda
2023-11-20 20:53 ` Pavel Machek
2023-11-20 20:52 ` Pavel Machek
2023-11-21 11:33 ` Werner Sembach
2023-11-21 12:20 ` Hans de Goede
2023-11-21 13:29 ` Werner Sembach
2023-11-22 18:34 ` Hans de Goede
2023-11-27 10:59 ` Werner Sembach
2023-12-29 19:13 ` Werner Sembach
2024-01-17 15:26 ` Hans de Goede
2024-01-17 16:50 ` Userspace API for per key backlight for non HID (no hidraw) keyboards Hans de Goede
2024-01-17 19:03 ` Armin Wolf
2024-01-18 0:58 ` Werner Sembach
2024-01-18 17:45 ` Implement per-key keyboard backlight as auxdisplay? Pavel Machek
2024-01-18 22:32 ` Werner Sembach
2024-01-19 8:44 ` Hans de Goede
2024-01-19 10:51 ` Jani Nikula
2024-01-19 16:06 ` Werner Sembach
2024-01-19 18:33 ` Dmitry Torokhov
2024-01-19 22:14 ` Pavel Machek
2024-01-23 16:51 ` Werner Sembach
2024-01-19 16:04 ` Werner Sembach
2024-01-29 13:24 ` Hans de Goede
2024-01-30 11:12 ` Werner Sembach
2024-01-30 17:10 ` Hans de Goede
2024-01-30 18:09 ` Werner Sembach
2024-01-30 18:35 ` Hans de Goede
2024-01-30 19:08 ` Werner Sembach
2024-01-30 19:46 ` Hans de Goede
2024-01-31 11:41 ` Future handling of complex RGB devices on Linux Werner Sembach
2024-01-31 15:52 ` Roderick Colenbrander
2024-02-21 11:12 ` Werner Sembach [this message]
2024-02-21 22:17 ` Future handling of complex RGB devices on Linux v2 Pavel Machek
2024-02-22 9:04 ` Pekka Paalanen
2024-02-22 17:38 ` Pavel Machek
2024-02-23 8:53 ` Pekka Paalanen
2024-07-23 20:40 ` Keybaords with arrays of RGB LEDs was " Pavel Machek
2024-02-23 9:21 ` Thomas Zimmermann
2024-02-22 10:46 ` Hans de Goede
2024-02-22 11:38 ` Gregor Riepl
2024-02-22 12:39 ` Hans de Goede
2024-02-22 13:14 ` Future handling of complex RGB devices on Linux v3 Werner Sembach
2024-03-18 11:11 ` Hans de Goede
2024-03-19 15:18 ` Werner Sembach
2024-03-25 14:18 ` Hans de Goede
2024-03-25 17:01 ` Werner Sembach
2024-03-20 11:16 ` Werner Sembach
2024-03-20 11:33 ` Werner Sembach
2024-03-20 18:45 ` Werner Sembach
2024-03-25 14:25 ` In kernel virtual HID devices (was Future handling of complex RGB devices on Linux v3) Hans de Goede
2024-03-25 15:56 ` Benjamin Tissoires
2024-03-25 16:48 ` Werner Sembach
2024-03-25 18:30 ` Hans de Goede
2024-03-26 7:57 ` Werner Sembach
2024-03-26 15:39 ` Benjamin Tissoires
2024-03-26 16:57 ` Werner Sembach
2024-03-27 11:03 ` Benjamin Tissoires
2024-03-28 23:52 ` Werner Sembach
2024-03-27 11:01 ` Hans de Goede
2024-07-24 17:36 ` Pavel Machek
2024-07-24 21:08 ` Werner Sembach
2024-03-25 18:38 ` Miguel Ojeda
2024-04-09 13:33 ` Andy Shevchenko
2024-02-22 17:42 ` Future handling of complex RGB devices on Linux v2 Pavel Machek
2024-02-22 17:52 ` Pavel Machek
2024-02-22 17:23 ` Pavel Machek
2024-02-23 8:33 ` Werner Sembach
2024-01-19 20:15 ` Implement per-key keyboard backlight as auxdisplay? Pavel Machek
2024-01-19 20:22 ` Werner Sembach
2024-01-19 20:32 ` Pavel Machek
2024-01-29 13:24 ` Hans de Goede
2023-10-12 13:00 ` [PATCH] leds: rgb: Implement per-key keyboard backlight for several TUXEDO devices kernel test robot
2023-10-16 11:21 ` kernel test robot
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=247b5dcd-fda8-45a7-9896-eabc46568281@tuxedocomputers.com \
--to=wse@tuxedocomputers.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=hdegoede@redhat.com \
--cc=jelle@vdwaa.nl \
--cc=jikos@kernel.org \
--cc=lee@kernel.org \
--cc=linux-input@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-leds@vger.kernel.org \
--cc=miguel.ojeda.sandonis@gmail.com \
--cc=ojeda@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
all inboxes | Powered by JetHome®