diff options
author | Lars-Peter Clausen <lars@metafoo.de> | 2014-11-09 11:00:59 -0500 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2014-11-10 14:07:57 -0500 |
commit | d74bcaaeb66826192c9e361cbfe8fd1ffaccf74e (patch) | |
tree | 4ac29253fb66ed5644b57e65e7b1ae16c6ca3288 | |
parent | 210a5fae55c05174b8a5b571b6698626b3ae35d3 (diff) |
ASoC: wm5102: Move ultrasonic response settings lock to the driver level
The wm5102 driver currently uses the snd_soc_codec mutex to protect its
ultrasonic response settings from concurrent access. This patch moves this
lock to the driver level. This will allow us to eventually remove the
snd_soc_codec mutex.
Signed-off-by: Lars-Peter Clausen <lars@metafoo.de>
Acked-by: Charles Keepax <ckeepax@opensource.wolfsonmicro.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
-rw-r--r-- | include/linux/mfd/arizona/core.h | 1 | ||||
-rw-r--r-- | sound/soc/codecs/arizona.c | 4 | ||||
-rw-r--r-- | sound/soc/codecs/wm5102.c | 16 |
3 files changed, 11 insertions, 10 deletions
diff --git a/include/linux/mfd/arizona/core.h b/include/linux/mfd/arizona/core.h index f34723f7663c..910e3aa1e965 100644 --- a/include/linux/mfd/arizona/core.h +++ b/include/linux/mfd/arizona/core.h | |||
@@ -141,6 +141,7 @@ struct arizona { | |||
141 | 141 | ||
142 | uint16_t dac_comp_coeff; | 142 | uint16_t dac_comp_coeff; |
143 | uint8_t dac_comp_enabled; | 143 | uint8_t dac_comp_enabled; |
144 | struct mutex dac_comp_lock; | ||
144 | }; | 145 | }; |
145 | 146 | ||
146 | int arizona_clk32k_enable(struct arizona *arizona); | 147 | int arizona_clk32k_enable(struct arizona *arizona); |
diff --git a/sound/soc/codecs/arizona.c b/sound/soc/codecs/arizona.c index 0c05e7a7945f..730636c14f2e 100644 --- a/sound/soc/codecs/arizona.c +++ b/sound/soc/codecs/arizona.c | |||
@@ -1164,13 +1164,13 @@ static void arizona_wm5102_set_dac_comp(struct snd_soc_codec *codec, | |||
1164 | { 0x80, 0x0 }, | 1164 | { 0x80, 0x0 }, |
1165 | }; | 1165 | }; |
1166 | 1166 | ||
1167 | mutex_lock(&codec->mutex); | 1167 | mutex_lock(&arizona->dac_comp_lock); |
1168 | 1168 | ||
1169 | dac_comp[1].def = arizona->dac_comp_coeff; | 1169 | dac_comp[1].def = arizona->dac_comp_coeff; |
1170 | if (rate >= 176400) | 1170 | if (rate >= 176400) |
1171 | dac_comp[2].def = arizona->dac_comp_enabled; | 1171 | dac_comp[2].def = arizona->dac_comp_enabled; |
1172 | 1172 | ||
1173 | mutex_unlock(&codec->mutex); | 1173 | mutex_unlock(&arizona->dac_comp_lock); |
1174 | 1174 | ||
1175 | regmap_multi_reg_write(arizona->regmap, | 1175 | regmap_multi_reg_write(arizona->regmap, |
1176 | dac_comp, | 1176 | dac_comp, |
diff --git a/sound/soc/codecs/wm5102.c b/sound/soc/codecs/wm5102.c index f60234962527..1f7553492667 100644 --- a/sound/soc/codecs/wm5102.c +++ b/sound/soc/codecs/wm5102.c | |||
@@ -619,10 +619,10 @@ static int wm5102_out_comp_coeff_get(struct snd_kcontrol *kcontrol, | |||
619 | struct arizona *arizona = dev_get_drvdata(codec->dev->parent); | 619 | struct arizona *arizona = dev_get_drvdata(codec->dev->parent); |
620 | uint16_t data; | 620 | uint16_t data; |
621 | 621 | ||
622 | mutex_lock(&codec->mutex); | 622 | mutex_lock(&arizona->dac_comp_lock); |
623 | data = cpu_to_be16(arizona->dac_comp_coeff); | 623 | data = cpu_to_be16(arizona->dac_comp_coeff); |
624 | memcpy(ucontrol->value.bytes.data, &data, sizeof(data)); | 624 | memcpy(ucontrol->value.bytes.data, &data, sizeof(data)); |
625 | mutex_unlock(&codec->mutex); | 625 | mutex_unlock(&arizona->dac_comp_lock); |
626 | 626 | ||
627 | return 0; | 627 | return 0; |
628 | } | 628 | } |
@@ -633,11 +633,11 @@ static int wm5102_out_comp_coeff_put(struct snd_kcontrol *kcontrol, | |||
633 | struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol); | 633 | struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol); |
634 | struct arizona *arizona = dev_get_drvdata(codec->dev->parent); | 634 | struct arizona *arizona = dev_get_drvdata(codec->dev->parent); |
635 | 635 | ||
636 | mutex_lock(&codec->mutex); | 636 | mutex_lock(&arizona->dac_comp_lock); |
637 | memcpy(&arizona->dac_comp_coeff, ucontrol->value.bytes.data, | 637 | memcpy(&arizona->dac_comp_coeff, ucontrol->value.bytes.data, |
638 | sizeof(arizona->dac_comp_coeff)); | 638 | sizeof(arizona->dac_comp_coeff)); |
639 | arizona->dac_comp_coeff = be16_to_cpu(arizona->dac_comp_coeff); | 639 | arizona->dac_comp_coeff = be16_to_cpu(arizona->dac_comp_coeff); |
640 | mutex_unlock(&codec->mutex); | 640 | mutex_unlock(&arizona->dac_comp_lock); |
641 | 641 | ||
642 | return 0; | 642 | return 0; |
643 | } | 643 | } |
@@ -648,9 +648,9 @@ static int wm5102_out_comp_switch_get(struct snd_kcontrol *kcontrol, | |||
648 | struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol); | 648 | struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol); |
649 | struct arizona *arizona = dev_get_drvdata(codec->dev->parent); | 649 | struct arizona *arizona = dev_get_drvdata(codec->dev->parent); |
650 | 650 | ||
651 | mutex_lock(&codec->mutex); | 651 | mutex_lock(&arizona->dac_comp_lock); |
652 | ucontrol->value.integer.value[0] = arizona->dac_comp_enabled; | 652 | ucontrol->value.integer.value[0] = arizona->dac_comp_enabled; |
653 | mutex_unlock(&codec->mutex); | 653 | mutex_unlock(&arizona->dac_comp_lock); |
654 | 654 | ||
655 | return 0; | 655 | return 0; |
656 | } | 656 | } |
@@ -661,9 +661,9 @@ static int wm5102_out_comp_switch_put(struct snd_kcontrol *kcontrol, | |||
661 | struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol); | 661 | struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol); |
662 | struct arizona *arizona = dev_get_drvdata(codec->dev->parent); | 662 | struct arizona *arizona = dev_get_drvdata(codec->dev->parent); |
663 | 663 | ||
664 | mutex_lock(&codec->mutex); | 664 | mutex_lock(&arizona->dac_comp_lock); |
665 | arizona->dac_comp_enabled = ucontrol->value.integer.value[0]; | 665 | arizona->dac_comp_enabled = ucontrol->value.integer.value[0]; |
666 | mutex_unlock(&codec->mutex); | 666 | mutex_unlock(&arizona->dac_comp_lock); |
667 | 667 | ||
668 | return 0; | 668 | return 0; |
669 | } | 669 | } |