All of lore.kernel.org
 help / color / mirror / Atom feed
From: Minas Harutyunyan <Minas.Harutyunyan@synopsys.com>
To: Pavel Hofman <pavel.hofman@ivitera.com>,
	Minas Harutyunyan <Minas.Harutyunyan@synopsys.com>
Cc: "linux-usb@vger.kernel.org" <linux-usb@vger.kernel.org>
Subject: Re: usb: dwc2: Detecting cable disconnection in OTG mode?
Date: Mon, 13 Dec 2021 10:58:10 +0000	[thread overview]
Message-ID: <5aada8e3-f385-0589-8d58-187abd1a924d@synopsys.com> (raw)
In-Reply-To: <897c79d2-eb88-01f5-95b6-67d5ab12954d@ivitera.com>

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



  reply	other threads:[~2021-12-13 10:58 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-12-11  9:55 usb: dwc2: Detecting cable disconnection in OTG mode? Pavel Hofman
2021-12-11  9:59 ` Pavel Hofman
2021-12-12 13:47   ` Pavel Hofman
2021-12-13 10:58     ` Minas Harutyunyan [this message]
2021-12-13 13:38       ` Pavel Hofman

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5aada8e3-f385-0589-8d58-187abd1a924d@synopsys.com \
    --to=minas.harutyunyan@synopsys.com \
    --cc=linux-usb@vger.kernel.org \
    --cc=pavel.hofman@ivitera.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.