From da810522474ed87359e1cdaba5df7d94a010c953 Mon Sep 17 00:00:00 2001 From: crashniels Date: Thu, 17 Sep 2020 15:56:23 +0200 Subject: [PATCH] Use PCI ID based detection for Galax GPUs --- .../GalaxGPUControllerDetect.cpp | 33 ++++++++++++++++--- .../RGBController_GalaxGPU.cpp | 6 ++-- pci_ids/pci_ids.h | 6 ++++ 3 files changed, 38 insertions(+), 7 deletions(-) diff --git a/Controllers/GalaxGPUController/GalaxGPUControllerDetect.cpp b/Controllers/GalaxGPUController/GalaxGPUControllerDetect.cpp index a82bdb5e..df5681bf 100644 --- a/Controllers/GalaxGPUController/GalaxGPUControllerDetect.cpp +++ b/Controllers/GalaxGPUController/GalaxGPUControllerDetect.cpp @@ -11,13 +11,28 @@ #include "RGBController.h" #include "RGBController_GalaxGPU.h" #include "i2c_smbus.h" +#include "pci_ids.h" #include #include #include using namespace std::chrono_literals; +typedef struct +{ + int pci_vendor; + int pci_device; + int pci_subsystem_vendor; + int pci_subsystem_device; + const char * name; +} gpu_pci_device; +#define GPU_NUM_DEVICES (sizeof(device_list) / sizeof(device_list[ 0 ])) + +static const gpu_pci_device device_list[] = +{ + { NVIDIA_VEN, NVIDIA_RTX2070_DEV, GALAX_SUB_VEN, KFA2_RTX_2070_EX, "KFA2 RTX 2070 EX" }, +}; /******************************************************************************************\ * * * TestForGalaxGPUController * @@ -58,11 +73,21 @@ void DetectGalaxGPUControllers(std::vector &busses, std::v for (unsigned int bus = 0; bus < busses.size(); bus++) { // Check for GALAX controller at 0x23 - if (TestForGalaxGPUController(busses[bus], 0x23)) + for(unsigned int dev_idx = 0; dev_idx < GPU_NUM_DEVICES; dev_idx++) { - new_GalaxGPU = new GalaxGPUController(busses[bus], 0x23); - new_controller = new RGBController_GalaxGPU(new_GalaxGPU); - rgb_controllers.push_back(new_controller); + if(busses[bus]->pci_vendor == device_list[dev_idx].pci_vendor && + busses[bus]->pci_device == device_list[dev_idx].pci_device && + busses[bus]->pci_subsystem_vendor == device_list[dev_idx].pci_subsystem_vendor && + busses[bus]->pci_subsystem_device == device_list[dev_idx].pci_subsystem_device) + { + if (TestForGalaxGPUController(busses[bus], 0x23)) + { + new_GalaxGPU = new GalaxGPUController(busses[bus], 0x23); + new_controller = new RGBController_GalaxGPU(new_GalaxGPU); + new_controller->name = device_list[dev_idx].name; + rgb_controllers.push_back(new_controller); + } + } } } diff --git a/Controllers/GalaxGPUController/RGBController_GalaxGPU.cpp b/Controllers/GalaxGPUController/RGBController_GalaxGPU.cpp index 482c2df3..31d415f7 100644 --- a/Controllers/GalaxGPUController/RGBController_GalaxGPU.cpp +++ b/Controllers/GalaxGPUController/RGBController_GalaxGPU.cpp @@ -138,7 +138,7 @@ void RGBController_GalaxGPU::DeviceUpdateLEDs() else { galax_gpu->SetLEDColorsEffect(red, grn, blu); - } + } } } @@ -158,8 +158,8 @@ void RGBController_GalaxGPU::SetCustomMode() } void RGBController_GalaxGPU::DeviceUpdateMode() -{ +{ int new_mode = modes[active_mode].value; - galax_gpu->SetMode(new_mode); + galax_gpu->SetMode(new_mode); } diff --git a/pci_ids/pci_ids.h b/pci_ids/pci_ids.h index bf0d4ec7..420e3bab 100644 --- a/pci_ids/pci_ids.h +++ b/pci_ids/pci_ids.h @@ -44,6 +44,7 @@ #define GIGABYTE_SUB_VEN 0x1458 #define MSI_SUB_VEN 0x1462 #define SAPPHIRE_SUB_VEN 0x1DA2 +#define GALAX_SUB_VEN 0x10DE /*-----------------------------------------------------*\ | EVGA Sub-Device IDs | @@ -77,6 +78,11 @@ \*-----------------------------------------------------*/ #define SAPPHIRE_RX580_NITRO_PLUS_SUB_DEV 0xE366 +/*-----------------------------------------------------*\ +| GALAX / KFA2 Sub-Device IDs | +\*-----------------------------------------------------*/ +#define KFA2_RTX_2070_EX 0x12FE + /*---------------------------------------------------------*\ | PCI ID Macros | \*---------------------------------------------------------*/