Unverified Commit 8b974c12 authored by Mark Brown's avatar Mark Brown
Browse files

ASoC: Merge fixes

So we can send to Linus.
parents cc5c9788 30e693ee
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -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);
@@ -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,
+2 −2
Original line number Diff line number Diff line
@@ -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;
+93 −33
Original line number Diff line number Diff line
@@ -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;
@@ -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,
@@ -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)
{
@@ -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;
}
@@ -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;

@@ -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[] = {
+12 −4
Original line number Diff line number Diff line
@@ -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,
@@ -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[] = {
+1 −1
Original line number Diff line number Diff line
@@ -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