| From 0534d40160cb9505073b0ecf5e7210daee319a66 Mon Sep 17 00:00:00 2001 |
| From: Thierry Reding <treding@nvidia.com> |
| Date: Fri, 17 Apr 2020 19:05:37 +0200 |
| Subject: usb: gadget: tegra-xudc: Fix idle suspend/resume |
| |
| From: Thierry Reding <treding@nvidia.com> |
| |
| commit 0534d40160cb9505073b0ecf5e7210daee319a66 upstream. |
| |
| When the XUDC device is idle (i.e. powergated), care must be taken not |
| to access any registers because that would lead to a crash. |
| |
| Move the call to tegra_xudc_device_mode_off() into the same conditional |
| as the tegra_xudc_powergate() call to make sure we only force device |
| mode off if the XUDC is actually powered up. |
| |
| Fixes: 49db427232fe ("usb: gadget: Add UDC driver for tegra XUSB device mode controller") |
| Acked-by: Jon Hunter <jonathanh@nvidia.com> |
| Tested-by: Jon Hunter <jonathanh@nvidia.com> |
| Signed-off-by: Thierry Reding <treding@nvidia.com> |
| Signed-off-by: Felipe Balbi <balbi@kernel.org> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| |
| --- |
| drivers/usb/gadget/udc/tegra-xudc.c | 8 ++++---- |
| 1 file changed, 4 insertions(+), 4 deletions(-) |
| |
| --- a/drivers/usb/gadget/udc/tegra-xudc.c |
| +++ b/drivers/usb/gadget/udc/tegra-xudc.c |
| @@ -3740,11 +3740,11 @@ static int __maybe_unused tegra_xudc_sus |
| |
| flush_work(&xudc->usb_role_sw_work); |
| |
| - /* Forcibly disconnect before powergating. */ |
| - tegra_xudc_device_mode_off(xudc); |
| - |
| - if (!pm_runtime_status_suspended(dev)) |
| + if (!pm_runtime_status_suspended(dev)) { |
| + /* Forcibly disconnect before powergating. */ |
| + tegra_xudc_device_mode_off(xudc); |
| tegra_xudc_powergate(xudc); |
| + } |
| |
| pm_runtime_disable(dev); |
| |