static int max98090_dai1_hw_params(struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params, struct snd_soc_dai *dai) { struct snd_soc_codec *codec = dai->codec; struct max98090_priv *max98090 = snd_soc_codec_get_drvdata(codec); struct max98090_cdata *cdata; unsigned int rate; u8 regval; cdata = &max98090->dai; rate = params_rate(params); cdata->rate = rate; rate = params_rate(params); switch (params_format(params)) { case SNDRV_PCM_FORMAT_S16_LE: snd_soc_update_bits(codec, M98090_022_DAI_IF_FORMAT, M98090_DAI_WS, 0); break; case SNDRV_PCM_FORMAT_S24_LE: snd_soc_update_bits(codec, M98090_022_DAI_IF_FORMAT, M98090_DAI_WS, 2); break; default: return -EINVAL; } if (rate_value(rate, ®val)) return -EINVAL; snd_soc_update_bits(codec, M98090_005_SAMPLERATE_QS, M98090_QS_SR_MASK, regval); cdata->rate = rate; /* Update sample rate mode */ if (rate < 50000) snd_soc_update_bits(codec, M98090_026_FILTER_CONFIG, M98090_FILTER_DHF, 0); else snd_soc_update_bits(codec, M98090_026_FILTER_CONFIG, M98090_FILTER_DHF, M98090_FILTER_DHF); snd_soc_update_bits(codec, M98090_026_FILTER_CONFIG, M98090_FILTER_MODE, 0); return 0; }
static int max98504_dai_hw_params(struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params, struct snd_soc_dai *dai) { struct snd_soc_codec *codec = dai->codec; struct max98504_priv *max98504 = snd_soc_codec_get_drvdata(codec); struct max98504_cdata *cdata; unsigned int rate; u8 regval; msg_maxim("\n"); cdata = &max98504->dai[0]; rate = params_rate(params); switch (params_format(params)) { case SNDRV_PCM_FORMAT_S8: snd_soc_update_bits(codec, MAX98504_REG_24_PCM_MODE_CONFIG, M98504_PCM_MODE_CFG_CH_SIZE_MASK, M98504_PCM_MODE_CFG_CH_SIZE_8_MASK); break; case SNDRV_PCM_FORMAT_S16_LE: snd_soc_update_bits(codec, MAX98504_REG_24_PCM_MODE_CONFIG, M98504_PCM_MODE_CFG_CH_SIZE_MASK, M98504_PCM_MODE_CFG_CH_SIZE_16_MASK); break; case SNDRV_PCM_FORMAT_S24_LE: snd_soc_update_bits(codec, MAX98504_REG_24_PCM_MODE_CONFIG, M98504_PCM_MODE_CFG_CH_SIZE_MASK, M98504_PCM_MODE_CFG_CH_SIZE_24_MASK); break; case SNDRV_PCM_FORMAT_S32_LE: snd_soc_update_bits(codec, MAX98504_REG_24_PCM_MODE_CONFIG, M98504_PCM_MODE_CFG_CH_SIZE_MASK, M98504_PCM_MODE_CFG_CH_SIZE_32_MASK); break; default: return -EINVAL; } if (rate_value(rate, ®val)) return -EINVAL; /* Update sample rate mode */ snd_soc_update_bits(codec, MAX98504_REG_27_PCM_SAMPLE_RATE_SETUP, M98504_PCM_SR_SETUP_SPK_SR_MASK, regval<<M98504_PCM_SR_SETUP_SPK_SR_SHIFT); snd_soc_update_bits(codec, MAX98504_REG_27_PCM_SAMPLE_RATE_SETUP, M98504_PCM_SR_SETUP_MEAS_SR_MASK, regval<<M98504_PCM_SR_SETUP_MEAS_SR_SHIFT); return 0; }