Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3986c742 authored by Linux Build Service Account's avatar Linux Build Service Account
Browse files

Merge c4833618 on remote branch

Change-Id: I6063a99b64c38f975e0e2994a649a3773432dc40
parents 16b3e1dc c4833618
Loading
Loading
Loading
Loading
+22 −12
Original line number Diff line number Diff line
@@ -433,23 +433,31 @@ static int tx_macro_reg_wake_irq(struct snd_soc_component *component,
	return ret;
}

static int is_amic_enabled(struct snd_soc_component *component, int decimator)
static bool is_amic_enabled(struct snd_soc_component *component, int decimator)
{
	u16 adc_mux_reg = 0, adc_reg = 0;
	u16 adc_n = BOLERO_ADC_MAX;
	bool ret = false;
	struct device *tx_dev = NULL;
	struct tx_macro_priv *tx_priv = NULL;

	if (!tx_macro_get_data(component, &tx_dev, &tx_priv, __func__))
		return ret;

	adc_mux_reg = BOLERO_CDC_TX_INP_MUX_ADC_MUX0_CFG1 +
			TX_MACRO_ADC_MUX_CFG_OFFSET * decimator;
	if (snd_soc_component_read32(component, adc_mux_reg) & SWR_MIC) {
		if (tx_priv->version == BOLERO_VERSION_2_1)
			return true;
		adc_reg = BOLERO_CDC_TX_INP_MUX_ADC_MUX0_CFG0 +
			TX_MACRO_ADC_MUX_CFG_OFFSET * decimator;
		adc_n = snd_soc_component_read32(component, adc_reg) &
				TX_MACRO_SWR_MIC_MUX_SEL_MASK;
		if (adc_n >= BOLERO_ADC_MAX)
			adc_n = BOLERO_ADC_MAX;
		if (adc_n < BOLERO_ADC_MAX)
			return true;
	}

	return adc_n;
	return ret;
}

static void tx_macro_tx_hpf_corner_freq_callback(struct work_struct *work)
@@ -460,7 +468,7 @@ static void tx_macro_tx_hpf_corner_freq_callback(struct work_struct *work)
	struct snd_soc_component *component = NULL;
	u16 dec_cfg_reg = 0, hpf_gate_reg = 0;
	u8 hpf_cut_off_freq = 0;
	u16 adc_n = 0;
	u16 adc_reg = 0, adc_n = 0;

	hpf_delayed_work = to_delayed_work(work);
	hpf_work = container_of(hpf_delayed_work, struct hpf_work, dwork);
