[PATCH v4 02/17] usb: phy-mxs: Add platform judgement code

2013-12-03 Thread Peter Chen
The mxs-phy has several bugs and features at different
versions, the driver code can get it through of_device_id.data.

Signed-off-by: Peter Chen peter.c...@freescale.com
---
 drivers/usb/phy/phy-mxs-usb.c |   58 ++--
 1 files changed, 49 insertions(+), 9 deletions(-)

diff --git a/drivers/usb/phy/phy-mxs-usb.c b/drivers/usb/phy/phy-mxs-usb.c
index 545844b..f6cbc78 100644
--- a/drivers/usb/phy/phy-mxs-usb.c
+++ b/drivers/usb/phy/phy-mxs-usb.c
@@ -1,5 +1,5 @@
 /*
- * Copyright 2012 Freescale Semiconductor, Inc.
+ * Copyright 2012-2013 Freescale Semiconductor, Inc.
  * Copyright (C) 2012 Marek Vasut ma...@denx.de
  * on behalf of DENX Software Engineering GmbH
  *
@@ -20,6 +20,7 @@
 #include linux/delay.h
 #include linux/err.h
 #include linux/io.h
+#include linux/of_device.h
 
 #define DRIVER_NAME mxs_phy
 
@@ -34,13 +35,55 @@
 #define BM_USBPHY_CTRL_ENUTMILEVEL2BIT(14)
 #define BM_USBPHY_CTRL_ENHOSTDISCONDETECT  BIT(1)
 
+#define to_mxs_phy(p) container_of((p), struct mxs_phy, phy)
+
+/* Do disconnection between PHY and controller without vbus */
+#define MXS_PHY_DISCONNECT_LINE_WITHOUT_VBUS   BIT(0)
+
+/*
+ * The PHY will be in messy if there is an wakeup after putting
+ * bus to suspend (set portsc.suspendM) but before setting PHY to low
+ * power mode (set portsc.phcd).
+ */
+#define MXS_PHY_ABNORAML_IN_SUSPENDBIT(1)
+
+/*
+ * The SOF sends too fast after resuming, it will cause disconnection
+ * between host and high speed device.
+ */
+#define MXS_PHY_SENDING_SOF_TOO_FAST   BIT(2)
+
+struct mxs_phy_data {
+   unsigned int flags;
+};
+
+static const struct mxs_phy_data imx23_phy_data = {
+   .flags = MXS_PHY_ABNORAML_IN_SUSPEND | MXS_PHY_SENDING_SOF_TOO_FAST,
+};
+
+static const struct mxs_phy_data imx6q_phy_data = {
+   .flags = MXS_PHY_SENDING_SOF_TOO_FAST |
+   MXS_PHY_DISCONNECT_LINE_WITHOUT_VBUS,
+};
+
+static const struct mxs_phy_data imx6sl_phy_data = {
+   .flags = MXS_PHY_DISCONNECT_LINE_WITHOUT_VBUS,
+};
+
+static const struct of_device_id mxs_phy_dt_ids[] = {
+   { .compatible = fsl,imx6sl-usbphy, .data = imx6sl_phy_data, },
+   { .compatible = fsl,imx6q-usbphy, .data = imx6q_phy_data, },
+   { .compatible = fsl,imx23-usbphy, .data = imx23_phy_data, },
+   { /* sentinel */ }
+};
+MODULE_DEVICE_TABLE(of, mxs_phy_dt_ids);
+
 struct mxs_phy {
struct usb_phy phy;
struct clk *clk;
+   const struct mxs_phy_data *data;
 };
 
-#define to_mxs_phy(p) container_of((p), struct mxs_phy, phy)
-
 static int mxs_phy_hw_init(struct mxs_phy *mxs_phy)
 {
int ret;
@@ -131,6 +174,8 @@ static int mxs_phy_probe(struct platform_device *pdev)
struct clk *clk;
struct mxs_phy *mxs_phy;
int ret;
+   const struct of_device_id *of_id =
+   of_match_device(mxs_phy_dt_ids, pdev-dev);
 
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
base = devm_ioremap_resource(pdev-dev, res);
@@ -163,6 +208,7 @@ static int mxs_phy_probe(struct platform_device *pdev)
ATOMIC_INIT_NOTIFIER_HEAD(mxs_phy-phy.notifier);
 
mxs_phy-clk = clk;
+   mxs_phy-data = of_id-data;
 
platform_set_drvdata(pdev, mxs_phy);
 
@@ -182,12 +228,6 @@ static int mxs_phy_remove(struct platform_device *pdev)
return 0;
 }
 
