Commit aae730df authored by Grant Likely's avatar Grant Likely

Merge branch 'spi' of git://gitorious.org/linus-tree/linus-tree into spi/next

parents 00341028 1a77b127
...@@ -791,7 +791,7 @@ static int omap2_mcspi_setup(struct spi_device *spi) ...@@ -791,7 +791,7 @@ static int omap2_mcspi_setup(struct spi_device *spi)
mcspi_dma = &mcspi->dma_channels[spi->chip_select]; mcspi_dma = &mcspi->dma_channels[spi->chip_select];
if (!cs) { if (!cs) {
cs = kzalloc(sizeof *cs, GFP_KERNEL); cs = devm_kzalloc(&spi->dev , sizeof *cs, GFP_KERNEL);
if (!cs) if (!cs)
return -ENOMEM; return -ENOMEM;
cs->base = mcspi->base + spi->chip_select * 0x14; cs->base = mcspi->base + spi->chip_select * 0x14;
...@@ -833,7 +833,6 @@ static void omap2_mcspi_cleanup(struct spi_device *spi) ...@@ -833,7 +833,6 @@ static void omap2_mcspi_cleanup(struct spi_device *spi)
cs = spi->controller_state; cs = spi->controller_state;
list_del(&cs->node); list_del(&cs->node);
kfree(spi->controller_state);
} }
if (spi->chip_select < spi->master->num_chipselect) { if (spi->chip_select < spi->master->num_chipselect) {
...@@ -1102,7 +1101,7 @@ static const struct of_device_id omap_mcspi_of_match[] = { ...@@ -1102,7 +1101,7 @@ static const struct of_device_id omap_mcspi_of_match[] = {
}; };
MODULE_DEVICE_TABLE(of, omap_mcspi_of_match); MODULE_DEVICE_TABLE(of, omap_mcspi_of_match);
static int __init omap2_mcspi_probe(struct platform_device *pdev) static int __devinit omap2_mcspi_probe(struct platform_device *pdev)
{ {
struct spi_master *master; struct spi_master *master;
struct omap2_mcspi_platform_config *pdata; struct omap2_mcspi_platform_config *pdata;
...@@ -1166,17 +1165,12 @@ static int __init omap2_mcspi_probe(struct platform_device *pdev) ...@@ -1166,17 +1165,12 @@ static int __init omap2_mcspi_probe(struct platform_device *pdev)
r->start += regs_offset; r->start += regs_offset;
r->end += regs_offset; r->end += regs_offset;
mcspi->phys = r->start; mcspi->phys = r->start;
if (!request_mem_region(r->start, resource_size(r),
dev_name(&pdev->dev))) {
status = -EBUSY;
goto free_master;
}
mcspi->base = ioremap(r->start, resource_size(r)); mcspi->base = devm_request_and_ioremap(&pdev->dev, r);
if (!mcspi->base) { if (!mcspi->base) {
dev_dbg(&pdev->dev, "can't ioremap MCSPI\n"); dev_dbg(&pdev->dev, "can't ioremap MCSPI\n");
status = -ENOMEM; status = -ENOMEM;
goto release_region; goto free_master;
} }
mcspi->dev = &pdev->dev; mcspi->dev = &pdev->dev;
...@@ -1191,7 +1185,7 @@ static int __init omap2_mcspi_probe(struct platform_device *pdev) ...@@ -1191,7 +1185,7 @@ static int __init omap2_mcspi_probe(struct platform_device *pdev)
GFP_KERNEL); GFP_KERNEL);
if (mcspi->dma_channels == NULL) if (mcspi->dma_channels == NULL)
goto unmap_io; goto free_master;
for (i = 0; i < master->num_chipselect; i++) { for (i = 0; i < master->num_chipselect; i++) {
char dma_ch_name[14]; char dma_ch_name[14];
...@@ -1241,23 +1235,17 @@ static int __init omap2_mcspi_probe(struct platform_device *pdev) ...@@ -1241,23 +1235,17 @@ static int __init omap2_mcspi_probe(struct platform_device *pdev)
pm_runtime_disable(&pdev->dev); pm_runtime_disable(&pdev->dev);
dma_chnl_free: dma_chnl_free:
kfree(mcspi->dma_channels); kfree(mcspi->dma_channels);
unmap_io:
iounmap(mcspi->base);
release_region:
release_mem_region(r->start, resource_size(r));
free_master: free_master:
kfree(master); kfree(master);
platform_set_drvdata(pdev, NULL); platform_set_drvdata(pdev, NULL);
return status; return status;
} }
static int __exit omap2_mcspi_remove(struct platform_device *pdev) static int __devexit omap2_mcspi_remove(struct platform_device *pdev)
{ {
struct spi_master *master; struct spi_master *master;
struct omap2_mcspi *mcspi; struct omap2_mcspi *mcspi;
struct omap2_mcspi_dma *dma_channels; struct omap2_mcspi_dma *dma_channels;
struct resource *r;
void __iomem *base;
master = dev_get_drvdata(&pdev->dev); master = dev_get_drvdata(&pdev->dev);
mcspi = spi_master_get_devdata(master); mcspi = spi_master_get_devdata(master);
...@@ -1265,12 +1253,8 @@ static int __exit omap2_mcspi_remove(struct platform_device *pdev) ...@@ -1265,12 +1253,8 @@ static int __exit omap2_mcspi_remove(struct platform_device *pdev)
omap2_mcspi_disable_clocks(mcspi); omap2_mcspi_disable_clocks(mcspi);
pm_runtime_disable(&pdev->dev); pm_runtime_disable(&pdev->dev);
r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
release_mem_region(r->start, resource_size(r));
base = mcspi->base;
spi_unregister_master(master); spi_unregister_master(master);
iounmap(base);
kfree(dma_channels); kfree(dma_channels);
destroy_workqueue(mcspi->wq); destroy_workqueue(mcspi->wq);
platform_set_drvdata(pdev, NULL); platform_set_drvdata(pdev, NULL);
...@@ -1327,21 +1311,9 @@ static struct platform_driver omap2_mcspi_driver = { ...@@ -1327,21 +1311,9 @@ static struct platform_driver omap2_mcspi_driver = {
.pm = &omap2_mcspi_pm_ops, .pm = &omap2_mcspi_pm_ops,
.of_match_table = omap_mcspi_of_match, .of_match_table = omap_mcspi_of_match,
}, },
.remove = __exit_p(omap2_mcspi_remove), .probe = omap2_mcspi_probe,
.remove = __devexit_p(omap2_mcspi_remove),
}; };
module_platform_driver(omap2_mcspi_driver);
static int __init omap2_mcspi_init(void)
{
return platform_driver_probe(&omap2_mcspi_driver, omap2_mcspi_probe);
}
subsys_initcall(omap2_mcspi_init);
static void __exit omap2_mcspi_exit(void)
{
platform_driver_unregister(&omap2_mcspi_driver);
}
module_exit(omap2_mcspi_exit);
MODULE_LICENSE("GPL"); MODULE_LICENSE("GPL");
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment