diff options
Diffstat (limited to 'drivers/usb/host/ohci-pxa27x.c')
-rw-r--r-- | drivers/usb/host/ohci-pxa27x.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/drivers/usb/host/ohci-pxa27x.c b/drivers/usb/host/ohci-pxa27x.c index 23d2fe5a62f4..ff9a79843471 100644 --- a/drivers/usb/host/ohci-pxa27x.c +++ b/drivers/usb/host/ohci-pxa27x.c | |||
@@ -22,6 +22,7 @@ | |||
22 | #include <linux/device.h> | 22 | #include <linux/device.h> |
23 | #include <linux/signal.h> | 23 | #include <linux/signal.h> |
24 | #include <linux/platform_device.h> | 24 | #include <linux/platform_device.h> |
25 | #include <linux/clk.h> | ||
25 | 26 | ||
26 | #include <asm/mach-types.h> | 27 | #include <asm/mach-types.h> |
27 | #include <asm/hardware.h> | 28 | #include <asm/hardware.h> |
@@ -32,6 +33,8 @@ | |||
32 | 33 | ||
33 | #define UHCRHPS(x) __REG2( 0x4C000050, (x)<<2 ) | 34 | #define UHCRHPS(x) __REG2( 0x4C000050, (x)<<2 ) |
34 | 35 | ||
36 | static struct clk *usb_clk; | ||
37 | |||
35 | /* | 38 | /* |
36 | PMM_NPS_MODE -- PMM Non-power switching mode | 39 | PMM_NPS_MODE -- PMM Non-power switching mode |
37 | Ports are powered continuously. | 40 | Ports are powered continuously. |
@@ -80,7 +83,7 @@ static int pxa27x_start_hc(struct device *dev) | |||
80 | 83 | ||
81 | inf = dev->platform_data; | 84 | inf = dev->platform_data; |
82 | 85 | ||
83 | pxa_set_cken(CKEN_USBHOST, 1); | 86 | clk_enable(usb_clk); |
84 | 87 | ||
85 | UHCHR |= UHCHR_FHR; | 88 | UHCHR |= UHCHR_FHR; |
86 | udelay(11); | 89 | udelay(11); |
@@ -123,7 +126,7 @@ static void pxa27x_stop_hc(struct device *dev) | |||
123 | UHCCOMS |= 1; | 126 | UHCCOMS |= 1; |
124 | udelay(10); | 127 | udelay(10); |
125 | 128 | ||
126 | pxa_set_cken(CKEN_USBHOST, 0); | 129 | clk_disable(usb_clk); |
127 | } | 130 | } |
128 | 131 | ||
129 | 132 | ||
@@ -158,6 +161,10 @@ int usb_hcd_pxa27x_probe (const struct hc_driver *driver, struct platform_device | |||
158 | return -ENOMEM; | 161 | return -ENOMEM; |
159 | } | 162 | } |
160 | 163 | ||
164 | usb_clk = clk_get(&pdev->dev, "USBCLK"); | ||
165 | if (IS_ERR(usb_clk)) | ||
166 | return PTR_ERR(usb_clk); | ||
167 | |||
161 | hcd = usb_create_hcd (driver, &pdev->dev, "pxa27x"); | 168 | hcd = usb_create_hcd (driver, &pdev->dev, "pxa27x"); |
162 | if (!hcd) | 169 | if (!hcd) |
163 | return -ENOMEM; | 170 | return -ENOMEM; |
@@ -201,6 +208,7 @@ int usb_hcd_pxa27x_probe (const struct hc_driver *driver, struct platform_device | |||
201 | release_mem_region(hcd->rsrc_start, hcd->rsrc_len); | 208 | release_mem_region(hcd->rsrc_start, hcd->rsrc_len); |
202 | err1: | 209 | err1: |
203 | usb_put_hcd(hcd); | 210 | usb_put_hcd(hcd); |
211 | clk_put(usb_clk); | ||
204 | return retval; | 212 | return retval; |
205 | } | 213 | } |
206 | 214 | ||
@@ -225,6 +233,7 @@ void usb_hcd_pxa27x_remove (struct usb_hcd *hcd, struct platform_device *pdev) | |||
225 | iounmap(hcd->regs); | 233 | iounmap(hcd->regs); |
226 | release_mem_region(hcd->rsrc_start, hcd->rsrc_len); | 234 | release_mem_region(hcd->rsrc_start, hcd->rsrc_len); |
227 | usb_put_hcd(hcd); | 235 | usb_put_hcd(hcd); |
236 | clk_put(usb_clk); | ||
228 | } | 237 | } |
229 | 238 | ||
230 | /*-------------------------------------------------------------------------*/ | 239 | /*-------------------------------------------------------------------------*/ |