diff options
Diffstat (limited to 'drivers/usb/misc/usb3503.c')
-rw-r--r-- | drivers/usb/misc/usb3503.c | 48 |
1 files changed, 18 insertions, 30 deletions
diff --git a/drivers/usb/misc/usb3503.c b/drivers/usb/misc/usb3503.c index d5141aa79dd4..72f39a9751b5 100644 --- a/drivers/usb/misc/usb3503.c +++ b/drivers/usb/misc/usb3503.c | |||
@@ -172,7 +172,6 @@ static int usb3503_probe(struct usb3503 *hub) | |||
172 | hub->gpio_reset = pdata->gpio_reset; | 172 | hub->gpio_reset = pdata->gpio_reset; |
173 | hub->mode = pdata->initial_mode; | 173 | hub->mode = pdata->initial_mode; |
174 | } else if (np) { | 174 | } else if (np) { |
175 | struct clk *clk; | ||
176 | u32 rate = 0; | 175 | u32 rate = 0; |
177 | hub->port_off_mask = 0; | 176 | hub->port_off_mask = 0; |
178 | 177 | ||
@@ -198,34 +197,29 @@ static int usb3503_probe(struct usb3503 *hub) | |||
198 | } | 197 | } |
199 | } | 198 | } |
200 | 199 | ||
201 | clk = devm_clk_get(dev, "refclk"); | 200 | hub->clk = devm_clk_get_optional(dev, "refclk"); |
202 | if (IS_ERR(clk) && PTR_ERR(clk) != -ENOENT) { | 201 | if (IS_ERR(hub->clk)) { |
203 | dev_err(dev, "unable to request refclk (%ld)\n", | 202 | dev_err(dev, "unable to request refclk (%ld)\n", |
204 | PTR_ERR(clk)); | 203 | PTR_ERR(hub->clk)); |
205 | return PTR_ERR(clk); | 204 | return PTR_ERR(hub->clk); |
206 | } | 205 | } |
207 | 206 | ||
208 | if (!IS_ERR(clk)) { | 207 | if (rate != 0) { |
209 | hub->clk = clk; | 208 | err = clk_set_rate(hub->clk, rate); |
210 | |||
211 | if (rate != 0) { | ||
212 | err = clk_set_rate(hub->clk, rate); | ||
213 | if (err) { | ||
214 | dev_err(dev, | ||
215 | "unable to set reference clock rate to %d\n", | ||
216 | (int) rate); | ||
217 | return err; | ||
218 | } | ||
219 | } | ||
220 | |||
221 | err = clk_prepare_enable(hub->clk); | ||
222 | if (err) { | 209 | if (err) { |
223 | dev_err(dev, | 210 | dev_err(dev, |
224 | "unable to enable reference clock\n"); | 211 | "unable to set reference clock rate to %d\n", |
212 | (int)rate); | ||
225 | return err; | 213 | return err; |
226 | } | 214 | } |
227 | } | 215 | } |
228 | 216 | ||
217 | err = clk_prepare_enable(hub->clk); | ||
218 | if (err) { | ||
219 | dev_err(dev, "unable to enable reference clock\n"); | ||
220 | return err; | ||
221 | } | ||
222 | |||
229 | property = of_get_property(np, "disabled-ports", &len); | 223 | property = of_get_property(np, "disabled-ports", &len); |
230 | if (property && (len / sizeof(u32)) > 0) { | 224 | if (property && (len / sizeof(u32)) > 0) { |
231 | int i; | 225 | int i; |
@@ -324,8 +318,7 @@ static int usb3503_i2c_remove(struct i2c_client *i2c) | |||
324 | struct usb3503 *hub; | 318 | struct usb3503 *hub; |
325 | 319 | ||
326 | hub = i2c_get_clientdata(i2c); | 320 | hub = i2c_get_clientdata(i2c); |
327 | if (hub->clk) | 321 | clk_disable_unprepare(hub->clk); |
328 | clk_disable_unprepare(hub->clk); | ||
329 | 322 | ||
330 | return 0; | 323 | return 0; |
331 | } | 324 | } |
@@ -348,8 +341,7 @@ static int usb3503_platform_remove(struct platform_device *pdev) | |||
348 | struct usb3503 *hub; | 341 | struct usb3503 *hub; |
349 | 342 | ||
350 | hub = platform_get_drvdata(pdev); | 343 | hub = platform_get_drvdata(pdev); |
351 | if (hub->clk) | 344 | clk_disable_unprepare(hub->clk); |
352 | clk_disable_unprepare(hub->clk); | ||
353 | 345 | ||
354 | return 0; | 346 | return 0; |
355 | } | 347 | } |
@@ -358,18 +350,14 @@ static int usb3503_platform_remove(struct platform_device *pdev) | |||
358 | static int usb3503_suspend(struct usb3503 *hub) | 350 | static int usb3503_suspend(struct usb3503 *hub) |
359 | { | 351 | { |
360 | usb3503_switch_mode(hub, USB3503_MODE_STANDBY); | 352 | usb3503_switch_mode(hub, USB3503_MODE_STANDBY); |
361 | 353 | clk_disable_unprepare(hub->clk); | |
362 | if (hub->clk) | ||
363 | clk_disable_unprepare(hub->clk); | ||
364 | 354 | ||
365 | return 0; | 355 | return 0; |
366 | } | 356 | } |
367 | 357 | ||
368 | static int usb3503_resume(struct usb3503 *hub) | 358 | static int usb3503_resume(struct usb3503 *hub) |
369 | { | 359 | { |
370 | if (hub->clk) | 360 | clk_prepare_enable(hub->clk); |
371 | clk_prepare_enable(hub->clk); | ||
372 | |||
373 | usb3503_switch_mode(hub, hub->mode); | 361 | usb3503_switch_mode(hub, hub->mode); |
374 | 362 | ||
375 | return 0; | 363 | return 0; |