aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorCharles Keepax <ckeepax@opensource.wolfsonmicro.com>2014-02-18 10:22:12 -0500
committerMark Brown <broonie@linaro.org>2014-02-20 04:37:13 -0500
commitc4204960e9d0ba99459dbf1db918f99a45e7a62a (patch)
tree1c7078e042f3620fa45f0d04c5ea7552efc0d348
parent30686c350628a68852f8abd67557aecb137789d5 (diff)
Input - arizona-haptics: Fix double lock of dapm_mutex
snd_soc_dapm_sync takes the dapm_mutex internally, but we currently take it externally as well. This patch fixes this. Signed-off-by: Charles Keepax <ckeepax@opensource.wolfsonmicro.com> Signed-off-by: Mark Brown <broonie@linaro.org> Cc: stable@vger.kernel.org
-rw-r--r--drivers/input/misc/arizona-haptics.c11
1 files changed, 4 insertions, 7 deletions
diff --git a/drivers/input/misc/arizona-haptics.c b/drivers/input/misc/arizona-haptics.c
index 7a04f54ef961..e7e12a5f5c2d 100644
--- a/drivers/input/misc/arizona-haptics.c
+++ b/drivers/input/misc/arizona-haptics.c
@@ -77,16 +77,14 @@ static void arizona_haptics_work(struct work_struct *work)
77 return; 77 return;
78 } 78 }
79 79
80 mutex_unlock(dapm_mutex);
81
80 ret = snd_soc_dapm_sync(arizona->dapm); 82 ret = snd_soc_dapm_sync(arizona->dapm);
81 if (ret != 0) { 83 if (ret != 0) {
82 dev_err(arizona->dev, "Failed to sync DAPM: %d\n", 84 dev_err(arizona->dev, "Failed to sync DAPM: %d\n",
83 ret); 85 ret);
84 mutex_unlock(dapm_mutex);
85 return; 86 return;
86 } 87 }
87
88 mutex_unlock(dapm_mutex);
89
90 } else { 88 } else {
91 /* This disable sequence will be a noop if already enabled */ 89 /* This disable sequence will be a noop if already enabled */
92 mutex_lock_nested(dapm_mutex, SND_SOC_DAPM_CLASS_RUNTIME); 90 mutex_lock_nested(dapm_mutex, SND_SOC_DAPM_CLASS_RUNTIME);
@@ -99,16 +97,15 @@ static void arizona_haptics_work(struct work_struct *work)
99 return; 97 return;
100 } 98 }
101 99
100 mutex_unlock(dapm_mutex);
101
102 ret = snd_soc_dapm_sync(arizona->dapm); 102 ret = snd_soc_dapm_sync(arizona->dapm);
103 if (ret != 0) { 103 if (ret != 0) {
104 dev_err(arizona->dev, "Failed to sync DAPM: %d\n", 104 dev_err(arizona->dev, "Failed to sync DAPM: %d\n",
105 ret); 105 ret);
106 mutex_unlock(dapm_mutex);
107 return; 106 return;
108 } 107 }
109 108
110 mutex_unlock(dapm_mutex);
111
112 ret = regmap_update_bits(arizona->regmap, 109 ret = regmap_update_bits(arizona->regmap,
113 ARIZONA_HAPTICS_CONTROL_1, 110 ARIZONA_HAPTICS_CONTROL_1,
114 ARIZONA_HAP_CTRL_MASK, 111 ARIZONA_HAP_CTRL_MASK,