On 14/04/16 14:15, Yoshihiro Shimoda wrote:
> Hi,
> 
>> From: Roger Quadros
>> Sent: Thursday, April 14, 2016 8:00 PM
>>
>> On 14/04/16 11:36, Yoshihiro Shimoda wrote:
>>> Hi,
>>>
> < snip >
>>> diff --git a/drivers/usb/common/common.c b/drivers/usb/common/common.c
>>> index e3d0161..8b74715 100644
>>> --- a/drivers/usb/common/common.c
>>> +++ b/drivers/usb/common/common.c
>>> @@ -233,6 +233,8 @@ int of_usb_update_otg_caps(struct device_node *np,
>>>     if (of_find_property(np, "adp-disable", NULL) ||
>>>                             (otg_caps->otg_rev < 0x0200))
>>>             otg_caps->adp_support = false;
>>> +   if (of_find_property(np, "hcd-needs-companion", NULL))
>>> +           otg_caps->needs_companion = true;
>>
>> I'm not sure if otg_caps structure is a right place for this. Maybe Peter 
>> can confirm
>> if this is OK or not.
>>
>> I was thinking more about adding this bit in the otg_config structure.
> 
> I see. I also think the otg_config is more suitable.
> 
>>>
>>>     return 0;
>>>  }
>>> diff --git a/drivers/usb/common/usb-otg.c b/drivers/usb/common/usb-otg.c
>>> index 41e762a..e0df839 100644
>>> --- a/drivers/usb/common/usb-otg.c
>>> +++ b/drivers/usb/common/usb-otg.c
>>> @@ -823,13 +823,15 @@ int usb_otg_register_hcd(struct usb_hcd *hcd, 
>>> unsigned int irqnum,
>>>     /* HCD will be started by OTG fsm when needed */
>>>     mutex_lock(&otg->fsm.lock);
>>>     if (otg->primary_hcd.hcd) {
>>> -           /* probably a shared HCD ? */
>>> -           if (usb_otg_hcd_is_primary_hcd(hcd)) {
>>> +           /* probably a shared HCD or a companion OHCI HCD ? */
>>> +           if (!otg->caps->needs_companion &&
>>> +               usb_otg_hcd_is_primary_hcd(hcd)) {
>>>                     dev_err(otg_dev, "otg: primary host already 
>>> registered\n");
>>>                     goto err;
>>>             }
>>>
>>> -           if (hcd->shared_hcd == otg->primary_hcd.hcd) {
>>> +           if (otg->caps->needs_companion ||
>>> +               (hcd->shared_hcd == otg->primary_hcd.hcd)) {
>>>                     if (otg->shared_hcd.hcd) {
>>>                             dev_err(otg_dev, "otg: shared host already 
>>> registered\n");
>>>                             goto err;
>>> @@ -865,7 +867,8 @@ int usb_otg_register_hcd(struct usb_hcd *hcd, unsigned 
>>> int irqnum,
>>>      * we're ready only if we have shared HCD
>>>      * or we don't need shared HCD.
>>>      */
>>> -   if (otg->shared_hcd.hcd || !otg->primary_hcd.hcd->shared_hcd) {
>>> +   if (otg->shared_hcd.hcd || (!otg->caps->needs_companion &&
>>> +                               !otg->primary_hcd.hcd->shared_hcd)) {
>>>             otg->host = hcd_to_bus(hcd);
>>>             /* FIXME: set bus->otg_port if this is true OTG port with HNP */
>>>
>>
>> These changes look good to me. Thanks.
> 
> Thank you for the comment.
> If we change the "needs_companion" place to the otg_config,
> do we need to add a flag into the otg, instead of otg->caps?

Yes we can add a flag in struct usb_otg.

cheers,
-roger

> 
>>> diff --git a/include/linux/usb/otg.h b/include/linux/usb/otg.h
>>> index b094352..64a7db8 100644
>>> --- a/include/linux/usb/otg.h
>>> +++ b/include/linux/usb/otg.h
>>> @@ -112,12 +112,14 @@ struct usb_otg {
>>>   * @hnp_support: Indicates if the device supports HNP.
>>>   * @srp_support: Indicates if the device supports SRP.
>>>   * @adp_support: Indicates if the device supports ADP.
>>> + * @needs_companion: Indicates if the device needs a companion controller.
>>
>> Description is not exact. How about this.
>> "Indicates if host controller needs a companion controller"
>>
>> Is hcd_needs_companion is better than just needs_companion?
> 
> I agree with you.
> 
> So, I will modify my local patch and test it tomorrow.
> 
> Best regards,
> Yoshihiro Shimoda
> 
>>
>>>   */
>>>  struct usb_otg_caps {
>>>     u16 otg_rev;
>>>     bool hnp_support;
>>>     bool srp_support;
>>>     bool adp_support;
>>> +   bool needs_companion;
>>>  };
>>>
>>>  /**
>>>
>>
>> cheers,
>> -roger
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to