};
/* Data structure for the WLAN parts (802.11 cores) of the b43 chip. */
+--- a/drivers/net/wireless/wl12xx/spi.c
++++ b/drivers/net/wireless/wl12xx/spi.c
+@@ -408,9 +408,20 @@ static int __devinit wl1271_probe(struct
+ goto out_free;
+ }
+
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,31)
++ ret = compat_request_threaded_irq(&wl->irq_compat, wl->irq,
++ wl1271_hardirq, wl1271_irq,
++ IRQF_TRIGGER_RISING,
++ DRIVER_NAME, wl);
++#else
+ ret = request_threaded_irq(wl->irq, wl1271_hardirq, wl1271_irq,
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,32)
++ IRQF_TRIGGER_RISING,
++#else
+ IRQF_TRIGGER_HIGH | IRQF_ONESHOT,
++#endif
+ DRIVER_NAME, wl);
++#endif
+ if (ret < 0) {
+ wl1271_error("request_irq() failed: %d", ret);
+ goto out_free;
+@@ -431,7 +442,11 @@ static int __devinit wl1271_probe(struct
+ return 0;
+
+ out_irq:
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,31)
++ compat_free_threaded_irq(&wl->irq_compat);
++#else
+ free_irq(wl->irq, wl);
++#endif
+
+ out_free:
+ wl1271_free_hw(wl);
+@@ -444,7 +459,12 @@ static int __devexit wl1271_remove(struc
+ struct wl1271 *wl = dev_get_drvdata(&spi->dev);
+
+ wl1271_unregister_hw(wl);
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,31)
++ compat_free_threaded_irq(&wl->irq_compat);
++ compat_destroy_threaded_irq(&wl->irq_compat);
++#else
+ free_irq(wl->irq, wl);
++#endif
+ wl1271_free_hw(wl);
+
+ return 0;
+--- a/drivers/net/wireless/wl12xx/wl12xx.h
++++ b/drivers/net/wireless/wl12xx/wl12xx.h
+@@ -544,6 +544,10 @@ struct wl1271 {
+
+ /* Quirks of specific hardware revisions */
+ unsigned int quirks;
++
++#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,31)
++ struct compat_threaded_irq irq_compat;
++#endif
+ };
+
+ struct wl1271_station {