summaryrefslogtreecommitdiffstats
path: root/drivers/crypto/ux500
diff options
context:
space:
mode:
authorLee Jones <lee.jones@linaro.org>2013-05-15 05:51:35 -0400
committerLinus Walleij <linus.walleij@linaro.org>2013-05-23 15:14:02 -0400
commit58ba67dd36aa393132108ffcaa83873a1f82d70a (patch)
treed25bc0ee369353516dea8a72f6f4cf464928f77c /drivers/crypto/ux500
parent50511449dd89099067fd9727c96449b5bc048da6 (diff)
crypto: ux500/hash - Prepare clock before enabling it
If we fail to prepare the ux500-hash clock before enabling it the platform will fail to boot. Here we insure this happens. Cc: David S. Miller <davem@davemloft.net> Cc: Andreas Westin <andreas.westin@stericsson.com> Cc: linux-crypto@vger.kernel.org Acked-by: Herbert Xu <herbert@gondor.apana.org.au> Acked-by: Arnd Bergmann <arnd@arndb.de> Acked-by: Ulf Hansson <ulf.hansson@linaro.org> Signed-off-by: Lee Jones <lee.jones@linaro.org> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Diffstat (limited to 'drivers/crypto/ux500')
-rw-r--r--drivers/crypto/ux500/hash/hash_core.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/drivers/crypto/ux500/hash/hash_core.c b/drivers/crypto/ux500/hash/hash_core.c
index cf5508967539..4b024280def1 100644
--- a/drivers/crypto/ux500/hash/hash_core.c
+++ b/drivers/crypto/ux500/hash/hash_core.c
@@ -1726,11 +1726,17 @@ static int ux500_hash_probe(struct platform_device *pdev)
1726 goto out_regulator; 1726 goto out_regulator;
1727 } 1727 }
1728 1728
1729 ret = clk_prepare(device_data->clk);
1730 if (ret) {
1731 dev_err(dev, "[%s] clk_prepare() failed!", __func__);
1732 goto out_clk;
1733 }
1734
1729 /* Enable device power (and clock) */ 1735 /* Enable device power (and clock) */
1730 ret = hash_enable_power(device_data, false); 1736 ret = hash_enable_power(device_data, false);
1731 if (ret) { 1737 if (ret) {
1732 dev_err(dev, "[%s]: hash_enable_power() failed!", __func__); 1738 dev_err(dev, "[%s]: hash_enable_power() failed!", __func__);
1733 goto out_clk; 1739 goto out_clk_unprepare;
1734 } 1740 }
1735 1741
1736 ret = hash_check_hw(device_data); 1742 ret = hash_check_hw(device_data);
@@ -1762,6 +1768,9 @@ static int ux500_hash_probe(struct platform_device *pdev)
1762out_power: 1768out_power:
1763 hash_disable_power(device_data, false); 1769 hash_disable_power(device_data, false);
1764 1770
1771out_clk_unprepare:
1772 clk_unprepare(device_data->clk);
1773
1765out_clk: 1774out_clk:
1766 clk_put(device_data->clk); 1775 clk_put(device_data->clk);
1767 1776
@@ -1826,6 +1835,7 @@ static int ux500_hash_remove(struct platform_device *pdev)
1826 dev_err(dev, "[%s]: hash_disable_power() failed", 1835 dev_err(dev, "[%s]: hash_disable_power() failed",
1827 __func__); 1836 __func__);
1828 1837
1838 clk_unprepare(device_data->clk);
1829 clk_put(device_data->clk); 1839 clk_put(device_data->clk);
1830 regulator_put(device_data->regulator); 1840 regulator_put(device_data->regulator);
1831 1841