-static const struct of_device_id mxs_phy_dt_ids[] = {
-   { .compatible = fsl,imx23-usbphy, },
-   { /* sentinel */ }
-};
-MODULE_DEVICE_TABLE(of, mxs_phy_dt_ids);
-
 static struct platform_driver mxs_phy_driver = {
.probe = mxs_phy_probe,
.remove = mxs_phy_remove,
-- 
1.7.8


--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v4 02/17] usb: phy-mxs: Add platform judgement code

2013-12-03 Thread Marc Kleine-Budde
On 12/03/2013 08:36 AM, Peter Chen wrote:
 The mxs-phy has several bugs and features at different
 versions, the driver code can get it through of_device_id.data.
 
 Signed-off-by: Peter Chen peter.c...@freescale.com
 ---
  drivers/usb/phy/phy-mxs-usb.c |   58 ++--
  1 files changed, 49 insertions(+), 9 deletions(-)
 
 diff --git a/drivers/usb/phy/phy-mxs-usb.c b/drivers/usb/phy/phy-mxs-usb.c
 index 545844b..f6cbc78 100644
 --- a/drivers/usb/phy/phy-mxs-usb.c
 +++ b/drivers/usb/phy/phy-mxs-usb.c
 @@ -1,5 +1,5 @@
  /*
 - * Copyright 2012 Freescale Semiconductor, Inc.
 + * Copyright 2012-2013 Freescale Semiconductor, Inc.
   * Copyright (C) 2012 Marek Vasut ma...@denx.de
   * on behalf of DENX Software Engineering GmbH
   *
 @@ -20,6 +20,7 @@
  #include linux/delay.h
  #include linux/err.h
  #include linux/io.h
 +#include linux/of_device.h
  
  #define DRIVER_NAME mxs_phy
  
 @@ -34,13 +35,55 @@
  #define BM_USBPHY_CTRL_ENUTMILEVEL2  BIT(14)
  #define BM_USBPHY_CTRL_ENHOSTDISCONDETECTBIT(1)
  
 +#define to_mxs_phy(p) container_of((p), struct mxs_phy, phy)
 +
 +/* Do disconnection between PHY and controller without vbus */
 +#define MXS_PHY_DISCONNECT_LINE_WITHOUT_VBUS BIT(0)
 +
 +/*
 + * The PHY will be in messy if there is an wakeup after putting
   ^^
   a
Do you mean messy state?

 + * bus to suspend (set portsc.suspendM) but before setting PHY to low
 + * power mode (set portsc.phcd).
 + */

Marc

-- 
Pengutronix e.K.  | Marc Kleine-Budde   |
Industrial Linux Solutions| Phone: +49-231-2826-924 |
Vertretung West/Dortmund  | Fax:   +49-5121-206917- |
Amtsgericht Hildesheim, HRA 2686  | http://www.pengutronix.de   |



signature.asc
Description: OpenPGP digital signature


Re: [PATCH v4 02/17] usb: phy-mxs: Add platform judgement code

