Hi, On Thu, Aug 21, 2014 at 7:48 PM, Tony Lindgren <tony@xxxxxxxxxxx> wrote: > Commit 249751f22380 ("usb: phy: twl4030-usb: poll for ID disconnect") > added twl4030_id_workaround_work() to deal with lost interrupts > after ID pin goes down. However, this currently only works for the > insertion. The PHY interrupts are not working after disconnecting > an USB-A device from the board, and the deeper idle states for > omap are blocked as the USB controller stays busy. > > The issue can be solved by calling delayed work from twl4030_usb_irq() > when ID pin is down and the PHY is not asleep like we already do > in twl4030_id_workaround_work(). The way it is supposed to work is that after plugging in the cable twl4030_phy_power_on() sees ID_GROUND and kicks off id_workaround_work every second. When cable is unplugged, twl4030_id_workaround_work() sees changes in STS_HW_CONDITIONS register and triggers events. Doesn't that work for you, why do you need to trigger it from twl4030_usb_irq() too? > But as both twl4030_usb_irq() and twl4030_id_workaround_work() > already do pretty much the same thing, let's call twl4030_usb_irq() > from twl4030_id_workaround_work() instead of adding some more > duplicate code. The difference is the sysfs_notify() call, so now every time id_workaround_work triggers (around once per second while the cable is plugged) userspace will now get useless uevent. Haven't actually checked if it really happens though, so I might be wrong. -- Gražvydas -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html