aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/at91/patches-3.18/200-ARM-at91-udc-clockfix-backport.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/at91/patches-3.18/200-ARM-at91-udc-clockfix-backport.patch')
-rw-r--r--target/linux/at91/patches-3.18/200-ARM-at91-udc-clockfix-backport.patch82
1 files changed, 82 insertions, 0 deletions
diff --git a/target/linux/at91/patches-3.18/200-ARM-at91-udc-clockfix-backport.patch b/target/linux/at91/patches-3.18/200-ARM-at91-udc-clockfix-backport.patch
new file mode 100644
index 0000000000..32e1ac540d
--- /dev/null
+++ b/target/linux/at91/patches-3.18/200-ARM-at91-udc-clockfix-backport.patch
@@ -0,0 +1,82 @@
+--- a/drivers/usb/gadget/udc/at91_udc.c
++++ b/drivers/usb/gadget/udc/at91_udc.c
+@@ -870,8 +870,6 @@ static void clk_on(struct at91_udc *udc)
+ return;
+ udc->clocked = 1;
+
+- if (IS_ENABLED(CONFIG_COMMON_CLK))
+- clk_enable(udc->uclk);
+ clk_enable(udc->iclk);
+ clk_enable(udc->fclk);
+ }
+@@ -884,8 +882,6 @@ static void clk_off(struct at91_udc *udc
+ udc->gadget.speed = USB_SPEED_UNKNOWN;
+ clk_disable(udc->fclk);
+ clk_disable(udc->iclk);
+- if (IS_ENABLED(CONFIG_COMMON_CLK))
+- clk_disable(udc->uclk);
+ }
+
+ /*
+@@ -1766,27 +1762,18 @@ static int at91udc_probe(struct platform
+ udc_reinit(udc);
+
+ /* get interface and function clocks */
+- udc->iclk = clk_get(dev, "udc_clk");
+- udc->fclk = clk_get(dev, "udpck");
+- if (IS_ENABLED(CONFIG_COMMON_CLK))
+- udc->uclk = clk_get(dev, "usb_clk");
+- if (IS_ERR(udc->iclk) || IS_ERR(udc->fclk) ||
+- (IS_ENABLED(CONFIG_COMMON_CLK) && IS_ERR(udc->uclk))) {
++ udc->iclk = clk_get(dev, "pclk");
++ udc->fclk = clk_get(dev, "hclk");
++ if (IS_ERR(udc->iclk) || IS_ERR(udc->fclk)) {
+ DBG("clocks missing\n");
+ retval = -ENODEV;
+ goto fail1;
+ }
+
+- /* don't do anything until we have both gadget driver and VBUS */
+- if (IS_ENABLED(CONFIG_COMMON_CLK)) {
+- clk_set_rate(udc->uclk, 48000000);
+- retval = clk_prepare(udc->uclk);
+- if (retval)
+- goto fail1;
+- }
++ clk_set_rate(udc->fclk, 48000000);
+ retval = clk_prepare(udc->fclk);
+ if (retval)
+- goto fail1a;
++ goto fail1;
+
+ retval = clk_prepare_enable(udc->iclk);
+ if (retval)
+@@ -1860,12 +1847,7 @@ fail1c:
+ clk_unprepare(udc->iclk);
+ fail1b:
+ clk_unprepare(udc->fclk);
+-fail1a:
+- if (IS_ENABLED(CONFIG_COMMON_CLK))
+- clk_unprepare(udc->uclk);
+ fail1:
+- if (IS_ENABLED(CONFIG_COMMON_CLK) && !IS_ERR(udc->uclk))
+- clk_put(udc->uclk);
+ if (!IS_ERR(udc->fclk))
+ clk_put(udc->fclk);
+ if (!IS_ERR(udc->iclk))
+@@ -1911,15 +1893,11 @@ static int __exit at91udc_remove(struct
+ res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+ release_mem_region(res->start, resource_size(res));
+
+- if (IS_ENABLED(CONFIG_COMMON_CLK))
+- clk_unprepare(udc->uclk);
+ clk_unprepare(udc->fclk);
+ clk_unprepare(udc->iclk);
+
+ clk_put(udc->iclk);
+ clk_put(udc->fclk);
+- if (IS_ENABLED(CONFIG_COMMON_CLK))
+- clk_put(udc->uclk);
+
+ return 0;
+ }