2013-12-03 Thread Peter Chen
On Tue, Dec 03, 2013 at 09:38:20AM +0100, Marc Kleine-Budde wrote:
 On 12/03/2013 08:36 AM, Peter Chen wrote:
  The mxs-phy has several bugs and features at different
  versions, the driver code can get it through of_device_id.data.
  
  Signed-off-by: Peter Chen peter.c...@freescale.com
  ---
   drivers/usb/phy/phy-mxs-usb.c |   58 
  ++--
   1 files changed, 49 insertions(+), 9 deletions(-)
  
  diff --git a/drivers/usb/phy/phy-mxs-usb.c b/drivers/usb/phy/phy-mxs-usb.c
  index 545844b..f6cbc78 100644
  --- a/drivers/usb/phy/phy-mxs-usb.c
  +++ b/drivers/usb/phy/phy-mxs-usb.c
  @@ -1,5 +1,5 @@
   /*
  - * Copyright 2012 Freescale Semiconductor, Inc.
  + * Copyright 2012-2013 Freescale Semiconductor, Inc.
* Copyright (C) 2012 Marek Vasut ma...@denx.de
* on behalf of DENX Software Engineering GmbH
*
  @@ -20,6 +20,7 @@
   #include linux/delay.h
   #include linux/err.h
   #include linux/io.h
  +#include linux/of_device.h
   
   #define DRIVER_NAME mxs_phy
   
  @@ -34,13 +35,55 @@
   #define BM_USBPHY_CTRL_ENUTMILEVEL2BIT(14)
   #define BM_USBPHY_CTRL_ENHOSTDISCONDETECT  BIT(1)
   
  +#define to_mxs_phy(p) container_of((p), struct mxs_phy, phy)
  +
  +/* Do disconnection between PHY and controller without vbus */
  +#define MXS_PHY_DISCONNECT_LINE_WITHOUT_VBUS   BIT(0)
  +
  +/*
  + * The PHY will be in messy if there is an wakeup after putting
^^
a
 Do you mean messy state?

Yes, will change the typo.


-- 

Best Regards,
Peter Chen

--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v4 02/17] usb: phy-mxs: Add platform judgement code

2013-12-03 Thread Michael Grzeschik
On Tue, Dec 03, 2013 at 03:36:56PM +0800, Peter Chen wrote:
 The mxs-phy has several bugs and features at different
 versions, the driver code can get it through of_device_id.data.
 
 Signed-off-by: Peter Chen peter.c...@freescale.com
 ---
  drivers/usb/phy/phy-mxs-usb.c |   58 ++--
  1 files changed, 49 insertions(+), 9 deletions(-)
 
 diff --git a/drivers/usb/phy/phy-mxs-usb.c b/drivers/usb/phy/phy-mxs-usb.c
 index 545844b..f6cbc78 100644
 --- a/drivers/usb/phy/phy-mxs-usb.c
 +++ b/drivers/usb/phy/phy-mxs-usb.c
 @@ -1,5 +1,5 @@
  /*
 - * Copyright 2012 Freescale Semiconductor, Inc.
 + * Copyright 2012-2013 Freescale Semiconductor, Inc.
   * Copyright (C) 2012 Marek Vasut ma...@denx.de
   * on behalf of DENX Software Engineering GmbH
   *
 @@ -20,6 +20,7 @@
  #include linux/delay.h
  #include linux/err.h
  #include linux/io.h
 +#include linux/of_device.h
  
  #define DRIVER_NAME mxs_phy
  
 @@ -34,13 +35,55 @@
  #define BM_USBPHY_CTRL_ENUTMILEVEL2  BIT(14)
  #define BM_USBPHY_CTRL_ENHOSTDISCONDETECTBIT(1)
  
 +#define to_mxs_phy(p) container_of((p), struct mxs_phy, phy)
 +
 +/* Do disconnection between PHY and controller without vbus */
 +#define MXS_PHY_DISCONNECT_LINE_WITHOUT_VBUS BIT(0)
 +
 +/*
 + * The PHY will be in messy if there is an wakeup after putting
 + * bus to suspend (set portsc.suspendM) but before setting PHY to low
 + * power mode (set portsc.phcd).
 + */
 +#define MXS_PHY_ABNORAML_IN_SUSPEND  BIT(1)

ABNORAML? - ABNORMAL

 +
 +/*
 + * The SOF sends too fast after resuming, it will cause disconnection
 + * between host and high speed device.
 + */
 +#define MXS_PHY_SENDING_SOF_TOO_FAST BIT(2)
 +
 +struct mxs_phy_data {
 + unsigned int flags;
 +};
 +
 +static const struct mxs_phy_data imx23_phy_data = {
 + .flags = MXS_PHY_ABNORAML_IN_SUSPEND | MXS_PHY_SENDING_SOF_TOO_FAST,
 +};

