mt76u_bulk_msg(struct mt76_dev *dev, void *data, int len, int *actual_len,
               int timeout)
 {
-       struct usb_device *udev = to_usb_device(dev->dev);
+       struct usb_interface *uintf = to_usb_interface(dev->dev);
+       struct usb_device *udev = interface_to_usbdev(uintf);
        struct mt76_usb *usb = &dev->usb;
        unsigned int pipe;
 
 
                                  u8 req_type, u16 val, u16 offset,
                                  void *buf, size_t len)
 {
-       struct usb_device *udev = to_usb_device(dev->dev);
+       struct usb_interface *uintf = to_usb_interface(dev->dev);
+       struct usb_device *udev = interface_to_usbdev(uintf);
        unsigned int pipe;
        int i, ret;
 
 
 static bool mt76u_check_sg(struct mt76_dev *dev)
 {
-       struct usb_device *udev = to_usb_device(dev->dev);
+       struct usb_interface *uintf = to_usb_interface(dev->dev);
+       struct usb_device *udev = interface_to_usbdev(uintf);
 
        return (!disable_usb_sg && udev->bus->sg_tablesize > 0 &&
                (udev->bus->no_sg_constraint ||
                    struct urb *urb, usb_complete_t complete_fn,
                    void *context)
 {
-       struct usb_device *udev = to_usb_device(dev->dev);
+       struct usb_interface *uintf = to_usb_interface(dev->dev);
+       struct usb_device *udev = interface_to_usbdev(uintf);
        unsigned int pipe;
 
        if (dir == USB_DIR_IN)
                .rd_rp = mt76u_rd_rp,
                .type = MT76_BUS_USB,
        };
+       struct usb_device *udev = interface_to_usbdev(intf);
        struct mt76_usb *usb = &dev->usb;
 
        tasklet_init(&usb->rx_tasklet, mt76u_rx_tasklet, (unsigned long)dev);
        dev->bus = &mt76u_ops;
        dev->queue_ops = &usb_queue_ops;
 
+       dev_set_drvdata(&udev->dev, dev);
+
        usb->sg_en = mt76u_check_sg(dev);
 
        return mt76u_set_endpoints(intf, usb);