Re: [PATCH v2 1/2] USB: chipidea: add imx usbmisc support

2012-07-23 Thread Felipe Balbi
Hi,

On Wed, Jul 18, 2012 at 06:29:06PM +0800, Richard Zhao wrote:
 i.MX usb controllers shares non-core registers, which may include
 SoC specific controls. We take it as a usbmisc device and usbmisc
 driver set operations needed by ci13xxx_imx driver.
 
 For example, Sabrelite board has bad over-current design, we can
 usbmisc to disable over-current detect.
 
 Signed-off-by: Richard Zhao richard.z...@freescale.com
 ---
  .../devicetree/bindings/usb/ci13xxx-imx.txt|2 +
  .../devicetree/bindings/usb/usbmisc-imx.txt|   12 ++
  drivers/usb/chipidea/Makefile  |2 +-
  drivers/usb/chipidea/ci13xxx_imx.c |   23 +++
  drivers/usb/chipidea/usbmisc_imx6q.c   |  161 
 
  5 files changed, 199 insertions(+), 1 deletion(-)
  create mode 100644 Documentation/devicetree/bindings/usb/usbmisc-imx.txt
  create mode 100644 drivers/usb/chipidea/usbmisc_imx6q.c
 
 diff --git a/Documentation/devicetree/bindings/usb/ci13xxx-imx.txt 
 b/Documentation/devicetree/bindings/usb/ci13xxx-imx.txt
 index 2c29041..06105ce 100644
 --- a/Documentation/devicetree/bindings/usb/ci13xxx-imx.txt
 +++ b/Documentation/devicetree/bindings/usb/ci13xxx-imx.txt
 @@ -8,6 +8,7 @@ Required properties:
  Optional properties:
  - fsl,usbphy: phandler of usb phy that connects to the only one port
  - vbus-supply: regulator for vbus
 +- disable-over-current: disable over current detect
  
  Examples:
  usb@02184000 { /* USB OTG */
 @@ -15,4 +16,5 @@ usb@02184000 { /* USB OTG */
   reg = 0x02184000 0x200;
   interrupts = 0 43 0x04;
   fsl,usbphy = usbphy1;
 + disable-over-current;
  };
 diff --git a/Documentation/devicetree/bindings/usb/usbmisc-imx.txt 
 b/Documentation/devicetree/bindings/usb/usbmisc-imx.txt
 new file mode 100644
 index 000..4fa500d
 --- /dev/null
 +++ b/Documentation/devicetree/bindings/usb/usbmisc-imx.txt
 @@ -0,0 +1,12 @@
 +* Freescale i.MX non-core registers
 +
 +Required properties:
 +- compatible: Should be one of below:
 + fsl,imx6q-usbmisc for imx6q
 +- reg: Should contain registers location and length
 +
 +Examples:
 +usbmisc@02184800 {
 + compatible = fsl,imx6q-usbmisc;
 + reg = 0x02184800 0x200;
 +};
 diff --git a/drivers/usb/chipidea/Makefile b/drivers/usb/chipidea/Makefile
 index 5c66d9c..57e510f 100644
 --- a/drivers/usb/chipidea/Makefile
 +++ b/drivers/usb/chipidea/Makefile
 @@ -15,5 +15,5 @@ ifneq ($(CONFIG_PCI),)
  endif
  
  ifneq ($(CONFIG_OF_DEVICE),)
 - obj-$(CONFIG_USB_CHIPIDEA)  += ci13xxx_imx.o
 + obj-$(CONFIG_USB_CHIPIDEA)  += ci13xxx_imx.o usbmisc_imx6q.o
  endif
 diff --git a/drivers/usb/chipidea/ci13xxx_imx.c 
 b/drivers/usb/chipidea/ci13xxx_imx.c
 index ef60d06..e790c0e 100644
 --- a/drivers/usb/chipidea/ci13xxx_imx.c
 +++ b/drivers/usb/chipidea/ci13xxx_imx.c
 @@ -22,6 +22,7 @@
  #include linux/regulator/consumer.h
  
  #include ci.h
 +#include ci13xxx_imx.h
  
  #define pdev_to_phy(pdev) \
   ((struct usb_phy *)platform_get_drvdata(pdev))
 @@ -34,6 +35,25 @@ struct ci13xxx_imx_data {
   struct regulator *reg_vbus;
  };
  
 +static const struct usbmisc_ops *usbmisc_ops;
 +
 +int usbmisc_set_ops(const struct usbmisc_ops *ops)
 +{
 + if (usbmisc_ops)
 + return -EBUSY;
 +
 + usbmisc_ops = ops;
 +
 + return 0;
 +}
 +EXPORT_SYMBOL_GPL(usbmisc_set_ops);
 +
 +void usbmisc_unset_ops(const struct usbmisc_ops *ops)
 +{
 + usbmisc_ops = NULL;
 +}
 +EXPORT_SYMBOL_GPL(usbmisc_unset_ops);
 +
  static struct ci13xxx_platform_data ci13xxx_imx_platdata __devinitdata  = {
   .name   = ci13xxx_imx,
   .flags  = CI13XXX_REQUIRE_TRANSCEIVER |
 @@ -120,6 +140,9 @@ static int __devinit ci13xxx_imx_probe(struct 
 platform_device *pdev)
   *pdev-dev.dma_mask = DMA_BIT_MASK(32);
   dma_set_coherent_mask(pdev-dev, *pdev-dev.dma_mask);
   }
 +
 + usbmisc_ops-init(pdev-dev);
 +
   plat_ci = ci13xxx_add_device(pdev-dev,
   pdev-resource, pdev-num_resources,
   ci13xxx_imx_platdata);
 diff --git a/drivers/usb/chipidea/usbmisc_imx6q.c 
 b/drivers/usb/chipidea/usbmisc_imx6q.c
 new file mode 100644
 index 000..9f69a8c
 --- /dev/null
 +++ b/drivers/usb/chipidea/usbmisc_imx6q.c
 @@ -0,0 +1,161 @@
 +/*
 + * Copyright 2012 Freescale Semiconductor, Inc.
 + *
 + * The code contained herein is licensed under the GNU General Public
 + * License. You may obtain a copy of the GNU General Public License
 + * Version 2 or later at the following locations:
 + *
 + * http://www.opensource.org/licenses/gpl-license.html
 + * http://www.gnu.org/copyleft/gpl.html
 + */
 +
 +#include linux/module.h
 +#include linux/of_platform.h
 +#include linux/clk.h
 +#include linux/err.h
 +#include linux/io.h
 +
 +#include ci13xxx_imx.h
 +
 +#define USB_DEV_MAX 4
 +
 +#define BM_OVER_CUR_DIS  BIT(7)
 +
 +struct imx6q_usbmisc {
 + void __iomem *base;
 +

Re: [PATCH v2 1/2] USB: chipidea: add imx usbmisc support

2012-07-23 Thread Marc Kleine-Budde
On 07/23/2012 11:27 AM, Richard Zhao wrote:
 This patch looks like a recipe for disaster IMHO, but it's Alex's call.
 Well, if there's any better place to hold it, I'd like to move there.
 Another place is arch/arm/mach-imx. Sascha/Shawn who are maintainers of
 imx are also in cc list.

IMHO it's not about the place where the driver is located, it's about
the shortcomings Michael and Sascha mentioned.

regards, 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 v2 1/2] USB: chipidea: add imx usbmisc support

2012-07-23 Thread Felipe Balbi
On Mon, Jul 23, 2012 at 11:30:18AM +0200, Marc Kleine-Budde wrote:
 On 07/23/2012 11:27 AM, Richard Zhao wrote:
  This patch looks like a recipe for disaster IMHO, but it's Alex's call.
  Well, if there's any better place to hold it, I'd like to move there.
  Another place is arch/arm/mach-imx. Sascha/Shawn who are maintainers of
  imx are also in cc list.
 
 IMHO it's not about the place where the driver is located, it's about
 the shortcomings Michael and Sascha mentioned.

exactly. It's not about where a file is placed or how it's called. It's
how you decided to implement it. This will prevent a platform with
multiple instances of the IP to be used, at least.

Also, if that set of registers are shared, you ought to have a dedicated
driver to handle mutual exclusion and so on. I don't know details about
the i.MX platform, that really smells funny by looking at it.

-- 
balbi


signature.asc
Description: Digital signature


Re: [PATCH v2 1/2] USB: chipidea: add imx usbmisc support

2012-07-23 Thread Richard Zhao
On Mon, Jul 23, 2012 at 02:21:06PM +0300, Felipe Balbi wrote:
 On Mon, Jul 23, 2012 at 07:13:52PM +0800, Richard Zhao wrote:
  On Mon, Jul 23, 2012 at 01:51:55PM +0300, Felipe Balbi wrote:
   On Mon, Jul 23, 2012 at 11:30:18AM +0200, Marc Kleine-Budde wrote:
On 07/23/2012 11:27 AM, Richard Zhao wrote:
 This patch looks like a recipe for disaster IMHO, but it's Alex's 
 call.
 Well, if there's any better place to hold it, I'd like to move there.
 Another place is arch/arm/mach-imx. Sascha/Shawn who are maintainers 
 of
 imx are also in cc list.

IMHO it's not about the place where the driver is located, it's about
the shortcomings Michael and Sascha mentioned.
  Thanks, Marc.
   
   exactly. It's not about where a file is placed or how it's called. It's
   how you decided to implement it. This will prevent a platform with
   multiple instances of the IP to be used, at least.
  To me, usbmisc on imx6 is just a set of non-core registers which is
  companion of Chipidea IP cores. All cores share the same usbmisc.
  From design perspective, ci13xxx_imx knows nothing about usbmisc. It
  just call the ops in proper occasion. usbmisc driver wrappers all
  SoC specific things.
 
 but if all you need is to call and initialization function, why don't
 you just do it on probe() of that usbmisc stuff ? Is this usbmisc used
 only for this USB IP ?
If it only need to init once, it may follow that way. But it also have
remote wakeup enable/disable bits, which in Freescale internal driver,
are set enabled or disabled at runtime.

Thanks
Richard
 
 -- 
 balbi



--
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


[PATCH v2 1/2] USB: chipidea: add imx usbmisc support

2012-07-18 Thread Richard Zhao
i.MX usb controllers shares non-core registers, which may include
SoC specific controls. We take it as a usbmisc device and usbmisc
driver set operations needed by ci13xxx_imx driver.

For example, Sabrelite board has bad over-current design, we can
usbmisc to disable over-current detect.

Signed-off-by: Richard Zhao richard.z...@freescale.com
---
 .../devicetree/bindings/usb/ci13xxx-imx.txt|2 +
 .../devicetree/bindings/usb/usbmisc-imx.txt|   12 ++
 drivers/usb/chipidea/Makefile  |2 +-
 drivers/usb/chipidea/ci13xxx_imx.c |   23 +++
 drivers/usb/chipidea/usbmisc_imx6q.c   |  161 
 5 files changed, 199 insertions(+), 1 deletion(-)
 create mode 100644 Documentation/devicetree/bindings/usb/usbmisc-imx.txt
 create mode 100644 drivers/usb/chipidea/usbmisc_imx6q.c

diff --git a/Documentation/devicetree/bindings/usb/ci13xxx-imx.txt 
b/Documentation/devicetree/bindings/usb/ci13xxx-imx.txt
index 2c29041..06105ce 100644
--- a/Documentation/devicetree/bindings/usb/ci13xxx-imx.txt
+++ b/Documentation/devicetree/bindings/usb/ci13xxx-imx.txt
@@ -8,6 +8,7 @@ Required properties:
 Optional properties:
 - fsl,usbphy: phandler of usb phy that connects to the only one port
 - vbus-supply: regulator for vbus
+- disable-over-current: disable over current detect
 
 Examples:
 usb@02184000 { /* USB OTG */
@@ -15,4 +16,5 @@ usb@02184000 { /* USB OTG */
reg = 0x02184000 0x200;
interrupts = 0 43 0x04;
fsl,usbphy = usbphy1;
+   disable-over-current;
 };
diff --git a/Documentation/devicetree/bindings/usb/usbmisc-imx.txt 
b/Documentation/devicetree/bindings/usb/usbmisc-imx.txt
new file mode 100644
index 000..4fa500d
--- /dev/null
+++ b/Documentation/devicetree/bindings/usb/usbmisc-imx.txt
@@ -0,0 +1,12 @@
+* Freescale i.MX non-core registers
+
+Required properties:
+- compatible: Should be one of below:
+   fsl,imx6q-usbmisc for imx6q
+- reg: Should contain registers location and length
+
+Examples:
+usbmisc@02184800 {
+   compatible = fsl,imx6q-usbmisc;
+   reg = 0x02184800 0x200;
+};
diff --git a/drivers/usb/chipidea/Makefile b/drivers/usb/chipidea/Makefile
index 5c66d9c..57e510f 100644
--- a/drivers/usb/chipidea/Makefile
+++ b/drivers/usb/chipidea/Makefile
@@ -15,5 +15,5 @@ ifneq ($(CONFIG_PCI),)
 endif
 
 ifneq ($(CONFIG_OF_DEVICE),)
-   obj-$(CONFIG_USB_CHIPIDEA)  += ci13xxx_imx.o
+   obj-$(CONFIG_USB_CHIPIDEA)  += ci13xxx_imx.o usbmisc_imx6q.o
 endif
diff --git a/drivers/usb/chipidea/ci13xxx_imx.c 
b/drivers/usb/chipidea/ci13xxx_imx.c
index ef60d06..e790c0e 100644
--- a/drivers/usb/chipidea/ci13xxx_imx.c
+++ b/drivers/usb/chipidea/ci13xxx_imx.c
@@ -22,6 +22,7 @@
 #include linux/regulator/consumer.h
 
 #include ci.h
+#include ci13xxx_imx.h
 
 #define pdev_to_phy(pdev) \
((struct usb_phy *)platform_get_drvdata(pdev))
@@ -34,6 +35,25 @@ struct ci13xxx_imx_data {
struct regulator *reg_vbus;
 };
 
+static const struct usbmisc_ops *usbmisc_ops;
+
+int usbmisc_set_ops(const struct usbmisc_ops *ops)
+{
+   if (usbmisc_ops)
+   return -EBUSY;
+
+   usbmisc_ops = ops;
+
+   return 0;
+}
+EXPORT_SYMBOL_GPL(usbmisc_set_ops);
+
+void usbmisc_unset_ops(const struct usbmisc_ops *ops)
+{
+   usbmisc_ops = NULL;
+}
+EXPORT_SYMBOL_GPL(usbmisc_unset_ops);
+
 static struct ci13xxx_platform_data ci13xxx_imx_platdata __devinitdata  = {
.name   = ci13xxx_imx,
.flags  = CI13XXX_REQUIRE_TRANSCEIVER |
@@ -120,6 +140,9 @@ static int __devinit ci13xxx_imx_probe(struct 
platform_device *pdev)
*pdev-dev.dma_mask = DMA_BIT_MASK(32);
dma_set_coherent_mask(pdev-dev, *pdev-dev.dma_mask);
}
+
+   usbmisc_ops-init(pdev-dev);
+
plat_ci = ci13xxx_add_device(pdev-dev,
pdev-resource, pdev-num_resources,
ci13xxx_imx_platdata);
diff --git a/drivers/usb/chipidea/usbmisc_imx6q.c 
b/drivers/usb/chipidea/usbmisc_imx6q.c
new file mode 100644
index 000..9f69a8c
--- /dev/null
+++ b/drivers/usb/chipidea/usbmisc_imx6q.c
@@ -0,0 +1,161 @@
+/*
+ * Copyright 2012 Freescale Semiconductor, Inc.
+ *
+ * The code contained herein is licensed under the GNU General Public
+ * License. You may obtain a copy of the GNU General Public License
+ * Version 2 or later at the following locations:
+ *
+ * http://www.opensource.org/licenses/gpl-license.html
+ * http://www.gnu.org/copyleft/gpl.html
+ */
+
+#include linux/module.h
+#include linux/of_platform.h
+#include linux/clk.h
+#include linux/err.h
+#include linux/io.h
+
+#include ci13xxx_imx.h
+
+#define USB_DEV_MAX 4
+
+#define BM_OVER_CUR_DISBIT(7)
+
+struct imx6q_usbmisc {
+   void __iomem *base;
+   struct clk *clk;
+   struct device *usb_dev[USB_DEV_MAX];
+   spinlock_t lock;
+
+   int disable_oc:USB_DEV_MAX;
+};
+
+static struct imx6q_usbmisc 

Re: [PATCH v2 1/2] USB: chipidea: add imx usbmisc support

2012-07-18 Thread Sascha Hauer
On Wed, Jul 18, 2012 at 06:29:06PM +0800, Richard Zhao wrote:
 i.MX usb controllers shares non-core registers, which may include
 SoC specific controls. We take it as a usbmisc device and usbmisc
 driver set operations needed by ci13xxx_imx driver.
 
 For example, Sabrelite board has bad over-current design, we can
 usbmisc to disable over-current detect.
 
 Signed-off-by: Richard Zhao richard.z...@freescale.com
 ---
  .../devicetree/bindings/usb/ci13xxx-imx.txt|2 +
  .../devicetree/bindings/usb/usbmisc-imx.txt|   12 ++
  drivers/usb/chipidea/Makefile  |2 +-
  drivers/usb/chipidea/ci13xxx_imx.c |   23 +++
  drivers/usb/chipidea/usbmisc_imx6q.c   |  161 
 
  5 files changed, 199 insertions(+), 1 deletion(-)
  create mode 100644 Documentation/devicetree/bindings/usb/usbmisc-imx.txt
  create mode 100644 drivers/usb/chipidea/usbmisc_imx6q.c
 
 diff --git a/Documentation/devicetree/bindings/usb/ci13xxx-imx.txt 
 b/Documentation/devicetree/bindings/usb/ci13xxx-imx.txt
 index 2c29041..06105ce 100644
 --- a/Documentation/devicetree/bindings/usb/ci13xxx-imx.txt
 +++ b/Documentation/devicetree/bindings/usb/ci13xxx-imx.txt
 @@ -8,6 +8,7 @@ Required properties:
  Optional properties:
  - fsl,usbphy: phandler of usb phy that connects to the only one port
  - vbus-supply: regulator for vbus
 +- disable-over-current: disable over current detect
  
  Examples:
  usb@02184000 { /* USB OTG */
 @@ -15,4 +16,5 @@ usb@02184000 { /* USB OTG */
   reg = 0x02184000 0x200;
   interrupts = 0 43 0x04;
   fsl,usbphy = usbphy1;
 + disable-over-current;
  };
 diff --git a/Documentation/devicetree/bindings/usb/usbmisc-imx.txt 
 b/Documentation/devicetree/bindings/usb/usbmisc-imx.txt
 new file mode 100644
 index 000..4fa500d
 --- /dev/null
 +++ b/Documentation/devicetree/bindings/usb/usbmisc-imx.txt
 @@ -0,0 +1,12 @@
 +* Freescale i.MX non-core registers
 +
 +Required properties:
 +- compatible: Should be one of below:
 + fsl,imx6q-usbmisc for imx6q
 +- reg: Should contain registers location and length
 +
 +Examples:
 +usbmisc@02184800 {
 + compatible = fsl,imx6q-usbmisc;
 + reg = 0x02184800 0x200;
 +};
 diff --git a/drivers/usb/chipidea/Makefile b/drivers/usb/chipidea/Makefile
 index 5c66d9c..57e510f 100644
 --- a/drivers/usb/chipidea/Makefile
 +++ b/drivers/usb/chipidea/Makefile
 @@ -15,5 +15,5 @@ ifneq ($(CONFIG_PCI),)
  endif
  
  ifneq ($(CONFIG_OF_DEVICE),)
 - obj-$(CONFIG_USB_CHIPIDEA)  += ci13xxx_imx.o
 + obj-$(CONFIG_USB_CHIPIDEA)  += ci13xxx_imx.o usbmisc_imx6q.o
  endif
 diff --git a/drivers/usb/chipidea/ci13xxx_imx.c 
 b/drivers/usb/chipidea/ci13xxx_imx.c
 index ef60d06..e790c0e 100644
 --- a/drivers/usb/chipidea/ci13xxx_imx.c
 +++ b/drivers/usb/chipidea/ci13xxx_imx.c
 @@ -22,6 +22,7 @@
  #include linux/regulator/consumer.h
  
  #include ci.h
 +#include ci13xxx_imx.h
  
  #define pdev_to_phy(pdev) \
   ((struct usb_phy *)platform_get_drvdata(pdev))
 @@ -34,6 +35,25 @@ struct ci13xxx_imx_data {
   struct regulator *reg_vbus;
  };
  
 +static const struct usbmisc_ops *usbmisc_ops;
 +
 +int usbmisc_set_ops(const struct usbmisc_ops *ops)
 +{
 + if (usbmisc_ops)
 + return -EBUSY;
 +
 + usbmisc_ops = ops;
 +
 + return 0;
 +}
 +EXPORT_SYMBOL_GPL(usbmisc_set_ops);
 +
 +void usbmisc_unset_ops(const struct usbmisc_ops *ops)
 +{
 + usbmisc_ops = NULL;
 +}
 +EXPORT_SYMBOL_GPL(usbmisc_unset_ops);
 +
  static struct ci13xxx_platform_data ci13xxx_imx_platdata __devinitdata  = {
   .name   = ci13xxx_imx,
   .flags  = CI13XXX_REQUIRE_TRANSCEIVER |
 @@ -120,6 +140,9 @@ static int __devinit ci13xxx_imx_probe(struct 
 platform_device *pdev)
   *pdev-dev.dma_mask = DMA_BIT_MASK(32);
   dma_set_coherent_mask(pdev-dev, *pdev-dev.dma_mask);
   }
 +
 + usbmisc_ops-init(pdev-dev);

usbmisc_ops can be NULL and also can return an error.

 +
   plat_ci = ci13xxx_add_device(pdev-dev,
   pdev-resource, pdev-num_resources,
   ci13xxx_imx_platdata);
 diff --git a/drivers/usb/chipidea/usbmisc_imx6q.c 
 b/drivers/usb/chipidea/usbmisc_imx6q.c
 new file mode 100644
 index 000..9f69a8c
 --- /dev/null
 +++ b/drivers/usb/chipidea/usbmisc_imx6q.c
 @@ -0,0 +1,161 @@
 +/*
 + * Copyright 2012 Freescale Semiconductor, Inc.
 + *
 + * The code contained herein is licensed under the GNU General Public
 + * License. You may obtain a copy of the GNU General Public License
 + * Version 2 or later at the following locations:
 + *
 + * http://www.opensource.org/licenses/gpl-license.html
 + * http://www.gnu.org/copyleft/gpl.html
 + */
 +
 +#include linux/module.h
 +#include linux/of_platform.h
 +#include linux/clk.h
 +#include linux/err.h
 +#include linux/io.h
 +
 +#include ci13xxx_imx.h
 +
 +#define USB_DEV_MAX 4
 +
 +#define BM_OVER_CUR_DIS  BIT(7)
 +
 

Re: [PATCH v2 1/2] USB: chipidea: add imx usbmisc support

2012-07-18 Thread Richard Zhao
[snip]
static struct ci13xxx_platform_data ci13xxx_imx_platdata __devinitdata  
   = {
 .name   = ci13xxx_imx,
 .flags  = CI13XXX_REQUIRE_TRANSCEIVER |
   @@ -120,6 +140,9 @@ static int __devinit ci13xxx_imx_probe(struct 
   platform_device *pdev)
 *pdev-dev.dma_mask = DMA_BIT_MASK(32);
 dma_set_coherent_mask(pdev-dev, *pdev-dev.dma_mask);
 }
   +
   + usbmisc_ops-init(pdev-dev);
  
  usbmisc_ops can be NULL and also can return an error.
 Yes. And I find it can not work when usbmisc is module.
It's hard to resolve module dependency. How about build all imx related
things into a single module? ci13xxx_imx module init will call
usbmisc_imx6q_drv_init, usbmisc_imx53_drv_init etc.

Thanks
Richard
--
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 v2 1/2] USB: chipidea: add imx usbmisc support

2012-07-18 Thread Marc Kleine-Budde
On 07/18/2012 03:39 PM, Richard Zhao wrote:
 [snip]
  static struct ci13xxx_platform_data ci13xxx_imx_platdata __devinitdata  = 
 {
.name   = ci13xxx_imx,
.flags  = CI13XXX_REQUIRE_TRANSCEIVER |
 @@ -120,6 +140,9 @@ static int __devinit ci13xxx_imx_probe(struct 
 platform_device *pdev)
*pdev-dev.dma_mask = DMA_BIT_MASK(32);
dma_set_coherent_mask(pdev-dev, *pdev-dev.dma_mask);
}
 +
 +  usbmisc_ops-init(pdev-dev);

 usbmisc_ops can be NULL and also can return an error.
 Yes. And I find it can not work when usbmisc is module.
 It's hard to resolve module dependency. How about build all imx related
 things into a single module? ci13xxx_imx module init will call
 usbmisc_imx6q_drv_init, usbmisc_imx53_drv_init etc.

Why not call a single imx_usbmisc_init. The usbmisc can call the correct
function inside. The right init function can be selected via the
compatible in the device tree.

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