|
@@ -135,7 +135,6 @@ struct s3c_hsudc_req {
|
|
|
* @dev: The device reference used by probe function.
|
|
|
* @lock: Lock to synchronize the usage of Endpoints (EP's are indexed).
|
|
|
* @regs: Remapped base address of controller's register space.
|
|
|
- * @mem_rsrc: Device memory resource used for remapping device register space.
|
|
|
* irq: IRQ number used by the controller.
|
|
|
* uclk: Reference to the controller clock.
|
|
|
* ep0state: Current state of EP0.
|
|
@@ -150,7 +149,6 @@ struct s3c_hsudc {
|
|
|
struct regulator_bulk_data supplies[ARRAY_SIZE(s3c_hsudc_supply_names)];
|
|
|
spinlock_t lock;
|
|
|
void __iomem *regs;
|
|
|
- struct resource *mem_rsrc;
|
|
|
int irq;
|
|
|
struct clk *uclk;
|
|
|
int ep0state;
|
|
@@ -1271,7 +1269,7 @@ static int __devinit s3c_hsudc_probe(struct platform_device *pdev)
|
|
|
struct s3c24xx_hsudc_platdata *pd = pdev->dev.platform_data;
|
|
|
int ret, i;
|
|
|
|
|
|
- hsudc = kzalloc(sizeof(struct s3c_hsudc) +
|
|
|
+ hsudc = devm_kzalloc(&pdev->dev, sizeof(struct s3c_hsudc) +
|
|
|
sizeof(struct s3c_hsudc_ep) * pd->epnum,
|
|
|
GFP_KERNEL);
|
|
|
if (!hsudc) {
|
|
@@ -1296,25 +1294,12 @@ static int __devinit s3c_hsudc_probe(struct platform_device *pdev)
|
|
|
}
|
|
|
|
|
|
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
|
|
- if (!res) {
|
|
|
- dev_err(dev, "unable to obtain driver resource data\n");
|
|
|
- ret = -ENODEV;
|
|
|
- goto err_res;
|
|
|
- }
|
|
|
-
|
|
|
- hsudc->mem_rsrc = request_mem_region(res->start, resource_size(res),
|
|
|
- dev_name(&pdev->dev));
|
|
|
- if (!hsudc->mem_rsrc) {
|
|
|
- dev_err(dev, "failed to reserve register area\n");
|
|
|
- ret = -ENODEV;
|
|
|
- goto err_res;
|
|
|
- }
|
|
|
|
|
|
- hsudc->regs = ioremap(res->start, resource_size(res));
|
|
|
+ hsudc->regs = devm_request_and_ioremap(&pdev->dev, res);
|
|
|
if (!hsudc->regs) {
|
|
|
dev_err(dev, "error mapping device register area\n");
|
|
|
ret = -EBUSY;
|
|
|
- goto err_remap;
|
|
|
+ goto err_res;
|
|
|
}
|
|
|
|
|
|
spin_lock_init(&hsudc->lock);
|
|
@@ -1337,21 +1322,22 @@ static int __devinit s3c_hsudc_probe(struct platform_device *pdev)
|
|
|
ret = platform_get_irq(pdev, 0);
|
|
|
if (ret < 0) {
|
|
|
dev_err(dev, "unable to obtain IRQ number\n");
|
|
|
- goto err_irq;
|
|
|
+ goto err_res;
|
|
|
}
|
|
|
hsudc->irq = ret;
|
|
|
|
|
|
- ret = request_irq(hsudc->irq, s3c_hsudc_irq, 0, driver_name, hsudc);
|
|
|
+ ret = devm_request_irq(&pdev->dev, hsudc->irq, s3c_hsudc_irq, 0,
|
|
|
+ driver_name, hsudc);
|
|
|
if (ret < 0) {
|
|
|
dev_err(dev, "irq request failed\n");
|
|
|
- goto err_irq;
|
|
|
+ goto err_res;
|
|
|
}
|
|
|
|
|
|
- hsudc->uclk = clk_get(&pdev->dev, "usb-device");
|
|
|
+ hsudc->uclk = devm_clk_get(&pdev->dev, "usb-device");
|
|
|
if (IS_ERR(hsudc->uclk)) {
|
|
|
dev_err(dev, "failed to find usb-device clock source\n");
|
|
|
ret = PTR_ERR(hsudc->uclk);
|
|
|
- goto err_clk;
|
|
|
+ goto err_res;
|
|
|
}
|
|
|
clk_enable(hsudc->uclk);
|
|
|
|
|
@@ -1377,21 +1363,12 @@ err_add_udc:
|
|
|
device_unregister(&hsudc->gadget.dev);
|
|
|
err_add_device:
|
|
|
clk_disable(hsudc->uclk);
|
|
|
- clk_put(hsudc->uclk);
|
|
|
-err_clk:
|
|
|
- free_irq(hsudc->irq, hsudc);
|
|
|
-err_irq:
|
|
|
- iounmap(hsudc->regs);
|
|
|
-
|
|
|
-err_remap:
|
|
|
- release_mem_region(res->start, resource_size(res));
|
|
|
err_res:
|
|
|
if (!IS_ERR_OR_NULL(hsudc->transceiver))
|
|
|
usb_put_phy(hsudc->transceiver);
|
|
|
|
|
|
regulator_bulk_free(ARRAY_SIZE(hsudc->supplies), hsudc->supplies);
|
|
|
err_supplies:
|
|
|
- kfree(hsudc);
|
|
|
return ret;
|
|
|
}
|
|
|
|