summarylogtreecommitdiffstats
path: root/apple-gmux.patch
blob: ce1f8671763255c5dda42231f43ea3bb28b2c086 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
--- a/drivers/platform/x86/apple-gmux.c
+++ a/drivers/platform/x86/apple-gmux.c
@@ -419,6 +419,7 @@ static int gmux_resume(struct device *dev)

 static struct pci_dev *gmux_get_io_pdev(void)
 {
+	struct pci_dev *igp = NULL, *dgp = NULL;
 	struct pci_dev *pdev = NULL;

 	while ((pdev = pci_get_class(PCI_CLASS_DISPLAY_VGA << 8, pdev))) {
@@ -428,10 +429,18 @@ static struct pci_dev *gmux_get_io_pdev(void)
 		if (!(cmd & PCI_COMMAND_IO))
 			continue;

-		return pdev;
+		if (pdev->bus && pdev->bus->number > 0 && !dgp)
+			dgp = pci_dev_get(pdev);
+		else if (pdev->bus && pdev->bus->number == 0 && !igp)
+			igp = pci_dev_get(pdev);
 	}

-	return NULL;
+	if (dgp && !igp)
+		pr_warn("Found only discrete GPU %s, integrated GPU is hidden,"
+				" unable to protect backlight behind VGA IO",
+				pci_name(dgp));
+	pci_dev_put(dgp);
+	return igp;
 }

 static int gmux_probe(struct pnp_dev *pnp, const struct pnp_device_id *id)