Hi André, Firstly, thanks for all your work getting USB on Pixel 6 / gs101 working upstream :) On Fri, 6 Dec 2024 at 16:31, André Draszik <andre.draszik@xxxxxxxxxx> wrote: > > gs101's SS phy needs to be configured differently based on the > connector orientation, as the SS link can only be established if the > mux is configured correctly. > > The code to handle programming of the mux is in place already, this commit > now adds the missing pieces to subscribe to the Type-C orientation > switch event. > > Note that for this all to work we rely on the USB controller > re-initialising us. It should invoke our .exit() upon cable unplug, and > during cable plug we'll receive the orientation event after which we > expect our .init() to be called. > > Above reinitialisation happens if the DWC3 controller can enter runtime > suspend automatically. For the DWC3 driver, this is an opt-in: > echo auto > /sys/devices/.../11110000.usb/power/control > Once done, things work as long as the UDC is not bound as otherwise it > stays busy because it doesn't cancel / stop outstanding TRBs. For now > we have to manually unbind the UDC in that case: > echo "" > sys/kernel/config/usb_gadget/.../UDC > > Note that if the orientation-switch property is missing from the DT, > the code will behave as before this commit (meaning for gs101 it will > work in SS mode in one orientation only). Other platforms are not > affected either way. > > Signed-off-by: André Draszik <andre.draszik@xxxxxxxxxx> Reviewed-by: Peter Griffin <peter.griffin@xxxxxxxxxx> Tested-by: Peter Griffin <peter.griffin@xxxxxxxxxx> Notes on testing: I tested this series with the corresponding DT using a Pixel 6 device with 2 different USB hubs and also plugging directly into my laptop. I've tried various combinations of plugging / unplugging from both ends of the USB cable and changing cable orientation. With the latest series the disconnect/reconnect always seems robustly detected and Pixel is enumerated as a USB device by the host, adb connection to the phone is possible even with the cable orientation changing between disconnect/reconnect. One thing I did notice during testing is that in one cable orientation Pixel is detected as a `SuperSpeed USB device` by the host and in the other cable orientation it is detected as a `high-speed USB device`. Which suggests there is still a latent bug in the phy re-configuration. Although I think it is fine to fix this incrementally, as prior to this series the other cable orientation didn't work at all. I just tested my personal Pixel 6 running the downstream production drivers, and that is detected as a `SuperSpeed USB device` in both cable orientations. Thanks, Peter