diff options
-rw-r--r-- | arch/arm/mach-kirkwood/common.c | 3 | ||||
-rw-r--r-- | drivers/usb/host/ehci-orion.c | 16 |
2 files changed, 18 insertions, 1 deletions
diff --git a/arch/arm/mach-kirkwood/common.c b/arch/arm/mach-kirkwood/common.c index c9fef5b7c56e..b0f20c0c7d54 100644 --- a/arch/arm/mach-kirkwood/common.c +++ b/arch/arm/mach-kirkwood/common.c | |||
@@ -96,7 +96,7 @@ void __init kirkwood_clk_init(void) | |||
96 | ge1 = kirkwood_register_gate("ge1", CGC_BIT_GE1); | 96 | ge1 = kirkwood_register_gate("ge1", CGC_BIT_GE1); |
97 | sata0 = kirkwood_register_gate("sata0", CGC_BIT_SATA0); | 97 | sata0 = kirkwood_register_gate("sata0", CGC_BIT_SATA0); |
98 | sata1 = kirkwood_register_gate("sata1", CGC_BIT_SATA1); | 98 | sata1 = kirkwood_register_gate("sata1", CGC_BIT_SATA1); |
99 | kirkwood_register_gate("usb0", CGC_BIT_USB0); | 99 | usb0 = kirkwood_register_gate("usb0", CGC_BIT_USB0); |
100 | kirkwood_register_gate("sdio", CGC_BIT_SDIO); | 100 | kirkwood_register_gate("sdio", CGC_BIT_SDIO); |
101 | kirkwood_register_gate("crypto", CGC_BIT_CRYPTO); | 101 | kirkwood_register_gate("crypto", CGC_BIT_CRYPTO); |
102 | kirkwood_register_gate("xor0", CGC_BIT_XOR0); | 102 | kirkwood_register_gate("xor0", CGC_BIT_XOR0); |
@@ -115,6 +115,7 @@ void __init kirkwood_clk_init(void) | |||
115 | orion_clkdev_add(NULL, "orion_wdt", tclk); | 115 | orion_clkdev_add(NULL, "orion_wdt", tclk); |
116 | orion_clkdev_add("0", "sata_mv.0", sata0); | 116 | orion_clkdev_add("0", "sata_mv.0", sata0); |
117 | orion_clkdev_add("1", "sata_mv.0", sata1); | 117 | orion_clkdev_add("1", "sata_mv.0", sata1); |
118 | orion_clkdev_add(NULL, "orion-ehci.0", usb0); | ||
118 | } | 119 | } |
119 | 120 | ||
120 | /***************************************************************************** | 121 | /***************************************************************************** |
diff --git a/drivers/usb/host/ehci-orion.c b/drivers/usb/host/ehci-orion.c index 6c6a5a3b4ea7..82de1073aa52 100644 --- a/drivers/usb/host/ehci-orion.c +++ b/drivers/usb/host/ehci-orion.c | |||
@@ -12,6 +12,7 @@ | |||
12 | #include <linux/module.h> | 12 | #include <linux/module.h> |
13 | #include <linux/platform_device.h> | 13 | #include <linux/platform_device.h> |
14 | #include <linux/mbus.h> | 14 | #include <linux/mbus.h> |
15 | #include <linux/clk.h> | ||
15 | #include <plat/ehci-orion.h> | 16 | #include <plat/ehci-orion.h> |
16 | 17 | ||
17 | #define rdl(off) __raw_readl(hcd->regs + (off)) | 18 | #define rdl(off) __raw_readl(hcd->regs + (off)) |
@@ -198,6 +199,7 @@ static int __devinit ehci_orion_drv_probe(struct platform_device *pdev) | |||
198 | struct resource *res; | 199 | struct resource *res; |
199 | struct usb_hcd *hcd; | 200 | struct usb_hcd *hcd; |
200 | struct ehci_hcd *ehci; | 201 | struct ehci_hcd *ehci; |
202 | struct clk *clk; | ||
201 | void __iomem *regs; | 203 | void __iomem *regs; |
202 | int irq, err; | 204 | int irq, err; |
203 | 205 | ||
@@ -238,6 +240,14 @@ static int __devinit ehci_orion_drv_probe(struct platform_device *pdev) | |||
238 | goto err2; | 240 | goto err2; |
239 | } | 241 | } |
240 | 242 | ||
243 | /* Not all platforms can gate the clock, so it is not | ||
244 | an error if the clock does not exists. */ | ||
245 | clk = clk_get(&pdev->dev, NULL); | ||
246 | if (!IS_ERR(clk)) { | ||
247 | clk_prepare_enable(clk); | ||
248 | clk_put(clk); | ||
249 | } | ||
250 | |||
241 | hcd = usb_create_hcd(&ehci_orion_hc_driver, | 251 | hcd = usb_create_hcd(&ehci_orion_hc_driver, |
242 | &pdev->dev, dev_name(&pdev->dev)); | 252 | &pdev->dev, dev_name(&pdev->dev)); |
243 | if (!hcd) { | 253 | if (!hcd) { |
@@ -301,12 +311,18 @@ err1: | |||
301 | static int __exit ehci_orion_drv_remove(struct platform_device *pdev) | 311 | static int __exit ehci_orion_drv_remove(struct platform_device *pdev) |
302 | { | 312 | { |
303 | struct usb_hcd *hcd = platform_get_drvdata(pdev); | 313 | struct usb_hcd *hcd = platform_get_drvdata(pdev); |
314 | struct clk *clk; | ||
304 | 315 | ||
305 | usb_remove_hcd(hcd); | 316 | usb_remove_hcd(hcd); |
306 | iounmap(hcd->regs); | 317 | iounmap(hcd->regs); |
307 | release_mem_region(hcd->rsrc_start, hcd->rsrc_len); | 318 | release_mem_region(hcd->rsrc_start, hcd->rsrc_len); |
308 | usb_put_hcd(hcd); | 319 | usb_put_hcd(hcd); |
309 | 320 | ||
321 | clk = clk_get(&pdev->dev, NULL); | ||
322 | if (!IS_ERR(clk)) { | ||
323 | clk_disable_unprepare(clk); | ||
324 | clk_put(clk); | ||
325 | } | ||
310 | return 0; | 326 | return 0; |
311 | } | 327 | } |
312 | 328 | ||