Options with mainline linux kernel drivers:
- MCP2221A (i2c + 4x GPIO)
- CP2112 (i2c + GPIO)
Options without kernel support:
- FT232H
- Arduino nano and clones
- Raspberry Pi Pico running some interesting firmware
- ESP32 running something like ESPHome (completely separate from host)
I've chosen the Pico for now and forked the u2if project for firmware and host support[1]. I also put together a generic ESPHome-compatible protocol server in python to tie my widgets to Home Assistant[2].
You can roll your own "RGB temperature sensing modem" and get/set values with `bash` and `expect` over ttyUSB, no one PWM controls RGB LEDs on a gaming keyboard straight from a task tray app. Trying to wrestle GPIO problems that way is going to be unnecessarily hard.
Currently it's running in "one light string per PIO" mode but there's an inaccessible mode where one PIO can do up to 8 strings simultaneously. The pins have to be physically adjacent, though, so it's a bit more difficult to set up in a generalized way.
Clarification please. I thought inaccessible meant cannot do :)