[alsa-devel] [PATCHv3 7/9] WM8971 improves the function of regmap
Xavier Hsu
xavier.hsu at linaro.org
Thu Sep 11 05:21:34 CEST 2014
Hi Charles and Lars-Peter:
Thanks for your feedback.
I will modify our patch as below.
1. Using (codec->control_data = wm8971->regmap;) or (wm8971_get_regmap) to
register regmap.
2. Modifying our patch the content of commit.
Thanks again.
BR,
Xavier
2014-09-04 3:19 GMT+08:00 Lars-Peter Clausen <lars at metafoo.de>:
> On 09/02/2014 05:27 AM, Xavier Hsu wrote:
>
>> This patch improves WM8971.
>> We modify the function of regmap.
>>
>> Any comments about improving the patch are welcome.
>> Thanks.
>>
>> Signed-off-by: Xavier Hsu <xavier.hsu at linaro.org>
>> Signed-off-by: Andy Green <andy.green at linaro.org>
>> ---
>> sound/soc/codecs/wm8971.c | 26 +++++++++++++++++++++-----
>> 1 file changed, 21 insertions(+), 5 deletions(-)
>>
>> diff --git a/sound/soc/codecs/wm8971.c b/sound/soc/codecs/wm8971.c
>> index 68b4f52..95e7c39 100755
>> --- a/sound/soc/codecs/wm8971.c
>> +++ b/sound/soc/codecs/wm8971.c
>> @@ -38,6 +38,7 @@
>>
>> /* codec private data */
>> struct wm8971_priv {
>> + struct regmap *regmap;
>> unsigned int sysclk;
>> struct snd_pcm_hw_constraint_list *sysclk_constraints;
>> int playback_fs;
>> @@ -716,6 +717,7 @@ static int wm8971_mute(struct snd_soc_dai *dai, int
>> mute)
>> static int wm8971_set_bias_level(struct snd_soc_codec *codec,
>> enum snd_soc_bias_level level)
>> {
>> + struct wm8971_priv *wm8971 = snd_soc_codec_get_drvdata(codec);
>> u16 pwr_reg = snd_soc_read(codec, WM8971_PWR1) & 0xfe3e;
>>
>> switch (level) {
>> @@ -727,7 +729,7 @@ static int wm8971_set_bias_level(struct snd_soc_codec
>> *codec,
>> break;
>> case SND_SOC_BIAS_STANDBY:
>> if (codec->dapm.bias_level == SND_SOC_BIAS_OFF)
>> - snd_soc_cache_sync(codec);
>> + regcache_sync(wm8971->regmap);
>>
>
> This is a bugfix and it should be noted in the commit message, what is
> broken, why it is broken and since when it has been broken.
>
>
>> /* mute dac and set vmid to 500k, enable VREF */
>> snd_soc_write(codec, WM8971_PWR1, pwr_reg | 0x0140);
>> @@ -774,7 +776,11 @@ static struct snd_soc_dai_driver wm8971_dai = {
>>
>> static int wm8971_suspend(struct snd_soc_codec *codec)
>> {
>> + struct wm8971_priv *wm8971 = snd_soc_codec_get_drvdata(codec);
>> +
>> wm8971_set_bias_level(codec, SND_SOC_BIAS_OFF);
>> + regcache_mark_dirty(wm8971->regmap);
>>
>
> The core already marks the regcache dirty after calling the suspend
> callback, no need to do this from hand.
>
> +
>> return 0;
>> }
>>
>> @@ -797,9 +803,12 @@ static int wm8971_resume(struct snd_soc_codec *codec)
>>
>> static int wm8971_probe(struct snd_soc_codec *codec)
>> {
>> + struct wm8971_priv *wm8971 = snd_soc_codec_get_drvdata(codec);
>> int ret = 0;
>> u16 reg;
>>
>> + codec->control_data = wm8971->regmap;
>> +
>> wm8971_reset(codec);
>>
>> /* charge output caps - set vmid to 5k for quick power up */
>> @@ -830,12 +839,20 @@ static int wm8971_remove(struct snd_soc_codec
>> *codec)
>> return 0;
>> }
>>
>> +struct regmap *wm8971_get_regmap(struct device *dev)
>> +{
>> + struct wm8971_priv *priv = dev_get_drvdata(dev);
>> +
>> + return priv->regmap;
>> +}
>>
>
> This is unnecessary, since the regmap has been registered with the device
> of the CODEC the core is able to figure out the correct regmap itself.
>
> [...]
>
More information about the Alsa-devel
mailing list