@@ -476,8 +484,11 @@ static void tx_macro_tx_hpf_corner_freq_callback(struct work_struct *work)
	dev_dbg(component->dev, "%s: decimator %u hpf_cut_of_freq 0x%x\n",
		__func__, hpf_work->decimator, hpf_cut_off_freq);

	adc_n = is_amic_enabled(component, hpf_work->decimator);
	if (adc_n < BOLERO_ADC_MAX) {
	if (is_amic_enabled(component, hpf_work->decimator)) {
		adc_reg = BOLERO_CDC_TX_INP_MUX_ADC_MUX0_CFG0 +
			TX_MACRO_ADC_MUX_CFG_OFFSET * hpf_work->decimator;
		adc_n = snd_soc_component_read32(component, adc_reg) &
				TX_MACRO_SWR_MIC_MUX_SEL_MASK;
		/* analog mic clear TX hold */
		bolero_clear_amic_tx_hold(component->dev, adc_n);
		snd_soc_component_update_bits(component,
@@ -882,7 +893,7 @@ static int tx_macro_enable_dec(struct snd_soc_dapm_widget *w,
	case SND_SOC_DAPM_POST_PMU:
		snd_soc_component_update_bits(component,
			tx_vol_ctl_reg, 0x20, 0x20);
		if (!(is_amic_enabled(component, decimator) < BOLERO_ADC_MAX)) {
		if (!is_amic_enabled(component, decimator)) {
			snd_soc_component_update_bits(component,
				hpf_gate_reg, 0x01, 0x00);
			/*
@@ -902,7 +913,7 @@ static int tx_macro_enable_dec(struct snd_soc_dapm_widget *w,
						TX_HPF_CUT_OFF_FREQ_MASK,
						CF_MIN_3DB_150HZ << 5);

		if (is_amic_enabled(component, decimator) < BOLERO_ADC_MAX) {
		if (is_amic_enabled(component, decimator)) {
			hpf_delay = TX_MACRO_AMIC_HPF_DELAY_MS;
			unmute_delay = TX_MACRO_AMIC_UNMUTE_DELAY_MS;
		}
@@ -918,8 +929,7 @@ static int tx_macro_enable_dec(struct snd_soc_dapm_widget *w,
				msecs_to_jiffies(hpf_delay));
			snd_soc_component_update_bits(component,
					hpf_gate_reg, 0x03, 0x02);
			if (!(is_amic_enabled(component, decimator)
				< BOLERO_ADC_MAX))
			if (!is_amic_enabled(component, decimator))
				snd_soc_component_update_bits(component,
					hpf_gate_reg, 0x03, 0x00);
			/*
@@ -959,7 +969,7 @@ static int tx_macro_enable_dec(struct snd_soc_dapm_widget *w,
						component, dec_cfg_reg,
						TX_HPF_CUT_OFF_FREQ_MASK,
						hpf_cut_off_freq << 5);
				if (is_amic_enabled(component, decimator) < BOLERO_ADC_MAX)
				if (is_amic_enabled(component, decimator))
					snd_soc_component_update_bits(component,
							hpf_gate_reg,
							0x03, 0x02);
+22 −12
Original line number Diff line number Diff line
@@ -781,23 +781,31 @@ static int va_macro_swrm_clock(void *handle, bool enable)
	return ret;
}

static int is_amic_enabled(struct snd_soc_component *component, int decimator)
static bool is_amic_enabled(struct snd_soc_component *component, int decimator)
{
	u16 adc_mux_reg = 0, adc_reg = 0;
	u16 adc_n = BOLERO_ADC_MAX;
	bool ret = false;
	struct device *va_dev = NULL;
	struct va_macro_priv *va_priv = NULL;

	if (!va_macro_get_data(component, &va_dev, &va_priv, __func__))
		return ret;

	adc_mux_reg = BOLERO_CDC_VA_INP_MUX_ADC_MUX0_CFG1 +
			VA_MACRO_ADC_MUX_CFG_OFFSET * decimator;
	if (snd_soc_component_read32(component, adc_mux_reg) & SWR_MIC) {
		if (va_priv->version == BOLERO_VERSION_2_1)
			return true;
		adc_reg = BOLERO_CDC_VA_INP_MUX_ADC_MUX0_CFG0 +
			VA_MACRO_ADC_MUX_CFG_OFFSET * decimator;
		adc_n = snd_soc_component_read32(component, adc_reg) &
				VA_MACRO_SWR_MIC_MUX_SEL_MASK;
		if (adc_n >= BOLERO_ADC_MAX)
			adc_n = BOLERO_ADC_MAX;
		if (adc_n < BOLERO_ADC_MAX)
			return true;
	}

	return adc_n;
	return ret;
}

static void va_macro_tx_hpf_corner_freq_callback(struct work_struct *work)
@@ -808,7 +816,7 @@ static void va_macro_tx_hpf_corner_freq_callback(struct work_struct *work)
	struct snd_soc_component *component;
	u16 dec_cfg_reg, hpf_gate_reg;
	u8 hpf_cut_off_freq;
	u16 adc_n = 0;
	u16 adc_reg = 0, adc_n = 0;

	hpf_delayed_work = to_delayed_work(work);
	hpf_work = container_of(hpf_delayed_work, struct hpf_work, dwork);
@@ -824,8 +832,11 @@ static void va_macro_tx_hpf_corner_freq_callback(struct work_struct *work)
	dev_dbg(va_priv->dev, "%s: decimator %u hpf_cut_of_freq 0x%x\n",
		__func__, hpf_work->decimator, hpf_cut_off_freq);

	adc_n = is_amic_enabled(component, hpf_work->decimator);
	if (adc_n < BOLERO_ADC_MAX) {
	if (is_amic_enabled(component, hpf_work->decimator)) {
		adc_reg = BOLERO_CDC_VA_INP_MUX_ADC_MUX0_CFG0 +
			VA_MACRO_ADC_MUX_CFG_OFFSET * hpf_work->decimator;
		adc_n = snd_soc_component_read32(component, adc_reg) &
				VA_MACRO_SWR_MIC_MUX_SEL_MASK;
		/* analog mic clear TX hold */
		bolero_clear_amic_tx_hold(component->dev, adc_n);
		snd_soc_component_update_bits(component,
@@ -1125,7 +1136,7 @@ static int va_macro_enable_dec(struct snd_soc_dapm_widget *w,
		/* Enable TX CLK */
		snd_soc_component_update_bits(component,
				tx_vol_ctl_reg, 0x20, 0x20);
		if (!(is_amic_enabled(component, decimator) < BOLERO_ADC_MAX)) {
		if (!is_amic_enabled(component, decimator)) {
			snd_soc_component_update_bits(component,
				hpf_gate_reg, 0x01, 0x00);
			/*
@@ -1144,7 +1155,7 @@ static int va_macro_enable_dec(struct snd_soc_dapm_widget *w,
					    TX_HPF_CUT_OFF_FREQ_MASK,
					    CF_MIN_3DB_150HZ << 5);
		}
		if (is_amic_enabled(component, decimator) < BOLERO_ADC_MAX) {
		if (is_amic_enabled(component, decimator)) {
			hpf_delay = BOLERO_CDC_VA_TX_AMIC_HPF_DELAY_MS;
			unmute_delay = BOLERO_CDC_VA_TX_AMIC_UNMUTE_DELAY_MS;
			if (va_tx_unmute_delay < unmute_delay)
@@ -1152,7 +1163,7 @@ static int va_macro_enable_dec(struct snd_soc_dapm_widget *w,
		}
		snd_soc_component_update_bits(component,
				hpf_gate_reg, 0x03, 0x02);
		if (!(is_amic_enabled(component, decimator) < BOLERO_ADC_MAX))
		if (!is_amic_enabled(component, decimator))
			snd_soc_component_update_bits(component,
				hpf_gate_reg, 0x03, 0x00);
		/*
@@ -1189,8 +1200,7 @@ static int va_macro_enable_dec(struct snd_soc_dapm_widget *w,
						dec_cfg_reg,
						TX_HPF_CUT_OFF_FREQ_MASK,
						hpf_cut_off_freq << 5);
				if (is_amic_enabled(component, decimator) <
					BOLERO_ADC_MAX)
				if (is_amic_enabled(component, decimator))
					snd_soc_component_update_bits(component,
						hpf_gate_reg,
						0x03, 0x02);
+35 −1
Original line number Diff line number Diff line
// SPDX-License-Identifier: GPL-2.0-only
/* Copyright (c) 2016-2019, The Linux Foundation. All rights reserved.
/* Copyright (c) 2016-2020, The Linux Foundation. All rights reserved.
 */

#include <linux/kernel.h>
@@ -21,6 +21,7 @@ struct msm_cdc_pinctrl_info {
	struct pinctrl *pinctrl;
	struct pinctrl_state *pinctrl_active;
	struct pinctrl_state *pinctrl_sleep;
	struct pinctrl_state *pinctrl_alt_active;
	int gpio;
	bool state;
	u32 tlmm_gpio[MAX_GPIOS];
@@ -104,6 +105,31 @@ int msm_cdc_pinctrl_select_sleep_state(struct device_node *np)
}
EXPORT_SYMBOL(msm_cdc_pinctrl_select_sleep_state);

/*
 * msm_cdc_pinctrl_select_alt_active_state: select pinctrl alt_active state
 * @np: pointer to struct device_node
 *
 * Returns error code for failure
 */
int msm_cdc_pinctrl_select_alt_active_state(struct device_node *np)
{
	struct msm_cdc_pinctrl_info *gpio_data;

	gpio_data = msm_cdc_pinctrl_get_gpiodata(np);
	if (!gpio_data)
		return -EINVAL;

	if (!gpio_data->pinctrl_alt_active) {
		pr_err("%s: pinctrl alt_active state is null\n", __func__);
		return -EINVAL;
	}
	gpio_data->state = true;

	return pinctrl_select_state(gpio_data->pinctrl,
				    gpio_data->pinctrl_alt_active);
}
EXPORT_SYMBOL(msm_cdc_pinctrl_select_alt_active_state);

/*
 * msm_cdc_pinctrl_select_active_state: select pinctrl active state
 * @np: pointer to struct device_node
@@ -231,6 +257,14 @@ static int msm_cdc_pinctrl_probe(struct platform_device *pdev)
		ret = PTR_ERR(gpio_data->pinctrl_sleep);
		goto err_lookup_state;
	}

	gpio_data->pinctrl_alt_active = pinctrl_lookup_state(
					gpio_data->pinctrl, "aud_alt_active");
	if (IS_ERR_OR_NULL(gpio_data->pinctrl_alt_active)) {
		dev_dbg(&pdev->dev, "%s: Cannot get aud_alt_active pinctrl state:%ld\n",
			__func__, PTR_ERR(gpio_data->pinctrl_alt_active));
	}

	/* skip setting to sleep state for LPI_TLMM GPIOs */
	if (!of_property_read_bool(pdev->dev.of_node, "qcom,lpi-gpios")) {
		/* Set pinctrl state to aud_sleep by default */
+1 −1
Original line number Diff line number Diff line
@@ -2477,7 +2477,6 @@ static int msm_lsm_open(struct snd_pcm_substream *substream)
	init_waitqueue_head(&prtd->event_wait);
	init_waitqueue_head(&prtd->period_wait);
	prtd->substream = substream;
	wakeup_source_init(&prtd->ws, "lsm-client");
	runtime->private_data = prtd;
	runtime->hw = msm_pcm_hardware_capture;

@@ -2530,6 +2529,7 @@ static int msm_lsm_open(struct snd_pcm_substream *substream)
	prtd->lsm_client->fe_id = rtd->dai_link->id;
	prtd->lsm_client->unprocessed_data = 0;

	wakeup_source_init(&prtd->ws, "lsm-client");
	return 0;
}

+6 −1
Original line number Diff line number Diff line
@@ -5513,6 +5513,10 @@ static int get_ec_ref_port_id(int value, int *index)
		*index = 39;
		port_id = AFE_PORT_ID_SENARY_MI2S_TX;
		break;
	case 40:
		*index = 40;
		port_id = AFE_PORT_ID_QUINARY_TDM_TX;
		break;
	default:
		*index = 0; /* NONE */
		pr_err("%s: Invalid value %d\n", __func__, value);
@@ -5570,7 +5574,7 @@ static const char *const ec_ref_rx[] = { "None", "SLIM_RX", "I2S_RX",
	"WSA_CDC_DMA_TX_0", "WSA_CDC_DMA_TX_1", "WSA_CDC_DMA_TX_2",
	"SLIM_7_RX", "RX_CDC_DMA_RX_0", "RX_CDC_DMA_RX_1", "RX_CDC_DMA_RX_2",
	"RX_CDC_DMA_RX_3", "TX_CDC_DMA_TX_0", "TERT_TDM_RX_2", "SEC_TDM_TX_0",
	"DISPLAY_PORT1", "SEN_MI2S_RX", "SENARY_MI2S_TX",
	"DISPLAY_PORT1", "SEN_MI2S_RX", "SENARY_MI2S_TX", "QUIN_TDM_TX_0",
};
static const struct soc_enum msm_route_ec_ref_rx_enum[] = {
@@ -27426,6 +27430,7 @@ static const struct snd_soc_dapm_route intercon[] = {
	{"AUDIO_REF_EC_UL1 MUX", "TERT_TDM_TX_0", "TERT_TDM_TX_0"},
	{"AUDIO_REF_EC_UL1 MUX", "TERT_TDM_RX_2", "TERT_TDM_RX_2"},
	{"AUDIO_REF_EC_UL1 MUX", "SEC_TDM_TX_0", "SEC_TDM_TX_0"},
	{"AUDIO_REF_EC_UL1 MUX", "QUIN_TDM_TX_0", "QUIN_TDM_TX_0"},
	{"AUDIO_REF_EC_UL2 MUX", "PRI_MI2S_TX", "PRI_MI2S_TX"},
	{"AUDIO_REF_EC_UL2 MUX", "SEC_MI2S_TX", "SEC_MI2S_TX"},
Loading