lkml.org 
[lkml]   [2016]   [Jan]   [27]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.1 051/127] ASoC: es8328: Fix deemphasis values
    Date
    4.1-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: John Keeping <john@metanate.com>

    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.

    Signed-off-by: John Keeping <john@metanate.com>
    Signed-off-by: Mark Brown <broonie@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    sound/soc/codecs/es8328.c | 25 +++++++++++++++++--------
    sound/soc/codecs/es8328.h | 1 +
    2 files changed, 18 insertions(+), 8 deletions(-)

    --- a/sound/soc/codecs/es8328.c
    +++ b/sound/soc/codecs/es8328.c
    @@ -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,
    --- a/sound/soc/codecs/es8328.h
    +++ b/sound/soc/codecs/es8328.h
    @@ -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)

    \
     
     \ /
      Last update: 2016-01-27 21:01    [W:4.069 / U:0.980 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site