mt76: mt76u: rely on usb_interface instead of usb_dev
authorLorenzo Bianconi <lorenzo@kernel.org>
Mon, 28 Oct 2019 15:21:41 +0000 (16:21 +0100)
committerFelix Fietkau <nbd@nbd.name>
Wed, 20 Nov 2019 12:23:50 +0000 (13:23 +0100)
usb drivers are supposed to communicate using usb_interface instead
mt76x{0,2}u is now registering through usb_device. Fix it by passing
usb_intf device to mt76_alloc_device routine.

Fixes: 112f980ac8926 ("mt76usb: use usb_dev private data")
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
Tested-By: Zero_Chaos <sidhayn@gmail.com>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mt76.h
drivers/net/wireless/mediatek/mt76/mt76x0/usb.c
drivers/net/wireless/mediatek/mt76/mt76x2/usb.c
drivers/net/wireless/mediatek/mt76/usb.c

index 4bdf8c44c6d226a6c69ef810011e3abd3a1b9d2f..ac439fd4f3126a3d2f28cb72bd40b86c68b2ce10 100644 (file)
@@ -804,7 +804,8 @@ static inline int
 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;
 
index ade6312c7367120df1bc6fecba70ce00b1b2276b..b9fd41433106fbfca15caf56f12aaa715338dff8 100644 (file)
@@ -221,7 +221,7 @@ static int mt76x0u_probe(struct usb_interface *usb_intf,
        u32 mac_rev;
        int ret;
 
-       mdev = mt76_alloc_device(&usb_dev->dev, sizeof(*dev), &mt76x0u_ops,
+       mdev = mt76_alloc_device(&usb_intf->dev, sizeof(*dev), &mt76x0u_ops,
                                 &drv_ops);
        if (!mdev)
                return -ENOMEM;
index e6d778456e5e20a3486aec4cd6eb2471c5451ac0..48b9017813b5d7cb10ae3c0703a29fc62b8acdd2 100644 (file)
@@ -41,7 +41,7 @@ static int mt76x2u_probe(struct usb_interface *intf,
        struct mt76_dev *mdev;
        int err;
 
-       mdev = mt76_alloc_device(&udev->dev, sizeof(*dev), &mt76x2u_ops,
+       mdev = mt76_alloc_device(&intf->dev, sizeof(*dev), &mt76x2u_ops,
                                 &drv_ops);
        if (!mdev)
                return -ENOMEM;
index cac058fc41ef0e936772276c75e5c9ce67868eaf..be19038ea7ddbee3f4baa94cbb7477d7d6480249 100644 (file)
@@ -19,7 +19,8 @@ static int __mt76u_vendor_request(struct mt76_dev *dev, u8 req,
                                  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;
 
@@ -234,7 +235,8 @@ mt76u_rd_rp(struct mt76_dev *dev, u32 base,
 
 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 ||
@@ -369,7 +371,8 @@ mt76u_fill_bulk_urb(struct mt76_dev *dev, int dir, int index,
                    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)
@@ -951,6 +954,7 @@ int mt76u_init(struct mt76_dev *dev,
                .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);
@@ -964,6 +968,8 @@ int mt76u_init(struct mt76_dev *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);