Hi Pavel, On 12/12/2021 5:47 PM, Pavel Hofman wrote: > Dne 11. 12. 21 v 10:59 Pavel Hofman napsal(a): >> Dne 11. 12. 21 v 10:55 Pavel Hofman napsal(a): >>> Hi Minas, >>> >>> I am trying to find if dwc2 in OTG mode can pass information to >>> gadget functions that the host has been disconnected. I am testing on >>> RPi4. In a datasheet for a different dwc2 implementation >>> https://urldefense.com/v3/__https://www.mouser.cn/datasheet/2/196/Infineon-xmc4500_rm_v1.6_2016-UM-v01_06-EN-598157.pdf__;!!A4F2R9G_pg!MEHtWBYLNFmrcqrgWFVPEBTCgO8uc0-Csekg1qk6WkiSEqzoGkWH8OMo9aZtgRJGugkkc6Kq$ >>> - chapter "16.8.3 Device Disconnection" I found: >>> >>> >>> =========== >>> The device session ends when the USB cable is disconnected or if the >>> VBUS is switched off by the host. >>> The device disconnect flow is as follows: >>> >>> 1. When the USB cable is unplugged or when the VBUS is switched off >>> by the host, the device core triggers GINTSTS.OTGInt [bit 2] >>> interrupt bit >>> ============ >>> >>> I put a printk to core_intr.c:dwc2_handle_otg_intr() which is called >>> only from handling the OTGInt interrupt >>> https://urldefense.com/v3/__https://elixir.bootlin.com/linux/v5.1.9/source/drivers/usb/dwc2/core_intr.c*L803__;Iw!!A4F2R9G_pg!MEHtWBYLNFmrcqrgWFVPEBTCgO8uc0-Csekg1qk6WkiSEqzoGkWH8OMo9aZtgRJGumkIC5EA$ >>> . But this method is not called at all when disconnecting the USB >>> cable on RPi4 in gadget mode. >>> >> >> To add, the method dwc2_hsotg_disconnect is called, but after >> reconnecting the cable, as part of the gadget reset when handling >> reset interrupts (gintsts & (GINTSTS_USBRST | GINTSTS_RESETDET)) here >> https://urldefense.com/v3/__https://elixir.bootlin.com/linux/v5.1.9/source/drivers/usb/dwc2/gadget.c*L3653__;Iw!!A4F2R9G_pg!MEHtWBYLNFmrcqrgWFVPEBTCgO8uc0-Csekg1qk6WkiSEqzoGkWH8OMo9aZtgRJGugg7wbmK$ >> > > > Maybe the reason for the OTGInt not being thrown at cable disconnect is > the fact that RPi4 most likely does not handle USB_OTG_ID signal. I > asked about USB_OTG_ID wiring on RPi4 at their forum. > > Nevertheless it turns out that DWC2 throws Suspend interrupt > GINTSTS_USBSUSP (11) at cable disconnection on the RPi4, and the gadget > composite driver calls suspend hook of struct usb_function. I wonder if > implementing the suspend handler would be a solution for other dwc2 > implementations, or if the audio function should implement also some > other handler in order to correctly serve the cable disconnection for > all dwc2 implementations. > > Thanks a lot, > > Pavel. > > > Disconnect event on different platform behave differently. It's depend on platform design, PHY, etc. Yes, GINTSTS_USBSUSP (11) at cable disconnection can be used to detect disconnect event. Thanks, Minas