rt2x00pci_register_read(rt2x00dev, GPIOCSR, ®);
        return rt2x00_get_field32(reg, GPIOCSR_BIT0);
 }
+#else
+#define rt2400pci_rfkill_poll  NULL
 #endif /* CONFIG_RT2400PCI_RFKILL */
 
 /*
        /*
         * Detect if this device has an hardware controlled radio.
         */
+#ifdef CONFIG_RT2400PCI_RFKILL
        if (rt2x00_get_field16(eeprom, EEPROM_ANTENNA_HARDWARE_RADIO))
                __set_bit(CONFIG_SUPPORT_HW_BUTTON, &rt2x00dev->flags);
+#endif /* CONFIG_RT2400PCI_RFKILL */
 
        /*
         * Check if the BBP tuning should be enabled.
        .initialize             = rt2x00pci_initialize,
        .uninitialize           = rt2x00pci_uninitialize,
        .set_device_state       = rt2400pci_set_device_state,
-#ifdef CONFIG_RT2400PCI_RFKILL
        .rfkill_poll            = rt2400pci_rfkill_poll,
-#endif /* CONFIG_RT2400PCI_RFKILL */
        .link_stats             = rt2400pci_link_stats,
        .reset_tuner            = rt2400pci_reset_tuner,
        .link_tuner             = rt2400pci_link_tuner,
 
        rt2x00pci_register_read(rt2x00dev, GPIOCSR, ®);
        return rt2x00_get_field32(reg, GPIOCSR_BIT0);
 }
+#else
+#define rt2500pci_rfkill_poll  NULL
 #endif /* CONFIG_RT2500PCI_RFKILL */
 
 /*
        /*
         * Detect if this device has an hardware controlled radio.
         */
+#ifdef CONFIG_RT2500PCI_RFKILL
        if (rt2x00_get_field16(eeprom, EEPROM_ANTENNA_HARDWARE_RADIO))
                __set_bit(CONFIG_SUPPORT_HW_BUTTON, &rt2x00dev->flags);
+#endif /* CONFIG_RT2500PCI_RFKILL */
 
        /*
         * Check if the BBP tuning should be enabled.
        .initialize             = rt2x00pci_initialize,
        .uninitialize           = rt2x00pci_uninitialize,
        .set_device_state       = rt2500pci_set_device_state,
-#ifdef CONFIG_RT2500PCI_RFKILL
        .rfkill_poll            = rt2500pci_rfkill_poll,
-#endif /* CONFIG_RT2500PCI_RFKILL */
        .link_stats             = rt2500pci_link_stats,
        .reset_tuner            = rt2500pci_reset_tuner,
        .link_tuner             = rt2500pci_link_tuner,
 
        DEVICE_STARTED,
        DEVICE_STARTED_SUSPEND,
        DEVICE_ENABLED_RADIO,
-       DEVICE_ENABLED_RADIO_HW,
+       DEVICE_DISABLED_RADIO_HW,
 
        /*
         * Driver features
 
         * And check if the hardware button has been disabled.
         */
        if (test_bit(DEVICE_ENABLED_RADIO, &rt2x00dev->flags) ||
-           (test_bit(CONFIG_SUPPORT_HW_BUTTON, &rt2x00dev->flags) &&
-            !test_bit(DEVICE_ENABLED_RADIO_HW, &rt2x00dev->flags)))
+           test_bit(DEVICE_DISABLED_RADIO_HW, &rt2x00dev->flags))
                return 0;
 
        /*
 
 
 /*
  * Interval defines
+ * Both the link tuner as the rfkill will be called once per second.
  */
 #define LINK_TUNE_INTERVAL     ( round_jiffies(HZ) )
-#define RFKILL_POLL_INTERVAL   ( HZ / 4 )
+#define RFKILL_POLL_INTERVAL   ( 1000 )
 
 /*
  * Radio control handlers.
 #else
 static inline int rt2x00rfkill_register(struct rt2x00_dev *rt2x00dev)
 {
-       /*
-        * Force enable this flag, this will assure that
-        * devices with a hardware button but without rfkill support
-        * can still use their hardware.
-        */
-       __set_bit(DEVICE_ENABLED_RADIO_HW, &rt2x00dev->flags);
-
        return 0;
 }
 
 
 
        if (state == RFKILL_STATE_ON) {
                INFO(rt2x00dev, "Hardware button pressed, enabling radio.\n");
-               __set_bit(DEVICE_ENABLED_RADIO_HW, &rt2x00dev->flags);
+               __clear_bit(DEVICE_DISABLED_RADIO_HW, &rt2x00dev->flags);
                retval = rt2x00lib_enable_radio(rt2x00dev);
        } else if (state == RFKILL_STATE_OFF) {
                INFO(rt2x00dev, "Hardware button pressed, disabling radio.\n");
-               __clear_bit(DEVICE_ENABLED_RADIO_HW, &rt2x00dev->flags);
+               __set_bit(DEVICE_DISABLED_RADIO_HW, &rt2x00dev->flags);
                rt2x00lib_disable_radio(rt2x00dev);
        }
 
 
        rt2x00pci_register_read(rt2x00dev, MAC_CSR13, ®);
        return rt2x00_get_field32(reg, MAC_CSR13_BIT5);;
 }
+#else
+#define rt61pci_rfkill_poll    NULL
 #endif /* CONFIG_RT61PCI_RFKILL */
 
 /*
        /*
         * Detect if this device has an hardware controlled radio.
         */
+#ifdef CONFIG_RT61PCI_RFKILL
        if (rt2x00_get_field16(eeprom, EEPROM_ANTENNA_HARDWARE_RADIO))
                __set_bit(CONFIG_SUPPORT_HW_BUTTON, &rt2x00dev->flags);
+#endif /* CONFIG_RT61PCI_RFKILL */
 
        /*
         * Read frequency offset and RF programming sequence.
        .initialize             = rt2x00pci_initialize,
        .uninitialize           = rt2x00pci_uninitialize,
        .set_device_state       = rt61pci_set_device_state,
-#ifdef CONFIG_RT61PCI_RFKILL
        .rfkill_poll            = rt61pci_rfkill_poll,
-#endif /* CONFIG_RT61PCI_RFKILL */
        .link_stats             = rt61pci_link_stats,
        .reset_tuner            = rt61pci_reset_tuner,
        .link_tuner             = rt61pci_link_tuner,