static int ak4104_hw_params(struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params, struct snd_soc_dai *dai) { struct snd_soc_pcm_runtime *rtd = substream->private_data; struct snd_soc_codec *codec = rtd->codec; int val = 0; /* set the IEC958 bits: consumer mode, no copyright bit */ val |= IEC958_AES0_CON_NOT_COPYRIGHT; ak4104_spi_write(codec, AK4104_REG_CHN_STATUS(0), val); val = 0; switch (params_rate(params)) { case 44100: val |= IEC958_AES3_CON_FS_44100; break; case 48000: val |= IEC958_AES3_CON_FS_48000; break; case 32000: val |= IEC958_AES3_CON_FS_32000; break; default: dev_err(codec->dev, "unsupported sampling rate\n"); return -EINVAL; } return ak4104_spi_write(codec, AK4104_REG_CHN_STATUS(3), val); }
static int ak4104_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 ak4104_private *ak4104 = snd_soc_codec_get_drvdata(codec); int ret, val = 0; /* set the IEC958 bits: consumer mode, no copyright bit */ val |= IEC958_AES0_CON_NOT_COPYRIGHT; regmap_write(ak4104->regmap, AK4104_REG_CHN_STATUS(0), val); val = 0; switch (params_rate(params)) { case 22050: val |= IEC958_AES3_CON_FS_22050; break; case 24000: val |= IEC958_AES3_CON_FS_24000; break; case 32000: val |= IEC958_AES3_CON_FS_32000; break; case 44100: val |= IEC958_AES3_CON_FS_44100; break; case 48000: val |= IEC958_AES3_CON_FS_48000; break; case 88200: val |= IEC958_AES3_CON_FS_88200; break; case 96000: val |= IEC958_AES3_CON_FS_96000; break; case 176400: val |= IEC958_AES3_CON_FS_176400; break; case 192000: val |= IEC958_AES3_CON_FS_192000; break; default: dev_err(codec->dev, "unsupported sampling rate\n"); return -EINVAL; } ret = regmap_write(ak4104->regmap, AK4104_REG_CHN_STATUS(3), val); if (ret < 0) return ret; /* enable transmitter */ ret = regmap_update_bits(ak4104->regmap, AK4104_REG_TX, AK4104_TX_TXE, AK4104_TX_TXE); if (ret < 0) return ret; return 0; }