linux/drivers/usb/musb
Tony Lindgren 5fbf7a2534 usb: musb: fix idling for suspend after disconnect interrupt
When disconnected as USB B-device, suspend interrupt should come before
diconnect interrupt, because the DP/DM pins are shorter than the
VBUS/GND pins on the USB connectors. But we sometimes get a suspend
interrupt after disconnect interrupt. In that case we have devctl set to
99 with VBUS still valid and musb_pm_runtime_check_session() wrongly
thinks we have an active session. We have no other interrupts after
disconnect coming in this case at least with the omap2430 glue.

Let's fix the issue by checking the interrupt status again with
delayed work for the devctl 99 case. In the suspend after disconnect
case the devctl session bit has cleared by then and musb can idle.
For a typical USB B-device connect case we just continue with normal
interrupts.

Fixes: 467d5c9807 ("usb: musb: Implement session bit based runtime PM for musb-core")

Cc: Merlijn Wajer <merlijn@wizzup.org>
Cc: Pavel Machek <pavel@ucw.cz>
Cc: Sebastian Reichel <sre@kernel.org>
Cc: stable@vger.kernel.org
Signed-off-by: Tony Lindgren <tony@atomide.com>
Signed-off-by: Bin Liu <b-liu@ti.com>
Link: https://lore.kernel.org/r/20200107152625.857-2-b-liu@ti.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2020-01-08 17:34:17 +01:00
..
am35x.c usb: musb: remove references to default_a of struct usb_otg 2018-05-22 12:03:25 +02:00
cppi_dma.c USB: add SPDX identifiers to all remaining files in drivers/usb/ 2017-11-04 11:48:02 +01:00
cppi_dma.h License cleanup: add SPDX GPL-2.0 license identifier to files with no license 2017-11-02 11:10:55 +01:00
da8xx.c usb: musb: remove an unused variable 2018-05-31 12:44:39 +02:00
davinci.c usb: musb: remove references to default_a of struct usb_otg 2018-05-22 12:03:25 +02:00
davinci.h USB: musb: Remove redundant license text 2017-11-07 15:45:01 +01:00
jz4740.c usb: musb: jz4740: Silence error if code is -EPROBE_DEFER 2019-12-30 19:54:57 +01:00
Kconfig soc: sunxi: Fix missing dependency on REGMAP_MMIO 2019-04-30 17:55:08 +02:00
Makefile usb: musb: remove blackfin port 2018-03-26 15:57:12 +02:00
musb_am335x.c USB: add SPDX identifiers to all remaining files in drivers/usb/ 2017-11-04 11:48:02 +01:00
musb_core.c usb: musb: fix idling for suspend after disconnect interrupt 2020-01-08 17:34:17 +01:00
musb_core.h usb: musb: remove duplicated port mode enum 2018-05-22 12:03:25 +02:00
musb_cppi41.c usb: musb: remove duplicated quirks flag 2018-05-22 12:03:24 +02:00
musb_debug.h USB: musb: clean up debugfs file and directory creation 2018-05-31 12:54:21 +02:00
musb_debugfs.c usb: musb: create debugfs directory under usb root 2019-11-21 18:20:29 +01:00
musb_dma.h usb: musb: remove duplicated quirks flag 2018-05-22 12:03:24 +02:00
musb_dsps.c usb: musb: dsps: create debugfs directory under usb root 2019-11-14 11:16:35 +08:00
musb_gadget_ep0.c usb: musb: gadget: misplaced out of bounds check 2018-03-29 18:37:28 +02:00
musb_gadget.c usb: Spelling s/enpoint/endpoint/ 2019-11-04 15:53:00 +01:00
musb_gadget.h usb: musb: gadget: fix to_musb_ep() to not return NULL 2018-05-22 12:03:25 +02:00
musb_host.c usb: add a HCD_DMA flag instead of guestimating DMA capabilities 2019-08-21 10:03:35 -07:00
musb_host.h usb: musb: fix remote wakeup racing with suspend 2018-05-14 17:04:06 +02:00
musb_io.h usb: musb: remove duplicated quirks flag 2018-05-22 12:03:24 +02:00
musb_regs.h usb: musb: remove some register access wrapper functions 2018-05-22 12:03:24 +02:00
musb_trace.c USB: musb: Remove redundant license text 2017-11-07 15:45:01 +01:00
musb_trace.h USB: musb: Remove redundant license text 2017-11-07 15:45:01 +01:00
musb_virthub.c usb: musb: remove duplicated port mode enum 2018-05-22 12:03:25 +02:00
musbhsdma.c usb: musb: dma: Correct parameter passed to IRQ handler 2019-12-30 19:54:57 +01:00
omap2430.c usb: musb: omap2430: Add support for idling phy when musb is idle 2019-04-30 17:55:08 +02:00
omap2430.h USB: musb: Remove redundant license text 2017-11-07 15:45:01 +01:00
sunxi.c usb: musb: remove references to default_a of struct usb_otg 2018-05-22 12:03:25 +02:00
tusb6010_omap.c USB: musb: Remove redundant license text 2017-11-07 15:45:01 +01:00
tusb6010.c USB: musb: Remove redundant license text 2017-11-07 15:45:01 +01:00
tusb6010.h USB: musb: Remove redundant license text 2017-11-07 15:45:01 +01:00
ux500_dma.c USB: musb: Remove redundant license text 2017-11-07 15:45:01 +01:00
ux500.c usb: musb: remove references to default_a of struct usb_otg 2018-05-22 12:03:25 +02:00