| From 0310e57bbda847f0e1b173d4c7f773ef25675bd2 Mon Sep 17 00:00:00 2001 |
| From: Lorenzo Bianconi <lorenzo@kernel.org> |
| Date: Mon, 28 Oct 2019 16:21:41 +0100 |
| Subject: [PATCH] mt76: mt76u: rely on usb_interface instead of usb_dev |
| |
| commit 80df01f4dc79abbed724bbe0851cab3fe8ad9d99 upstream. |
| |
| 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> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/drivers/net/wireless/mediatek/mt76/mt76.h b/drivers/net/wireless/mediatek/mt76/mt76.h |
| index 7a3137a1d629..259a980a15d1 100644 |
| --- a/drivers/net/wireless/mediatek/mt76/mt76.h |
| +++ b/drivers/net/wireless/mediatek/mt76/mt76.h |
| @@ -782,7 +782,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; |
| |
| diff --git a/drivers/net/wireless/mediatek/mt76/mt76x0/usb.c b/drivers/net/wireless/mediatek/mt76/mt76x0/usb.c |
| index 109309b5d24a..71cef827c65e 100644 |
| --- a/drivers/net/wireless/mediatek/mt76/mt76x0/usb.c |
| +++ b/drivers/net/wireless/mediatek/mt76/mt76x0/usb.c |
| @@ -214,7 +214,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; |
| diff --git a/drivers/net/wireless/mediatek/mt76/mt76x2/usb.c b/drivers/net/wireless/mediatek/mt76/mt76x2/usb.c |
| index 7a994a783510..d13642bd760b 100644 |
| --- a/drivers/net/wireless/mediatek/mt76/mt76x2/usb.c |
| +++ b/drivers/net/wireless/mediatek/mt76/mt76x2/usb.c |
| @@ -49,7 +49,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; |
| diff --git a/drivers/net/wireless/mediatek/mt76/usb.c b/drivers/net/wireless/mediatek/mt76/usb.c |
| index 28e3af7332bf..171d5d0a82f2 100644 |
| --- a/drivers/net/wireless/mediatek/mt76/usb.c |
| +++ b/drivers/net/wireless/mediatek/mt76/usb.c |
| @@ -31,7 +31,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; |
| |
| @@ -246,7 +247,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 || |
| @@ -382,7 +384,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) |
| @@ -960,6 +963,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); |
| @@ -973,6 +977,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); |
| -- |
| 2.7.4 |
| |