From: Heikki Krogerus <heikki.krogerus@linux.intel.com>
To: Stephen Boyd <stephen.boyd@linaro.org>
Cc: Felipe Balbi <balbi@kernel.org>, Arnd Bergmann <arnd@arndb.de>,
Neil Armstrong <narmstrong@baylibre.com>,
linux-arm-msm@vger.kernel.org, linux-usb@vger.kernel.org,
linux-kernel@vger.kernel.org,
Bjorn Andersson <bjorn.andersson@linaro.org>,
devicetree@vger.kernel.org, Rob Herring <robh+dt@kernel.org>,
Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
Andy Gross <andy.gross@linaro.org>,
linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH 02/21] usb: ulpi: Support device discovery via DT
Date: Tue, 28 Jun 2016 14:42:05 +0300 [thread overview]
Message-ID: <20160628114205.GA3378@kuha.fi.intel.com> (raw)
In-Reply-To: <146706544012.30684.15569003844798199881@sboyd-linaro>
On Mon, Jun 27, 2016 at 03:10:40PM -0700, Stephen Boyd wrote:
> Quoting Heikki Krogerus (2016-06-27 07:34:22)
> > Hi,
> >
> > I'm fine with most of the patch, except..
> >
> > On Sun, Jun 26, 2016 at 12:28:19AM -0700, Stephen Boyd wrote:
> > > @@ -39,7 +42,10 @@ static int ulpi_match(struct device *dev, struct device_driver *driver)
> > > struct ulpi *ulpi = to_ulpi_dev(dev);
> > > const struct ulpi_device_id *id;
> > >
> > > - for (id = drv->id_table; id->vendor; id++)
> > > + if (of_driver_match_device(dev, driver))
> > > + return 1;
> >
> > I don't like this part. We should match separately like that only
> > if the bus does not support native enumeration, and of course ULPI
> > with its vendor and product IDs does. There really should always be
> > IDs to match with here. So exceptions have to be solved before we
> > attempt matching.
> >
> > Since we also have to support platforms where the PHY is initially
> > powered off and reading the IDs from the registers is not possible
> > because of that, I think we should consider getting the product and
> > vendor IDs optionally from device properties. Something like this:
>
> Ok, I'm a little worried about conflating the powered off problem with
> this product/vendor ID missing problem. But if you're ok with that I'll
> combine the two patches into one using your approach below.
>
> >
> >
> > diff --git a/drivers/usb/common/ulpi.c b/drivers/usb/common/ulpi.c
> > index 01c0c04..6228a85 100644
> > --- a/drivers/usb/common/ulpi.c
> > +++ b/drivers/usb/common/ulpi.c
> > @@ -152,7 +152,7 @@ EXPORT_SYMBOL_GPL(ulpi_unregister_driver);
> >
> > /* -------------------------------------------------------------------------- */
> >
> > -static int ulpi_register(struct device *dev, struct ulpi *ulpi)
> > +static int ulpi_read_id(struct ulpi *ulpi)
> > {
> > int ret;
> >
> > @@ -174,6 +174,21 @@ static int ulpi_register(struct device *dev, struct ulpi *ulpi)
> > ulpi->id.product = ulpi_read(ulpi, ULPI_PRODUCT_ID_LOW);
> > ulpi->id.product |= ulpi_read(ulpi, ULPI_PRODUCT_ID_HIGH) << 8;
> >
> > + return 0;
> > +}
> > +
> > +static int ulpi_register(struct device *dev, struct ulpi *ulpi)
> > +{
> > + int ret;
> > +
> > + ret = device_property_read_u16(dev, "ulpi-vendor", &ulpi->id.vendor);
> > + ret |= device_property_read_u16(dev, "ulpi-product", &ulpi->id.product);
> > + if (ret) {
> > + ret = ulpi_read_id(ulpi);
> > + if (ret)
> > + return ret;
> > + }
> > +
> > ulpi->dev.parent = dev;
> > ulpi->dev.bus = &ulpi_bus;
> > ulpi->dev.type = &ulpi_dev_type;
> >
> >
> > That should cover both cases. You would just have to create the IDs
> > yourself in this case.
> >
>
> Right, I would have to make up some IDs in this case. I suppose I can
> use the qcom vendor ID 0x05c6 and then product ids 0 and 1 for HS phy
> and HSIC phy? That doesn't make me feel great because it's all made up,
> but I guess there's no other option. I hope they don't decide to start
> populating these ids in the future though and then we may have
> conflicting product ids. If that happens I suppose we can do a
> workaround based on compatible strings in the DT node. Fun!
>
> Nice side effect of all that is I can drop requesting the module by DT
> aliases and things become simpler. I'll try this out.
I was hoping that we could manage with product id 0 as an exception (I
failed to consider that you have multiple PHYs to deal with). I don't
think we can just come up with product id > 0.
I guess we should have the of_driver_match_device() call after all.
Let's just call it conditionally, only in cases where there is no
product ID, to make me feel a bit more better. I don't want to make it
too easy to use.
The properties for the vendor and product ID are still something that
we need to introduce in any case. We have the powered off problem on
all kinds of platforms, and not all of them use DT. Please feel free
to incorporate the diff into the patch you had for the powered off
case if you are OK with it. So I think in your case you would just
need to addthe correct ulpi-vendor id 0x05c6 and ulpi-product id 0 to
the chipidea device node, and I think this would work.
Sorry about the hassle.
Thanks,
--
heikki
next prev parent reply other threads:[~2016-06-28 11:42 UTC|newest]
Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-06-26 7:28 [PATCH 00/21] Support qcom's HSIC USB and rewrite USB2 HS phy support Stephen Boyd
2016-06-26 7:28 ` [PATCH 01/21] of: device: Support loading a module with OF based modalias Stephen Boyd
2016-06-28 4:17 ` Bjorn Andersson
2016-06-28 4:39 ` Rob Herring
[not found] ` <20160626072838.28082-1-stephen.boyd-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2016-06-26 7:28 ` [PATCH 02/21] usb: ulpi: Support device discovery via DT Stephen Boyd
[not found] ` <20160626072838.28082-3-stephen.boyd-QSEj5FYQhm4dnm+yROfE0A@public.gmane.org>
2016-06-27 4:21 ` kbuild test robot
2016-06-27 14:34 ` Heikki Krogerus
2016-06-27 22:10 ` Stephen Boyd
2016-06-28 11:42 ` Heikki Krogerus [this message]
2016-06-28 18:27 ` Stephen Boyd
2016-06-29 1:53 ` Peter Chen
2016-06-28 20:56 ` Rob Herring
2016-06-28 22:09 ` Stephen Boyd
2016-07-01 0:59 ` Rob Herring
2016-07-06 6:16 ` Stephen Boyd
2016-06-26 7:28 ` [PATCH 20/21] phy: Add support for Qualcomm's USB HSIC phy Stephen Boyd
2016-06-28 8:49 ` Neil Armstrong
2016-06-28 21:58 ` Stephen Boyd
2016-06-29 9:16 ` Neil Armstrong
[not found] ` <57739203.9000601-rdvid1DuHRBWk0Htik3J/w@public.gmane.org>
2016-06-29 18:54 ` Stephen Boyd
2016-06-26 7:28 ` [PATCH 21/21] phy: Add support for Qualcomm's USB HS phy Stephen Boyd
2016-06-28 3:09 ` [PATCH 00/21] Support qcom's HSIC USB and rewrite USB2 HS phy support John Stultz
2016-06-28 8:34 ` Stephen Boyd
2016-07-02 6:03 ` John Stultz
2016-07-05 19:22 ` Stephen Boyd
2016-07-05 19:33 ` John Stultz
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=20160628114205.GA3378@kuha.fi.intel.com \
--to=heikki.krogerus@linux.intel.com \
--cc=andy.gross@linaro.org \
--cc=arnd@arndb.de \
--cc=balbi@kernel.org \
--cc=bjorn.andersson@linaro.org \
--cc=devicetree@vger.kernel.org \
--cc=gregkh@linuxfoundation.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-usb@vger.kernel.org \
--cc=narmstrong@baylibre.com \
--cc=robh+dt@kernel.org \
--cc=stephen.boyd@linaro.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).