crypto: rockchip - handle reset also in PM
authorCorentin Labbe <clabbe@baylibre.com>
Tue, 27 Sep 2022 07:54:52 +0000 (07:54 +0000)
committerHerbert Xu <herbert@gondor.apana.org.au>
Fri, 28 Oct 2022 04:36:33 +0000 (12:36 +0800)
reset could be handled by PM functions.
We keep the initial reset pulse to be sure the hw is a know device state
after probe.

Signed-off-by: Corentin Labbe <clabbe@baylibre.com>
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
drivers/crypto/rockchip/rk3288_crypto.c

index d9258b9..399829e 100644 (file)
@@ -74,14 +74,23 @@ static int rk_crypto_pm_suspend(struct device *dev)
        struct rk_crypto_info *rkdev = dev_get_drvdata(dev);
 
        rk_crypto_disable_clk(rkdev);
+       reset_control_assert(rkdev->rst);
+
        return 0;
 }
 
 static int rk_crypto_pm_resume(struct device *dev)
 {
        struct rk_crypto_info *rkdev = dev_get_drvdata(dev);
+       int ret;
+
+       ret = rk_crypto_enable_clk(rkdev);
+       if (ret)
+               return ret;
+
+       reset_control_deassert(rkdev->rst);
+       return 0;
 
-       return rk_crypto_enable_clk(rkdev);
 }
 
 static const struct dev_pm_ops rk_crypto_pm_ops = {
@@ -222,13 +231,6 @@ static void rk_crypto_unregister(void)
        }
 }
 
-static void rk_crypto_action(void *data)
-{
-       struct rk_crypto_info *crypto_info = data;
-
-       reset_control_assert(crypto_info->rst);
-}
-
 static const struct of_device_id crypto_of_id_table[] = {
        { .compatible = "rockchip,rk3288-crypto" },
        {}
@@ -258,10 +260,6 @@ static int rk_crypto_probe(struct platform_device *pdev)
        usleep_range(10, 20);
        reset_control_deassert(crypto_info->rst);
 
-       err = devm_add_action_or_reset(dev, rk_crypto_action, crypto_info);
-       if (err)
-               goto err_crypto;
-
        crypto_info->reg = devm_platform_ioremap_resource(pdev, 0);
        if (IS_ERR(crypto_info->reg)) {
                err = PTR_ERR(crypto_info->reg);