linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
From: s.hauer@pengutronix.de (Sascha Hauer)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 3/9] USB: add devicetree helpers for determining dr_mode and phy_type
Date: Fri, 15 Feb 2013 11:54:10 +0100	[thread overview]
Message-ID: <20130215105410.GN1906@pengutronix.de> (raw)
In-Reply-To: <20130214193626.GE26679@arwen.pp.htv.fi>

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.

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 |

  reply	other threads:[~2013-02-15 10:54 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 [this message]
2013-02-17  9:00                           ` Peter Chen
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=20130215105410.GN1906@pengutronix.de \
    --to=s.hauer@pengutronix.de \
    --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;
as well as URLs for NNTP newsgroup(s).