ABNORAML? - ABNORMAL

 +
 +static const struct mxs_phy_data imx6q_phy_data = {
 + .flags = MXS_PHY_SENDING_SOF_TOO_FAST |
 + MXS_PHY_DISCONNECT_LINE_WITHOUT_VBUS,
 +};
 +
 +static const struct mxs_phy_data imx6sl_phy_data = {
 + .flags = MXS_PHY_DISCONNECT_LINE_WITHOUT_VBUS,
 +};
 +
 +static const struct of_device_id mxs_phy_dt_ids[] = {
 + { .compatible = fsl,imx6sl-usbphy, .data = imx6sl_phy_data, },
 + { .compatible = fsl,imx6q-usbphy, .data = imx6q_phy_data, },
 + { .compatible = fsl,imx23-usbphy, .data = imx23_phy_data, },
 + { /* sentinel */ }
 +};
 +MODULE_DEVICE_TABLE(of, mxs_phy_dt_ids);
 +
  struct mxs_phy {
   struct usb_phy phy;
   struct clk *clk;
 + const struct mxs_phy_data *data;
  };
  
 -#define to_mxs_phy(p) container_of((p), struct mxs_phy, phy)
 -
  static int mxs_phy_hw_init(struct mxs_phy *mxs_phy)
  {
   int ret;
 @@ -131,6 +174,8 @@ static int mxs_phy_probe(struct platform_device *pdev)
   struct clk *clk;
   struct mxs_phy *mxs_phy;
   int ret;
 + const struct of_device_id *of_id =
 + of_match_device(mxs_phy_dt_ids, pdev-dev);
  
   res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
   base = devm_ioremap_resource(pdev-dev, res);
 @@ -163,6 +208,7 @@ static int mxs_phy_probe(struct platform_device *pdev)
   ATOMIC_INIT_NOTIFIER_HEAD(mxs_phy-phy.notifier);
  
   mxs_phy-clk = clk;
 + mxs_phy-data = of_id-data;
  
   platform_set_drvdata(pdev, mxs_phy);
  
 @@ -182,12 +228,6 @@ static int mxs_phy_remove(struct platform_device *pdev)
   return 0;
  }
  
 -static const struct of_device_id mxs_phy_dt_ids[] = {
 - { .compatible = fsl,imx23-usbphy, },
 - { /* sentinel */ }
 -};
 -MODULE_DEVICE_TABLE(of, mxs_phy_dt_ids);
 -
  static struct platform_driver mxs_phy_driver = {
   .probe = mxs_phy_probe,
   .remove = mxs_phy_remove,
 -- 
 1.7.8
 
 
 

-- 
Pengutronix e.K.   | |
Industrial Linux Solutions | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0|
Amtsgericht Hildesheim, HRA 2686   | Fax:   +49-5121-206917- |
--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


RE: [PATCH v4 02/17] usb: phy-mxs: Add platform judgement code

2013-12-03 Thread Peter Chen
 
  +
  +static const struct mxs_phy_data imx23_phy_data = {
  +   .flags = MXS_PHY_ABNORAML_IN_SUSPEND | MXS_PHY_SENDING_SOF_TOO_FAST,
  +};
 
 ABNORAML? - ABNORMAL
 

My careless, will change. Thanks.

Peter 

  +
  +static const struct mxs_phy_data imx6q_phy_data = {
  +   .flags = MXS_PHY_SENDING_SOF_TOO_FAST |
  +   MXS_PHY_DISCONNECT_LINE_WITHOUT_VBUS,
  +};
  +
  +static const struct mxs_phy_data imx6sl_phy_data = {
  +   .flags = MXS_PHY_DISCONNECT_LINE_WITHOUT_VBUS,
  +};
  +
  +static const struct of_device_id mxs_phy_dt_ids[] = {
  +   { .compatible = fsl,imx6sl-usbphy, .data = imx6sl_phy_data, },
  +   { .compatible = fsl,imx6q-usbphy, .data = imx6q_phy_data, },
  +   { .compatible = fsl,imx23-usbphy, .data = imx23_phy_data, },
  +   { /* sentinel */ }
  +};
  +MODULE_DEVICE_TABLE(of, mxs_phy_dt_ids);
  +
   struct mxs_phy {
  struct usb_phy phy;
  struct clk *clk;
  +   const struct mxs_phy_data *data;
   };
 
  -#define to_mxs_phy(p) container_of((p), struct mxs_phy, phy)
  -
   static int mxs_phy_hw_init(struct mxs_phy *mxs_phy)
   {
  int ret;
  @@ -131,6 +174,8 @@ static int mxs_phy_probe(struct platform_device
 *pdev)
  struct clk *clk;
  struct mxs_phy *mxs_phy;
  int ret;
  +   const struct of_device_id *of_id =
  +   of_match_device(mxs_phy_dt_ids, pdev-dev);
 
  res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
  base = devm_ioremap_resource(pdev-dev, res);
  @@ -163,6 +208,7 @@ static int mxs_phy_probe(struct platform_device
 *pdev)
  ATOMIC_INIT_NOTIFIER_HEAD(mxs_phy-phy.notifier);
 
  mxs_phy-clk = clk;
  +   mxs_phy-data = of_id-data;
 
  platform_set_drvdata(pdev, mxs_phy);
 
  @@ -182,12 +228,6 @@ static int mxs_phy_remove(struct platform_device
 *pdev)
  return 0;
   }
 
  -static const struct of_device_id mxs_phy_dt_ids[] = {
  -   { .compatible = fsl,imx23-usbphy, },
  -   { /* sentinel */ }
  -};
  -MODULE_DEVICE_TABLE(of, mxs_phy_dt_ids);
  -
   static struct platform_driver mxs_phy_driver = {
  .probe = mxs_phy_probe,
  .remove = mxs_phy_remove,
  --
  1.7.8
 
 
 
 
 --
 Pengutronix e.K.   |
 |
 Industrial Linux Solutions | http://www.pengutronix.de/
 |
 Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0
 |
 Amtsgericht Hildesheim, HRA 2686   | Fax:   +49-5121-206917-
 |


--
To unsubscribe from this list: send the line unsubscribe linux-usb in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html