static int rt2500usb_beacon_update(struct ieee80211_hw *hw, struct sk_buff *skb)
 {
        struct rt2x00_dev *rt2x00dev = hw->priv;
-       struct usb_device *usb_dev =
-               interface_to_usbdev(to_usb_interface(rt2x00dev->dev));
+       struct usb_device *usb_dev = to_usb_device_intf(rt2x00dev->dev);
        struct ieee80211_tx_info *tx_info = IEEE80211_SKB_CB(skb);
        struct rt2x00_intf *intf = vif_to_intf(tx_info->control.vif);
        struct queue_entry_priv_usb_bcn *bcn_priv;
 
                             void *buffer, const u16 buffer_length,
                             const int timeout)
 {
-       struct usb_device *usb_dev =
-               interface_to_usbdev(to_usb_interface(rt2x00dev->dev));
+       struct usb_device *usb_dev = to_usb_device_intf(rt2x00dev->dev);
        int status;
        unsigned int i;
        unsigned int pipe =
 int rt2x00usb_write_tx_data(struct queue_entry *entry)
 {
        struct rt2x00_dev *rt2x00dev = entry->queue->rt2x00dev;
-       struct usb_device *usb_dev =
-               interface_to_usbdev(to_usb_interface(rt2x00dev->dev));
+       struct usb_device *usb_dev = to_usb_device_intf(rt2x00dev->dev);
        struct queue_entry_priv_usb *entry_priv = entry->priv_data;
        struct skb_frame_desc *skbdesc;
        u32 length;
 void rt2x00usb_init_rxentry(struct rt2x00_dev *rt2x00dev,
                            struct queue_entry *entry)
 {
-       struct usb_device *usb_dev =
-               interface_to_usbdev(to_usb_interface(rt2x00dev->dev));
+       struct usb_device *usb_dev = to_usb_device_intf(rt2x00dev->dev);
        struct queue_entry_priv_usb *entry_priv = entry->priv_data;
 
        usb_fill_bulk_urb(entry_priv->urb, usb_dev,
 
 #ifndef RT2X00USB_H
 #define RT2X00USB_H
 
+#define to_usb_device_intf(d) \
+({ \
+       struct usb_interface *intf = to_usb_interface(d); \
+       interface_to_usbdev(intf); \
+})
+
 /*
  * This variable should be used with the
  * usb_driver structure initialization.