mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-15 01:01:56 -04:00
ASoC: wcd937x: Add flag to decide RX_MUTE for HPHL and EAR
Check if HPHL or EAR is enabled before sending RX_MUTE event. Change-Id: I4ffc42a0d79c8edea77745a2f52361a4cf3dddaa Signed-off-by: Soumya Managoli <quic_c_smanag@quicinc.com>
This commit is contained in:
parent
5a4223f249
commit
9d1d4d6fb0
1 changed files with 37 additions and 16 deletions
|
|
@ -1,7 +1,7 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* Copyright (c) 2018-2021, The Linux Foundation. All rights reserved.
|
||||
* Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
* Copyright (c) 2022-2023 Qualcomm Innovation Center, Inc. All rights reserved.
|
||||
*/
|
||||
|
||||
#include <linux/module.h>
|
||||
|
|
@ -60,6 +60,8 @@ enum {
|
|||
HPH_COMP_DELAY,
|
||||
HPH_PA_DELAY,
|
||||
AMIC2_BCS_ENABLE,
|
||||
WCD_HPHL_EN,
|
||||
WCD_EAR_EN,
|
||||
};
|
||||
|
||||
static const DECLARE_TLV_DB_SCALE(line_gain, 0, 7, 1);
|
||||
|
|
@ -876,6 +878,7 @@ static int wcd937x_codec_enable_hphl_pa(struct snd_soc_dapm_widget *w,
|
|||
set_bit(HPH_PA_DELAY, &wcd937x->status_mask);
|
||||
snd_soc_component_update_bits(component,
|
||||
WCD937X_DIGITAL_PDM_WD_CTL0, 0x17, 0x13);
|
||||
set_bit(WCD_HPHL_EN, &wcd937x->status_mask);
|
||||
break;
|
||||
case SND_SOC_DAPM_POST_PMU:
|
||||
/*
|
||||
|
|
@ -906,12 +909,14 @@ static int wcd937x_codec_enable_hphl_pa(struct snd_soc_dapm_widget *w,
|
|||
WCD937X_IRQ_HPHL_PDM_WD_INT);
|
||||
break;
|
||||
case SND_SOC_DAPM_PRE_PMD:
|
||||
wcd_disable_irq(&wcd937x->irq_info,
|
||||
if (!test_bit(WCD_EAR_EN, &wcd937x->status_mask)) {
|
||||
wcd_disable_irq(&wcd937x->irq_info,
|
||||
WCD937X_IRQ_HPHL_PDM_WD_INT);
|
||||
if (wcd937x->update_wcd_event)
|
||||
wcd937x->update_wcd_event(wcd937x->handle,
|
||||
if (wcd937x->update_wcd_event)
|
||||
wcd937x->update_wcd_event(wcd937x->handle,
|
||||
SLV_BOLERO_EVT_RX_MUTE,
|
||||
(WCD_RX1 << 0x10 | 0x1));
|
||||
}
|
||||
blocking_notifier_call_chain(&wcd937x->mbhc->notifier,
|
||||
WCD_EVENT_PRE_HPHL_PA_OFF,
|
||||
&wcd937x->mbhc->wcd_mbhc);
|
||||
|
|
@ -942,6 +947,7 @@ static int wcd937x_codec_enable_hphl_pa(struct snd_soc_dapm_widget *w,
|
|||
WCD_CLSH_EVENT_POST_PA,
|
||||
WCD_CLSH_STATE_HPHL,
|
||||
hph_mode);
|
||||
clear_bit(WCD_HPHL_EN, &wcd937x->status_mask);
|
||||
break;
|
||||
};
|
||||
return ret;
|
||||
|
|
@ -1030,10 +1036,12 @@ static int wcd937x_codec_enable_ear_pa(struct snd_soc_dapm_widget *w,
|
|||
snd_soc_component_update_bits(component,
|
||||
WCD937X_DIGITAL_PDM_WD_CTL2,
|
||||
0x05, 0x05);
|
||||
else
|
||||
else {
|
||||
snd_soc_component_update_bits(component,
|
||||
WCD937X_DIGITAL_PDM_WD_CTL0,
|
||||
0x17, 0x13);
|
||||
set_bit(WCD_EAR_EN, &wcd937x->status_mask);
|
||||
}
|
||||
if (!wcd937x->comp1_enable)
|
||||
snd_soc_component_update_bits(component,
|
||||
WCD937X_ANA_EAR_COMPANDER_CTL, 0x80, 0x80);
|
||||
|
|
@ -1056,16 +1064,24 @@ static int wcd937x_codec_enable_ear_pa(struct snd_soc_dapm_widget *w,
|
|||
WCD937X_IRQ_HPHL_PDM_WD_INT);
|
||||
break;
|
||||
case SND_SOC_DAPM_PRE_PMD:
|
||||
if (wcd937x->ear_rx_path & EAR_RX_PATH_AUX)
|
||||
if (wcd937x->ear_rx_path & EAR_RX_PATH_AUX) {
|
||||
wcd_disable_irq(&wcd937x->irq_info,
|
||||
WCD937X_IRQ_AUX_PDM_WD_INT);
|
||||
else
|
||||
wcd_disable_irq(&wcd937x->irq_info,
|
||||
if (wcd937x->update_wcd_event)
|
||||
wcd937x->update_wcd_event(wcd937x->handle,
|
||||
SLV_BOLERO_EVT_RX_MUTE,
|
||||
(WCD_RX1 << 0x10 | 0x1));
|
||||
}
|
||||
else {
|
||||
if(!test_bit(WCD_HPHL_EN, &wcd937x->status_mask)) {
|
||||
wcd_disable_irq(&wcd937x->irq_info,
|
||||
WCD937X_IRQ_HPHL_PDM_WD_INT);
|
||||
if (wcd937x->update_wcd_event)
|
||||
wcd937x->update_wcd_event(wcd937x->handle,
|
||||
if (wcd937x->update_wcd_event)
|
||||
wcd937x->update_wcd_event(wcd937x->handle,
|
||||
SLV_BOLERO_EVT_RX_MUTE,
|
||||
(WCD_RX1 << 0x10 | 0x1));
|
||||
}
|
||||
}
|
||||
break;
|
||||
case SND_SOC_DAPM_POST_PMD:
|
||||
if (!wcd937x->comp1_enable)
|
||||
|
|
@ -1082,10 +1098,12 @@ static int wcd937x_codec_enable_ear_pa(struct snd_soc_dapm_widget *w,
|
|||
snd_soc_component_update_bits(component,
|
||||
WCD937X_DIGITAL_PDM_WD_CTL2,
|
||||
0x05, 0x00);
|
||||
else
|
||||
else {
|
||||
snd_soc_component_update_bits(component,
|
||||
WCD937X_DIGITAL_PDM_WD_CTL0,
|
||||
0x17, 0x00);
|
||||
clear_bit(WCD_EAR_EN, &wcd937x->status_mask);
|
||||
}
|
||||
usleep_range(10000, 10010);
|
||||
/* disable EAR CnP FSM */
|
||||
snd_soc_component_update_bits(component,
|
||||
|
|
@ -1151,13 +1169,16 @@ static int wcd937x_enable_rx1(struct snd_soc_dapm_widget *w,
|
|||
wcd937x_rx_connect_port(component, COMP_L, true);
|
||||
break;
|
||||
case SND_SOC_DAPM_POST_PMD:
|
||||
wcd937x_rx_connect_port(component, HPH_L, false);
|
||||
if (wcd937x->comp1_enable)
|
||||
wcd937x_rx_connect_port(component, COMP_L, false);
|
||||
wcd937x_rx_clk_disable(component);
|
||||
snd_soc_component_update_bits(component,
|
||||
if (!test_bit(WCD_HPHL_EN, &wcd937x->status_mask) &&
|
||||
!test_bit(WCD_EAR_EN, &wcd937x->status_mask)) {
|
||||
wcd937x_rx_connect_port(component, HPH_L, false);
|
||||
if (wcd937x->comp1_enable)
|
||||
wcd937x_rx_connect_port(component, COMP_L, false);
|
||||
wcd937x_rx_clk_disable(component);
|
||||
snd_soc_component_update_bits(component,
|
||||
WCD937X_DIGITAL_CDC_DIG_CLK_CTL,
|
||||
0x01, 0x00);
|
||||
}
|
||||
break;
|
||||
};
|
||||
return 0;
|
||||
|
|
|
|||
Loading…
Reference in a new issue