All of lore.kernel.org
 help / color / mirror / Atom feed
From: Peter Chen <Peter.Chen@freescale.com>
To: Antoine Tenart <antoine.tenart@free-electrons.com>
Cc: "balbi@ti.com" <balbi@ti.com>,
	"gregkh@linuxfoundation.org" <gregkh@linuxfoundation.org>,
	"kishon@ti.com" <kishon@ti.com>,
	"stern@rowland.harvard.edu" <stern@rowland.harvard.edu>,
	"sergei.shtylyov@cogentembedded.com" 
	<sergei.shtylyov@cogentembedded.com>,
	"yoshihiro.shimoda.uh@renesas.com"
	<yoshihiro.shimoda.uh@renesas.com>,
	"alexandre.belloni@free-electrons.com" 
	<alexandre.belloni@free-electrons.com>,
	"thomas.petazzoni@free-electrons.com" 
	<thomas.petazzoni@free-electrons.com>,
	"zmxu@marvell.com" <zmxu@marvell.com>,
	"jszhang@marvell.com" <jszhang@marvell.com>,
	"linux-usb@vger.kernel.org" <linux-usb@vger.kernel.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: RE: [PATCH v4 9/9] usb: chipidea: add support to the generic PHY framework in ChipIdea
Date: Sat, 13 Sep 2014 00:59:34 +0000	[thread overview]
Message-ID: <b1fd1dba9cee4db2a5d95954da88526e@BN1PR0301MB0772.namprd03.prod.outlook.com> (raw)
In-Reply-To: <20140912120336.GD18774@kwain>

 
> On Fri, Sep 12, 2014 at 06:28:29PM +0800, Peter Chen wrote:
> > On Fri, Sep 12, 2014 at 11:35:50AM +0200, Antoine Tenart wrote:
> > > On Fri, Sep 12, 2014 at 05:27:13PM +0800, Peter Chen wrote:
> > > > On Fri, Sep 12, 2014 at 10:21:25AM +0200, Antoine Tenart wrote:
> > > > > Peter,
> > > > >
> > > > > On Fri, Sep 12, 2014 at 01:10:33AM +0000, Peter Chen wrote:
> > > > > > > On Thu, Sep 11, 2014 at 08:54:47AM +0800, Peter Chen wrote:
> > > > > > > > On Wed, Sep 03, 2014 at 09:40:40AM +0200, Antoine Tenart wrote:
> > > > > > > > > @@ -595,23 +639,27 @@ static int ci_hdrc_probe(struct
> > > > > > > > > platform_device
> > > > > > > *pdev)
> > > > > > > > >  		return -ENODEV;
> > > > > > > > >  	}
> > > > > > > > >
> > > > > > > > > -	if (ci->platdata->usb_phy)
> > > > > > > > > +	if (ci->platdata->phy)
> > > > > > > > > +		ci->phy = ci->platdata->phy;
> > > > > > > > > +	else if (ci->platdata->usb_phy)
> > > > > > > > >  		ci->usb_phy = ci->platdata->usb_phy;
> > > > > > > > >  	else
> > > > > > > > > -		ci->usb_phy = devm_usb_get_phy(dev,
> USB_PHY_TYPE_USB2);
> > > > > > > > > +		ci->phy = devm_phy_get(dev, "usb-phy");
> > > > > > > > >
> > > > > > > > > -	if (IS_ERR(ci->usb_phy)) {
> > > > > > > > > -		ret = PTR_ERR(ci->usb_phy);
> > > > > > > > > +	if (IS_ERR(ci->phy) || (ci->phy == NULL && ci->usb_phy
> > > > > > > > > +== NULL)) {
> > > > > > > > >  		/*
> > > > > > > > >  		 * if -ENXIO is returned, it means PHY layer wasn't
> > > > > > > > >  		 * enabled, so it makes no sense to return -
> EPROBE_DEFER
> > > > > > > > >  		 * in that case, since no PHY driver will ever probe.
> > > > > > > > >  		 */
> > > > > > > > > -		if (ret == -ENXIO)
> > > > > > > > > -			return ret;
> > > > > > > > > +		if (PTR_ERR(ci->phy) == -ENXIO)
> > > > > > > > > +			return -ENXIO;
> > > > > > > > >
> > > > > > > > > -		dev_err(dev, "no usb2 phy configured\n");
> > > > > > > > > -		return -EPROBE_DEFER;
> > > > > > > > > +		ci->usb_phy = devm_usb_get_phy(dev,
> USB_PHY_TYPE_USB2);
> > > > > > > > > +		if (IS_ERR(ci->usb_phy)) {
> > > > > > > > > +			dev_err(dev, "no usb2 phy
> configured\n");
> > > > > > > > > +			return -EPROBE_DEFER;
> > > > > > > > > +		}
> > > > > > > > >  	}
> > > > > > > >
> > > > > > > > Sorry, I can't accept this change, why
> > > > > > > > devm_usb_get_phy(dev,
> > > > > > > > USB_PHY_TYPE_USB2) is put at error path? Since current get
> > > > > > > > PHY operation is a little complicated, we may have a
> > > > > > > > dedicate function to do it,
> > > > > > > dwc3 driver is a good example.
> > > > > > >
> > > > > > > It's not the error path, it's the case when there is no PHY
> > > > > > > from the generic PHY framework available. Getting an USB PHY is a
> fallback solution.
> > > > > > >
> > > > > > > I agree we can move this to a dedicated function. But even
> > > > > > > if doing so, we'll have to test ci->phy first.
> > > > > > >
> > > > > > > Or do you have something else in mind?
> > > > > > >
> > > > > >
> > > > > > I still want devm_usb_get_phy(dev, USB_PHY_TYPE_USB2) to be
> > > > > > called at the same place like generic_phy, not in later error path, in
> error path, we only handle error.
> > > > >
> > > > > Would this fit you?
> > > > >
> > > > > if (ci->platdata->phy)
> > > > >         ci->phy = ci->platdata->phy; else if
> > > > > (ci->platdata->usb_phy)
> > > > >         ci->usb_phy = ci->platdata->usb_phy;
> > > > >
> > > > > if (ci->phy == NULL && ci->usb_phy == NULL) {
> > > >
> > > > You should use else if here.
> > >
> > > Yes, sure.
> > >
> > > >
> > > > >         ci->phy = devm_phy_get(dev, "usb-phy");
> > > > >         ci->usb_phy = devm_usb_get_phy(dev, USB_PHY_TYPE_USB2);
> > > > >
> > > > >         /* if both generic PHY and USB PHY layers aren't enabled */
> > > > >         if (PTR_ERR(ci->phy) == -ENOSYS && PTR_ERR(ci->usb_phy) == -
> ENXIO)
> > > > >                 return -ENXIO;
> > > > >
> > > > >         if (IS_ERR(ci->phy) && IS_ERR(ci->usb_phy))
> > > > >                 return -EPROBE_DEFER;
> > > > >
> > > > >         /* if an usb_phy is available, but no phy is there */
> > > > >         if (PTR_ERR(ci->phy) == -ENODEV)
> > > > >                 ci->phy = NULL;
> > > > 	if (ci->phy)
> > > > 		ci->usb_phy = NULL;
> > > > 	if (ci->usb_phy)
> > > > 		ci->phy = NULL;
> > > >
> > > > How about above?
> > >
> > > When no PHY or USB PHY is found, -ENODEV is returned. Doing the
> > > above would always end up having ci->phy and ci->usb_phy being NULL.
> >
> > When we try to get generic phy, if -ENODEV is returned, the
> > ci->usb_phy should not be NULL, otherwise, your the second condition
> > will return -EPROBE_DEFER, it means when the code goes here, there
> > must be one PHY is found.
> 
> We first call devm_phy_get() and devm_usb_get_phy(), ci->phy and
> ci->usb_phy can't be NULL after this.
> 
> Then the "if (IS_ERR(ci->phy) && IS_ERR(ci->usb_phy))" ensure at least one of
> them is a valid PHY.
> 
> I don't see the problem here. Am I missing something?
> 
> >
> > >
> > > We could have:
> > >
> > > 	if (IS_ERR(ci->phy))
> > > 		ci->phy = NULL;
> > > 	else if (IS_ERR(ci->usb_phy))
> > > 		ci->usb_phy = NULL;
> > >
> 

Both of our implementation work, ok, use yours.

Peter

      reply	other threads:[~2014-09-13  0:59 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-09-03  7:40 [PATCH v4 0/9] usb: add support for the generic PHY framework Antoine Tenart
2014-09-03  7:40 ` [PATCH v4 1/9] usb: move the OTG state from the USB PHY to the OTG structure Antoine Tenart
2014-09-03  7:40 ` [PATCH v4 2/9] usb: rename phy to usb_phy in OTG Antoine Tenart
2014-09-03  7:40 ` [PATCH v4 3/9] usb: add support to the generic PHY framework " Antoine Tenart
2014-09-03  7:40 ` [PATCH v4 4/9] usb: rename phy to usb_phy in HCD Antoine Tenart
2014-09-03 21:44   ` Sergei Shtylyov
2014-09-03 22:06   ` Sergei Shtylyov
2014-09-03  7:40 ` [PATCH v4 5/9] usb: rename gen_phy to phy " Antoine Tenart
2014-09-03  7:40 ` [PATCH v4 6/9] usb: allow to supply the PHY in the drivers when using HCD Antoine Tenart
2014-09-03  7:40 ` [PATCH v4 7/9] usb: rename transceiver and phy to usb_phy in ChipIdea Antoine Tenart
2014-09-11  0:28   ` Peter Chen
2014-09-12 13:53     ` Antoine Tenart
2014-09-13  6:27       ` Peter Chen
2014-09-15 10:00         ` Antoine Tenart
2014-09-03  7:40 ` [PATCH v4 8/9] usb: chipidea: move usb_otg into struct ci_hdrc Antoine Tenart
2014-09-11  0:26   ` Peter Chen
2014-09-03  7:40 ` [PATCH v4 9/9] usb: chipidea: add support to the generic PHY framework in ChipIdea Antoine Tenart
2014-09-04  6:20   ` B47624
2014-09-11  0:54   ` Peter Chen
2014-09-11 15:42     ` Antoine Tenart
2014-09-12  1:10       ` Peter Chen
2014-09-12  8:21         ` Antoine Tenart
2014-09-12  9:27           ` Peter Chen
2014-09-12  9:35             ` Antoine Tenart
2014-09-12 10:28               ` Peter Chen
2014-09-12 12:03                 ` Antoine Tenart
2014-09-13  0:59                   ` Peter Chen [this message]

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=b1fd1dba9cee4db2a5d95954da88526e@BN1PR0301MB0772.namprd03.prod.outlook.com \
    --to=peter.chen@freescale.com \
    --cc=alexandre.belloni@free-electrons.com \
    --cc=antoine.tenart@free-electrons.com \
    --cc=balbi@ti.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=jszhang@marvell.com \
    --cc=kishon@ti.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=sergei.shtylyov@cogentembedded.com \
    --cc=stern@rowland.harvard.edu \
    --cc=thomas.petazzoni@free-electrons.com \
    --cc=yoshihiro.shimoda.uh@renesas.com \
    --cc=zmxu@marvell.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.