Patch "ASoC: es8328: Fix deemphasis values" has been added to the 4.3-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
ASoC: es8328: Fix deemphasis values
to the 4.3-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
asoc-es8328-fix-deemphasis-values.patch
and it can be found in the queue-4.3 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
84ebac4d04d25ac5c1b1dc3ae621fd465eb38f4eMon Sep 17 00:00:00 2001
From: John Keeping <[email protected]>
Date: Wed, 9 Dec 2015 11:38:13 +0000
Subject: ASoC: es8328: Fix deemphasis values
From: John Keeping <[email protected]>
commit 84ebac4d04d25ac5c1b1dc3ae621fd465eb38f4e upstream.
This is using completely the wrong mask and value when updating the register. Since the correct values are already defined in the header, switch to using a table with explicit constants rather than shifting the array index.
--- sound/soc/codecs/es8328.c | 25 +++++++++++++++++-------- sound/soc/codecs/es8328.h | 1 + 2 files changed, 18 insertions(+), 8 deletions(-)
sound/soc/codecs/es8328.c +17 -8
@@ -85,7 +85,15 @@ static const DECLARE_TLV_DB_SCALE(pga_tl static const DECLARE_TLV_DB_SCALE(bypass_tlv, -1500, 300, 0); static const DECLARE_TLV_DB_SCALE(mic_tlv, 0, 300, 0); -static const int deemph_settings[] = {0 ,32000 ,44100 ,48000 }; +static const struct { +int rate; +unsigned int val; +} deemph_settings[] = { + {0 ,ES8328_DACCONTROL6_DEEMPH_OFF }, + {32000 , ES8328_DACCONTROL6_DEEMPH_32k }, + {44100 , ES8328_DACCONTROL6_DEEMPH_44_1k }, + {48000 , ES8328_DACCONTROL6_DEEMPH_48k }, +};static int es8328_set_deemph (struct snd_soc_codec *codec) {
@@ -97,21 +105,22 @@ static int es8328_set_deemph(struct snd_* rate. */ if (es8328->deemph) { - best =1 ; -for (i =2 ; i <ARRAY_SIZE (deemph_settings); i++) { -if (abs (deemph_settings[i] - es8328->playback_fs) < -abs (deemph_settings[best] - es8328->playback_fs)) + best =0 ; +for (i =1 ; i <ARRAY_SIZE (deemph_settings); i++) { +if (abs (deemph_settings[i].rate - es8328->playback_fs) < +abs (deemph_settings[best].rate - es8328->playback_fs)) best = i; } - val = best <<1 ; + val = deemph_settings[best].val; }else { - val =0 ; + val =ES8328_DACCONTROL6_DEEMPH_OFF ; }dev_dbg (codec->dev,"Set deemphasis %d\n" , val); -return snd_soc_update_bits (codec,ES8328_DACCONTROL6 ,0x6 , val); +return snd_soc_update_bits (codec,ES8328_DACCONTROL6 , +ES8328_DACCONTROL6_DEEMPH_MASK , val); } static int es8328_get_deemph(struct snd_kcontrol *kcontrol,
sound/soc/codecs/es8328.h +1 -0
@@ -153,6 +153,7 @@ int es8328_probe(struct device *dev, str#define ES8328_DACCONTROL6_CLICKFREE (1 << 3)#define ES8328_DACCONTROL6_DAC_INVR (1 << 4)#define ES8328_DACCONTROL6_DAC_INVL (1 << 5) +#define ES8328_DACCONTROL6_DEEMPH_MASK (3 << 6)#define ES8328_DACCONTROL6_DEEMPH_OFF (0 << 6)#define ES8328_DACCONTROL6_DEEMPH_32k (1 << 6)#define ES8328_DACCONTROL6_DEEMPH_44_1k (2 << 6)
Patches currently in stable-queue which might be from [email protected] are
queue-4.3/asoc-es8328-fix-deemphasis-values.patch