};
 
 struct mt76u_buf {
-       struct mt76_dev *dev;
        struct urb *urb;
        size_t len;
        void *buf;
 mt76u_bulk_msg(struct mt76_dev *dev, void *data, int len, int *actual_len,
               int timeout)
 {
-       struct usb_interface *intf = to_usb_interface(dev->dev);
-       struct usb_device *udev = interface_to_usbdev(intf);
+       struct usb_device *udev = to_usb_device(dev->dev);
        struct mt76_usb *usb = &dev->usb;
        unsigned int pipe;
 
 
        struct mt76_dev *mdev;
        int err;
 
-       mdev = mt76_alloc_device(&intf->dev, sizeof(*dev), &mt76x2u_ops,
+       mdev = mt76_alloc_device(&udev->dev, sizeof(*dev), &mt76x2u_ops,
                                 &drv_ops);
        if (!mdev)
                return -ENOMEM;
        udev = usb_get_dev(udev);
        usb_reset_device(udev);
 
+       usb_set_intfdata(intf, dev);
+
        mt76x02u_init_mcu(mdev);
        err = mt76u_init(mdev, intf);
        if (err < 0)
 
                                  u8 req_type, u16 val, u16 offset,
                                  void *buf, size_t len)
 {
-       struct usb_interface *intf = to_usb_interface(dev->dev);
-       struct usb_device *udev = interface_to_usbdev(intf);
+       struct usb_device *udev = to_usb_device(dev->dev);
        unsigned int pipe;
        int i, ret;
 
 
 static bool mt76u_check_sg(struct mt76_dev *dev)
 {
-       struct usb_interface *intf = to_usb_interface(dev->dev);
-       struct usb_device *udev = interface_to_usbdev(intf);
+       struct usb_device *udev = to_usb_device(dev->dev);
 
        return (!disable_usb_sg && udev->bus->sg_tablesize > 0 &&
                (udev->bus->no_sg_constraint ||
        struct mt76_queue *q = &dev->q_rx[MT_RXQ_MAIN];
 
        buf->len = SKB_WITH_OVERHEAD(q->buf_size);
-       buf->dev = dev;
 
        buf->urb = usb_alloc_urb(0, GFP_KERNEL);
        if (!buf->urb)
                    struct mt76u_buf *buf, usb_complete_t complete_fn,
                    void *context)
 {
-       struct usb_interface *intf = to_usb_interface(dev->dev);
-       struct usb_device *udev = interface_to_usbdev(intf);
+       struct usb_device *udev = to_usb_device(dev->dev);
        u8 *data = buf->urb->num_sgs ? NULL : buf->buf;
        unsigned int pipe;
 
 
 static void mt76u_complete_tx(struct urb *urb)
 {
+       struct mt76_dev *dev = dev_get_drvdata(&urb->dev->dev);
        struct mt76u_buf *buf = urb->context;
-       struct mt76_dev *dev = buf->dev;
 
        if (mt76u_urb_error(urb))
                dev_err(dev->dev, "tx urb failed: %d\n", urb->status);
                q->ndesc = MT_NUM_TX_ENTRIES;
                for (j = 0; j < q->ndesc; j++) {
                        buf = &q->entry[j].ubuf;
-                       buf->dev = dev;
 
                        buf->urb = usb_alloc_urb(0, GFP_KERNEL);
                        if (!buf->urb)