net: ipa: enable wakeup in ipa_power_setup()
authorAlex Elder <elder@linaro.org>
Thu, 12 Aug 2021 19:50:30 +0000 (14:50 -0500)
committerDavid S. Miller <davem@davemloft.net>
Sat, 14 Aug 2021 13:13:38 +0000 (14:13 +0100)
Move the call to enable the IPA interrupt as a wakeup interrupt into
ipa_power_setup(), disable it in ipa_power_teardown().

Signed-off-by: Alex Elder <elder@linaro.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ipa/ipa_clock.c
drivers/net/ipa/ipa_clock.h
drivers/net/ipa/ipa_main.c

index 6df66c574d59426da7151d50825e982490c9055c..cdbaba6618e9e27ca2b51ab6bf10a9314b1ecc41 100644 (file)
@@ -310,14 +310,23 @@ static void ipa_suspend_handler(struct ipa *ipa, enum ipa_irq_id irq_id)
        ipa_interrupt_suspend_clear_all(ipa->interrupt);
 }
 
-void ipa_power_setup(struct ipa *ipa)
+int ipa_power_setup(struct ipa *ipa)
 {
+       int ret;
+
        ipa_interrupt_add(ipa->interrupt, IPA_IRQ_TX_SUSPEND,
                          ipa_suspend_handler);
+
+       ret = device_init_wakeup(&ipa->pdev->dev, true);
+       if (ret)
+               ipa_interrupt_remove(ipa->interrupt, IPA_IRQ_TX_SUSPEND);
+
+       return ret;
 }
 
 void ipa_power_teardown(struct ipa *ipa)
 {
+       (void)device_init_wakeup(&ipa->pdev->dev, false);
        ipa_interrupt_remove(ipa->interrupt, IPA_IRQ_TX_SUSPEND);
 }
 
index 5c118f2c42e7a76485978062562aecb2e86930d8..5c53241336a1a0b38dabe8d03d1c9279c3f861b1 100644 (file)
@@ -25,8 +25,10 @@ u32 ipa_clock_rate(struct ipa *ipa);
 /**
  * ipa_power_setup() - Set up IPA power management
  * @ipa:       IPA pointer
+ *
+ * Return:     0 if successful, or a negative error code
  */
-void ipa_power_setup(struct ipa *ipa);
+int ipa_power_setup(struct ipa *ipa);
 
 /**
  * ipa_power_teardown() - Inverse of ipa_power_setup()
index 581b75488c6fea3734249f7e2d976094bb85ede8..69fa4b3120fd3f0c59b1c34297efea223f361070 100644 (file)
@@ -101,9 +101,7 @@ int ipa_setup(struct ipa *ipa)
        if (ret)
                return ret;
 
-       ipa_power_setup(ipa);
-
-       ret = device_init_wakeup(dev, true);
+       ret = ipa_power_setup(ipa);
        if (ret)
                goto err_gsi_teardown;
 
@@ -154,7 +152,6 @@ err_command_disable:
 err_endpoint_teardown:
        ipa_endpoint_teardown(ipa);
        ipa_power_teardown(ipa);
-       (void)device_init_wakeup(dev, false);
 err_gsi_teardown:
        gsi_teardown(&ipa->gsi);
 
@@ -181,7 +178,6 @@ static void ipa_teardown(struct ipa *ipa)
        ipa_endpoint_disable_one(command_endpoint);
        ipa_endpoint_teardown(ipa);
        ipa_power_teardown(ipa);
-       (void)device_init_wakeup(&ipa->pdev->dev, false);
        gsi_teardown(&ipa->gsi);
 }