drivers/usb/host/ehci-msm.c: use devm_ functions
The various devm_ functions allocate memory that is released when a driver detaches. This patch uses these functions for data that is allocated in the probe function of a platform device and is only freed in the remove function. The original code was also missing a call to iounmap(hcd->regs); in the remove function, so this patch also implicitly fixes a bug. Signed-off-by: Julia Lawall <Julia.Lawall@lip6.fr> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
84b79838b9
commit
df5eb3ffa8
@ -133,7 +133,7 @@ static int ehci_msm_probe(struct platform_device *pdev)
|
|||||||
|
|
||||||
hcd->rsrc_start = res->start;
|
hcd->rsrc_start = res->start;
|
||||||
hcd->rsrc_len = resource_size(res);
|
hcd->rsrc_len = resource_size(res);
|
||||||
hcd->regs = ioremap(hcd->rsrc_start, hcd->rsrc_len);
|
hcd->regs = devm_ioremap(&pdev->dev, hcd->rsrc_start, hcd->rsrc_len);
|
||||||
if (!hcd->regs) {
|
if (!hcd->regs) {
|
||||||
dev_err(&pdev->dev, "ioremap failed\n");
|
dev_err(&pdev->dev, "ioremap failed\n");
|
||||||
ret = -ENOMEM;
|
ret = -ENOMEM;
|
||||||
@ -145,17 +145,17 @@ static int ehci_msm_probe(struct platform_device *pdev)
|
|||||||
* powering up VBUS, mapping of registers address space and power
|
* powering up VBUS, mapping of registers address space and power
|
||||||
* management.
|
* management.
|
||||||
*/
|
*/
|
||||||
phy = usb_get_phy(USB_PHY_TYPE_USB2);
|
phy = devm_usb_get_phy(&pdev->dev, USB_PHY_TYPE_USB2);
|
||||||
if (IS_ERR_OR_NULL(phy)) {
|
if (IS_ERR_OR_NULL(phy)) {
|
||||||
dev_err(&pdev->dev, "unable to find transceiver\n");
|
dev_err(&pdev->dev, "unable to find transceiver\n");
|
||||||
ret = -ENODEV;
|
ret = -ENODEV;
|
||||||
goto unmap;
|
goto put_hcd;
|
||||||
}
|
}
|
||||||
|
|
||||||
ret = otg_set_host(phy->otg, &hcd->self);
|
ret = otg_set_host(phy->otg, &hcd->self);
|
||||||
if (ret < 0) {
|
if (ret < 0) {
|
||||||
dev_err(&pdev->dev, "unable to register with transceiver\n");
|
dev_err(&pdev->dev, "unable to register with transceiver\n");
|
||||||
goto put_transceiver;
|
goto put_hcd;
|
||||||
}
|
}
|
||||||
|
|
||||||
device_init_wakeup(&pdev->dev, 1);
|
device_init_wakeup(&pdev->dev, 1);
|
||||||
@ -168,10 +168,6 @@ static int ehci_msm_probe(struct platform_device *pdev)
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
put_transceiver:
|
|
||||||
usb_put_phy(phy);
|
|
||||||
unmap:
|
|
||||||
iounmap(hcd->regs);
|
|
||||||
put_hcd:
|
put_hcd:
|
||||||
usb_put_hcd(hcd);
|
usb_put_hcd(hcd);
|
||||||
|
|
||||||
@ -187,7 +183,6 @@ static int __devexit ehci_msm_remove(struct platform_device *pdev)
|
|||||||
pm_runtime_set_suspended(&pdev->dev);
|
pm_runtime_set_suspended(&pdev->dev);
|
||||||
|
|
||||||
otg_set_host(phy->otg, NULL);
|
otg_set_host(phy->otg, NULL);
|
||||||
usb_put_phy(phy);
|
|
||||||
|
|
||||||
usb_put_hcd(hcd);
|
usb_put_hcd(hcd);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user