Skip to contentSkip to conversation

usb: host: xhci-tegra: Use platform_get_irq_optional() for wake IRQs

PATCH Superseded Wei-Cheng Chen 2 participants 3 messages Jan 8 – Jan 12

Subsystems (3)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 usb: host: xhci-tegra: Use platform_get_irq_optional() for wake IRQs

From: Wayne Chang <[email protected]>

When some wake IRQs are disabled in the device tree, the corresponding interrupt entries are removed from DT. In such cases, the driver currently calls platform_get_irq(), which returns -ENXIO and logs an error like:

tegra-xusb 3610000.usb: error -ENXIO: IRQ index 2 not found

However, not all wake IRQs are mandatory. The hardware can operate normally even if some wake sources are not defined in DT. To avoid this false alarm and allow missing wake IRQs gracefully, use platform_get_irq_optional() instead of platform_get_irq().

Fixes 5df186e2ef11 ("usb: xhci: tegra: Support USB wakeup function for Tegra234")
---
 drivers/usb/host/xhci-tegra.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/usb/host/xhci-tegra.c +1 -1
index 31ccced5125..8b492871d21 100644
@@ -1563,7 +1563,7 @@ static int tegra_xusb_setup_wakeup(struct platform_device *pdev, struct tegra_xu
 	for (i = 0; i < tegra->soc->max_num_wakes; i++) {
 		struct irq_data *data;
 
-		tegra->wake_irqs[i] = platform_get_irq(pdev, i + WAKE_IRQ_START_INDEX);
+		tegra->wake_irqs[i] = platform_get_irq_optional(pdev, i + WAKE_IRQ_START_INDEX);
 		if (tegra->wake_irqs[i] < 0)
 			break;
 
Signature · 1 line
2.43.0
maintainer Reviewed-by Tested-by on v1 1/1
#1 lore raw
Quoted 26 lines · Wei-Cheng Chen

From: Wayne Chang <[email protected]>

When some wake IRQs are disabled in the device tree, the corresponding interrupt entries are removed from DT. In such cases, the driver currently calls platform_get_irq(), which returns -ENXIO and logs an error like:

tegra-xusb 3610000.usb: error -ENXIO: IRQ index 2 not found

However, not all wake IRQs are mandatory. The hardware can operate normally even if some wake sources are not defined in DT. To avoid this false alarm and allow missing wake IRQs gracefully, use platform_get_irq_optional() instead of platform_get_irq().

Fixes 5df186e2ef11 ("usb: xhci: tegra: Support USB wakeup function for Tegra234")
---
  drivers/usb/host/xhci-tegra.c | 2 +-
  1 file changed, 1 insertion(+), 1 deletion(-)
drivers/usb/host/xhci-tegra.c +0 -0
index 31ccced5125..8b492871d21 100644

drivers/usb/host/xhci-tegra.c static int tegra_xusb_setup_wakeup(struct platform_device *pdev, struct tegra_xu · line 1569

Quoted 8 lines
drivers/usb/host/xhci-tegra.c +1 -1
@@ -1563,7 +1563,7 @@ static int tegra_xusb_setup_wakeup(struct platform_device *pdev, struct tegra_xu
  	for (i = 0; i < tegra->soc->max_num_wakes; i++) {
  		struct irq_data *data;
 
-		tegra->wake_irqs[i] = platform_get_irq(pdev, i + WAKE_IRQ_START_INDEX);
+		tegra->wake_irqs[i] = platform_get_irq_optional(pdev, i + WAKE_IRQ_START_INDEX);
  		if (tegra->wake_irqs[i] < 0)
  			break;
 

Thanks!
Jon

Signature · 1 line
nvpublic
#2 lore raw

PATCH v2 1/1 usb: host: xhci-tegra: Use platform_get_irq_optional() for wake IRQs

In reply to Wei-Cheng Chen

From: Wayne Chang <[email protected]>

When some wake IRQs are disabled in the device tree, the corresponding interrupt entries are removed from DT. In such cases, the driver currently calls platform_get_irq(), which returns -ENXIO and logs an error like:

tegra-xusb 3610000.usb: error -ENXIO: IRQ index 2 not found

However, not all wake IRQs are mandatory. The hardware can operate normally even if some wake sources are not defined in DT. To avoid this false alarm and allow missing wake IRQs gracefully, use platform_get_irq_optional() instead of platform_get_irq().

Fixes 5df186e2ef11 ("usb: xhci: tegra: Support USB wakeup function for Tegra234")

---
V1 -> V2:
- Added Reviewed-by and Tested-by tags from Jon Hunter.
- Added Cc: [email protected] tag to ensure backporting.

---
 drivers/usb/host/xhci-tegra.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/usb/host/xhci-tegra.c +1 -1
index 31ccced5125..8b492871d21 100644
@@ -1563,7 +1563,7 @@ static int tegra_xusb_setup_wakeup(struct platform_device *pdev, struct tegra_xu
 	for (i = 0; i < tegra->soc->max_num_wakes; i++) {
 		struct irq_data *data;
 
-		tegra->wake_irqs[i] = platform_get_irq(pdev, i + WAKE_IRQ_START_INDEX);
+		tegra->wake_irqs[i] = platform_get_irq_optional(pdev, i + WAKE_IRQ_START_INDEX);
 		if (tegra->wake_irqs[i] < 0)
 			break;
 
Signature · 1 line
2.43.0