All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Antoine Ténart" <antoine.tenart@free-electrons.com>
To: Peter Chen <Peter.Chen@freescale.com>
Cc: "Antoine Ténart" <antoine.tenart@free-electrons.com>,
	"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 v2 8/8] usb: chipidea: add support to the generic PHY framework in ChipIdea
Date: Fri, 25 Jul 2014 10:13:49 +0200	[thread overview]
Message-ID: <20140725081349.GB9756@kwain> (raw)
In-Reply-To: <76c0b6bc5b7f477998462d8b48d96272@BN1PR0301MB0772.namprd03.prod.outlook.com>

Hi Peter,

On Fri, Jul 25, 2014 at 12:34:39AM +0000, Peter Chen wrote:
>  
> > > >
> > > > -	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 = of_phy_get(dev->of_node, 0);
> > >
> > > Here, we may need to consider both usb_phy and generic_phy, and the
> > > core device is not populated from device tree.
> > >
> > > You can use devm_usb_get_phy and devm_phy_get for global phy case.
> > 
> > This is the case. If no PHY is found by of_phy_get() we try to get an USB
> > PHY by calling devm_usb_get_phy().
> > 
> 
> Like I said above, the core device is not populated from DT, so the DT version
> phy API may not be needed. 

I see, I'll switch to devm_usb_get_phy() and devm_phy_get().

