aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/crypto/omap-aes.c
diff options
context:
space:
mode:
authorMark A. Greer <mgreer@animalcreek.com>2013-01-08 13:57:40 -0500
committerHerbert Xu <herbert@gondor.apana.org.au>2013-01-19 18:16:41 -0500
commit5946c4a5e7707d255faf430969d344ad98430b69 (patch)
treecc2efc002b1d1e4e48f4930f65bba5336202db5b /drivers/crypto/omap-aes.c
parent7219368b05bd05bd3366bfb22fc38d2dc41085e5 (diff)
crypto: omap-aes - Convert to use pm_runtime API
Convert the omap-aes crypto driver to use the pm_runtime API instead of the clk API. CC: Kevin Hilman <khilman@deeprootsystems.com> CC: Dmitry Kasatkin <dmitry.kasatkin@intel.com> Signed-off-by: Mark A. Greer <mgreer@animalcreek.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Diffstat (limited to 'drivers/crypto/omap-aes.c')
-rw-r--r--drivers/crypto/omap-aes.c29
1 files changed, 11 insertions, 18 deletions
diff --git a/drivers/crypto/omap-aes.c b/drivers/crypto/omap-aes.c
index 33cd78305461..c2298521388c 100644
--- a/drivers/crypto/omap-aes.c
+++ b/drivers/crypto/omap-aes.c
@@ -19,10 +19,10 @@
19#include <linux/init.h> 19#include <linux/init.h>
20#include <linux/errno.h> 20#include <linux/errno.h>
21#include <linux/kernel.h> 21#include <linux/kernel.h>
22#include <linux/clk.h>
23#include <linux/platform_device.h> 22#include <linux/platform_device.h>
24#include <linux/scatterlist.h> 23#include <linux/scatterlist.h>
25#include <linux/dma-mapping.h> 24#include <linux/dma-mapping.h>
25#include <linux/pm_runtime.h>
26#include <linux/io.h> 26#include <linux/io.h>
27#include <linux/crypto.h> 27#include <linux/crypto.h>
28#include <linux/interrupt.h> 28#include <linux/interrupt.h>
@@ -96,7 +96,6 @@ struct omap_aes_dev {
96 struct list_head list; 96 struct list_head list;
97 unsigned long phys_base; 97 unsigned long phys_base;
98 void __iomem *io_base; 98 void __iomem *io_base;
99 struct clk *iclk;
100 struct omap_aes_ctx *ctx; 99 struct omap_aes_ctx *ctx;
101 struct device *dev; 100 struct device *dev;
102 unsigned long flags; 101 unsigned long flags;
@@ -167,7 +166,7 @@ static int omap_aes_hw_init(struct omap_aes_dev *dd)
167 * It may be long delays between requests. 166 * It may be long delays between requests.
168 * Device might go to off mode to save power. 167 * Device might go to off mode to save power.
169 */ 168 */
170 clk_enable(dd->iclk); 169 pm_runtime_get_sync(dd->dev);
171 170
172 if (!(dd->flags & FLAGS_INIT)) { 171 if (!(dd->flags & FLAGS_INIT)) {
173 dd->flags |= FLAGS_INIT; 172 dd->flags |= FLAGS_INIT;
@@ -518,7 +517,7 @@ static void omap_aes_finish_req(struct omap_aes_dev *dd, int err)
518 517
519 pr_debug("err: %d\n", err); 518 pr_debug("err: %d\n", err);
520 519
521 clk_disable(dd->iclk); 520 pm_runtime_put_sync(dd->dev);
522 dd->flags &= ~FLAGS_BUSY; 521 dd->flags &= ~FLAGS_BUSY;
523 522
524 req->base.complete(&req->base, err); 523 req->base.complete(&req->base, err);
@@ -813,26 +812,21 @@ static int omap_aes_probe(struct platform_device *pdev)
813 else 812 else
814 dd->dma_in = res->start; 813 dd->dma_in = res->start;
815 814
816 /* Initializing the clock */
817 dd->iclk = clk_get(dev, "ick");
818 if (IS_ERR(dd->iclk)) {
819 dev_err(dev, "clock intialization failed.\n");
820 err = PTR_ERR(dd->iclk);
821 goto err_res;
822 }
823
824 dd->io_base = ioremap(dd->phys_base, SZ_4K); 815 dd->io_base = ioremap(dd->phys_base, SZ_4K);
825 if (!dd->io_base) { 816 if (!dd->io_base) {
826 dev_err(dev, "can't ioremap\n"); 817 dev_err(dev, "can't ioremap\n");
827 err = -ENOMEM; 818 err = -ENOMEM;
828 goto err_io; 819 goto err_res;
829 } 820 }
830 821
831 clk_enable(dd->iclk); 822 pm_runtime_enable(dev);
823 pm_runtime_get_sync(dev);
824
832 reg = omap_aes_read(dd, AES_REG_REV); 825 reg = omap_aes_read(dd, AES_REG_REV);
833 dev_info(dev, "OMAP AES hw accel rev: %u.%u\n", 826 dev_info(dev, "OMAP AES hw accel rev: %u.%u\n",
834 (reg & AES_REG_REV_MAJOR) >> 4, reg & AES_REG_REV_MINOR); 827 (reg & AES_REG_REV_MAJOR) >> 4, reg & AES_REG_REV_MINOR);
835 clk_disable(dd->iclk); 828
829 pm_runtime_put_sync(dev);
836 830
837 tasklet_init(&dd->done_task, omap_aes_done_task, (unsigned long)dd); 831 tasklet_init(&dd->done_task, omap_aes_done_task, (unsigned long)dd);
838 tasklet_init(&dd->queue_task, omap_aes_queue_task, (unsigned long)dd); 832 tasklet_init(&dd->queue_task, omap_aes_queue_task, (unsigned long)dd);
@@ -862,8 +856,7 @@ err_dma:
862 tasklet_kill(&dd->done_task); 856 tasklet_kill(&dd->done_task);
863 tasklet_kill(&dd->queue_task); 857 tasklet_kill(&dd->queue_task);
864 iounmap(dd->io_base); 858 iounmap(dd->io_base);
865err_io: 859 pm_runtime_disable(dev);
866 clk_put(dd->iclk);
867err_res: 860err_res:
868 kfree(dd); 861 kfree(dd);
869 dd = NULL; 862 dd = NULL;
@@ -891,7 +884,7 @@ static int omap_aes_remove(struct platform_device *pdev)
891 tasklet_kill(&dd->queue_task); 884 tasklet_kill(&dd->queue_task);
892 omap_aes_dma_cleanup(dd); 885 omap_aes_dma_cleanup(dd);
893 iounmap(dd->io_base); 886 iounmap(dd->io_base);
894 clk_put(dd->iclk); 887 pm_runtime_disable(dd->dev);
895 kfree(dd); 888 kfree(dd);
896 dd = NULL; 889 dd = NULL;
897 890