diff options
-rw-r--r-- | drivers/mmc/host/s3cmci.c | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/drivers/mmc/host/s3cmci.c b/drivers/mmc/host/s3cmci.c index 8904bb39df65..be550c26da68 100644 --- a/drivers/mmc/host/s3cmci.c +++ b/drivers/mmc/host/s3cmci.c | |||
@@ -1331,21 +1331,30 @@ static int __devinit s3cmci_probe(struct platform_device *pdev, int is2440) | |||
1331 | return ret; | 1331 | return ret; |
1332 | } | 1332 | } |
1333 | 1333 | ||
1334 | static void s3cmci_shutdown(struct platform_device *pdev) | ||
1335 | { | ||
1336 | struct mmc_host *mmc = platform_get_drvdata(pdev); | ||
1337 | struct s3cmci_host *host = mmc_priv(mmc); | ||
1338 | |||
1339 | if (host->irq_cd >= 0) | ||
1340 | free_irq(host->irq_cd, host); | ||
1341 | |||
1342 | mmc_remove_host(mmc); | ||
1343 | clk_disable(host->clk); | ||
1344 | } | ||
1345 | |||
1334 | static int __devexit s3cmci_remove(struct platform_device *pdev) | 1346 | static int __devexit s3cmci_remove(struct platform_device *pdev) |
1335 | { | 1347 | { |
1336 | struct mmc_host *mmc = platform_get_drvdata(pdev); | 1348 | struct mmc_host *mmc = platform_get_drvdata(pdev); |
1337 | struct s3cmci_host *host = mmc_priv(mmc); | 1349 | struct s3cmci_host *host = mmc_priv(mmc); |
1338 | 1350 | ||
1339 | mmc_remove_host(mmc); | 1351 | s3cmci_shutdown(pdev); |
1340 | 1352 | ||
1341 | clk_disable(host->clk); | ||
1342 | clk_put(host->clk); | 1353 | clk_put(host->clk); |
1343 | 1354 | ||
1344 | tasklet_disable(&host->pio_tasklet); | 1355 | tasklet_disable(&host->pio_tasklet); |
1345 | s3c2410_dma_free(S3CMCI_DMA, &s3cmci_dma_client); | 1356 | s3c2410_dma_free(S3CMCI_DMA, &s3cmci_dma_client); |
1346 | 1357 | ||
1347 | if (host->irq_cd >= 0) | ||
1348 | free_irq(host->irq_cd, host); | ||
1349 | free_irq(host->irq, host); | 1358 | free_irq(host->irq, host); |
1350 | 1359 | ||
1351 | iounmap(host->base); | 1360 | iounmap(host->base); |
@@ -1397,6 +1406,7 @@ static struct platform_driver s3cmci_2410_driver = { | |||
1397 | .driver.owner = THIS_MODULE, | 1406 | .driver.owner = THIS_MODULE, |
1398 | .probe = s3cmci_2410_probe, | 1407 | .probe = s3cmci_2410_probe, |
1399 | .remove = __devexit_p(s3cmci_remove), | 1408 | .remove = __devexit_p(s3cmci_remove), |
1409 | .shutdown = s3cmci_shutdown, | ||
1400 | .suspend = s3cmci_suspend, | 1410 | .suspend = s3cmci_suspend, |
1401 | .resume = s3cmci_resume, | 1411 | .resume = s3cmci_resume, |
1402 | }; | 1412 | }; |
@@ -1406,6 +1416,7 @@ static struct platform_driver s3cmci_2412_driver = { | |||
1406 | .driver.owner = THIS_MODULE, | 1416 | .driver.owner = THIS_MODULE, |
1407 | .probe = s3cmci_2412_probe, | 1417 | .probe = s3cmci_2412_probe, |
1408 | .remove = __devexit_p(s3cmci_remove), | 1418 | .remove = __devexit_p(s3cmci_remove), |
1419 | .shutdown = s3cmci_shutdown, | ||
1409 | .suspend = s3cmci_suspend, | 1420 | .suspend = s3cmci_suspend, |
1410 | .resume = s3cmci_resume, | 1421 | .resume = s3cmci_resume, |
1411 | }; | 1422 | }; |
@@ -1415,6 +1426,7 @@ static struct platform_driver s3cmci_2440_driver = { | |||
1415 | .driver.owner = THIS_MODULE, | 1426 | .driver.owner = THIS_MODULE, |
1416 | .probe = s3cmci_2440_probe, | 1427 | .probe = s3cmci_2440_probe, |
1417 | .remove = __devexit_p(s3cmci_remove), | 1428 | .remove = __devexit_p(s3cmci_remove), |
1429 | .shutdown = s3cmci_shutdown, | ||
1418 | .suspend = s3cmci_suspend, | 1430 | .suspend = s3cmci_suspend, |
1419 | .resume = s3cmci_resume, | 1431 | .resume = s3cmci_resume, |
1420 | }; | 1432 | }; |