asoc: bolero: Fix AMIC TX pop on bolero 2.1
For bolero 2.1, amic can connect on any SWR input.
Update API to check amic usecase.
Change-Id: Iced7df39b0dbaf83e77a72536e55223d3bda2289
Signed-off-by: Laxminath Kasam <lkasam@codeaurora.org>
diff --git a/asoc/codecs/bolero/tx-macro.c b/asoc/codecs/bolero/tx-macro.c
index 12b37ab..bccf0f8 100644
--- a/asoc/codecs/bolero/tx-macro.c
+++ b/asoc/codecs/bolero/tx-macro.c
@@ -433,23 +433,31 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
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);