[PATCH v14 06/12] usb: chipidea: add flag CI_HDRC_DUAL_ROLE_NOT_OTG
Peter Chen
peter.chen at freescale.com
Fri Aug 9 07:13:54 EDT 2013
On Fri, Aug 09, 2013 at 03:55:56PM +0300, Alexander Shishkin wrote:
> Peter Chen <peter.chen at freescale.com> writes:
>
> > Since we need otgsc to know vbus's status at some chipidea
> > controllers even it is peripheral-only mode. Besides, some
> > SoCs (eg, AR9331 SoC) don't have otgsc register even
> > the DCCPARAMS_DC and DCCPARAMS_HC are both 1 at CAP_DCCPARAMS.
> >
> > We inroduce flag CI_HDRC_DUAL_ROLE_NOT_OTG to indicate if the
> > controller is dual role, but not supports OTG. If this flag is
> > not set, we follow the rule that if DCCPARAMS_DC and DCCPARAMS_HC
> > are both 1 at CAP_DCCPARAMS, then this controller is otg capable.
> >
> > Signed-off-by: Peter Chen <peter.chen at freescale.com>
> > ---
> > drivers/usb/chipidea/core.c | 38 +++++++++++++++++++++++++++++++-------
> > include/linux/usb/chipidea.h | 5 +++++
> > 2 files changed, 36 insertions(+), 7 deletions(-)
> >
> > diff --git a/drivers/usb/chipidea/core.c b/drivers/usb/chipidea/core.c
> > index bfc9aef..2ae18fd 100644
> > --- a/drivers/usb/chipidea/core.c
> > +++ b/drivers/usb/chipidea/core.c
> > @@ -426,6 +426,18 @@ static inline void ci_role_destroy(struct ci_hdrc *ci)
> > ci_hdrc_host_destroy(ci);
> > }
> >
> > +static void ci_get_otg_capable(struct ci_hdrc *ci)
> > +{
> > + if (ci->platdata->flags & CI_HDRC_DUAL_ROLE_NOT_OTG)
> > + ci->is_otg = false;
> > + else
> > + ci->is_otg = (hw_read(ci, CAP_DCCPARAMS,
> > + DCCPARAMS_DC | DCCPARAMS_HC)
> > + == (DCCPARAMS_DC | DCCPARAMS_HC));
> > + if (ci->is_otg)
> > + dev_dbg(ci->dev, "It is OTG capable controller\n");
> > +}
> > +
> > static int ci_hdrc_probe(struct platform_device *pdev)
> > {
> > struct device *dev = &pdev->dev;
> > @@ -482,6 +494,9 @@ static int ci_hdrc_probe(struct platform_device *pdev)
> > return -ENODEV;
> > }
> >
> > + /* To know if controller is OTG capable or not */
> > + ci_get_otg_capable(ci);
>
> The comment is redundant.
>
Will delete
> > + } else {
> > + /*
> > + * If the controller is not OTG capable, but support
> > + * role switch, the defalt role is gadget, and the
> > + * user can switch it through debugfs (proc in future?)
>
> It's not going to be in procfs ever, so that part of the comment can go.
>
I can delete now, but the role switch does not a debug function, we
may not put it at debugfs, do you think so?
> > + */
> > + ci->role = CI_ROLE_GADGET;
>
> I think we might need a config option for this in the future, at least.
>
Yes, we can add CONFIG_CI_DEFAULT_ROLE in the future.
--
Best Regards,
Peter Chen
More information about the linux-arm-kernel
mailing list