};
 #endif /* CONFIG_RT2X00_LIB_DEBUGFS */
 
+#ifdef CONFIG_RT2X00_LIB_RFKILL
+static int rt2500usb_rfkill_poll(struct rt2x00_dev *rt2x00dev)
+{
+       u16 reg;
+
+       rt2500usb_register_read(rt2x00dev, MAC_CSR19, ®);
+       return rt2x00_get_field32(reg, MAC_CSR19_BIT7);
+}
+#else
+#define rt2500usb_rfkill_poll  NULL
+#endif /* CONFIG_RT2X00_LIB_RFKILL */
+
 #ifdef CONFIG_RT2X00_LIB_LEDS
 static void rt2500usb_brightness_set(struct led_classdev *led_cdev,
                                     enum led_brightness brightness)
                                   LED_TYPE_ACTIVITY);
 #endif /* CONFIG_RT2X00_LIB_LEDS */
 
+       /*
+        * Detect if this device has an hardware controlled radio.
+        */
+#ifdef CONFIG_RT2X00_LIB_RFKILL
+       if (rt2x00_get_field16(eeprom, EEPROM_ANTENNA_HARDWARE_RADIO))
+               __set_bit(CONFIG_SUPPORT_HW_BUTTON, &rt2x00dev->flags);
+#endif /* CONFIG_RT2X00_LIB_RFKILL */
+
        /*
         * Check if the BBP tuning should be disabled.
         */
        .uninitialize           = rt2x00usb_uninitialize,
        .clear_entry            = rt2x00usb_clear_entry,
        .set_device_state       = rt2500usb_set_device_state,
+       .rfkill_poll            = rt2500usb_rfkill_poll,
        .link_stats             = rt2500usb_link_stats,
        .reset_tuner            = rt2500usb_reset_tuner,
        .link_tuner             = rt2500usb_link_tuner,
 
  * MAC_CSR19: GPIO control register.
  */
 #define MAC_CSR19                      0x0426
+#define MAC_CSR19_BIT0                 FIELD32(0x0001)
+#define MAC_CSR19_BIT1                 FIELD32(0x0002)
+#define MAC_CSR19_BIT2                 FIELD32(0x0004)
+#define MAC_CSR19_BIT3                 FIELD32(0x0008)
+#define MAC_CSR19_BIT4                 FIELD32(0x0010)
+#define MAC_CSR19_BIT5                 FIELD32(0x0020)
+#define MAC_CSR19_BIT6                 FIELD32(0x0040)
+#define MAC_CSR19_BIT7                 FIELD32(0x0080)
 
 /*
  * MAC_CSR20: LED control register.
 
 };
 #endif /* CONFIG_RT2X00_LIB_DEBUGFS */
 
+#ifdef CONFIG_RT2X00_LIB_RFKILL
+static int rt73usb_rfkill_poll(struct rt2x00_dev *rt2x00dev)
+{
+       u32 reg;
+
+       rt2x00usb_register_read(rt2x00dev, MAC_CSR13, ®);
+       return rt2x00_get_field32(reg, MAC_CSR13_BIT7);
+}
+#else
+#define rt73usb_rfkill_poll    NULL
+#endif /* CONFIG_RT2X00_LIB_RFKILL */
+
 #ifdef CONFIG_RT2X00_LIB_LEDS
 static void rt73usb_brightness_set(struct led_classdev *led_cdev,
                                   enum led_brightness brightness)
        if (rt2x00_get_field16(eeprom, EEPROM_ANTENNA_FRAME_TYPE))
                __set_bit(CONFIG_FRAME_TYPE, &rt2x00dev->flags);
 
+       /*
+        * Detect if this device has an hardware controlled radio.
+        */
+#ifdef CONFIG_RT2X00_LIB_RFKILL
+       if (rt2x00_get_field16(eeprom, EEPROM_ANTENNA_HARDWARE_RADIO))
+               __set_bit(CONFIG_SUPPORT_HW_BUTTON, &rt2x00dev->flags);
+#endif /* CONFIG_RT2X00_LIB_RFKILL */
+
        /*
         * Read frequency offset.
         */
        .uninitialize           = rt2x00usb_uninitialize,
        .clear_entry            = rt2x00usb_clear_entry,
        .set_device_state       = rt73usb_set_device_state,
+       .rfkill_poll            = rt73usb_rfkill_poll,
        .link_stats             = rt73usb_link_stats,
        .reset_tuner            = rt73usb_reset_tuner,
        .link_tuner             = rt73usb_link_tuner,
 
  * MAC_CSR13: GPIO.
  */
 #define MAC_CSR13                      0x3034
+#define MAC_CSR13_BIT0                 FIELD32(0x00000001)
+#define MAC_CSR13_BIT1                 FIELD32(0x00000002)
+#define MAC_CSR13_BIT2                 FIELD32(0x00000004)
+#define MAC_CSR13_BIT3                 FIELD32(0x00000008)
+#define MAC_CSR13_BIT4                 FIELD32(0x00000010)
+#define MAC_CSR13_BIT5                 FIELD32(0x00000020)
+#define MAC_CSR13_BIT6                 FIELD32(0x00000040)
+#define MAC_CSR13_BIT7                 FIELD32(0x00000080)
+#define MAC_CSR13_BIT8                 FIELD32(0x00000100)
+#define MAC_CSR13_BIT9                 FIELD32(0x00000200)
+#define MAC_CSR13_BIT10                        FIELD32(0x00000400)
+#define MAC_CSR13_BIT11                        FIELD32(0x00000800)
+#define MAC_CSR13_BIT12                        FIELD32(0x00001000)
 
 /*
  * MAC_CSR14: LED control register.