Merge branch 'spi' of git://gitorious.org/linus-tree/linus-tree into spi/next
This commit is contained in:
commit
aae730dfe2
@ -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)
|
|||||||
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[] = {
|
|||||||
};
|
};
|
||||||
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)
|
|||||||
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)
|
|||||||
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 @@ disable_pm:
|
|||||||
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)
|
|||||||
|
|
||||||
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 = {
|
|||||||
.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");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user