Add ASRock GPU RGB Controller Support

Add ASRock GPU RGB Controller Support Summary This merge request adds support for ASRock GPU RGB controllers, tested and working on the ASRock RX 9070 XT Steel Legend 16GB. Hardware Details GPU: ASRock RX 9070 XT Steel Legend 16GB PCI ID: 1002:7550 (AMD Navi 48) SubVendor/SubDevice: 1849:5403 (ASRock) I2C Address: 0x36 Protocol: Pure I2C (not SMBus) What This Adds New Files Controllers/ASRockSMBusController/ASRockGPUSMBusController/ASRockGPUSMBusController.h Controllers/ASRockSMBusController/ASRockGPUSMBusController/ASRockGPUSMBusController.cpp Controllers/ASRockSMBusController/ASRockGPUSMBusController/RGBController_ASRockGPUSMBus.h Controllers/ASRockSMBusController/ASRockGPUSMBusController/RGBController_ASRockGPUSMBus.cpp Modified Files Controllers/ASRockSMBusController/ASRockSMBusControllerDetect.cpp - Added GPU detector Features Detects ASRock GPUs on AMD GPU I2C buses (SubVendor 0x1849) Supports 3 RGB zones: ARGB Header (Channel 3) Top Side (Channel 6) Fan (Channel 7) Direct color control mode Per-zone RGB control Technical Details Protocol Reverse-Engineered from SignalRGB The implementation is based on the SignalRGB "ASRock GPU.js" plugin: Detection: // SignalRGB checks AMD GPU buses for ASRock SubVendor if (bus.IsAMDGpuBus() && bus.SubVendor() === 0x1849) { bus.WriteQuick(0x36); // Test for device at 0x36 } Color Commands: Command 0x10 with subcmd = channel_idx Data: [mode, R, G, B, brightness, speed, direction, unknown] Channel Detection: Command 0x14, subcmd 0x01 - Get enabled channels (response bytes 4-5 = bitmap) Command 0x14, subcmd 0x02 - Get LED counts per channel Key Implementation Detail: I2C vs SMBus Critical: This device uses pure I2C protocol, not SMBus! The implementation uses: bus->i2c_write_block() instead of bus->i2c_smbus_write_block_data() bus->i2c_read_block() instead of bus->i2c_smbus_read_block_data() Using SMBus functions will fail - the device won't respond. Testing Tested on: OS: Bazzite (Fedora 42-based) Kernel: Linux 6.11+ GPU: ASRock RX 9070 XT Steel Legend 16GB Result: All 3 zones detected and controllable Test Output $ sudo ./openrgb --list-devices | grep -A5 "ASRock GPU" 0: ASRock GPU Type: GPU Description: ASRock GPU RGB Controller Location: I2C: /dev/i2c-7, address 0x36 Modes: [Direct] Zones: 'ARGB Header' 'Top Side' Fan LEDs: 'ARGB Header' 'Top Side' Fan Compatibility Should work with any ASRock GPU that has RGB support and uses the same protocol. Known compatible models (from SignalRGB): ASRock RX 9070 XT Steel Legend 16GB (tested and confirmed) Likely compatible with other ASRock Steel Legend and Taichi GPU models, but untested. Future Enhancements Possible improvements for future PRs: Add specific GPU model names via PCI device ID lookup Add effect modes (breathing, spectrum cycle, etc.) beyond direct mode Test and add support for additional ASRock GPU models References SignalRGB ASRock GPU plugin: https://github.com/SignalRGBTeam/Plugins (ASRock/ASRock GPU.js) Tested hardware: ASRock RX 9070 XT product page ***Ready for review and testing! 🎉0001-Add-ASRock-GPU-RGB-controller-support.patch20251104_14354820251104_143602

20251104_143616