From datasheet of max98090:
If RJ = 1, WS = 00, 16 bits WS = 01, 20 bits WS = 10, 24 bits
Signed-off-by: Tzung-Bi Shih tzungbi@google.com --- sound/soc/codecs/max98090.c | 16 +++++++++++++++- sound/soc/codecs/max98090.h | 3 +++ 2 files changed, 18 insertions(+), 1 deletion(-)
diff --git a/sound/soc/codecs/max98090.c b/sound/soc/codecs/max98090.c index c97f21836c66..0ecc2f1accb5 100644 --- a/sound/soc/codecs/max98090.c +++ b/sound/soc/codecs/max98090.c @@ -1942,7 +1942,21 @@ static int max98090_dai_hw_params(struct snd_pcm_substream *substream, switch (params_width(params)) { case 16: snd_soc_component_update_bits(component, M98090_REG_INTERFACE_FORMAT, - M98090_WS_MASK, 0); + M98090_RJ_MASK, M98090_RJ_MASK); + snd_soc_component_update_bits(component, M98090_REG_INTERFACE_FORMAT, + M98090_WS_MASK, M98090_FORMAT_S16_LE); + break; + case 20: + snd_soc_component_update_bits(component, M98090_REG_INTERFACE_FORMAT, + M98090_RJ_MASK, M98090_RJ_MASK); + snd_soc_component_update_bits(component, M98090_REG_INTERFACE_FORMAT, + M98090_WS_MASK, M98090_FORMAT_S20_LE; + break; + case 24: + snd_soc_component_update_bits(component, M98090_REG_INTERFACE_FORMAT, + M98090_RJ_MASK, M98090_RJ_MASK); + snd_soc_component_update_bits(component, M98090_REG_INTERFACE_FORMAT, + M98090_WS_MASK, M98090_FORMAT_S24_LE); break; default: return -EINVAL; diff --git a/sound/soc/codecs/max98090.h b/sound/soc/codecs/max98090.h index b1572a2d19da..9088f9d64ff2 100644 --- a/sound/soc/codecs/max98090.h +++ b/sound/soc/codecs/max98090.h @@ -706,6 +706,9 @@ #define M98090_WS_SHIFT 0 #define M98090_WS_WIDTH 2 #define M98090_WS_NUM (1<<M98090_WS_WIDTH) +#define M98090_FORMAT_S16_LE (0<<0) +#define M98090_FORMAT_S20_LE (1<<0) +#define M98090_FORMAT_S24_LE (2<<0)
/* * M98090_REG_TDM_CONTROL