From 7332c6a7ea7dc573d3422ac2dc87e6092765a4fd Mon Sep 17 00:00:00 2001 From: Diego Ortiz Date: Fri, 21 Aug 2026 17:50:00 +0000 Subject: [PATCH] Add Gigabyte Z390 DESIGNARE-CF Ambient LED support --- .../GigabyteSuperIORGBController.cpp | 17 +++++++++++++---- .../GigabyteSuperIORGBController.h | 10 ++++++++++ .../GigabyteSuperIORGBControllerDetect.cpp | 6 ++++-- super_io/super_io.h | 1 + 4 files changed, 28 insertions(+), 6 deletions(-) diff --git a/Controllers/GigabyteSuperIORGBController/GigabyteSuperIORGBController.cpp b/Controllers/GigabyteSuperIORGBController/GigabyteSuperIORGBController.cpp index ecdbd5705..0683f65fa 100644 --- a/Controllers/GigabyteSuperIORGBController/GigabyteSuperIORGBController.cpp +++ b/Controllers/GigabyteSuperIORGBController/GigabyteSuperIORGBController.cpp @@ -12,6 +12,18 @@ #include "GigabyteSuperIORGBController.h" #include "super_io.h" +void GigabyteSuperIOEnter(int sioaddr) +{ + /*-----------------------------------------------------*\ + | ITE8620 Ambient LED Extended Function Mode sequence | + \*-----------------------------------------------------*/ + superio_enter(sioaddr); + superio_inb(sioaddr, GIGABYTE_SUPERIO_EXTENDED_FUNCTION_ENTRY_1); + superio_inb(sioaddr, GIGABYTE_SUPERIO_EXTENDED_FUNCTION_ENTRY_2); + superio_inb(sioaddr, GIGABYTE_SUPERIO_EXTENDED_FUNCTION_ENTRY_3); + superio_inb(sioaddr, GIGABYTE_SUPERIO_EXTENDED_FUNCTION_ENTRY_4); +} + GigabyteSuperIORGBController::GigabyteSuperIORGBController(int sioaddr, std::string dev_name) { gig_sioaddr = sioaddr; @@ -40,10 +52,7 @@ void GigabyteSuperIORGBController::ChipEntry() /*--------------------------------*\ | Chip Entry Command | \*_-------------------------------*/ - superio_enter(gig_sioaddr); - superio_outb(gig_sioaddr, GIGABYTE_SUPERIO_CHIPENTRY_REGISTER_1, GIGABYTE_SUPERIO_CHIPENTRY_VALUE_1); - superio_outb(gig_sioaddr, GIGABYTE_SUPERIO_CHIPENTRY_REGISTER_2, GIGABYTE_SUPERIO_CHIPENTRY_VALUE_2); - superio_outb(gig_sioaddr, GIGABYTE_SUPERIO_CHIPENTRY_REGISTER_2, GIGABYTE_SUPERIO_CHIPENTRY_VALUE_2); + GigabyteSuperIOEnter(gig_sioaddr); /*--------------------------------*\ | Chip Select Command | diff --git a/Controllers/GigabyteSuperIORGBController/GigabyteSuperIORGBController.h b/Controllers/GigabyteSuperIORGBController/GigabyteSuperIORGBController.h index 8b8fb250f..4c2c93970 100644 --- a/Controllers/GigabyteSuperIORGBController/GigabyteSuperIORGBController.h +++ b/Controllers/GigabyteSuperIORGBController/GigabyteSuperIORGBController.h @@ -15,6 +15,14 @@ enum { + /*-----------------------------------*\ + | Extended Function Mode Entry Values | + \*_----------------------------------*/ + GIGABYTE_SUPERIO_EXTENDED_FUNCTION_ENTRY_1 = 0x87, + GIGABYTE_SUPERIO_EXTENDED_FUNCTION_ENTRY_2 = 0x01, + GIGABYTE_SUPERIO_EXTENDED_FUNCTION_ENTRY_3 = 0x55, + GIGABYTE_SUPERIO_EXTENDED_FUNCTION_ENTRY_4 = 0x55, + /*--------------------------------*\ | Chip Entry Registers and Values | \*_-------------------------------*/ @@ -129,6 +137,8 @@ enum }; +void GigabyteSuperIOEnter(int sioaddr); + class GigabyteSuperIORGBController { public: diff --git a/Controllers/GigabyteSuperIORGBController/GigabyteSuperIORGBControllerDetect.cpp b/Controllers/GigabyteSuperIORGBController/GigabyteSuperIORGBControllerDetect.cpp index ac8f89a38..8ffbb35ca 100644 --- a/Controllers/GigabyteSuperIORGBController/GigabyteSuperIORGBControllerDetect.cpp +++ b/Controllers/GigabyteSuperIORGBController/GigabyteSuperIORGBControllerDetect.cpp @@ -24,7 +24,8 @@ typedef struct static gig_device compatible_devices[] = { - {"X570 UD"} + {"X570 UD"}, + {"Z390 DESIGNARE-CF"} }; DetectedControllers DetectGigabyteSuperIORGBControllers() @@ -41,12 +42,13 @@ DetectedControllers DetectGigabyteSuperIORGBControllers() { int sioaddr = sio_addrs[sioaddr_idx]; - superio_enter(sioaddr); + GigabyteSuperIOEnter(sioaddr); int val = (superio_inb(sioaddr, SIO_REG_DEVID) << 8) | superio_inb(sioaddr, SIO_REG_DEVID + 1); switch(val & SIO_ID_MASK) { + case SIO_ITE8620_ID: case SIO_ITE8688_ID: for(unsigned int i = 0; i < NUM_COMPATIBLE_DEVICES; i++) { diff --git a/super_io/super_io.h b/super_io/super_io.h index 13be96296..661954c17 100644 --- a/super_io/super_io.h +++ b/super_io/super_io.h @@ -24,6 +24,7 @@ #define SIO_NCT6796_ID 0xd420 /* Device ID for NCT6796D (D421) */ #define SIO_NCT6797_ID 0xd450 /* Device ID for NCT6797D (D450) */ #define SIO_NCT6798_ID 0xd428 /* Device ID for NCT6798D (D428) */ +#define SIO_ITE8620_ID 0x8620 /* Device ID for ITE8620 (8620) */ #define SIO_ITE8688_ID 0x8688 /* Device ID for ITE8688 (8688) */ #define SIO_REG_LOGDEV 0x07 /* Logical Device Register */ #define SIO_REG_DEVID 0x20 /* Device ID Register */