aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/usb/host/ohci-pxa27x.c
diff options
context:
space:
mode:
authorJingoo Han <jg1.han@samsung.com>2013-12-11 02:26:21 -0500
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2013-12-18 19:35:10 -0500
commitf1080e4d90b2c0ec3ce850a9fad8ac8a79df3b23 (patch)
tree26b72d6dcc6faded4062164012268220ae30b364 /drivers/usb/host/ohci-pxa27x.c
parent49aa57bda7e54ee6e37844bae83e122f44b30637 (diff)
USB: ohci-pxa27x:Use devm_*() functions
Use devm_*() functions to make cleanup paths simpler. Signed-off-by: Jingoo Han <jg1.han@samsung.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/usb/host/ohci-pxa27x.c')
-rw-r--r--drivers/usb/host/ohci-pxa27x.c38
1 files changed, 10 insertions, 28 deletions
diff --git a/drivers/usb/host/ohci-pxa27x.c b/drivers/usb/host/ohci-pxa27x.c
index 9352a4d42563..d21d5fefa76c 100644
--- a/drivers/usb/host/ohci-pxa27x.c
+++ b/drivers/usb/host/ohci-pxa27x.c
@@ -388,37 +388,28 @@ int usb_hcd_pxa27x_probe (const struct hc_driver *driver, struct platform_device
388 return -ENXIO; 388 return -ENXIO;
389 } 389 }
390 390
391 usb_clk = clk_get(&pdev->dev, NULL); 391 usb_clk = devm_clk_get(&pdev->dev, NULL);
392 if (IS_ERR(usb_clk)) 392 if (IS_ERR(usb_clk))
393 return PTR_ERR(usb_clk); 393 return PTR_ERR(usb_clk);
394 394
395 hcd = usb_create_hcd (driver, &pdev->dev, "pxa27x"); 395 hcd = usb_create_hcd (driver, &pdev->dev, "pxa27x");
396 if (!hcd) { 396 if (!hcd)
397 retval = -ENOMEM; 397 return -ENOMEM;
398 goto err0;
399 }
400 398
401 r = platform_get_resource(pdev, IORESOURCE_MEM, 0); 399 r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
402 if (!r) { 400 if (!r) {
403 pr_err("no resource of IORESOURCE_MEM"); 401 pr_err("no resource of IORESOURCE_MEM");
404 retval = -ENXIO; 402 retval = -ENXIO;
405 goto err1; 403 goto err;
406 } 404 }
407 405
408 hcd->rsrc_start = r->start; 406 hcd->rsrc_start = r->start;
409 hcd->rsrc_len = resource_size(r); 407 hcd->rsrc_len = resource_size(r);
410 408
411 if (!request_mem_region(hcd->rsrc_start, hcd->rsrc_len, hcd_name)) { 409 hcd->regs = devm_ioremap_resource(&pdev->dev, r);
412 pr_debug("request_mem_region failed"); 410 if (IS_ERR(hcd->regs)) {
413 retval = -EBUSY; 411 retval = PTR_ERR(hcd->regs);
414 goto err1; 412 goto err;
415 }
416
417 hcd->regs = ioremap(hcd->rsrc_start, hcd->rsrc_len);
418 if (!hcd->regs) {
419 pr_debug("ioremap failed");
420 retval = -ENOMEM;
421 goto err2;
422 } 413 }
423 414
424 /* initialize "struct pxa27x_ohci" */ 415 /* initialize "struct pxa27x_ohci" */
@@ -429,7 +420,7 @@ int usb_hcd_pxa27x_probe (const struct hc_driver *driver, struct platform_device
429 retval = pxa27x_start_hc(pxa_ohci, &pdev->dev); 420 retval = pxa27x_start_hc(pxa_ohci, &pdev->dev);
430 if (retval < 0) { 421 if (retval < 0) {
431 pr_debug("pxa27x_start_hc failed"); 422 pr_debug("pxa27x_start_hc failed");
432 goto err3; 423 goto err;
433 } 424 }
434 425
435 /* Select Power Management Mode */ 426 /* Select Power Management Mode */
@@ -449,14 +440,8 @@ int usb_hcd_pxa27x_probe (const struct hc_driver *driver, struct platform_device
449 } 440 }
450 441
451 pxa27x_stop_hc(pxa_ohci, &pdev->dev); 442 pxa27x_stop_hc(pxa_ohci, &pdev->dev);
452 err3: 443 err:
453 iounmap(hcd->regs);
454 err2:
455 release_mem_region(hcd->rsrc_start, hcd->rsrc_len);
456 err1:
457 usb_put_hcd(hcd); 444 usb_put_hcd(hcd);
458 err0:
459 clk_put(usb_clk);
460 return retval; 445 return retval;
461} 446}
462 447
@@ -480,9 +465,6 @@ void usb_hcd_pxa27x_remove (struct usb_hcd *hcd, struct platform_device *pdev)
480 465
481 usb_remove_hcd(hcd); 466 usb_remove_hcd(hcd);
482 pxa27x_stop_hc(pxa_ohci, &pdev->dev); 467 pxa27x_stop_hc(pxa_ohci, &pdev->dev);
483 iounmap(hcd->regs);
484 release_mem_region(hcd->rsrc_start, hcd->rsrc_len);
485 clk_put(pxa_ohci->clk);
486 usb_put_hcd(hcd); 468 usb_put_hcd(hcd);
487} 469}
488 470