RT5645_TDM_CTRL_1, 8,
rt5645_tdm_adc_data_select);
-static int rt5645_clk_sel_put(struct snd_kcontrol *kcontrol,
- struct snd_ctl_elem_value *ucontrol)
-{
- struct snd_soc_codec *codec = snd_soc_kcontrol_codec(kcontrol);
- unsigned int u_bit = 0, p_bit = 0;
- struct soc_enum *em =
- (struct soc_enum *)kcontrol->private_value;
-
- switch (em->reg) {
- case RT5645_ASRC_2:
- switch (em->shift_l) {
- case 0:
- u_bit = 0x8;
- p_bit = RT5645_PWR_ADC_S1F;
- break;
- case 4:
- u_bit = 0x100;
- p_bit = RT5645_PWR_DAC_MF_R;
- break;
- case 8:
- u_bit = 0x200;
- p_bit = RT5645_PWR_DAC_MF_L;
- break;
- case 12:
- u_bit = 0x400;
- p_bit = RT5645_PWR_DAC_S1F;
- break;
- }
- break;
- case RT5645_ASRC_3:
- switch (em->shift_l) {
- case 0:
- u_bit = 0x1;
- p_bit = RT5645_PWR_ADC_MF_R;
- break;
- case 4:
- u_bit = 0x2;
- p_bit = RT5645_PWR_ADC_MF_L;
- break;
- }
- break;
- }
-
- if (u_bit || p_bit) {
- switch (ucontrol->value.integer.value[0]) {
- case 1 ... 4: /*enable*/
- if (snd_soc_read(codec, RT5645_PWR_DIG2) & p_bit)
- snd_soc_update_bits(codec,
- RT5645_ASRC_1, u_bit, u_bit);
- break;
- default: /*disable*/
- snd_soc_update_bits(codec, RT5645_ASRC_1, u_bit, 0);
- break;
- }
- }
-
- return snd_soc_put_enum_double(kcontrol, ucontrol);
-}
-
static const struct snd_kcontrol_new rt5645_snd_controls[] = {
/* Speaker Output Volume */
SOC_DOUBLE("Speaker Channel Switch", RT5645_SPK_VOL,