On 12/06/2024, André Draszik wrote: > To make USB runtime suspend work when a UDC has been bound, the phy > needs to inform the USBDRD controller (DWC3) that Vbus and bvalid are > gone, so that it can in turn raise the respective gadget interrupt with > event == DWC3_DEVICE_EVENT_DISCONNECT, which will cause the USB stack > to clean up, allowing DWC3 to enter runtime suspend. > > On e850 and gs101 this isn't working, as the respective signals are not > directly connected, and instead this driver uses override bits in the > PHY IP to set those signals. It currently forcefully sets them to 'on', > so the above mentioned interrupt will not be raised, preventing runtime > suspend. > > To detect that state, update this driver to act on the TCPC's > orientation signal - when orientation == NONE, Vbus is gone and we can > clear the respective bits. Similarly, for other orientation values we > re-enable them. > > This makes runtime suspend work on platforms with a TCPC (like Pixel6), > while keeping compatibility with platforms without (e850-96). > > With runtime suspend working, USB-C cable orientation detection now > also fully works on such platforms, and the link comes up as Superspeed > as expected irrespective of the cable orientation and whether UDC / > gadget are configured and active. > > Signed-off-by: André Draszik <andre.draszik@xxxxxxxxxx> Verified on my Pixel 6 Pro. Tested-by: Will McVicker <willmcvicker@xxxxxxxxxx> Thanks, Will <snip>