Hi, took some time but now a first working draft of the suggested new way of handling per-key RGB keyboard backlights is finished. See: https://lore.kernel.org/all/1fb08a74-62c7-4d0c-ba5d-648e23082dcb@tuxedocomputers.com/ First time for me sending a whole new driver to the LKML, so please excuse mistakes I might have made. Known bugs: - The device has a lightbar which is currently not implemented and therefore stuck to blue once the first backlight control command is send. What is still missing: - The leds fallback - Lightbar control Some general noob questions: Initially I though it would be nice to have 2 modules, one jsut being the wmi initialization and utility stuff and one just being the backlight logic stuff, being loaded automatically via module_alias, but that would still require me to create the virtual hid device during the wmi_ab probe, and that already needs the ll_driver, so i guess I have to do it statically like i did now? Or in other words: I would have liked to have a module dependency graph like this: tuxedo_nb04_lamp_array depends on tuxedo_nb04_platform (combining *_wmi_init and *_wmi_utility) but if i currently split it into modules i would get this: tuxedo_nb04_wmi_ab_init dpends on tuxedo_nb04_wmi_ab_lamp_array depends on tuxedo_nb04_wmi_utility Currently after creating the virtual hdev in the wmi init probe function I have to keep track of it and manually destroy it during the wmi init remove. Can this be automated devm_kzalloc-style? Kind regards, Werner Sembach
On Sep 26 2024, Werner Sembach wrote: > Hi, > took some time but now a first working draft of the suggested new way of > handling per-key RGB keyboard backlights is finished. See: > https://lore.kernel.org/all/1fb08a74-62c7-4d0c-ba5d-648e23082dcb@tuxedocomputers.com/ > First time for me sending a whole new driver to the LKML, so please excuse > mistakes I might have made. > > Known bugs: > - The device has a lightbar which is currently not implemented and > therefore stuck to blue once the first backlight control command is send. > > What is still missing: > - The leds fallback > - Lightbar control > > Some general noob questions: > > Initially I though it would be nice to have 2 modules, one jsut being the > wmi initialization and utility stuff and one just being the backlight logic > stuff, being loaded automatically via module_alias, but that would still > require me to create the virtual hid device during the wmi_ab probe, and > that already needs the ll_driver, so i guess I have to do it statically > like i did now? > Or in other words: I would have liked to have a module dependency graph > like this: > tuxedo_nb04_lamp_array depends on tuxedo_nb04_platform (combining *_wmi_init and *_wmi_utility) > but if i currently split it into modules i would get this: > tuxedo_nb04_wmi_ab_init dpends on tuxedo_nb04_wmi_ab_lamp_array depends on tuxedo_nb04_wmi_utility On more general question to you: how much confident are you about your LampArray implementation? If you still need to add/fix stuff in it, I would advise you to have a simple HID device, with bare minimum functionality, and then add the LampArray functionality on top through HID-BPF. This way you can fix LampArray out of band with the kernel, while having a more stable kernel module. This should be possible with v6.11+. Another solution is to still have your wmi-to-hid module, and then a HID kernel module in drivers/hid that supports LampArray. But I would strongly suggest while you are figuring out the userspace part to stick to HID-BPF, and then once you are happy we can move to a full kernel module. Cheers, Benjamin > > Currently after creating the virtual hdev in the wmi init probe function I > have to keep track of it and manually destroy it during the wmi init > remove. Can this be automated devm_kzalloc-style? > > Kind regards, > Werner Sembach > >
Hi Benjamin, Am 27.09.24 um 18:08 schrieb Benjamin Tissoires: > On Sep 26 2024, Werner Sembach wrote: >> Hi, >> took some time but now a first working draft of the suggested new way of >> handling per-key RGB keyboard backlights is finished. See: >> https://lore.kernel.org/all/1fb08a74-62c7-4d0c-ba5d-648e23082dcb@tuxedocomputers.com/ >> First time for me sending a whole new driver to the LKML, so please excuse >> mistakes I might have made. >> >> Known bugs: >> - The device has a lightbar which is currently not implemented and >> therefore stuck to blue once the first backlight control command is send. >> >> What is still missing: >> - The leds fallback >> - Lightbar control >> >> Some general noob questions: >> >> Initially I though it would be nice to have 2 modules, one jsut being the >> wmi initialization and utility stuff and one just being the backlight logic >> stuff, being loaded automatically via module_alias, but that would still >> require me to create the virtual hid device during the wmi_ab probe, and >> that already needs the ll_driver, so i guess I have to do it statically >> like i did now? >> Or in other words: I would have liked to have a module dependency graph >> like this: >> tuxedo_nb04_lamp_array depends on tuxedo_nb04_platform (combining *_wmi_init and *_wmi_utility) >> but if i currently split it into modules i would get this: >> tuxedo_nb04_wmi_ab_init dpends on tuxedo_nb04_wmi_ab_lamp_array depends on tuxedo_nb04_wmi_utility > On more general question to you: how much confident are you about your > LampArray implementation? > > If you still need to add/fix stuff in it, I would advise you to have a > simple HID device, with bare minimum functionality, and then add the > LampArray functionality on top through HID-BPF. This way you can fix > LampArray out of band with the kernel, while having a more stable kernel > module. This should be possible with v6.11+. > > Another solution is to still have your wmi-to-hid module, and then a > HID kernel module in drivers/hid that supports LampArray. > > But I would strongly suggest while you are figuring out the userspace > part to stick to HID-BPF, and then once you are happy we can move to a > full kernel module. I don't expect this patch to get merged right away, but like i wrote, wanted to collect some feedback on it to already start refining it. With this driver now functional I have something to build and test userspace against while waiting on the feedback and the undoubtly following discussion of details to get it right ^^. Until now I only tested with a very simple, self built command line binary, looping some patterns. My next step is to try the work in progress implementetion for LampArray in OpenRGB: https://gitlab.com/CalcProgrammer1/OpenRGB/-/merge_requests/2348 Regards, Werner > > Cheers, > Benjamin > >> Currently after creating the virtual hdev in the wmi init probe function I >> have to keep track of it and manually destroy it during the wmi init >> remove. Can this be automated devm_kzalloc-style? >> >> Kind regards, >> Werner Sembach >> >>
On Fri 2024-09-27 18:08:52, Benjamin Tissoires wrote: > On Sep 26 2024, Werner Sembach wrote: > > Hi, > > took some time but now a first working draft of the suggested new way of > > handling per-key RGB keyboard backlights is finished. See: > > https://lore.kernel.org/all/1fb08a74-62c7-4d0c-ba5d-648e23082dcb@tuxedocomputers.com/ > > First time for me sending a whole new driver to the LKML, so please excuse > > mistakes I might have made. > > > > Known bugs: > > - The device has a lightbar which is currently not implemented and > > therefore stuck to blue once the first backlight control command is send. > > > > What is still missing: > > - The leds fallback > > - Lightbar control > > > > Some general noob questions: > > > > Initially I though it would be nice to have 2 modules, one jsut being the > > wmi initialization and utility stuff and one just being the backlight logic > > stuff, being loaded automatically via module_alias, but that would still > > require me to create the virtual hid device during the wmi_ab probe, and > > that already needs the ll_driver, so i guess I have to do it statically > > like i did now? > > Or in other words: I would have liked to have a module dependency graph > > like this: > > tuxedo_nb04_lamp_array depends on tuxedo_nb04_platform (combining *_wmi_init and *_wmi_utility) > > but if i currently split it into modules i would get this: > > tuxedo_nb04_wmi_ab_init dpends on tuxedo_nb04_wmi_ab_lamp_array depends on tuxedo_nb04_wmi_utility > > On more general question to you: how much confident are you about your > LampArray implementation? > > If you still need to add/fix stuff in it, I would advise you to have a > simple HID device, with bare minimum functionality, and then add the > LampArray functionality on top through HID-BPF. This way you can fix > LampArray out of band with the kernel, while having a more stable kernel > module. This should be possible with v6.11+. > > Another solution is to still have your wmi-to-hid module, and then a > HID kernel module in drivers/hid that supports LampArray. > > But I would strongly suggest while you are figuring out the userspace > part to stick to HID-BPF, and then once you are happy we can move to a > full kernel module. What about creating real kernel driver with real interface to userland, instead? My preference would be treating this as a display, but nearly anything is better than _this_. Best regards, Pavel -- People of Russia, stop Putin before his war on Ukraine escalates.
© 2016 - 2024 Red Hat, Inc.