compat: Make use of the vga_switcheroo_register_client
authorOzan Çağlayan <ozancag@gmail.com>
Mon, 2 Jul 2012 14:22:10 +0000 (17:22 +0300)
committerLuis R. Rodriguez <mcgrof@frijolero.org>
Tue, 3 Jul 2012 00:08:35 +0000 (17:08 -0700)
If kernel version is older than 3.5, call vga_switcheroo_register_client
with the old parameters using a compat_ wrapper.

.reprobe was added in 2.6.38 so before that do not pass it to the
underlying vga_switcheroo_register_client() function.

Trying kernel  3.4.0-030400-generic [OK]
Trying kernel  3.3.7-030307-generic [OK]
Trying kernel  3.2.2-030202-generic [OK]
Trying kernel  3.1.10-030110-generic [OK]
Trying kernel  3.0.18-030018-generic [OK]
Trying kernel  2.6.39-02063904-generic [OK]
Trying kernel  2.6.38-02063808-generic [OK]
Trying kernel  2.6.37-02063706-generic [OK]
Trying kernel  2.6.36-02063604-generic [OK]
Trying kernel  2.6.35-02063512-generic [OK]
Trying kernel  2.6.34-02063410-generic [OK]
Trying kernel  2.6.33-02063305-generic [OK]
Trying kernel  2.6.32-02063255-generic [OK]
Trying kernel  2.6.31-02063113-generic [OK]
Trying kernel  2.6.30-02063010-generic [OK]
Trying kernel  2.6.29-02062906-generic [OK]
Trying kernel  2.6.28-02062810-generic [OK]
Trying kernel  2.6.27-020627-generic [OK]
Trying kernel  2.6.26-020626-generic [OK]
Trying kernel  2.6.25-020625-generic [OK]
Trying kernel  2.6.24-020624-generic [OK]

Signed-off-by: Ozan Çağlayan <ozancag@gmail.com>
Signed-off-by: Luis R. Rodriguez <mcgrof@frijolero.org>
include/linux/compat-3.5.h

index 74c8176dd80ff345c1feb6e9fb10e4f511d1cf1f..7855ac9867509e6559304981b1e0a4450a7edf93 100644 (file)
@@ -93,6 +93,24 @@ struct vga_switcheroo_client_ops {
     void (*reprobe)(struct pci_dev *dev);
     bool (*can_switch)(struct pci_dev *dev);
 };
+
+/* Wrap around the old code and redefine vga_switcheroo_register_client()
+ * for older kernels < 3.5.0.
+ */
+static inline int compat_vga_switcheroo_register_client(struct pci_dev *dev,
+               const struct vga_switcheroo_client_ops *ops) {
+
+       return vga_switcheroo_register_client(dev,
+                                             ops->set_gpu_state,
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,38))
+                                             ops->reprobe,
+#endif
+                                             ops->can_switch);
+}
+
+#define vga_switcheroo_register_client(_dev, _ops) \
+       compat_vga_switcheroo_register_client(_dev, _ops)
+
 #endif
 
 /*