|
@@ -1334,22 +1334,19 @@ static int mmc_omap_probe(struct platform_device *pdev)
|
|
return -EPROBE_DEFER;
|
|
return -EPROBE_DEFER;
|
|
}
|
|
}
|
|
|
|
|
|
- res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
|
|
|
|
|
+ host = devm_kzalloc(&pdev->dev, sizeof(struct mmc_omap_host),
|
|
|
|
+ GFP_KERNEL);
|
|
|
|
+ if (host == NULL)
|
|
|
|
+ return -ENOMEM;
|
|
|
|
+
|
|
irq = platform_get_irq(pdev, 0);
|
|
irq = platform_get_irq(pdev, 0);
|
|
- if (res == NULL || irq < 0)
|
|
|
|
|
|
+ if (irq < 0)
|
|
return -ENXIO;
|
|
return -ENXIO;
|
|
|
|
|
|
- res = request_mem_region(res->start, resource_size(res),
|
|
|
|
- pdev->name);
|
|
|
|
- if (res == NULL)
|
|
|
|
- return -EBUSY;
|
|
|
|
-
|
|
|
|
- host = devm_kzalloc(&pdev->dev, sizeof(struct mmc_omap_host),
|
|
|
|
- GFP_KERNEL);
|
|
|
|
- if (host == NULL) {
|
|
|
|
- ret = -ENOMEM;
|
|
|
|
- goto err_free_mem_region;
|
|
|
|
- }
|
|
|
|
|
|
+ res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
|
|
|
+ host->virt_base = devm_ioremap_resource(&pdev->dev, res);
|
|
|
|
+ if (IS_ERR(host->virt_base))
|
|
|
|
+ return PTR_ERR(host->virt_base);
|
|
|
|
|
|
INIT_WORK(&host->slot_release_work, mmc_omap_slot_release_work);
|
|
INIT_WORK(&host->slot_release_work, mmc_omap_slot_release_work);
|
|
INIT_WORK(&host->send_stop_work, mmc_omap_send_stop_work);
|
|
INIT_WORK(&host->send_stop_work, mmc_omap_send_stop_work);
|
|
@@ -1374,15 +1371,9 @@ static int mmc_omap_probe(struct platform_device *pdev)
|
|
host->irq = irq;
|
|
host->irq = irq;
|
|
host->use_dma = 1;
|
|
host->use_dma = 1;
|
|
host->phys_base = res->start;
|
|
host->phys_base = res->start;
|
|
- host->virt_base = ioremap(res->start, resource_size(res));
|
|
|
|
- if (!host->virt_base)
|
|
|
|
- goto err_ioremap;
|
|
|
|
-
|
|
|
|
host->iclk = clk_get(&pdev->dev, "ick");
|
|
host->iclk = clk_get(&pdev->dev, "ick");
|
|
- if (IS_ERR(host->iclk)) {
|
|
|
|
- ret = PTR_ERR(host->iclk);
|
|
|
|
- goto err_free_mmc_host;
|
|
|
|
- }
|
|
|
|
|
|
+ if (IS_ERR(host->iclk))
|
|
|
|
+ return PTR_ERR(host->iclk);
|
|
clk_enable(host->iclk);
|
|
clk_enable(host->iclk);
|
|
|
|
|
|
host->fclk = clk_get(&pdev->dev, "fck");
|
|
host->fclk = clk_get(&pdev->dev, "fck");
|
|
@@ -1460,11 +1451,6 @@ err_free_dma:
|
|
err_free_iclk:
|
|
err_free_iclk:
|
|
clk_disable(host->iclk);
|
|
clk_disable(host->iclk);
|
|
clk_put(host->iclk);
|
|
clk_put(host->iclk);
|
|
-err_free_mmc_host:
|
|
|
|
- iounmap(host->virt_base);
|
|
|
|
-err_ioremap:
|
|
|
|
-err_free_mem_region:
|
|
|
|
- release_mem_region(res->start, resource_size(res));
|
|
|
|
return ret;
|
|
return ret;
|
|
}
|
|
}
|
|
|
|
|
|
@@ -1492,9 +1478,6 @@ static int mmc_omap_remove(struct platform_device *pdev)
|
|
if (host->dma_rx)
|
|
if (host->dma_rx)
|
|
dma_release_channel(host->dma_rx);
|
|
dma_release_channel(host->dma_rx);
|
|
|
|
|
|
- iounmap(host->virt_base);
|
|
|
|
- release_mem_region(pdev->resource[0].start,
|
|
|
|
- pdev->resource[0].end - pdev->resource[0].start + 1);
|
|
|
|
destroy_workqueue(host->mmc_omap_wq);
|
|
destroy_workqueue(host->mmc_omap_wq);
|
|
|
|
|
|
return 0;
|
|
return 0;
|