From efb5975fcf66e2503be5558bf56f4d0d34d69d18 Mon Sep 17 00:00:00 2001 From: Adam Honse Date: Thu, 29 Oct 2020 00:28:18 -0500 Subject: [PATCH] Add PCI ID filtering to Gigabyte RGB Fusion GPU detection --- .../RGBFusionGPUControllerDetect.cpp | 37 ++++++++++++++++--- pci_ids/pci_ids.h | 6 +++ 2 files changed, 38 insertions(+), 5 deletions(-) diff --git a/Controllers/RGBFusionGPUController/RGBFusionGPUControllerDetect.cpp b/Controllers/RGBFusionGPUController/RGBFusionGPUControllerDetect.cpp index d4102366..b5b3a62a 100644 --- a/Controllers/RGBFusionGPUController/RGBFusionGPUControllerDetect.cpp +++ b/Controllers/RGBFusionGPUController/RGBFusionGPUControllerDetect.cpp @@ -3,10 +3,27 @@ #include "RGBController.h" #include "RGBController_RGBFusionGPU.h" #include "i2c_smbus.h" +#include "pci_ids.h" #include #include #include +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_GTX1080TI_DEV, GIGABYTE_SUB_VEN, GIGABYTE_GTX1080TI_XTREME_SUB_DEV, "Gigabyte GTX1080Ti Xtreme Edition" }, +}; + /******************************************************************************************\ * * * TestForRGBFusionGPUController * @@ -72,12 +89,22 @@ void DetectRGBFusionGPUControllers(std::vector& busses, st for (unsigned int bus = 0; bus < busses.size(); bus++) { - // Check for RGB Fusion controller at 0x47 - if (TestForRGBFusionGPUController(busses[bus], 0x47)) + for(unsigned int dev_idx = 0; dev_idx < GPU_NUM_DEVICES; dev_idx++) { - new_rgb_fusion = new RGBFusionGPUController(busses[bus], 0x47); - new_controller = new RGBController_RGBFusionGPU(new_rgb_fusion); - 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) + { + // Check for RGB Fusion controller at 0x47 + if (TestForRGBFusionGPUController(busses[bus], 0x47)) + { + new_rgb_fusion = new RGBFusionGPUController(busses[bus], 0x47); + new_controller = new RGBController_RGBFusionGPU(new_rgb_fusion); + new_controller->name = device_list[dev_idx].name; + rgb_controllers.push_back(new_controller); + } + } } } diff --git a/pci_ids/pci_ids.h b/pci_ids/pci_ids.h index 38a5fb4b..67c183ac 100644 --- a/pci_ids/pci_ids.h +++ b/pci_ids/pci_ids.h @@ -25,6 +25,7 @@ | nVidia Device IDs | \*-----------------------------------------------------*/ #define NVIDIA_GTX1070_DEV 0x1B81 +#define NVIDIA_GTX1080TI_DEV 0x1B06 #define NVIDIA_GTX1660_DEV 0x2184 #define NVIDIA_RTX2060_TU104_DEV 0x1E89 #define NVIDIA_RTX2060_TU106_DEV 0x1F08 @@ -54,6 +55,11 @@ #define EVGA_RTX2070_XC_OC_SUB_DEV 0x2173 #define EVGA_RTX2080_XC_GAMING_SUB_DEV 0x2182 +/*-----------------------------------------------------*\ +| Gigabyte (Aorus) Sub-Device IDs | +\*-----------------------------------------------------*/ +#define GIGABYTE_GTX1080TI_XTREME_SUB_DEV 0x3762 + /*-----------------------------------------------------*\ | MSI Sub-Device IDs | \*-----------------------------------------------------*/