Loading sound/soc/codecs/rt5682.c +4 −0 Original line number Diff line number Diff line Loading @@ -929,6 +929,8 @@ int rt5682_headset_detect(struct snd_soc_component *component, int jack_insert) unsigned int val, count; if (jack_insert) { snd_soc_dapm_mutex_lock(dapm); snd_soc_component_update_bits(component, RT5682_PWR_ANLG_1, RT5682_PWR_VREF2 | RT5682_PWR_MB, RT5682_PWR_VREF2 | RT5682_PWR_MB); Loading Loading @@ -979,6 +981,8 @@ int rt5682_headset_detect(struct snd_soc_component *component, int jack_insert) snd_soc_component_update_bits(component, RT5682_MICBIAS_2, RT5682_PWR_CLK25M_MASK | RT5682_PWR_CLK1M_MASK, RT5682_PWR_CLK25M_PU | RT5682_PWR_CLK1M_PU); snd_soc_dapm_mutex_unlock(dapm); } else { rt5682_enable_push_button_irq(component, false); snd_soc_component_update_bits(component, RT5682_CBJ_CTRL_1, Loading sound/soc/codecs/tas2770.c +2 −2 Original line number Diff line number Diff line Loading @@ -291,11 +291,11 @@ static int tas2770_set_samplerate(struct tas2770_priv *tas2770, int samplerate) ramp_rate_val = TAS2770_TDM_CFG_REG0_SMP_44_1KHZ | TAS2770_TDM_CFG_REG0_31_88_2_96KHZ; break; case 19200: case 192000: ramp_rate_val = TAS2770_TDM_CFG_REG0_SMP_48KHZ | TAS2770_TDM_CFG_REG0_31_176_4_192KHZ; break; case 17640: case 176400: ramp_rate_val = TAS2770_TDM_CFG_REG0_SMP_44_1KHZ | TAS2770_TDM_CFG_REG0_31_176_4_192KHZ; break; Loading sound/soc/codecs/wcd934x.c +93 −33 Original line number Diff line number Diff line Loading @@ -3256,6 +3256,9 @@ static int wcd934x_compander_set(struct snd_kcontrol *kc, int value = ucontrol->value.integer.value[0]; int sel; if (wcd->comp_enabled[comp] == value) return 0; wcd->comp_enabled[comp] = value; sel = value ? WCD934X_HPH_GAIN_SRC_SEL_COMPANDER : WCD934X_HPH_GAIN_SRC_SEL_REGISTER; Loading @@ -3279,10 +3282,10 @@ static int wcd934x_compander_set(struct snd_kcontrol *kc, case COMPANDER_8: break; default: break; return 0; } return 0; return 1; } static int wcd934x_rx_hph_mode_get(struct snd_kcontrol *kc, Loading Loading @@ -3326,6 +3329,31 @@ static int slim_rx_mux_get(struct snd_kcontrol *kc, return 0; } static int slim_rx_mux_to_dai_id(int mux) { int aif_id; switch (mux) { case 1: aif_id = AIF1_PB; break; case 2: aif_id = AIF2_PB; break; case 3: aif_id = AIF3_PB; break; case 4: aif_id = AIF4_PB; break; default: aif_id = -1; break; } return aif_id; } static int slim_rx_mux_put(struct snd_kcontrol *kc, struct snd_ctl_elem_value *ucontrol) { Loading @@ -3333,43 +3361,59 @@ static int slim_rx_mux_put(struct snd_kcontrol *kc, struct wcd934x_codec *wcd = dev_get_drvdata(w->dapm->dev); struct soc_enum *e = (struct soc_enum *)kc->private_value; struct snd_soc_dapm_update *update = NULL; struct wcd934x_slim_ch *ch, *c; u32 port_id = w->shift; bool found = false; int mux_idx; int prev_mux_idx = wcd->rx_port_value[port_id]; int aif_id; if (wcd->rx_port_value[port_id] == ucontrol->value.enumerated.item[0]) return 0; mux_idx = ucontrol->value.enumerated.item[0]; wcd->rx_port_value[port_id] = ucontrol->value.enumerated.item[0]; if (mux_idx == prev_mux_idx) return 0; switch (wcd->rx_port_value[port_id]) { switch(mux_idx) { case 0: list_del_init(&wcd->rx_chs[port_id].list); break; case 1: list_add_tail(&wcd->rx_chs[port_id].list, &wcd->dai[AIF1_PB].slim_ch_list); break; case 2: list_add_tail(&wcd->rx_chs[port_id].list, &wcd->dai[AIF2_PB].slim_ch_list); aif_id = slim_rx_mux_to_dai_id(prev_mux_idx); if (aif_id < 0) return 0; list_for_each_entry_safe(ch, c, &wcd->dai[aif_id].slim_ch_list, list) { if (ch->port == port_id + WCD934X_RX_START) { found = true; list_del_init(&ch->list); break; case 3: list_add_tail(&wcd->rx_chs[port_id].list, &wcd->dai[AIF3_PB].slim_ch_list); } } if (!found) return 0; break; case 4: case 1 ... 4: aif_id = slim_rx_mux_to_dai_id(mux_idx); if (aif_id < 0) return 0; if (list_empty(&wcd->rx_chs[port_id].list)) { list_add_tail(&wcd->rx_chs[port_id].list, &wcd->dai[AIF4_PB].slim_ch_list); &wcd->dai[aif_id].slim_ch_list); } else { dev_err(wcd->dev ,"SLIM_RX%d PORT is busy\n", port_id); return 0; } break; default: dev_err(wcd->dev, "Unknown AIF %d\n", wcd->rx_port_value[port_id]); dev_err(wcd->dev, "Unknown AIF %d\n", mux_idx); goto err; } wcd->rx_port_value[port_id] = mux_idx; snd_soc_dapm_mux_update_power(w->dapm, kc, wcd->rx_port_value[port_id], e, update); return 0; return 1; err: return -EINVAL; } Loading Loading @@ -3813,6 +3857,7 @@ static int slim_tx_mixer_put(struct snd_kcontrol *kc, struct soc_mixer_control *mixer = (struct soc_mixer_control *)kc->private_value; int enable = ucontrol->value.integer.value[0]; struct wcd934x_slim_ch *ch, *c; int dai_id = widget->shift; int port_id = mixer->shift; Loading @@ -3820,17 +3865,32 @@ static int slim_tx_mixer_put(struct snd_kcontrol *kc, if (enable == wcd->tx_port_value[port_id]) return 0; wcd->tx_port_value[port_id] = enable; if (enable) if (enable) { if (list_empty(&wcd->tx_chs[port_id].list)) { list_add_tail(&wcd->tx_chs[port_id].list, &wcd->dai[dai_id].slim_ch_list); else } else { dev_err(wcd->dev ,"SLIM_TX%d PORT is busy\n", port_id); return 0; } } else { bool found = false; list_for_each_entry_safe(ch, c, &wcd->dai[dai_id].slim_ch_list, list) { if (ch->port == port_id) { found = true; list_del_init(&wcd->tx_chs[port_id].list); break; } } if (!found) return 0; } wcd->tx_port_value[port_id] = enable; snd_soc_dapm_mixer_update_power(widget->dapm, kc, enable, update); return 0; return 1; } static const struct snd_kcontrol_new aif1_slim_cap_mixer[] = { Loading sound/soc/codecs/wsa881x.c +12 −4 Original line number Diff line number Diff line Loading @@ -772,7 +772,8 @@ static int wsa881x_put_pa_gain(struct snd_kcontrol *kc, usleep_range(1000, 1010); } return 0; return 1; } static int wsa881x_get_port(struct snd_kcontrol *kcontrol, Loading Loading @@ -816,15 +817,22 @@ static int wsa881x_set_port(struct snd_kcontrol *kcontrol, (struct soc_mixer_control *)kcontrol->private_value; int portidx = mixer->reg; if (ucontrol->value.integer.value[0]) if (ucontrol->value.integer.value[0]) { if (data->port_enable[portidx]) return 0; data->port_enable[portidx] = true; else } else { if (!data->port_enable[portidx]) return 0; data->port_enable[portidx] = false; } if (portidx == WSA881X_PORT_BOOST) /* Boost Switch */ wsa881x_boost_ctrl(comp, data->port_enable[portidx]); return 0; return 1; } static const char * const smart_boost_lvl_text[] = { Loading sound/soc/mediatek/mt8195/mt8195-afe-pcm.c +1 −1 Original line number Diff line number Diff line Loading @@ -3029,7 +3029,7 @@ static const struct reg_sequence mt8195_afe_reg_defaults[] = { static const struct reg_sequence mt8195_cg_patch[] = { { AUDIO_TOP_CON0, 0xfffffffb }, { AUDIO_TOP_CON1, 0xfffffffa }, { AUDIO_TOP_CON1, 0xfffffff8 }, }; static int mt8195_afe_init_registers(struct mtk_base_afe *afe) Loading Loading
sound/soc/codecs/rt5682.c +4 −0 Original line number Diff line number Diff line Loading @@ -929,6 +929,8 @@ int rt5682_headset_detect(struct snd_soc_component *component, int jack_insert) unsigned int val, count; if (jack_insert) { snd_soc_dapm_mutex_lock(dapm); snd_soc_component_update_bits(component, RT5682_PWR_ANLG_1, RT5682_PWR_VREF2 | RT5682_PWR_MB, RT5682_PWR_VREF2 | RT5682_PWR_MB); Loading Loading @@ -979,6 +981,8 @@ int rt5682_headset_detect(struct snd_soc_component *component, int jack_insert) snd_soc_component_update_bits(component, RT5682_MICBIAS_2, RT5682_PWR_CLK25M_MASK | RT5682_PWR_CLK1M_MASK, RT5682_PWR_CLK25M_PU | RT5682_PWR_CLK1M_PU); snd_soc_dapm_mutex_unlock(dapm); } else { rt5682_enable_push_button_irq(component, false); snd_soc_component_update_bits(component, RT5682_CBJ_CTRL_1, Loading
sound/soc/codecs/tas2770.c +2 −2 Original line number Diff line number Diff line Loading @@ -291,11 +291,11 @@ static int tas2770_set_samplerate(struct tas2770_priv *tas2770, int samplerate) ramp_rate_val = TAS2770_TDM_CFG_REG0_SMP_44_1KHZ | TAS2770_TDM_CFG_REG0_31_88_2_96KHZ; break; case 19200: case 192000: ramp_rate_val = TAS2770_TDM_CFG_REG0_SMP_48KHZ | TAS2770_TDM_CFG_REG0_31_176_4_192KHZ; break; case 17640: case 176400: ramp_rate_val = TAS2770_TDM_CFG_REG0_SMP_44_1KHZ | TAS2770_TDM_CFG_REG0_31_176_4_192KHZ; break; Loading
sound/soc/codecs/wcd934x.c +93 −33 Original line number Diff line number Diff line Loading @@ -3256,6 +3256,9 @@ static int wcd934x_compander_set(struct snd_kcontrol *kc, int value = ucontrol->value.integer.value[0]; int sel; if (wcd->comp_enabled[comp] == value) return 0; wcd->comp_enabled[comp] = value; sel = value ? WCD934X_HPH_GAIN_SRC_SEL_COMPANDER : WCD934X_HPH_GAIN_SRC_SEL_REGISTER; Loading @@ -3279,10 +3282,10 @@ static int wcd934x_compander_set(struct snd_kcontrol *kc, case COMPANDER_8: break; default: break; return 0; } return 0; return 1; } static int wcd934x_rx_hph_mode_get(struct snd_kcontrol *kc, Loading Loading @@ -3326,6 +3329,31 @@ static int slim_rx_mux_get(struct snd_kcontrol *kc, return 0; } static int slim_rx_mux_to_dai_id(int mux) { int aif_id; switch (mux) { case 1: aif_id = AIF1_PB; break; case 2: aif_id = AIF2_PB; break; case 3: aif_id = AIF3_PB; break; case 4: aif_id = AIF4_PB; break; default: aif_id = -1; break; } return aif_id; } static int slim_rx_mux_put(struct snd_kcontrol *kc, struct snd_ctl_elem_value *ucontrol) { Loading @@ -3333,43 +3361,59 @@ static int slim_rx_mux_put(struct snd_kcontrol *kc, struct wcd934x_codec *wcd = dev_get_drvdata(w->dapm->dev); struct soc_enum *e = (struct soc_enum *)kc->private_value; struct snd_soc_dapm_update *update = NULL; struct wcd934x_slim_ch *ch, *c; u32 port_id = w->shift; bool found = false; int mux_idx; int prev_mux_idx = wcd->rx_port_value[port_id]; int aif_id; if (wcd->rx_port_value[port_id] == ucontrol->value.enumerated.item[0]) return 0; mux_idx = ucontrol->value.enumerated.item[0]; wcd->rx_port_value[port_id] = ucontrol->value.enumerated.item[0]; if (mux_idx == prev_mux_idx) return 0; switch (wcd->rx_port_value[port_id]) { switch(mux_idx) { case 0: list_del_init(&wcd->rx_chs[port_id].list); break; case 1: list_add_tail(&wcd->rx_chs[port_id].list, &wcd->dai[AIF1_PB].slim_ch_list); break; case 2: list_add_tail(&wcd->rx_chs[port_id].list, &wcd->dai[AIF2_PB].slim_ch_list); aif_id = slim_rx_mux_to_dai_id(prev_mux_idx); if (aif_id < 0) return 0; list_for_each_entry_safe(ch, c, &wcd->dai[aif_id].slim_ch_list, list) { if (ch->port == port_id + WCD934X_RX_START) { found = true; list_del_init(&ch->list); break; case 3: list_add_tail(&wcd->rx_chs[port_id].list, &wcd->dai[AIF3_PB].slim_ch_list); } } if (!found) return 0; break; case 4: case 1 ... 4: aif_id = slim_rx_mux_to_dai_id(mux_idx); if (aif_id < 0) return 0; if (list_empty(&wcd->rx_chs[port_id].list)) { list_add_tail(&wcd->rx_chs[port_id].list, &wcd->dai[AIF4_PB].slim_ch_list); &wcd->dai[aif_id].slim_ch_list); } else { dev_err(wcd->dev ,"SLIM_RX%d PORT is busy\n", port_id); return 0; } break; default: dev_err(wcd->dev, "Unknown AIF %d\n", wcd->rx_port_value[port_id]); dev_err(wcd->dev, "Unknown AIF %d\n", mux_idx); goto err; } wcd->rx_port_value[port_id] = mux_idx; snd_soc_dapm_mux_update_power(w->dapm, kc, wcd->rx_port_value[port_id], e, update); return 0; return 1; err: return -EINVAL; } Loading Loading @@ -3813,6 +3857,7 @@ static int slim_tx_mixer_put(struct snd_kcontrol *kc, struct soc_mixer_control *mixer = (struct soc_mixer_control *)kc->private_value; int enable = ucontrol->value.integer.value[0]; struct wcd934x_slim_ch *ch, *c; int dai_id = widget->shift; int port_id = mixer->shift; Loading @@ -3820,17 +3865,32 @@ static int slim_tx_mixer_put(struct snd_kcontrol *kc, if (enable == wcd->tx_port_value[port_id]) return 0; wcd->tx_port_value[port_id] = enable; if (enable) if (enable) { if (list_empty(&wcd->tx_chs[port_id].list)) { list_add_tail(&wcd->tx_chs[port_id].list, &wcd->dai[dai_id].slim_ch_list); else } else { dev_err(wcd->dev ,"SLIM_TX%d PORT is busy\n", port_id); return 0; } } else { bool found = false; list_for_each_entry_safe(ch, c, &wcd->dai[dai_id].slim_ch_list, list) { if (ch->port == port_id) { found = true; list_del_init(&wcd->tx_chs[port_id].list); break; } } if (!found) return 0; } wcd->tx_port_value[port_id] = enable; snd_soc_dapm_mixer_update_power(widget->dapm, kc, enable, update); return 0; return 1; } static const struct snd_kcontrol_new aif1_slim_cap_mixer[] = { Loading
sound/soc/codecs/wsa881x.c +12 −4 Original line number Diff line number Diff line Loading @@ -772,7 +772,8 @@ static int wsa881x_put_pa_gain(struct snd_kcontrol *kc, usleep_range(1000, 1010); } return 0; return 1; } static int wsa881x_get_port(struct snd_kcontrol *kcontrol, Loading Loading @@ -816,15 +817,22 @@ static int wsa881x_set_port(struct snd_kcontrol *kcontrol, (struct soc_mixer_control *)kcontrol->private_value; int portidx = mixer->reg; if (ucontrol->value.integer.value[0]) if (ucontrol->value.integer.value[0]) { if (data->port_enable[portidx]) return 0; data->port_enable[portidx] = true; else } else { if (!data->port_enable[portidx]) return 0; data->port_enable[portidx] = false; } if (portidx == WSA881X_PORT_BOOST) /* Boost Switch */ wsa881x_boost_ctrl(comp, data->port_enable[portidx]); return 0; return 1; } static const char * const smart_boost_lvl_text[] = { Loading
sound/soc/mediatek/mt8195/mt8195-afe-pcm.c +1 −1 Original line number Diff line number Diff line Loading @@ -3029,7 +3029,7 @@ static const struct reg_sequence mt8195_afe_reg_defaults[] = { static const struct reg_sequence mt8195_cg_patch[] = { { AUDIO_TOP_CON0, 0xfffffffb }, { AUDIO_TOP_CON1, 0xfffffffa }, { AUDIO_TOP_CON1, 0xfffffff8 }, }; static int mt8195_afe_init_registers(struct mtk_base_afe *afe) Loading