All of lore.kernel.org
 help / color / mirror / Atom feed
From: Marco Felsch <m.felsch@pengutronix.de>
To: Ahmad Fatoum <a.fatoum@pengutronix.de>
Cc: barebox@lists.infradead.org
Subject: Re: [PATCH] usb: imx-us-phy: add vbus_valid ro parameter
Date: Tue, 24 Aug 2021 13:13:46 +0200	[thread overview]
Message-ID: <YSTUamOOiYth87rF@pengutronix.de> (raw)
In-Reply-To: <36ae0849-3c29-ae3e-eb52-7271cf345232@pengutronix.de>

Hi Ahmad,

On 21-08-24 13:01, Ahmad Fatoum wrote:
> Hello Marco,
> 
> On 24.08.21 12:46, Marco Felsch wrote:
> > The parameter can be used by init scripts to detect a plugged usb cable.
> > Upon a plugged usb cable the barebox behaviour can be changed which can
> > be useful e.g. during production to apply a special production
> > environment.
> > 
> > Signed-off-by: Marco Felsch <m.felsch@pengutronix.de>
> > ---
> >  drivers/usb/imx/imx-usb-phy.c | 34 +++++++++++++++++++++++++++++++++-
> >  1 file changed, 33 insertions(+), 1 deletion(-)
> > 
> > diff --git a/drivers/usb/imx/imx-usb-phy.c b/drivers/usb/imx/imx-usb-phy.c
> > index 32098ef248..9420c8c109 100644
> > --- a/drivers/usb/imx/imx-usb-phy.c
> > +++ b/drivers/usb/imx/imx-usb-phy.c
> > @@ -37,9 +37,12 @@
> >  #define BM_USBPHY_CTRL_ENHOSTDISCONDETECT	BIT(1)
> >  
> >  #define ANADIG_USB1_CHRG_DETECT_SET		0x1b4
> > -#define ANADIG_USB2_CHRG_DETECT_SET		0x214
> >  #define ANADIG_USB1_CHRG_DETECT_EN_B		BIT(20)
> >  #define ANADIG_USB1_CHRG_DETECT_CHK_CHRG_B	BIT(19)
> > +#define ANADIG_USB1_VBUS_DETECT_STAT		0x1c0
> > +#define ANADIG_USB1_VBUS_DETECT_STAT_VBUS_VALID	BIT(3)
> > +#define ANADIG_USB2_CHRG_DETECT_SET		0x214
> > +#define ANADIG_USB2_VBUS_DETECT_STAT		0x220
> >  
> >  struct imx_usbphy {
> >  	struct usb_phy usb_phy;
> > @@ -132,6 +135,27 @@ static const struct phy_ops imx_phy_ops = {
> >  	.to_usbphy = imx_usbphy_to_usbphy,
> >  };
> >  
> > +/* Albeit the access can only happen serial use two variables */
> > +unsigned int vbus_valid_usb1;
> > +unsigned int vbus_valid_usb2;
> > +
> > +static int imx_usbphy_get_vbus_state(struct param_d *p, void *priv)
> > +{
> > +	struct imx_usbphy *imxphy = priv;
> > +	unsigned int *vbus_valid;
> > +	unsigned int reg, val;
> > +
> > +	reg = imxphy->port_id ?
> > +		ANADIG_USB1_VBUS_DETECT_STAT :
> > +		ANADIG_USB2_VBUS_DETECT_STAT;
> > +	val = readl(imxphy->anatop + reg);
> > +
> > +	vbus_valid = imxphy->port_id ? &vbus_valid_usb1 : &vbus_valid_usb2;
> > +	*vbus_valid = !!(val & ANADIG_USB1_VBUS_DETECT_STAT_VBUS_VALID);
> > +
> > +	return 0;
> > +}
> > +
> >  static int imx_usbphy_probe(struct device_d *dev)
> >  {
> >  	struct resource *iores;
> > @@ -149,11 +173,19 @@ static int imx_usbphy_probe(struct device_d *dev)
> >  	imxphy->port_id = ret;
> >  
> >  	if (of_get_property(np, "fsl,anatop", NULL)) {
> > +		unsigned int *vbus_valid = imxphy->port_id ?
> > +			&vbus_valid_usb1 :
> > +			&vbus_valid_usb2;
> 
> Can you allocate this in imxphy? That way you avoid globals
> and don't hardcode the existance of only two phys into the driver.

You're right, good point.

> > +
> >  		imxphy->anatop =
> >  			syscon_base_lookup_by_phandle(np, "fsl,anatop");
> >  		ret = PTR_ERR_OR_ZERO(imxphy->anatop);
> >  		if (ret)
> >  			goto err_free;
> > +
> > +		dev_add_param_bool(dev, "vbus_valid", param_set_readonly,
> > +				   imx_usbphy_get_vbus_state, vbus_valid,
> > +				   imxphy);
> 
> I assume valid == usb port is in gadget mode and host is supplying vbus?

Your're right.

> What happens when port is in host mode? A comment explaining this would
> be nice.

That's a good question didn't checked this and the datasheet don't
distinguish between those modes. I will test it and add a comment.

Regards,
  Marco

> 
> >  	}
> >  
> >  	iores = dev_request_mem_resource(dev, 0);
> > 
> 
> 
> -- 
> Pengutronix e.K.                           |                             |
> Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
> 31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
> Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |
> 

-- 
Pengutronix e.K.                           |                             |
Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox


  reply	other threads:[~2021-08-24 11:16 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-08-24 10:46 [PATCH] usb: imx-us-phy: add vbus_valid ro parameter Marco Felsch
2021-08-24 11:01 ` Ahmad Fatoum
2021-08-24 11:13   ` Marco Felsch [this message]
2021-08-24 11:21     ` Ahmad Fatoum

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=YSTUamOOiYth87rF@pengutronix.de \
    --to=m.felsch@pengutronix.de \
    --cc=a.fatoum@pengutronix.de \
    --cc=barebox@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 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.