From: Krishna Kurapati krishna.kurapati@oss.qualcomm.com
[ Upstream commit 41cf11946b9076383a2222bbf1ef57d64d033f66 ]
Allow autosuspend to be used by xhci plat device. For Qualcomm SoCs, when in host mode, it is intended that the controller goes to suspend state to save power and wait for interrupts from connected peripheral to wake it up. This is particularly used in cases where a HID or Audio device is connected. In such scenarios, the usb controller can enter auto suspend and resume action after getting interrupts from the connected device.
Signed-off-by: Krishna Kurapati krishna.kurapati@oss.qualcomm.com Link: https://lore.kernel.org/r/20250916120436.3617598-1-krishna.kurapati@oss.qual... Signed-off-by: Greg Kroah-Hartman gregkh@linuxfoundation.org Signed-off-by: Sasha Levin sashal@kernel.org ---
LLM Generated explanations, may be completely bogus:
YES. Adding `pm_runtime_use_autosuspend(&pdev->dev);` in `xhci_plat_probe()` (`drivers/usb/host/xhci-plat.c:185`) finally lets platform xHCI hosts honour runtime PM autosuspend, so boards that set `power/control=auto` (such as the Qualcomm configurations called out in the commit message) can actually drop the controller into low-power idle instead of burning power indefinitely. The rest of the driver already implements full runtime suspend/resume support (`drivers/usb/host/xhci- plat.c:500-573`) and wraps probe/remove paths with the usual runtime-PM bookkeeping (`drivers/usb/host/xhci-plat.c:355-390`, `drivers/usb/host/xhci-plat.c:463-548`), so this line simply flips on an otherwise wired-up capability. Risk is very low: runtime PM remains opt- in because `pm_runtime_forbid()` keeps the default “on” policy (`drivers/usb/host/xhci-plat.c:358-362`), and other SoC-specific xHCI drivers have long invoked the same helper (for example `drivers/usb/host/xhci-mtk.c:573` and `drivers/usb/host/xhci- tegra.c:1943`). No dependent changes are required and there are no follow-up fixes, so this targeted fix for a real power-management regression is a good candidate for stable backporting.
drivers/usb/host/xhci-plat.c | 1 + 1 file changed, 1 insertion(+)
diff --git a/drivers/usb/host/xhci-plat.c b/drivers/usb/host/xhci-plat.c index 5eb51797de326..dd57ffedcaa2f 100644 --- a/drivers/usb/host/xhci-plat.c +++ b/drivers/usb/host/xhci-plat.c @@ -171,6 +171,7 @@ int xhci_plat_probe(struct platform_device *pdev, struct device *sysdev, const s return ret;
pm_runtime_set_active(&pdev->dev); + pm_runtime_use_autosuspend(&pdev->dev); pm_runtime_enable(&pdev->dev); pm_runtime_get_noresume(&pdev->dev);