diff mbox

[v3,05/11] usb: phy-mxs: Add anatop regmap

Message ID 1383616183-10511-6-git-send-email-peter.chen@freescale.com (mailing list archive)
State New, archived
Headers show

Commit Message

Peter Chen Nov. 5, 2013, 1:49 a.m. UTC
It is needed by imx6 SoC serial, but not for imx23 and imx28.

Signed-off-by: Peter Chen <peter.chen@freescale.com>
---
 drivers/usb/phy/phy-mxs-usb.c |   15 +++++++++++++++
 1 files changed, 15 insertions(+), 0 deletions(-)

Comments

Shawn Guo Nov. 5, 2013, 2:47 a.m. UTC | #1
On Tue, Nov 05, 2013 at 09:49:37AM +0800, Peter Chen wrote:
> It is needed by imx6 SoC serial, but not for imx23 and imx28.

s/serial/series

Should we have another MXS_PHY_XXX flag for this, so that we can
explicitly check when anatop must be there?

Shawn

> 
> Signed-off-by: Peter Chen <peter.chen@freescale.com>
> ---
>  drivers/usb/phy/phy-mxs-usb.c |   15 +++++++++++++++
>  1 files changed, 15 insertions(+), 0 deletions(-)
> 
> diff --git a/drivers/usb/phy/phy-mxs-usb.c b/drivers/usb/phy/phy-mxs-usb.c
> index 472fe36..8cdfbf1 100644
> --- a/drivers/usb/phy/phy-mxs-usb.c
> +++ b/drivers/usb/phy/phy-mxs-usb.c
> @@ -21,6 +21,8 @@
>  #include <linux/err.h>
>  #include <linux/io.h>
>  #include <linux/of_device.h>
> +#include <linux/regmap.h>
> +#include <linux/mfd/syscon.h>
>  
>  #define DRIVER_NAME "mxs_phy"
>  
> @@ -87,6 +89,7 @@ struct mxs_phy {
>  	struct usb_phy phy;
>  	struct clk *clk;
>  	unsigned int flags;
> +	struct regmap *regmap_anatop;
>  };
>  
>  static int mxs_phy_hw_init(struct mxs_phy *mxs_phy)
> @@ -191,6 +194,7 @@ static int mxs_phy_probe(struct platform_device *pdev)
>  	const struct of_device_id *of_id =
>  			of_match_device(mxs_phy_dt_ids, &pdev->dev);
>  	const struct mxs_phy_platform_flag *platform_flag = of_id->data;
> +	struct device_node *np = pdev->dev.of_node;
>  
>  	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
>  	base = devm_ioremap_resource(&pdev->dev, res);
> @@ -210,6 +214,17 @@ static int mxs_phy_probe(struct platform_device *pdev)
>  		return -ENOMEM;
>  	}
>  
> +	/* Some SoCs don't have anatop registers */
> +	if (of_get_property(np, "fsl,anatop", NULL)) {
> +		mxs_phy->regmap_anatop = syscon_regmap_lookup_by_phandle
> +			(np, "fsl,anatop");
> +		if (IS_ERR(mxs_phy->regmap_anatop)) {
> +			dev_dbg(&pdev->dev,
> +				"failed to find regmap for anatop\n");
> +			return PTR_ERR(mxs_phy->regmap_anatop);
> +		}
> +	}
> +
>  	mxs_phy->phy.io_priv		= base;
>  	mxs_phy->phy.dev		= &pdev->dev;
>  	mxs_phy->phy.label		= DRIVER_NAME;
> -- 
> 1.7.1
> 
>
Peter Chen Nov. 5, 2013, 5:17 a.m. UTC | #2
On Tue, Nov 05, 2013 at 10:47:55AM +0800, Shawn Guo wrote:
> On Tue, Nov 05, 2013 at 09:49:37AM +0800, Peter Chen wrote:
> > It is needed by imx6 SoC serial, but not for imx23 and imx28.
> 
> s/serial/series
> 
> Should we have another MXS_PHY_XXX flag for this, so that we can
> explicitly check when anatop must be there?
> 

OK, I will add it, it can let the imx23/28 do not check dts.

