summaryrefslogtreecommitdiffstats
path: root/drivers/crypto/atmel-sha.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/crypto/atmel-sha.c')
-rw-r--r--drivers/crypto/atmel-sha.c23
1 files changed, 12 insertions, 11 deletions
diff --git a/drivers/crypto/atmel-sha.c b/drivers/crypto/atmel-sha.c
index 20de861aa0ea..8bf9914d4d15 100644
--- a/drivers/crypto/atmel-sha.c
+++ b/drivers/crypto/atmel-sha.c
@@ -782,7 +782,7 @@ static void atmel_sha_finish_req(struct ahash_request *req, int err)
782 dd->flags &= ~(SHA_FLAGS_BUSY | SHA_FLAGS_FINAL | SHA_FLAGS_CPU | 782 dd->flags &= ~(SHA_FLAGS_BUSY | SHA_FLAGS_FINAL | SHA_FLAGS_CPU |
783 SHA_FLAGS_DMA_READY | SHA_FLAGS_OUTPUT_READY); 783 SHA_FLAGS_DMA_READY | SHA_FLAGS_OUTPUT_READY);
784 784
785 clk_disable_unprepare(dd->iclk); 785 clk_disable(dd->iclk);
786 786
787 if (req->base.complete) 787 if (req->base.complete)
788 req->base.complete(&req->base, err); 788 req->base.complete(&req->base, err);
@@ -795,7 +795,7 @@ static int atmel_sha_hw_init(struct atmel_sha_dev *dd)
795{ 795{
796 int err; 796 int err;
797 797
798 err = clk_prepare_enable(dd->iclk); 798 err = clk_enable(dd->iclk);
799 if (err) 799 if (err)
800 return err; 800 return err;
801 801
@@ -822,7 +822,7 @@ static void atmel_sha_hw_version_init(struct atmel_sha_dev *dd)
822 dev_info(dd->dev, 822 dev_info(dd->dev,
823 "version: 0x%x\n", dd->hw_version); 823 "version: 0x%x\n", dd->hw_version);
824 824
825 clk_disable_unprepare(dd->iclk); 825 clk_disable(dd->iclk);
826} 826}
827 827
828static int atmel_sha_handle_queue(struct atmel_sha_dev *dd, 828static int atmel_sha_handle_queue(struct atmel_sha_dev *dd,
@@ -1410,6 +1410,10 @@ static int atmel_sha_probe(struct platform_device *pdev)
1410 goto res_err; 1410 goto res_err;
1411 } 1411 }
1412 1412
1413 err = clk_prepare(sha_dd->iclk);
1414 if (err)
1415 goto res_err;
1416
1413 atmel_sha_hw_version_init(sha_dd); 1417 atmel_sha_hw_version_init(sha_dd);
1414 1418
1415 atmel_sha_get_cap(sha_dd); 1419 atmel_sha_get_cap(sha_dd);
@@ -1421,12 +1425,12 @@ static int atmel_sha_probe(struct platform_device *pdev)
1421 if (IS_ERR(pdata)) { 1425 if (IS_ERR(pdata)) {
1422 dev_err(&pdev->dev, "platform data not available\n"); 1426 dev_err(&pdev->dev, "platform data not available\n");
1423 err = PTR_ERR(pdata); 1427 err = PTR_ERR(pdata);
1424 goto res_err; 1428 goto iclk_unprepare;
1425 } 1429 }
1426 } 1430 }
1427 if (!pdata->dma_slave) { 1431 if (!pdata->dma_slave) {
1428 err = -ENXIO; 1432 err = -ENXIO;
1429 goto res_err; 1433 goto iclk_unprepare;
1430 } 1434 }
1431 err = atmel_sha_dma_init(sha_dd, pdata); 1435 err = atmel_sha_dma_init(sha_dd, pdata);
1432 if (err) 1436 if (err)
@@ -1457,6 +1461,8 @@ err_algs:
1457 if (sha_dd->caps.has_dma) 1461 if (sha_dd->caps.has_dma)
1458 atmel_sha_dma_cleanup(sha_dd); 1462 atmel_sha_dma_cleanup(sha_dd);
1459err_sha_dma: 1463err_sha_dma:
1464iclk_unprepare:
1465 clk_unprepare(sha_dd->iclk);
1460res_err: 1466res_err:
1461 tasklet_kill(&sha_dd->done_task); 1467 tasklet_kill(&sha_dd->done_task);
1462sha_dd_err: 1468sha_dd_err:
@@ -1483,12 +1489,7 @@ static int atmel_sha_remove(struct platform_device *pdev)
1483 if (sha_dd->caps.has_dma) 1489 if (sha_dd->caps.has_dma)
1484 atmel_sha_dma_cleanup(sha_dd); 1490 atmel_sha_dma_cleanup(sha_dd);
1485 1491
1486 iounmap(sha_dd->io_base); 1492 clk_unprepare(sha_dd->iclk);
1487
1488 clk_put(sha_dd->iclk);
1489
1490 if (sha_dd->irq >= 0)
1491 free_irq(sha_dd->irq, sha_dd);
1492 1493
1493 return 0; 1494 return 0;
1494} 1495}