Message ID | 1382680943-9258-3-git-send-email-peter.chen@freescale.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Dear Peter Chen, > Due to imx28 needs ARM swp instruction for writing, we set > CI_HDRC_IMX28_WRITE_FIX for imx28. > > Signed-off-by: Peter Chen <peter.chen@freescale.com> > --- > drivers/usb/chipidea/ci_hdrc_imx.c | 32 ++++++++++++++++++++++++++------ > 1 files changed, 26 insertions(+), 6 deletions(-) > > diff --git a/drivers/usb/chipidea/ci_hdrc_imx.c > b/drivers/usb/chipidea/ci_hdrc_imx.c index 023d3cb..68f7f5e 100644 > --- a/drivers/usb/chipidea/ci_hdrc_imx.c > +++ b/drivers/usb/chipidea/ci_hdrc_imx.c > @@ -23,6 +23,26 @@ > #include "ci.h" > #include "ci_hdrc_imx.h" > > +#define CI_HDRC_IMX_IMX28_WRITE_FIX BIT(0) > + > +struct ci_hdrc_imx_platform_flag { > + unsigned int flags; > +}; > + > +static const struct ci_hdrc_imx_platform_flag imx27_usb_data = { > +}; > + > +static const struct ci_hdrc_imx_platform_flag imx28_usb_data = { > + .flags = CI_HDRC_IMX_IMX28_WRITE_FIX, > +}; > + > +static const struct of_device_id ci_hdrc_imx_dt_ids[] = { > + { .compatible = "fsl,imx28-usb", .data = &imx28_usb_data}, > + { .compatible = "fsl,imx27-usb", .data = &imx27_usb_data}, Just a nit-pick, but the order here is wrong ;-) [...] Best regards, Marek Vasut
On Sun, Oct 27, 2013 at 05:25:36PM +0100, Marek Vasut wrote: > > +static const struct of_device_id ci_hdrc_imx_dt_ids[] = { > > + { .compatible = "fsl,imx28-usb", .data = &imx28_usb_data}, > > + { .compatible = "fsl,imx27-usb", .data = &imx27_usb_data}, > > Just a nit-pick, but the order here is wrong ;-) Oh, no. Before of_match_device() gets improved to find the best match, we have to sort the table from the most specific entry to the most generic one. Shawn
Hi Shawn, > On Sun, Oct 27, 2013 at 05:25:36PM +0100, Marek Vasut wrote: > > > +static const struct of_device_id ci_hdrc_imx_dt_ids[] = { > > > + { .compatible = "fsl,imx28-usb", .data = &imx28_usb_data}, > > > + { .compatible = "fsl,imx27-usb", .data = &imx27_usb_data}, > > > > Just a nit-pick, but the order here is wrong ;-) > > Oh, no. Before of_match_device() gets improved to find the best match, > we have to sort the table from the most specific entry to the most > generic one. Oh, thanks for explaining! Best regards, Marek Vasut
diff --git a/drivers/usb/chipidea/ci_hdrc_imx.c b/drivers/usb/chipidea/ci_hdrc_imx.c index 023d3cb..68f7f5e 100644 --- a/drivers/usb/chipidea/ci_hdrc_imx.c +++ b/drivers/usb/chipidea/ci_hdrc_imx.c @@ -23,6 +23,26 @@ #include "ci.h" #include "ci_hdrc_imx.h" +#define CI_HDRC_IMX_IMX28_WRITE_FIX BIT(0) + +struct ci_hdrc_imx_platform_flag { + unsigned int flags; +}; + +static const struct ci_hdrc_imx_platform_flag imx27_usb_data = { +}; + +static const struct ci_hdrc_imx_platform_flag imx28_usb_data = { + .flags = CI_HDRC_IMX_IMX28_WRITE_FIX, +}; + +static const struct of_device_id ci_hdrc_imx_dt_ids[] = { + { .compatible = "fsl,imx28-usb", .data = &imx28_usb_data}, + { .compatible = "fsl,imx27-usb", .data = &imx27_usb_data}, + { /* sentinel */ } +}; +MODULE_DEVICE_TABLE(of, ci_hdrc_imx_dt_ids); + struct ci_hdrc_imx_data { struct usb_phy *phy; struct platform_device *ci_pdev; @@ -82,6 +102,9 @@ static int ci_hdrc_imx_probe(struct platform_device *pdev) CI_HDRC_DISABLE_STREAMING, }; int ret; + const struct of_device_id *of_id = + of_match_device(ci_hdrc_imx_dt_ids, &pdev->dev); + const struct ci_hdrc_imx_platform_flag *imx_platform_flag = of_id->data; data = devm_kzalloc(&pdev->dev, sizeof(*data), GFP_KERNEL); if (!data) { @@ -115,6 +138,9 @@ static int ci_hdrc_imx_probe(struct platform_device *pdev) pdata.phy = data->phy; + if (imx_platform_flag->flags & CI_HDRC_IMX_IMX28_WRITE_FIX) + pdata.flags |= CI_HDRC_IMX28_WRITE_FIX; + if (!pdev->dev.dma_mask) pdev->dev.dma_mask = &pdev->dev.coherent_dma_mask; if (!pdev->dev.coherent_dma_mask) @@ -174,12 +200,6 @@ static int ci_hdrc_imx_remove(struct platform_device *pdev) return 0; } -static const struct of_device_id ci_hdrc_imx_dt_ids[] = { - { .compatible = "fsl,imx27-usb", }, - { /* sentinel */ } -}; -MODULE_DEVICE_TABLE(of, ci_hdrc_imx_dt_ids); - static struct platform_driver ci_hdrc_imx_driver = { .probe = ci_hdrc_imx_probe, .remove = ci_hdrc_imx_remove,
Due to imx28 needs ARM swp instruction for writing, we set CI_HDRC_IMX28_WRITE_FIX for imx28. Signed-off-by: Peter Chen <peter.chen@freescale.com> --- drivers/usb/chipidea/ci_hdrc_imx.c | 32 ++++++++++++++++++++++++++------ 1 files changed, 26 insertions(+), 6 deletions(-)