From fa7ee24f3eb109e15b207d8a9f29d4db4d95fb05 Mon Sep 17 00:00:00 2001 From: Krishna Kurapati Date: Fri, 21 Jul 2023 09:58:49 +0530 Subject: [PATCH 07/11] usb: dwc3: qcom; Enable wakeup for mulitport IRQ's Enable wakeup for multiport IRQ's to be able to wakeup the DUT from system suspend when in host mode. Signed-off-by: Krishna Kurapati --- drivers/usb/dwc3/dwc3-qcom.c | 34 ++++++++++++++++++++++++---------- 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/drivers/usb/dwc3/dwc3-qcom.c b/drivers/usb/dwc3/dwc3-qcom.c index ab8664ced255..31968620e6ff 100644 --- a/drivers/usb/dwc3/dwc3-qcom.c +++ b/drivers/usb/dwc3/dwc3-qcom.c @@ -408,23 +408,32 @@ static void dwc3_qcom_disable_wakeup_irq(int irq) static void dwc3_qcom_disable_interrupts(struct dwc3_qcom *qcom) { + int i; + dwc3_qcom_disable_wakeup_irq(qcom->hs_phy_irq); if (qcom->usb2_speed == USB_SPEED_LOW) { - dwc3_qcom_disable_wakeup_irq(qcom->dm_hs_phy_irq[0]); + for (i = 0; i < DWC3_MAX_PORTS; i++) + dwc3_qcom_disable_wakeup_irq(qcom->dm_hs_phy_irq[i]); } else if ((qcom->usb2_speed == USB_SPEED_HIGH) || (qcom->usb2_speed == USB_SPEED_FULL)) { - dwc3_qcom_disable_wakeup_irq(qcom->dp_hs_phy_irq[0]); + for (i = 0; i < DWC3_MAX_PORTS; i++) + dwc3_qcom_disable_wakeup_irq(qcom->dp_hs_phy_irq[i]); } else { - dwc3_qcom_disable_wakeup_irq(qcom->dp_hs_phy_irq[0]); - dwc3_qcom_disable_wakeup_irq(qcom->dm_hs_phy_irq[0]); + for (i = 0; i < DWC3_MAX_PORTS; i++) { + dwc3_qcom_disable_wakeup_irq(qcom->dp_hs_phy_irq[i]); + dwc3_qcom_disable_wakeup_irq(qcom->dm_hs_phy_irq[i]); + } } - dwc3_qcom_disable_wakeup_irq(qcom->ss_phy_irq[0]); + for (i = 0; i < DWC3_MAX_PORTS; i++) + dwc3_qcom_disable_wakeup_irq(qcom->ss_phy_irq[i]); } static void dwc3_qcom_enable_interrupts(struct dwc3_qcom *qcom) { + int i; + dwc3_qcom_enable_wakeup_irq(qcom->hs_phy_irq, 0); /* @@ -437,20 +446,25 @@ static void dwc3_qcom_enable_interrupts(struct dwc3_qcom *qcom) */ if (qcom->usb2_speed == USB_SPEED_LOW) { - dwc3_qcom_enable_wakeup_irq(qcom->dm_hs_phy_irq[0], + for (i = 0; i < DWC3_MAX_PORTS; i++) + dwc3_qcom_enable_wakeup_irq(qcom->dm_hs_phy_irq[i], IRQ_TYPE_EDGE_FALLING); } else if ((qcom->usb2_speed == USB_SPEED_HIGH) || (qcom->usb2_speed == USB_SPEED_FULL)) { - dwc3_qcom_enable_wakeup_irq(qcom->dp_hs_phy_irq[0], + for (i = 0; i < DWC3_MAX_PORTS; i++) + dwc3_qcom_enable_wakeup_irq(qcom->dp_hs_phy_irq[i], IRQ_TYPE_EDGE_FALLING); } else { - dwc3_qcom_enable_wakeup_irq(qcom->dp_hs_phy_irq[0], + for (i = 0; i < DWC3_MAX_PORTS; i++) + dwc3_qcom_enable_wakeup_irq(qcom->dp_hs_phy_irq[i], IRQ_TYPE_EDGE_RISING); - dwc3_qcom_enable_wakeup_irq(qcom->dm_hs_phy_irq[0], + dwc3_qcom_enable_wakeup_irq(qcom->dm_hs_phy_irq[i], IRQ_TYPE_EDGE_RISING); + } } - dwc3_qcom_enable_wakeup_irq(qcom->ss_phy_irq[0], 0); + for (i = 0; i < DWC3_MAX_PORTS; i++) + dwc3_qcom_enable_wakeup_irq(qcom->ss_phy_irq[i], 0); } static int dwc3_qcom_suspend(struct dwc3_qcom *qcom, bool wakeup) -- 2.40.0