mt76: mt7663u: introduce mt7663u_mcu_power_on routine
authorLorenzo Bianconi <lorenzo@kernel.org>
Mon, 28 Feb 2022 19:43:23 +0000 (20:43 +0100)
committerFelix Fietkau <nbd@nbd.name>
Wed, 16 Mar 2022 16:40:21 +0000 (17:40 +0100)
Introduce mt7663u_mcu_power_on utility routine since the code is shared
between mt7663u_mcu_init() and mt7663u_probe().

Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
Signed-off-by: Felix Fietkau <nbd@nbd.name>
drivers/net/wireless/mediatek/mt76/mt7615/mt7615.h
drivers/net/wireless/mediatek/mt76/mt7615/usb.c
drivers/net/wireless/mediatek/mt76/mt7615/usb_mcu.c

index 600fa2be4da062ca717694f8ec20cd845ac73708..2e91f6a27d0ff684b1cc8dfa5834cadb7a6ecc12 100644 (file)
@@ -559,6 +559,7 @@ void mt7663_usb_sdio_tx_complete_skb(struct mt76_dev *mdev,
                                     struct mt76_queue_entry *e);
 int mt7663_usb_sdio_register_device(struct mt7615_dev *dev);
 int mt7663u_mcu_init(struct mt7615_dev *dev);
+int mt7663u_mcu_power_on(struct mt7615_dev *dev);
 
 /* sdio */
 int mt7663s_mcu_init(struct mt7615_dev *dev);
index 5cad398abf6377a048ad64760126a5fcac48a85d..aeeba7c72f14a82c3717fba70435a1e992357cff 100644 (file)
@@ -100,27 +100,15 @@ static int mt7663u_probe(struct usb_interface *usb_intf,
                    (mt76_rr(dev, MT_HW_REV) & 0xff);
        dev_dbg(mdev->dev, "ASIC revision: %04x\n", mdev->rev);
 
-       if (mt76_poll_msec(dev, MT_CONN_ON_MISC, MT_TOP_MISC2_FW_PWR_ON,
-                          FW_STATE_PWR_ON << 1, 500)) {
-               dev_dbg(dev->mt76.dev, "Usb device already powered on\n");
-               set_bit(MT76_STATE_POWER_OFF, &dev->mphy.state);
-               goto alloc_queues;
-       }
-
-       ret = mt76u_vendor_request(&dev->mt76, MT_VEND_POWER_ON,
-                                  USB_DIR_OUT | USB_TYPE_VENDOR,
-                                  0x0, 0x1, NULL, 0);
-       if (ret)
-               goto error;
-
        if (!mt76_poll_msec(dev, MT_CONN_ON_MISC, MT_TOP_MISC2_FW_PWR_ON,
                            FW_STATE_PWR_ON << 1, 500)) {
-               dev_err(dev->mt76.dev, "Timeout for power on\n");
-               ret = -EIO;
-               goto error;
+               ret = mt7663u_mcu_power_on(dev);
+               if (ret)
+                       goto error;
+       } else {
+               set_bit(MT76_STATE_POWER_OFF, &dev->mphy.state);
        }
 
-alloc_queues:
        ret = mt76u_alloc_mcu_queue(&dev->mt76);
        if (ret)
                goto error;
index b560d0db6a92d84cdce5b7a6f254f72cd2d568c4..98bf2f6ae9362812727d1fc908107e203075c14a 100644 (file)
@@ -42,6 +42,26 @@ out:
        return ret;
 }
 
+int mt7663u_mcu_power_on(struct mt7615_dev *dev)
+{
+       int ret;
+
+       ret = mt76u_vendor_request(&dev->mt76, MT_VEND_POWER_ON,
+                                  USB_DIR_OUT | USB_TYPE_VENDOR,
+                                  0x0, 0x1, NULL, 0);
+       if (ret)
+               return ret;
+
+       if (!mt76_poll_msec(dev, MT_CONN_ON_MISC,
+                           MT_TOP_MISC2_FW_PWR_ON,
+                           FW_STATE_PWR_ON << 1, 500)) {
+               dev_err(dev->mt76.dev, "Timeout for power on\n");
+               ret = -EIO;
+       }
+
+       return 0;
+}
+
 int mt7663u_mcu_init(struct mt7615_dev *dev)
 {
        static const struct mt76_mcu_ops mt7663u_mcu_ops = {
@@ -65,18 +85,9 @@ int mt7663u_mcu_init(struct mt7615_dev *dev)
                                    MT_TOP_MISC2_FW_PWR_ON, 0, 500))
                        return -EIO;
 
-               ret = mt76u_vendor_request(&dev->mt76, MT_VEND_POWER_ON,
-                                          USB_DIR_OUT | USB_TYPE_VENDOR,
-                                          0x0, 0x1, NULL, 0);
+               ret = mt7663u_mcu_power_on(dev);
                if (ret)
                        return ret;
-
-               if (!mt76_poll_msec(dev, MT_CONN_ON_MISC,
-                                   MT_TOP_MISC2_FW_PWR_ON,
-                                   FW_STATE_PWR_ON << 1, 500)) {
-                       dev_err(dev->mt76.dev, "Timeout for power on\n");
-                       return -EIO;
-               }
        }
 
        ret = __mt7663_load_firmware(dev);