TODO: - Gyroscope support - Figure out more details on not breaking SDL Version 4 changes: - Added support for the Home button LED for the pro controller and right joy-con - Changed name from hid-switchcon to hid-joycon - Added rumble support - Removed ctlr->type and use hdev->product instead - Use POWER_SUPPLY_CAPACITY_LEVEL enum instead of manually translating to capacity percentages - Misc. minor refactors based on v3 feedback Version 3 changes: - Added led_classdev support for the 4 player LEDs - Added power_supply support for the controller's battery - Made the controller number mutex static - Minor refactoring/style fixes based on Roderick's feedback from v2 Version 2 changes: - Switched to using a synchronous method for configuring the controller. - Removed any pairing/orientation logic in the driver. Every controller now corresponds to its own input device. - Store controller button data as a single u32. - Style corrections This patch revision adds support for setting the Home LED brightness in addition to rumble support. The switch controllers have configurable motor frequencies. This is useful for playing different tones or sound effects on the controllers. I added sysfs attributes for controlling the rumble frequencies from userspace. I didn't see an obvious existing sysfs class that provided that functionality. Please let me know if there's a preferable way to do this. I think the last major feature to add is the gyro support. I assume the preferred way to handle this would be to create a new input device for the gyro which is separate from the gamepad. I'm still running into the issue of led classdev errors when unplugging the controller (it returns -ENOSYS). See the patch v3 summary for more info on what I've tried so far. Roderick, As a followup to the prior discussion about patching the version to prevent breaking SDL compatibility: I took a look at libsdl, and it looks like it's using hidraw to implement its own userspace switch pro controller driver. When it detects compatibility it's only checking the vendor and id values (the function takes in a version argument, but it doesn't use it). If I start up Steam, it seems to yank control away from my kernel driver and do everything itself. I'm not sure what the correct way forward is on this. Do I need to patch the version if SDL seems unaffected by the kernel driver? Thanks, Daniel