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
next prev parent 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.