From: Peter Chen <hzpeterchen@gmail.com>
To: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Cc: Stephen Boyd <stephen.boyd@linaro.org>,
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: Wed, 29 Jun 2016 09:53:24 +0800 [thread overview]
Message-ID: <20160629015324.GA25236@shlinux2> (raw)
In-Reply-To: <20160628114205.GA3378@kuha.fi.intel.com>
On Tue, Jun 28, 2016 at 02:42:05PM +0300, Heikki Krogerus wrote:
> 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.
I am thinking power sequence framework, how power sequence elements
(eg, clock, reset-gpios) can get for non-DT platform? Does ACPI does power
sequence for x86 platforms?
--
Best Regards,
Peter Chen
next prev parent reply other threads:[~2016-06-29 1:53 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
2016-06-28 18:27 ` Stephen Boyd
2016-06-29 1:53 ` Peter Chen [this message]
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=20160629015324.GA25236@shlinux2 \
--to=hzpeterchen@gmail.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=heikki.krogerus@linux.intel.com \
--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).