From: peter.chen@freescale.com (Peter Chen)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 3/9] USB: add devicetree helpers for determining dr_mode and phy_type
Date: Sun, 17 Feb 2013 17:00:14 +0800 [thread overview]
Message-ID: <20130217090012.GC1588@nchen-desktop> (raw)
In-Reply-To: <20130215105410.GN1906@pengutronix.de>
On Fri, Feb 15, 2013 at 11:54:10AM +0100, Sascha Hauer wrote:
> On Thu, Feb 14, 2013 at 09:36:26PM +0200, Felipe Balbi wrote:
> > Hi,
> >
> > On Thu, Feb 14, 2013 at 07:30:26PM +0100, Sascha Hauer wrote:
> > > > > > yeah, this is why I said we should ignore dr_mode (or bail out) when
> > > > > > !OTG.
> > > > >
> > > > > Ok, that's what the patch effectively does. We have this in chipidea/core.c:
> > > > >
> > > > > | dr_mode = ci->platdata->dr_mode;
> > > > > | if (dr_mode == USB_DR_MODE_UNKNOWN)
> > > > > | dr_mode = USB_DR_MODE_OTG;
> > > > >
> > > > > default to otg if nothing specified.
> > > >
> > > > you missed my point. I wanted something like:
> > > >
> > > > dr_mode = ci->platdata->dr_mode;
> > > > if ((dr_mode == USB_DR_MODE_UNKNOWN) || !IS_ENABLED(CONFIG_USB_CHIPIDEA_OTG)
> > > > dr_mode = USB_DR_MODE_OTG;
> > >
> > > So everytime the chipidea driver cannot do OTG the driver falls back to
> > > exactly this mode?
> >
> > hehe, that was me being stupid I meant something like:
> >
> > if (!IS_ENABLED(HOST) && dr_mode == HOST)
> >
> > or
> >
> > if (!IS_ENABLED(GADGET) && dr_mode == GADGET)
> >
> > in those cases, it's best to either force OTG (then driver will work
> > with whatever it has) or bail out.
> >
> > Thinking a bit harder, it's best to bail as you can't be sure udc.c or
> > host.c have been compiled in.
>
> Look again, that's what the current code does. Maybe it's not coded as
> explicit as you describe above.
>
> | /* initialize role(s) before the interrupt is requested */
> | if (dr_mode == USB_DR_MODE_OTG || dr_mode == USB_DR_MODE_HOST) {
> | ret = ci_hdrc_host_init(ci);
> | if (ret)
> | dev_info(dev, "doesn't support host\n");
> | }
>
> if IS_ENABLED(HOST), then ci_hdrc_host_init() will set
> ci->roles[CI_ROLE_HOST] in case it manages to initialize the host driver.
>
> if !IS_ENABLED(HOST), then ci_hdrc_host_init() will be a static inline
> noop function, so ci->roles[CI_ROLE_HOST] ends up being NULL.
>
> |
> | if (dr_mode == USB_DR_MODE_OTG || dr_mode == USB_DR_MODE_PERIPHERAL) {
> | ret = ci_hdrc_gadget_init(ci);
> | if (ret)
> | dev_info(dev, "doesn't support gadget\n");
> | }
>
> Same applies for gadget.
>
> |
> | if (!ci->roles[CI_ROLE_HOST] && !ci->roles[CI_ROLE_GADGET]) {
> | dev_err(dev, "no supported roles\n");
> | ret = -ENODEV;
> | goto rm_wq;
> | }
>
> At this point (!ci->roles[CI_ROLE_HOST] && !ci->roles[CI_ROLE_GADGET])
> means that the intersection of what is requested and what we are able to
> do is empty. The reasons could be That the requested mode is not compiled
> into the kernel, or the requested role failed to initialize.
I have tested host-only capable port (host 1) and dr_mode = "host" DT setting
(OTG port) as well as only compile chipidea gadget, the "no support roles"
will be reported, and fails probe, see below. (The platform layer probe's
error needs to my another patch in my otg patchset)
ci_hdrc ci_hdrc.0: ChipIdea HDRC found, lpm: 0; cap: c08a6100 op: c08a6140
ci_hdrc ci_hdrc.0: doesn't support host
ci_hdrc ci_hdrc.0: no supported roles
imx_usb 2184000.usb: Can't register ci_hdrc platform device, err=-19
imx_usb 2184200.usb: pinctrl get/select failed, err=-19
ci_hdrc ci_hdrc.1: ChipIdea HDRC found, lpm: 0; cap: c08ae300 op: c08ae340
ci_hdrc ci_hdrc.1: doesn't support host
ci_hdrc ci_hdrc.1: doesn't support gadget
ci_hdrc ci_hdrc.1: no supported roles
imx_usb 2184200.usb: Can't register ci_hdrc platform device, err=-19
>
> Sascha
>
> --
> Pengutronix e.K. | |
> Industrial Linux Solutions | http://www.pengutronix.de/ |
> Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 |
> Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 |
> --
> To unsubscribe from this list: send the line "unsubscribe linux-usb" in
> the body of a message to majordomo at vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
--
Best Regards,
Peter Chen
next prev parent reply other threads:[~2013-02-17 9:00 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-02-04 13:24 [PATCH v4] USB: add devicetree helpers for determining dr_mode and phy_type Sascha Hauer
2013-02-04 13:24 ` [PATCH 1/9] usb: otg: use try_module_get in all usb_get_phy functions and add missing module_put Sascha Hauer
2013-02-04 13:59 ` Roger Quadros
2013-02-04 14:10 ` Marc Kleine-Budde
2013-02-04 14:39 ` Roger Quadros
2013-02-04 13:24 ` [PATCH 2/9] USB: move bulk of otg/otg.c to phy/phy.c Sascha Hauer
2013-02-19 9:30 ` Felipe Balbi
2013-02-19 19:06 ` Sascha Hauer
2013-02-19 19:48 ` Felipe Balbi
2013-02-04 13:24 ` [PATCH 3/9] USB: add devicetree helpers for determining dr_mode and phy_type Sascha Hauer
2013-02-14 9:36 ` Alexander Shishkin
2013-02-14 9:49 ` Marc Kleine-Budde
2013-02-14 9:58 ` Felipe Balbi
2013-02-14 10:07 ` Sascha Hauer
2013-02-14 10:15 ` Felipe Balbi
2013-02-14 11:24 ` Sascha Hauer
2013-02-14 13:10 ` Felipe Balbi
2013-02-14 16:06 ` Sascha Hauer
2013-02-14 18:04 ` Felipe Balbi
2013-02-14 18:30 ` Sascha Hauer
2013-02-14 19:36 ` Felipe Balbi
2013-02-15 10:54 ` Sascha Hauer
2013-02-17 9:00 ` Peter Chen [this message]
2013-02-14 10:11 ` Marc Kleine-Budde
2013-02-14 10:16 ` Felipe Balbi
2013-03-13 9:43 ` Peter Chen
2013-02-04 13:24 ` [PATCH 4/9] USB: chipidea: ci13xxx-imx: create dynamic platformdata Sascha Hauer
2013-02-04 13:24 ` [PATCH 5/9] USB: chipidea: add PTW and PTS handling Sascha Hauer
2013-02-14 13:07 ` Alexander Shishkin
2013-02-27 10:23 ` Marc Kleine-Budde
2013-02-04 13:24 ` [PATCH 6/9] USB chipidea: introduce dual role mode pdata flags Sascha Hauer
2013-02-22 2:09 ` Peter Chen
2013-02-27 10:42 ` Marc Kleine-Budde
2013-02-04 13:24 ` [PATCH 7/9] USB chipidea i.MX: introduce dr_mode property Sascha Hauer
2013-02-04 13:24 ` [PATCH 8/9] USB mxs-phy: Register phy with framework Sascha Hauer
2013-02-04 13:24 ` [PATCH 9/9] USB chipidea i.MX: use devm_usb_get_phy_by_phandle to get phy Sascha Hauer
2013-02-05 11:45 ` Sergei Shtylyov
2013-02-05 11:58 ` Sascha Hauer
2013-02-05 5:54 ` [PATCH v4] USB: add devicetree helpers for determining dr_mode and phy_type Peter Chen
2013-02-07 10:56 ` Sascha Hauer
2013-02-12 13:59 ` Sascha Hauer
2013-02-14 13:22 ` Alexander Shishkin
-- strict thread matches above, loose matches on Subject: below --
2013-02-27 12:27 [PATCH v5 0/9] " Marc Kleine-Budde
2013-02-27 12:27 ` [PATCH 3/9] " Marc Kleine-Budde
2013-02-27 12:31 ` Marc Kleine-Budde
2013-02-27 12:32 ` Felipe Balbi
2013-02-27 12:32 ` Felipe Balbi
2013-02-27 12:38 ` Marc Kleine-Budde
2013-02-27 12:41 ` Felipe Balbi
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=20130217090012.GC1588@nchen-desktop \
--to=peter.chen@freescale.com \
--cc=linux-arm-kernel@lists.infradead.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox