RE: [PATCH] usb: dwc3: add generic OF glue layer

2015-11-19 Thread Subbaraya Sundeep Bhatta
Hi Felipe,

> -Original Message-
> From: Felipe Balbi [mailto:ba...@ti.com]
> Sent: Thursday, November 19, 2015 8:28 PM
> To: Linux USB Mailing List
> Cc: Subbaraya Sundeep Bhatta; Ivan T . Ivanov
> Subject: Re: [PATCH] usb: dwc3: add generic OF glue layer
> 
> 
> Hi,
> 
> Felipe Balbi <ba...@ti.com> writes:
> > For simple platforms which merely enable some clocks and populate its
> > children, we can use this generic glue layer to avoid boilerplate code
> > duplication.
> >
> > For now this supports Qcom and Xilinx, but if we find a way to add
> > generic handling of regulators and optional PHYs, we can absorb exynos
> > as well.
> >
> > Signed-off-by: Felipe Balbi <ba...@ti.com>
> > ---
> >
> > Can you guys check if this works for your respective platforms ? If it
> > does we can some code duplication going forward.
> 
> gentle ping on this one.

It is working on Xilinx platform.

Thanks,
Sundeep

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


RE: [PATCH] usb: dwc3: add generic OF glue layer

2015-11-19 Thread Subbaraya Sundeep Bhatta
Hi Felipe,

> -Original Message-
> From: Felipe Balbi [mailto:ba...@ti.com]
> Sent: Thursday, November 19, 2015 8:28 PM
> To: Linux USB Mailing List
> Cc: Subbaraya Sundeep Bhatta; Ivan T . Ivanov
> Subject: Re: [PATCH] usb: dwc3: add generic OF glue layer
>
>
> Hi,
>
> Felipe Balbi <ba...@ti.com> writes:
> > For simple platforms which merely enable some clocks and populate its
> > children, we can use this generic glue layer to avoid boilerplate code
> > duplication.
> >
> > For now this supports Qcom and Xilinx, but if we find a way to add
> > generic handling of regulators and optional PHYs, we can absorb exynos
> > as well.
> >
> > Signed-off-by: Felipe Balbi <ba...@ti.com>
> > ---
> >
> > Can you guys check if this works for your respective platforms ? If it
> > does we can some code duplication going forward.
>
> gentle ping on this one.

Tested and working fine on Xilinx platform.

Thanks,
Sundeep

>
> --
> balbi


This email and any attachments are intended for the sole use of the named 
recipient(s) and contain(s) confidential information that may be proprietary, 
privileged or copyrighted under applicable law. If you are not the intended 
recipient, do not read, copy, or forward this email message or any attachments. 
Delete this email message and any attachments immediately.

--
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] usb: dwc3: add generic OF glue layer

2015-11-19 Thread Felipe Balbi

Hi,

Subbaraya Sundeep Bhatta <subbaraya.sundeep.bha...@xilinx.com> writes:
> Hi Felipe,
>
>> -Original Message-
>> From: Felipe Balbi [mailto:ba...@ti.com]
>> Sent: Thursday, November 19, 2015 8:28 PM
>> To: Linux USB Mailing List
>> Cc: Subbaraya Sundeep Bhatta; Ivan T . Ivanov
>> Subject: Re: [PATCH] usb: dwc3: add generic OF glue layer
>>
>>
>> Hi,
>>
>> Felipe Balbi <ba...@ti.com> writes:
>> > For simple platforms which merely enable some clocks and populate its
>> > children, we can use this generic glue layer to avoid boilerplate code
>> > duplication.
>> >
>> > For now this supports Qcom and Xilinx, but if we find a way to add
>> > generic handling of regulators and optional PHYs, we can absorb exynos
>> > as well.
>> >
>> > Signed-off-by: Felipe Balbi <ba...@ti.com>
>> > ---
>> >
>> > Can you guys check if this works for your respective platforms ? If it
>> > does we can some code duplication going forward.
>>
>> gentle ping on this one.
>
> Tested and working fine on Xilinx platform.

thank you, I'll take your DTS with this generic glue, and also delete
qcom glue.

-- 
balbi


signature.asc
Description: PGP signature


Re: [PATCH] usb: dwc3: add generic OF glue layer

2015-11-19 Thread Felipe Balbi

Hi,

Felipe Balbi  writes:
> For simple platforms which merely enable some clocks
> and populate its children, we can use this generic
> glue layer to avoid boilerplate code duplication.
>
> For now this supports Qcom and Xilinx, but if we
> find a way to add generic handling of regulators and
> optional PHYs, we can absorb exynos as well.
>
> Signed-off-by: Felipe Balbi 
> ---
>
> Can you guys check if this works for your respective platforms ? If it does we
> can some code duplication going forward.

gentle ping on this one.

-- 
balbi


signature.asc
Description: PGP signature


[PATCH] usb: dwc3: add generic OF glue layer

2015-11-18 Thread Felipe Balbi
For simple platforms which merely enable some clocks
and populate its children, we can use this generic
glue layer to avoid boilerplate code duplication.

For now this supports Qcom and Xilinx, but if we
find a way to add generic handling of regulators and
optional PHYs, we can absorb exynos as well.

Signed-off-by: Felipe Balbi 
---

Can you guys check if this works for your respective platforms ? If it does we
can some code duplication going forward.

 drivers/usb/dwc3/Kconfig  |   9 ++
 drivers/usb/dwc3/Makefile |   1 +
 drivers/usb/dwc3/dwc3-of-simple.c | 174 ++
 3 files changed, 184 insertions(+)
 create mode 100644 drivers/usb/dwc3/dwc3-of-simple.c

diff --git a/drivers/usb/dwc3/Kconfig b/drivers/usb/dwc3/Kconfig
index 5a42c4590402..070e704829e5 100644
--- a/drivers/usb/dwc3/Kconfig
+++ b/drivers/usb/dwc3/Kconfig
@@ -87,6 +87,15 @@ config USB_DWC3_KEYSTONE
  Support of USB2/3 functionality in TI Keystone2 platforms.
  Say 'Y' or 'M' here if you have one such device
 
+config USB_DWC3_OF_SIMPLE
+   tristate "Generic OF Simple Glue Layer"
+   depends on OF && COMMON_CLK
+   default USB_DWC3
+   help
+ Support USB2/3 functionality in simple SoC integrations.
+Currently supports Xilinx and Qualcomm DWC USB3 IP.
+Say 'Y' or 'M' if you have one such device.
+
 config USB_DWC3_ST
tristate "STMicroelectronics Platforms"
depends on ARCH_STI && OF
diff --git a/drivers/usb/dwc3/Makefile b/drivers/usb/dwc3/Makefile
index acc951d46c27..6491f9b474d4 100644
--- a/drivers/usb/dwc3/Makefile
+++ b/drivers/usb/dwc3/Makefile
@@ -37,5 +37,6 @@ obj-$(CONFIG_USB_DWC3_OMAP)   += dwc3-omap.o
 obj-$(CONFIG_USB_DWC3_EXYNOS)  += dwc3-exynos.o
 obj-$(CONFIG_USB_DWC3_PCI) += dwc3-pci.o
 obj-$(CONFIG_USB_DWC3_KEYSTONE)+= dwc3-keystone.o
+obj-$(CONFIG_USB_DWC3_OF_SIMPLE)   += dwc3-of-simple.o
 obj-$(CONFIG_USB_DWC3_QCOM)+= dwc3-qcom.o
 obj-$(CONFIG_USB_DWC3_ST)  += dwc3-st.o
diff --git a/drivers/usb/dwc3/dwc3-of-simple.c 
b/drivers/usb/dwc3/dwc3-of-simple.c
new file mode 100644
index ..00edd1195123
--- /dev/null
+++ b/drivers/usb/dwc3/dwc3-of-simple.c
@@ -0,0 +1,174 @@
+/**
+ * dwc3-of-simple.c - OF glue layer for simple integrations
+ *
+ * Copyright (c) 2015 Texas Instruments Incorporated - http://www.ti.com
+ *
+ * Author: Felipe Balbi 
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2  of
+ * the License as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ */
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+struct dwc3_of_simple {
+   struct device   *dev;
+   struct clk  **clks;
+   int num_clocks;
+};
+
+static int dwc3_of_simple_probe(struct platform_device *pdev)
+{
+   struct dwc3_of_simple   *simple;
+   struct device   *dev = >dev;
+   struct device_node  *np = dev->of_node;
+
+   int ret;
+   int i;
+
+   simple = devm_kzalloc(dev, sizeof(*simple), GFP_KERNEL);
+   if (!simple)
+   return -ENOMEM;
+
+   ret = of_clk_get_parent_count(np);
+   if (ret < 0)
+   return ret;
+
+   simple->num_clocks = ret;
+
+   simple->clks = devm_kcalloc(dev, simple->num_clocks,
+   sizeof(struct clk *), GFP_KERNEL);
+   if (!simple->clks)
+   return -ENOMEM;
+
+   simple->dev = dev;
+
+   for (i = 0; i < simple->num_clocks; i++) {
+   struct clk  *clk;
+
+   clk = of_clk_get(np, i);
+   if (IS_ERR(clk)) {
+   while (--i >= 0)
+   clk_put(simple->clks[i]);
+   return PTR_ERR(clk);
+   }
+
+   ret = clk_prepare_enable(clk);
+   if (ret < 0) {
+   while (--i >= 0) {
+   clk_disable_unprepare(simple->clks[i]);
+   clk_put(simple->clks[i]);
+   }
+   clk_put(clk);
+
+   return ret;
+   }
+
+   simple->clks[i] = clk;
+   }
+
+   ret = of_platform_populate(np, NULL, NULL, dev);
+   if (ret) {
+   for (i = 0; i < simple->num_clocks; i++) {
+   clk_disable_unprepare(simple->clks[i]);
+   clk_put(simple->clks[i]);
+   }
+
+