> Shawn
> 
> > 
> > Signed-off-by: Peter Chen <peter.chen@freescale.com>
> > ---
> >  drivers/usb/phy/phy-mxs-usb.c |   15 +++++++++++++++
> >  1 files changed, 15 insertions(+), 0 deletions(-)
> > 
> > diff --git a/drivers/usb/phy/phy-mxs-usb.c b/drivers/usb/phy/phy-mxs-usb.c
> > index 472fe36..8cdfbf1 100644
> > --- a/drivers/usb/phy/phy-mxs-usb.c
> > +++ b/drivers/usb/phy/phy-mxs-usb.c
> > @@ -21,6 +21,8 @@
> >  #include <linux/err.h>
> >  #include <linux/io.h>
> >  #include <linux/of_device.h>
> > +#include <linux/regmap.h>
> > +#include <linux/mfd/syscon.h>
> >  
> >  #define DRIVER_NAME "mxs_phy"
> >  
> > @@ -87,6 +89,7 @@ struct mxs_phy {
> >  	struct usb_phy phy;
> >  	struct clk *clk;
> >  	unsigned int flags;
> > +	struct regmap *regmap_anatop;
> >  };
> >  
> >  static int mxs_phy_hw_init(struct mxs_phy *mxs_phy)
> > @@ -191,6 +194,7 @@ static int mxs_phy_probe(struct platform_device *pdev)
> >  	const struct of_device_id *of_id =
> >  			of_match_device(mxs_phy_dt_ids, &pdev->dev);
> >  	const struct mxs_phy_platform_flag *platform_flag = of_id->data;
> > +	struct device_node *np = pdev->dev.of_node;
> >  
> >  	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
> >  	base = devm_ioremap_resource(&pdev->dev, res);
> > @@ -210,6 +214,17 @@ static int mxs_phy_probe(struct platform_device *pdev)
> >  		return -ENOMEM;
> >  	}
> >  
> > +	/* Some SoCs don't have anatop registers */
> > +	if (of_get_property(np, "fsl,anatop", NULL)) {
> > +		mxs_phy->regmap_anatop = syscon_regmap_lookup_by_phandle
> > +			(np, "fsl,anatop");
> > +		if (IS_ERR(mxs_phy->regmap_anatop)) {
> > +			dev_dbg(&pdev->dev,
> > +				"failed to find regmap for anatop\n");
> > +			return PTR_ERR(mxs_phy->regmap_anatop);
> > +		}
> > +	}
> > +
> >  	mxs_phy->phy.io_priv		= base;
> >  	mxs_phy->phy.dev		= &pdev->dev;
> >  	mxs_phy->phy.label		= DRIVER_NAME;
> > -- 
> > 1.7.1
> > 
> >
diff mbox

Patch

diff --git a/drivers/usb/phy/phy-mxs-usb.c b/drivers/usb/phy/phy-mxs-usb.c
index 472fe36..8cdfbf1 100644
--- a/drivers/usb/phy/phy-mxs-usb.c
+++ b/drivers/usb/phy/phy-mxs-usb.c
@@ -21,6 +21,8 @@ 
 #include <linux/err.h>
 #include <linux/io.h>
 #include <linux/of_device.h>
+#include <linux/regmap.h>
+#include <linux/mfd/syscon.h>
 
 #define DRIVER_NAME "mxs_phy"
 
@@ -87,6 +89,7 @@  struct mxs_phy {
 	struct usb_phy phy;
 	struct clk *clk;
 	unsigned int flags;
+	struct regmap *regmap_anatop;
 };
 
 static int mxs_phy_hw_init(struct mxs_phy *mxs_phy)
@@ -191,6 +194,7 @@  static int mxs_phy_probe(struct platform_device *pdev)
 	const struct of_device_id *of_id =
 			of_match_device(mxs_phy_dt_ids, &pdev->dev);
 	const struct mxs_phy_platform_flag *platform_flag = of_id->data;
+	struct device_node *np = pdev->dev.of_node;
 
 	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
 	base = devm_ioremap_resource(&pdev->dev, res);
@@ -210,6 +214,17 @@  static int mxs_phy_probe(struct platform_device *pdev)
 		return -ENOMEM;
 	}
 
+	/* Some SoCs don't have anatop registers */
+	if (of_get_property(np, "fsl,anatop", NULL)) {
+		mxs_phy->regmap_anatop = syscon_regmap_lookup_by_phandle
+			(np, "fsl,anatop");
+		if (IS_ERR(mxs_phy->regmap_anatop)) {
+			dev_dbg(&pdev->dev,
+				"failed to find regmap for anatop\n");
+			return PTR_ERR(mxs_phy->regmap_anatop);
+		}
+	}
+
 	mxs_phy->phy.io_priv		= base;
 	mxs_phy->phy.dev		= &pdev->dev;
 	mxs_phy->phy.label		= DRIVER_NAME;