> > 
> > > > @@ -85,13 +88,16 @@ static int host_start(struct ci_hdrc *ci)
> > > >  	if (ret) {
> > > >  		goto disable_reg;
> > > >  	} else {
> > > > -		struct usb_otg *otg = ci->usb_phy->otg;
> > > > +		if (ci->usb_phy) {
> > > > +			struct usb_otg *otg = ci->usb_phy->otg;
> > > >
> > > > -		ci->hcd = hcd;
> > > > -		if (otg) {
> > > > -			otg->host = &hcd->self;
> > > > -			hcd->self.otg_port = 1;
> > > > +			if (otg) {
> > > > +				otg->host = &hcd->self;
> > > > +				hcd->self.otg_port = 1;
> > > > +			}
> > > >  		}
> > >
> > > The otg port is still existed even use generic phy.
> > 
> > Yes. I don't know how to retrieve the OTG pointer when we do not use an
> > USB PHY. We may have to add an OTG member into the ci_hdrc structure, but
> > I didn't understand well where does occur this OTG setup.
> > 
> > I may have missed something. Do you know if CI OTG always is in FSM mode?
> > If so we could access the OTG pointer through ci_hdrc->fsm.
> > 
> 
> Just add OTG member into ci_hdrc structure, see below patch
> 
> diff --git a/drivers/usb/chipidea/ci.h b/drivers/usb/chipidea/ci.h
> index 9563cb5..186fb3f 100644
> --- a/drivers/usb/chipidea/ci.h
> +++ b/drivers/usb/chipidea/ci.h
> @@ -207,6 +207,7 @@ struct ci_hdrc {
>         bool                            id_event;
>         bool                            b_sess_valid_event;
>         bool                            imx28_write_fix;
> +       struct usb_otg                  otg;
>  };
>  
>  static inline struct ci_role_driver *ci_role(struct ci_hdrc *ci)
> diff --git a/drivers/usb/chipidea/host.c b/drivers/usb/chipidea/host.c
> index a93d950..70d7fe2 100644
> --- a/drivers/usb/chipidea/host.c
> +++ b/drivers/usb/chipidea/host.c
> @@ -85,7 +85,7 @@ static int host_start(struct ci_hdrc *ci)
>         if (ret) {
>                 goto disable_reg;
>         } else {
> -               struct usb_otg *otg = ci->transceiver->otg;
> +               struct usb_otg *otg = &ci->otg;
>  
>                 ci->hcd = hcd;
>                 if (otg) {
> diff --git a/drivers/usb/chipidea/otg_fsm.c b/drivers/usb/chipidea/otg_fsm.c
> index 8cb2508..fc8847e 100644
> --- a/drivers/usb/chipidea/otg_fsm.c
> +++ b/drivers/usb/chipidea/otg_fsm.c
> @@ -778,20 +778,8 @@ void ci_hdrc_otg_fsm_start(struct ci_hdrc *ci)
>  int ci_hdrc_otg_fsm_init(struct ci_hdrc *ci)
>  {
>         int retval = 0;
> -       struct usb_otg *otg;
>  
> -       otg = devm_kzalloc(ci->dev,
> -                       sizeof(struct usb_otg), GFP_KERNEL);
> -       if (!otg) {
> -               dev_err(ci->dev,
> -               "Failed to allocate usb_otg structure for ci hdrc otg!\n");
> -               return -ENOMEM;
> -       }
> -
> -       otg->phy = ci->transceiver;
> -       otg->gadget = &ci->gadget;
> -       ci->fsm.otg = otg;
> -       ci->transceiver->otg = ci->fsm.otg;
> +       ci->fsm.otg = &ci->otg;
>         ci->fsm.power_up = 1;
>         ci->fsm.id = hw_read_otgsc(ci, OTGSC_ID) ? 1 : 0;
>         ci->fsm.otg->state = OTG_STATE_UNDEFINED;
> diff --git a/include/linux/usb/otg.h b/include/linux/usb/otg.h
> index 33d3480..b2f7587 100644
> --- a/include/linux/usb/otg.h
> +++ b/include/linux/usb/otg.h
> @@ -14,7 +14,6 @@
>  struct usb_otg {
>         u8                      default_a;
>  
> -       struct usb_phy          *phy;
>         struct usb_bus          *host;
>         struct usb_gadget       *gadget;
>  
> diff --git a/include/linux/usb/phy.h b/include/linux/usb/phy.h
> index ac7d791..b732541 100644
> --- a/include/linux/usb/phy.h
> +++ b/include/linux/usb/phy.h
> @@ -79,8 +79,6 @@ struct usb_phy {
>         enum usb_phy_type       type;
>         enum usb_phy_events     last_event;
>  
> -       struct usb_otg          *otg;
> -
>         struct device           *io_dev;
>         struct usb_phy_io_ops   *io_ops;
>         void __iomem            *io_priv;
> b29397@shlinux1:~/work/projects/upstream/usb/usb$ git diff > a.diff
> b29397@shlinux1:~/work/projects/upstream/usb/usb$ cat a.diff
> diff --git a/drivers/usb/chipidea/ci.h b/drivers/usb/chipidea/ci.h
> index 9563cb5..186fb3f 100644
> --- a/drivers/usb/chipidea/ci.h
> +++ b/drivers/usb/chipidea/ci.h
> @@ -207,6 +207,7 @@ struct ci_hdrc {
>  	bool				id_event;
>  	bool				b_sess_valid_event;
>  	bool				imx28_write_fix;
> +	struct usb_otg			otg;
>  };
>  
>  static inline struct ci_role_driver *ci_role(struct ci_hdrc *ci)
> diff --git a/drivers/usb/chipidea/host.c b/drivers/usb/chipidea/host.c
> index a93d950..70d7fe2 100644
> --- a/drivers/usb/chipidea/host.c
> +++ b/drivers/usb/chipidea/host.c
> @@ -85,7 +85,7 @@ static int host_start(struct ci_hdrc *ci)
>  	if (ret) {
>  		goto disable_reg;
>  	} else {
> -		struct usb_otg *otg = ci->transceiver->otg;
> +		struct usb_otg *otg = &ci->otg;
>  
>  		ci->hcd = hcd;
>  		if (otg) {
> diff --git a/drivers/usb/chipidea/otg_fsm.c b/drivers/usb/chipidea/otg_fsm.c
> index 8cb2508..fc8847e 100644
> --- a/drivers/usb/chipidea/otg_fsm.c
> +++ b/drivers/usb/chipidea/otg_fsm.c
> @@ -778,20 +778,8 @@ void ci_hdrc_otg_fsm_start(struct ci_hdrc *ci)
>  int ci_hdrc_otg_fsm_init(struct ci_hdrc *ci)
>  {
>  	int retval = 0;
> -	struct usb_otg *otg;
>  
> -	otg = devm_kzalloc(ci->dev,
> -			sizeof(struct usb_otg), GFP_KERNEL);
> -	if (!otg) {
> -		dev_err(ci->dev,
> -		"Failed to allocate usb_otg structure for ci hdrc otg!\n");
> -		return -ENOMEM;
> -	}
> -
> -	otg->phy = ci->transceiver;
> -	otg->gadget = &ci->gadget;
> -	ci->fsm.otg = otg;
> -	ci->transceiver->otg = ci->fsm.otg;
> +	ci->fsm.otg = &ci->otg;
>  	ci->fsm.power_up = 1;
>  	ci->fsm.id = hw_read_otgsc(ci, OTGSC_ID) ? 1 : 0;
>  	ci->fsm.otg->state = OTG_STATE_UNDEFINED;
> diff --git a/include/linux/usb/otg.h b/include/linux/usb/otg.h
> index 33d3480..b2f7587 100644
> --- a/include/linux/usb/otg.h
> +++ b/include/linux/usb/otg.h
> @@ -14,7 +14,6 @@
>  struct usb_otg {
>  	u8			default_a;
>  
> -	struct usb_phy		*phy;
>  	struct usb_bus		*host;
>  	struct usb_gadget	*gadget;
>  
> diff --git a/include/linux/usb/phy.h b/include/linux/usb/phy.h
> index ac7d791..b732541 100644
> --- a/include/linux/usb/phy.h
> +++ b/include/linux/usb/phy.h
> @@ -79,8 +79,6 @@ struct usb_phy {
>  	enum usb_phy_type	type;
>  	enum usb_phy_events	last_event;
>  
> -	struct usb_otg		*otg;
> -
>  	struct device		*io_dev;
>  	struct usb_phy_io_ops	*io_ops;
>  	void __iomem		*io_priv;

Where does the ci->otg setup occurs? It seems to me it's never filled.

Antoine

-- 
Antoine Ténart, Free Electrons
Embedded Linux, Kernel and Android engineering
http://free-electrons.com

  reply	other threads:[~2014-07-25  8:14 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-07-15 14:39 [PATCH v2 0/8] usb: add support for the generic PHY framework Antoine Ténart
2014-07-15 14:39 ` [PATCH v2 1/8] usb: move the OTG state from the USB PHY to the OTG structure Antoine Ténart
2014-07-15 14:39 ` [PATCH v2 2/8] usb: rename phy to usb_phy in OTG Antoine Ténart
2014-07-15 14:39 ` [PATCH v2 3/8] usb: add support to the generic PHY framework " Antoine Ténart
2014-07-15 14:39 ` [PATCH v2 4/8] usb: rename phy to usb_phy in HCD Antoine Ténart
2014-07-15 15:55   ` Sergei Shtylyov
2014-07-16 15:09     ` Felipe Balbi
2014-07-16 17:02       ` Sergei Shtylyov
2014-07-15 14:39 ` [PATCH v2 5/8] usb: rename gen_phy to phy " Antoine Ténart
2014-07-15 14:39 ` [PATCH v2 6/8] usb: allow to supply the PHY in the drivers when using HCD Antoine Ténart
2014-07-23 10:59   ` Peter Chen
2014-07-15 14:39 ` [PATCH v2 7/8] usb: rename transceiver and phy to usb_phy in ChipIdea Antoine Ténart
2014-07-24 11:12   ` Peter Chen
2014-07-15 14:39 ` [PATCH v2 8/8] usb: chipidea: add support to the generic PHY framework " Antoine Ténart
2014-07-24 11:39   ` Peter Chen
2014-07-24 12:25     ` Antoine Ténart
2014-07-25  0:34       ` Peter Chen
2014-07-25  8:13         ` Antoine Ténart [this message]
2014-07-25  8:33           ` Peter Chen
2014-07-25  8:38             ` Antoine Ténart
2014-07-15 15:58 ` [PATCH v2 0/8] usb: add support for the generic PHY framework Alan Stern
2014-07-16 17:45 ` Felipe Balbi
2014-07-17  8:03   ` Antoine Ténart
2014-07-17 17:23     ` Felipe Balbi
2014-07-23 11:36 ` Peter Chen

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=20140725081349.GB9756@kwain \
    --to=antoine.tenart@free-electrons.com \
    --cc=Peter.Chen@freescale.com \
    --cc=alexandre.belloni@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.