Message ID | 1358158361-25550-3-git-send-email-peter.chen@freescale.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Mon, Jan 14, 2013 at 06:12:40PM +0800, Peter Chen wrote: > As mach/hardware.h is deleted, we can't visit platform code at driver. > It has no phy driver to combine with this controller, so it has to use > ioremap to map phy address as a workaround. > > Signed-off-by: Peter Chen <peter.chen@freescale.com> > --- > drivers/usb/gadget/fsl_mxc_udc.c | 12 +++++++----- > 1 files changed, 7 insertions(+), 5 deletions(-) > > diff --git a/drivers/usb/gadget/fsl_mxc_udc.c b/drivers/usb/gadget/fsl_mxc_udc.c > index 6df45f7..0e858e6 100644 > --- a/drivers/usb/gadget/fsl_mxc_udc.c > +++ b/drivers/usb/gadget/fsl_mxc_udc.c > @@ -23,7 +23,8 @@ static struct clk *mxc_per_clk; > static struct clk *mxc_ipg_clk; > > /* workaround ENGcm09152 for i.MX35 */ > -#define USBPHYCTRL_OTGBASE_OFFSET 0x608 > +#define MX35_USBPHYCTRL_OFFSET 0x600 > +#define USBPHYCTRL_OTGBASE_OFFSET 0x8 > #define USBPHYCTRL_EVDO (1 << 23) > > int fsl_udc_clk_init(enum fsl_udc_type devtype, struct platform_device *pdev) > @@ -83,15 +84,16 @@ void fsl_udc_clk_finalize(enum fsl_udc_type devtype, > struct fsl_usb2_platform_data *pdata = pdev->dev.platform_data; > if (devtype == IMX35_UDC) { > unsigned int v; > + void __iomem *phy_regs = ioremap((unsigned long)pdata->regs + > + MX35_USBPHYCTRL_OFFSET, 512); as I said before, this should be passed via struct resource, not pdata.
On Mon, Jan 14, 2013 at 12:17:08PM +0200, Felipe Balbi wrote: > On Mon, Jan 14, 2013 at 06:12:40PM +0800, Peter Chen wrote: > > As mach/hardware.h is deleted, we can't visit platform code at driver. > > It has no phy driver to combine with this controller, so it has to use > > ioremap to map phy address as a workaround. > > > > Signed-off-by: Peter Chen <peter.chen@freescale.com> > > --- > > drivers/usb/gadget/fsl_mxc_udc.c | 12 +++++++----- > > 1 files changed, 7 insertions(+), 5 deletions(-) > > > > diff --git a/drivers/usb/gadget/fsl_mxc_udc.c b/drivers/usb/gadget/fsl_mxc_udc.c > > index 6df45f7..0e858e6 100644 > > --- a/drivers/usb/gadget/fsl_mxc_udc.c > > +++ b/drivers/usb/gadget/fsl_mxc_udc.c > > @@ -23,7 +23,8 @@ static struct clk *mxc_per_clk; > > static struct clk *mxc_ipg_clk; > > > > /* workaround ENGcm09152 for i.MX35 */ > > -#define USBPHYCTRL_OTGBASE_OFFSET 0x608 > > +#define MX35_USBPHYCTRL_OFFSET 0x600 > > +#define USBPHYCTRL_OTGBASE_OFFSET 0x8 > > #define USBPHYCTRL_EVDO (1 << 23) > > > > int fsl_udc_clk_init(enum fsl_udc_type devtype, struct platform_device *pdev) > > @@ -83,15 +84,16 @@ void fsl_udc_clk_finalize(enum fsl_udc_type devtype, > > struct fsl_usb2_platform_data *pdata = pdev->dev.platform_data; > > if (devtype == IMX35_UDC) { > > unsigned int v; > > + void __iomem *phy_regs = ioremap((unsigned long)pdata->regs + > > + MX35_USBPHYCTRL_OFFSET, 512); > > as I said before, this should be passed via struct resource, not pdata. My careless, will change at next version > > -- > balbi
On Mon, Jan 14, 2013 at 06:12:40PM +0800, Peter Chen wrote: > @@ -83,15 +84,16 @@ void fsl_udc_clk_finalize(enum fsl_udc_type devtype, > struct fsl_usb2_platform_data *pdata = pdev->dev.platform_data; > if (devtype == IMX35_UDC) { > unsigned int v; > + void __iomem *phy_regs = ioremap((unsigned long)pdata->regs + > + MX35_USBPHYCTRL_OFFSET, 512); Consider that ioremap() can fail.
On Mon, Jan 14, 2013 at 01:10:56PM +0000, Russell King - ARM Linux wrote: > On Mon, Jan 14, 2013 at 06:12:40PM +0800, Peter Chen wrote: > > @@ -83,15 +84,16 @@ void fsl_udc_clk_finalize(enum fsl_udc_type devtype, > > struct fsl_usb2_platform_data *pdata = pdev->dev.platform_data; > > if (devtype == IMX35_UDC) { > > unsigned int v; > > + void __iomem *phy_regs = ioremap((unsigned long)pdata->regs + > > + MX35_USBPHYCTRL_OFFSET, 512); > > Consider that ioremap() can fail. > Thanks, will check NULL pointer.
diff --git a/drivers/usb/gadget/fsl_mxc_udc.c b/drivers/usb/gadget/fsl_mxc_udc.c index 6df45f7..0e858e6 100644 --- a/drivers/usb/gadget/fsl_mxc_udc.c +++ b/drivers/usb/gadget/fsl_mxc_udc.c @@ -23,7 +23,8 @@ static struct clk *mxc_per_clk; static struct clk *mxc_ipg_clk; /* workaround ENGcm09152 for i.MX35 */ -#define USBPHYCTRL_OTGBASE_OFFSET 0x608 +#define MX35_USBPHYCTRL_OFFSET 0x600 +#define USBPHYCTRL_OTGBASE_OFFSET 0x8 #define USBPHYCTRL_EVDO (1 << 23) int fsl_udc_clk_init(enum fsl_udc_type devtype, struct platform_device *pdev) @@ -83,15 +84,16 @@ void fsl_udc_clk_finalize(enum fsl_udc_type devtype, struct fsl_usb2_platform_data *pdata = pdev->dev.platform_data; if (devtype == IMX35_UDC) { unsigned int v; + void __iomem *phy_regs = ioremap((unsigned long)pdata->regs + + MX35_USBPHYCTRL_OFFSET, 512); /* workaround ENGcm09152 for i.MX35 */ if (pdata->workaround & FLS_USB2_WORKAROUND_ENGCM09152) { - v = readl(MX35_IO_ADDRESS(MX35_USB_BASE_ADDR + - USBPHYCTRL_OTGBASE_OFFSET)); + v = readl(phy_regs + USBPHYCTRL_OTGBASE_OFFSET); writel(v | USBPHYCTRL_EVDO, - MX35_IO_ADDRESS(MX35_USB_BASE_ADDR + - USBPHYCTRL_OTGBASE_OFFSET)); + phy_regs + USBPHYCTRL_OTGBASE_OFFSET); } + iounmap(phy_regs); } /* ULPI transceivers don't need usbpll */
As mach/hardware.h is deleted, we can't visit platform code at driver. It has no phy driver to combine with this controller, so it has to use ioremap to map phy address as a workaround. Signed-off-by: Peter Chen <peter.chen@freescale.com> --- drivers/usb/gadget/fsl_mxc_udc.c | 12 +++++++----- 1 files changed, 7 insertions(+), 5 deletions(-)