Message ID | 1352981028-14312-7-git-send-email-m.grzeschik@pengutronix.de (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Michael Grzeschik <m.grzeschik@pengutronix.de> writes: > This adds mx53 as the next user of the usbmisc driver and makes it > possible to disable the overcurrent-detection of the internal phy. > > Signed-off-by: Michael Grzeschik <m.grzeschik@pengutronix.de> > Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de> > --- > drivers/usb/chipidea/usbmisc_imx.c | 28 ++++++++++++++++++++++++++++ > 1 file changed, 28 insertions(+) > > diff --git a/drivers/usb/chipidea/usbmisc_imx.c b/drivers/usb/chipidea/usbmisc_imx.c > index 913e414..9718500 100644 > --- a/drivers/usb/chipidea/usbmisc_imx.c > +++ b/drivers/usb/chipidea/usbmisc_imx.c > @@ -54,6 +54,29 @@ static struct usbmisc_usb_device *get_usbdev(struct device *dev) > return &usbmisc->usbdev[i]; > } > > +static int usbmisc_imx53_init(struct device *dev) > +{ > + struct usbmisc_usb_device *usbdev; > + void __iomem *reg; > + unsigned long flags; > + u32 val; > + > + usbdev = get_usbdev(dev); > + if (IS_ERR(usbdev)) > + return PTR_ERR(usbdev); > + > + reg = usbmisc->base + usbdev->index * 8; > + > + if (usbdev->disable_oc) { > + spin_lock_irqsave(&usbmisc->lock, flags); > + val = readl(reg); > + writel(val | (1 << 5), reg); We know now that (1 << 5) probably means "disable overcurrent detection", but is there a definition for this register's bits somewhere? Regards, -- Alex
On Fri, Nov 16, 2012 at 03:22:34PM +0200, Alexander Shishkin wrote: > Michael Grzeschik <m.grzeschik@pengutronix.de> writes: > > > This adds mx53 as the next user of the usbmisc driver and makes it > > possible to disable the overcurrent-detection of the internal phy. > > > > Signed-off-by: Michael Grzeschik <m.grzeschik@pengutronix.de> > > Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de> > > --- > > drivers/usb/chipidea/usbmisc_imx.c | 28 ++++++++++++++++++++++++++++ > > 1 file changed, 28 insertions(+) > > > > diff --git a/drivers/usb/chipidea/usbmisc_imx.c b/drivers/usb/chipidea/usbmisc_imx.c > > index 913e414..9718500 100644 > > --- a/drivers/usb/chipidea/usbmisc_imx.c > > +++ b/drivers/usb/chipidea/usbmisc_imx.c > > @@ -54,6 +54,29 @@ static struct usbmisc_usb_device *get_usbdev(struct device *dev) > > return &usbmisc->usbdev[i]; > > } > > > > +static int usbmisc_imx53_init(struct device *dev) > > +{ > > + struct usbmisc_usb_device *usbdev; > > + void __iomem *reg; > > + unsigned long flags; > > + u32 val; > > + > > + usbdev = get_usbdev(dev); > > + if (IS_ERR(usbdev)) > > + return PTR_ERR(usbdev); > > + > > + reg = usbmisc->base + usbdev->index * 8; > > + > > + if (usbdev->disable_oc) { > > + spin_lock_irqsave(&usbmisc->lock, flags); > > + val = readl(reg); > > + writel(val | (1 << 5), reg); > > We know now that (1 << 5) probably means "disable overcurrent > detection", but is there a definition for this register's bits > somewhere? Will add defines for the magic numbers used. Thanks, Michael
diff --git a/drivers/usb/chipidea/usbmisc_imx.c b/drivers/usb/chipidea/usbmisc_imx.c index 913e414..9718500 100644 --- a/drivers/usb/chipidea/usbmisc_imx.c +++ b/drivers/usb/chipidea/usbmisc_imx.c @@ -54,6 +54,29 @@ static struct usbmisc_usb_device *get_usbdev(struct device *dev) return &usbmisc->usbdev[i]; } +static int usbmisc_imx53_init(struct device *dev) +{ + struct usbmisc_usb_device *usbdev; + void __iomem *reg; + unsigned long flags; + u32 val; + + usbdev = get_usbdev(dev); + if (IS_ERR(usbdev)) + return PTR_ERR(usbdev); + + reg = usbmisc->base + usbdev->index * 8; + + if (usbdev->disable_oc) { + spin_lock_irqsave(&usbmisc->lock, flags); + val = readl(reg); + writel(val | (1 << 5), reg); + spin_unlock_irqrestore(&usbmisc->lock, flags); + } + + return 0; +} + static int usbmisc_imx6q_init(struct device *dev) { @@ -76,11 +99,16 @@ static int usbmisc_imx6q_init(struct device *dev) return 0; } +static const struct usbmisc_ops imx53_usbmisc_ops = { + .init = usbmisc_imx53_init, +}; + static const struct usbmisc_ops imx6q_usbmisc_ops = { .init = usbmisc_imx6q_init, }; static const struct of_device_id usbmisc_imx_dt_ids[] = { + { .compatible = "fsl,imx53-usbmisc", .data = (void *)&imx53_usbmisc_ops }, { .compatible = "fsl,imx6q-usbmisc", .data = (void *)&imx6q_usbmisc_ops }, { /* sentinel */ } };