@@ -243,13 +243,11 @@ static int get_empty_message_digest(
/**
* hash_disable_power - Request to disable power and clock.
* @device_data: Structure for the hash device.
- * @save_device_state: If true, saves the current hw state.
*
* This function request for disabling power (regulator) and clock,
* and could also save current hw state.
*/
-static int hash_disable_power(struct hash_device_data *device_data,
- bool save_device_state)
+static int hash_disable_power(struct hash_device_data *device_data)
{
int ret = 0;
struct device *dev = device_data->dev;
@@ -258,12 +256,6 @@ static int hash_disable_power(struct hash_device_data *device_data,
if (!device_data->power_state)
goto out;
- if (save_device_state) {
- hash_save_state(device_data,
- &device_data->state);
- device_data->restore_dev_state = true;
- }
-
clk_disable(device_data->clk);
ret = regulator_disable(device_data->regulator);
if (ret)
@@ -280,13 +272,11 @@ static int hash_disable_power(struct hash_device_data *device_data,
/**
* hash_enable_power - Request to enable power and clock.
* @device_data: Structure for the hash device.
- * @restore_device_state: If true, restores a previous saved hw state.
*
* This function request for enabling power (regulator) and clock,
* and could also restore a previously saved hw state.
*/
-static int hash_enable_power(struct hash_device_data *device_data,
- bool restore_device_state)
+static int hash_enable_power(struct hash_device_data *device_data)
{
int ret = 0;
struct device *dev = device_data->dev;
@@ -309,12 +299,6 @@ static int hash_enable_power(struct hash_device_data *device_data,
device_data->power_state = true;
}
- if (device_data->restore_dev_state) {
- if (restore_device_state) {
- device_data->restore_dev_state = false;
- hash_resume_state(device_data, &device_data->state);
- }
- }
out:
spin_unlock(&device_data->power_state_lock);
@@ -1597,7 +1581,7 @@ static int ux500_hash_probe(struct platform_device *pdev)
}
/* Enable device power (and clock) */
- ret = hash_enable_power(device_data, false);
+ ret = hash_enable_power(device_data);
if (ret) {
dev_err(dev, "%s: hash_enable_power() failed!\n", __func__);
goto out_clk_unprepare;
@@ -1625,7 +1609,7 @@ static int ux500_hash_probe(struct platform_device *pdev)
return 0;
out_power:
- hash_disable_power(device_data, false);
+ hash_disable_power(device_data);
out_clk_unprepare:
clk_unprepare(device_data->clk);
@@ -1666,7 +1650,7 @@ static int ux500_hash_remove(struct platform_device *pdev)
ahash_algs_unregister_all(device_data);
- if (hash_disable_power(device_data, false))
+ if (hash_disable_power(device_data))
dev_err(dev, "%s: hash_disable_power() failed\n",
__func__);
@@ -1706,7 +1690,7 @@ static void ux500_hash_shutdown(struct platform_device *pdev)
ahash_algs_unregister_all(device_data);
- if (hash_disable_power(device_data, false))
+ if (hash_disable_power(device_data))
dev_err(&pdev->dev, "%s: hash_disable_power() failed\n",
__func__);
}
@@ -1720,7 +1704,6 @@ static int ux500_hash_suspend(struct device *dev)
{
int ret;
struct hash_device_data *device_data;
- struct hash_ctx *temp_ctx = NULL;
device_data = dev_get_drvdata(dev);
if (!device_data) {
@@ -1728,18 +1711,7 @@ static int ux500_hash_suspend(struct device *dev)
return -ENOMEM;
}
- spin_lock(&device_data->ctx_lock);
- if (!device_data->current_ctx)
- device_data->current_ctx++;
- spin_unlock(&device_data->ctx_lock);
-
- if (device_data->current_ctx == ++temp_ctx) {
- ret = hash_disable_power(device_data, false);
-
- } else {
- ret = hash_disable_power(device_data, true);
- }
-
+ ret = hash_disable_power(device_data);
if (ret)
dev_err(dev, "%s: hash_disable_power()\n", __func__);
@@ -1754,7 +1726,6 @@ static int ux500_hash_resume(struct device *dev)
{
int ret = 0;
struct hash_device_data *device_data;
- struct hash_ctx *temp_ctx = NULL;
device_data = dev_get_drvdata(dev);
if (!device_data) {
@@ -1762,14 +1733,7 @@ static int ux500_hash_resume(struct device *dev)
return -ENOMEM;
}
- spin_lock(&device_data->ctx_lock);
- if (device_data->current_ctx == ++temp_ctx)
- device_data->current_ctx = NULL;
- spin_unlock(&device_data->ctx_lock);
-
- if (device_data->current_ctx)
- ret = hash_enable_power(device_data, true);
-
+ ret = hash_enable_power(device_data);
if (ret)
dev_err(dev, "%s: hash_enable_power() failed!\n", __func__);
Drop the code that is saving and restoring the device state as part of the PM operations: this is the job of .import and .export, do not try to work around the framework. Signed-off-by: Linus Walleij <linus.walleij@linaro.org> --- drivers/crypto/ux500/hash/hash_core.c | 52 +++++---------------------- 1 file changed, 8 insertions(+), 44 deletions(-)