diff options
Diffstat (limited to 'drivers/crypto/atmel-sha.c')
-rw-r--r-- | drivers/crypto/atmel-sha.c | 23 |
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 | ||
828 | static int atmel_sha_handle_queue(struct atmel_sha_dev *dd, | 828 | static 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); |
1459 | err_sha_dma: | 1463 | err_sha_dma: |
1464 | iclk_unprepare: | ||
1465 | clk_unprepare(sha_dd->iclk); | ||
1460 | res_err: | 1466 | res_err: |
1461 | tasklet_kill(&sha_dd->done_task); | 1467 | tasklet_kill(&sha_dd->done_task); |
1462 | sha_dd_err: | 1468 | sha_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 | } |