Re: [PATCH v2 0/3] usb: musb: da8xx: Fix few issues

From: Alexandre Bailon
Date: Fri Oct 28 2016 - 06:16:17 EST


On 10/28/2016 11:31 AM, Alexandre Bailon wrote:
> On 10/27/2016 08:44 PM, David Lechner wrote:
>> On 10/27/2016 12:16 PM, David Lechner wrote:
>>> On 10/26/2016 05:58 AM, Alexandre Bailon wrote:
>>>> Currently, the USB OTG of the da8xx doesn't work.
>>>> This series intend to fix them.
>>>>
>>>> Change in v2:
>>>> * Fix the error path da8xx_musb_init()
>>>>
>>>> Alexandre Bailon (3):
>>>> usb: musb: da8xx: Call earlier clk_prepare_enable()
>>>> phy: da8xx-usb: Configure CFGCHIP2 to support OTG workaround
>>>> usb: musb: da8xx: Only execute the OTG workaround when phy in OTG mode
>>>>
>>>> drivers/phy/phy-da8xx-usb.c | 17 ++++++++++++-----
>>>> drivers/usb/musb/da8xx.c | 28 +++++++++++++++++++---------
>>>> 2 files changed, 31 insertions(+), 14 deletions(-)
>>>>
>>>
>>> I have found another problem with peripheral mode. When we force
>>> peripheral mode, the glue layer currently uses CFGCHIP2 to override the
>>> VBUS and ID. This causes it to not be able to detect disconnection
>>> because the VBUS is overridden.
> How have you found it ? Does it cause any issues ?
> I mean I had to enable traces to see that disconnect was not happening.
>>>
>>> Here is a patch to fix the problem. I have tested this on LEGO
>>> MINDSTORMS EV3 (AM1808). This works because the ID pin is internally
>>> pulled up on the SoC, so we don't need to override it.
> Actually, I'm wonder if that if not related to VBUS sensing.
> May be we should set CFGCHIP2_VBDTCTEN in device mode.
>>>
>>> ---
>>>
>>> diff --git a/drivers/usb/musb/da8xx.c b/drivers/usb/musb/da8xx.c
>>> index 2bc12a2..33daa3b 100644
>>> --- a/drivers/usb/musb/da8xx.c
>>> +++ b/drivers/usb/musb/da8xx.c
>>> @@ -374,9 +374,7 @@ static int da8xx_musb_set_mode(struct musb *musb, u8
>>> musb_mode)
>>> case MUSB_HOST: /* Force VBUS valid, ID = 0 */
>>> phy_mode = PHY_MODE_USB_HOST;
>>> break;
>>> - case MUSB_PERIPHERAL: /* Force VBUS valid, ID = 1 */
>>> - phy_mode = PHY_MODE_USB_DEVICE;
>>> - break;
>>> + case MUSB_PERIPHERAL:
>>> case MUSB_OTG: /* Don't override the VBUS/ID
>>> comparators */
>>> phy_mode = PHY_MODE_USB_OTG;
>>> break;
>>>
>>> ---
>>>
>>> If this works for other SoCs/boards, I think we should make this change.
I will try it but for me, it should be good.
It is actually similar to what is done in TI BSP.
>>> If it doesn't work, we could work around the VBUS problem by polling
>>> VBUSSENSE in CFGCHIP2. But, I like the simple solution above better.
Actually, I don't think we need to do any polling.
We can just catch the suspend interrupt and use VBUSSENSE to
differentiate a real suspend from a disconnect.
>>
>> I have realized that due to the way my device is wired, I can actually
>> use OTG mode and it will behave exactly as peripheral mode because the
>> ID pin is not connected. So, maybe this patch is not needed after all.
>>
> Actually, I'm sure that is related to ID
> I have the same issue except the disconnect is called when I use the
> OTG mode.
>