diff options
| -rw-r--r-- | drivers/crypto/atmel-sha.c | 18 | 
1 files changed, 13 insertions, 5 deletions
diff --git a/drivers/crypto/atmel-sha.c b/drivers/crypto/atmel-sha.c index b5ab7400008d..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)  	dd->flags &= ~(SHA_FLAGS_BUSY | SHA_FLAGS_FINAL | SHA_FLAGS_CPU |  			SHA_FLAGS_DMA_READY | SHA_FLAGS_OUTPUT_READY); -	clk_disable_unprepare(dd->iclk); +	clk_disable(dd->iclk);  	if (req->base.complete)  		req->base.complete(&req->base, err); @@ -795,7 +795,7 @@ static int atmel_sha_hw_init(struct atmel_sha_dev *dd)  {  	int err; -	err = clk_prepare_enable(dd->iclk); +	err = clk_enable(dd->iclk);  	if (err)  		return err; @@ -822,7 +822,7 @@ static void atmel_sha_hw_version_init(struct atmel_sha_dev *dd)  	dev_info(dd->dev,  			"version: 0x%x\n", dd->hw_version); -	clk_disable_unprepare(dd->iclk); +	clk_disable(dd->iclk);  }  static int atmel_sha_handle_queue(struct atmel_sha_dev *dd, @@ -1410,6 +1410,10 @@ static int atmel_sha_probe(struct platform_device *pdev)  		goto res_err;  	} +	err = clk_prepare(sha_dd->iclk); +	if (err) +		goto res_err; +  	atmel_sha_hw_version_init(sha_dd);  	atmel_sha_get_cap(sha_dd); @@ -1421,12 +1425,12 @@ static int atmel_sha_probe(struct platform_device *pdev)  			if (IS_ERR(pdata)) {  				dev_err(&pdev->dev, "platform data not available\n");  				err = PTR_ERR(pdata); -				goto res_err; +				goto iclk_unprepare;  			}  		}  		if (!pdata->dma_slave) {  			err = -ENXIO; -			goto res_err; +			goto iclk_unprepare;  		}  		err = atmel_sha_dma_init(sha_dd, pdata);  		if (err) @@ -1457,6 +1461,8 @@ err_algs:  	if (sha_dd->caps.has_dma)  		atmel_sha_dma_cleanup(sha_dd);  err_sha_dma: +iclk_unprepare: +	clk_unprepare(sha_dd->iclk);  res_err:  	tasklet_kill(&sha_dd->done_task);  sha_dd_err: @@ -1483,6 +1489,8 @@ static int atmel_sha_remove(struct platform_device *pdev)  	if (sha_dd->caps.has_dma)  		atmel_sha_dma_cleanup(sha_dd); +	clk_unprepare(sha_dd->iclk); +  	return 0;  }  |