[PATCH 1/2] ASoC: cpcap: Remove modem-specific voice call support
From: Ivaylo Dimitrov
Date: Wed Aug 05 2026 - 10:47:53 EST
Revert commit 0dedbde5062d ("ASoC: cpcap: Implement set_tdm_slot for
voice call support").
The reverted implementation was added to support a modem driver that
directly locates and configures the codec DAI using snd_soc_find_dai()
together with snd_soc_dai_set_sysclk(), snd_soc_dai_set_fmt() and
snd_soc_dai_set_tdm_slot().
The DAI configuration should instead be provided by the ASoC DAI link,
allowing the machine driver or DT to describe the interface rather than
having a client driver configure the codec directly.
Remove the ad hoc voice call implementation.
Signed-off-by: Ivaylo Dimitrov <ivo.g.dimitrov.75@xxxxxxxxx>
---
sound/soc/codecs/cpcap.c | 127 +--------------------------------------
1 file changed, 2 insertions(+), 125 deletions(-)
diff --git a/sound/soc/codecs/cpcap.c b/sound/soc/codecs/cpcap.c
index 6b80c455b074..987c63fc5fa4 100644
--- a/sound/soc/codecs/cpcap.c
+++ b/sound/soc/codecs/cpcap.c
@@ -26,14 +26,6 @@
/* Register 9 - CPCAP_REG_INTS2 --- Interrupt Sense 2 */
#define CPCAP_BIT_PTT_S 11 /* Push To Talk */
-/* Register 512 CPCAP_REG_VAUDIOC --- Audio Regulator and Bias Voltage */
-#define CPCAP_BIT_AUDIO_LOW_PWR 6
-#define CPCAP_BIT_AUD_LOWPWR_SPEED 5
-#define CPCAP_BIT_VAUDIOPRISTBY 4
-#define CPCAP_BIT_VAUDIO_MODE1 2
-#define CPCAP_BIT_VAUDIO_MODE0 1
-#define CPCAP_BIT_V_AUDIO_EN 0
-
/* Register 513 CPCAP_REG_CC --- CODEC */
#define CPCAP_BIT_CDC_CLK2 15
#define CPCAP_BIT_CDC_CLK1 14
@@ -239,7 +231,6 @@ struct cpcap_reg_info {
};
static const struct cpcap_reg_info cpcap_default_regs[] = {
- { CPCAP_REG_VAUDIOC, 0x003F, 0x0000 },
{ CPCAP_REG_CC, 0xFFFF, 0x0000 },
{ CPCAP_REG_CC, 0xFFFF, 0x0000 },
{ CPCAP_REG_CDI, 0xBFFF, 0x0000 },
@@ -1391,121 +1382,8 @@ static int cpcap_voice_set_dai_fmt(struct snd_soc_dai *codec_dai,
return 0;
}
-
-/*
- * Configure codec for voice call if requested.
- *
- * We can configure most with snd_soc_dai_set_sysclk(), snd_soc_dai_set_fmt()
- * and snd_soc_dai_set_tdm_slot(). This function configures the rest of the
- * cpcap related hardware as CPU is not involved in the voice call.
- */
-static int cpcap_voice_call(struct cpcap_audio *cpcap, struct snd_soc_dai *dai,
- bool voice_call)
-{
- int mask, err;
-
- /* Modem to codec VAUDIO_MODE1 */
- mask = BIT(CPCAP_BIT_VAUDIO_MODE1);
- err = regmap_update_bits(cpcap->regmap, CPCAP_REG_VAUDIOC,
- mask, voice_call ? mask : 0);
- if (err)
- return err;
-
- /* Clear MIC1_MUX for call */
- mask = BIT(CPCAP_BIT_MIC1_MUX);
- err = regmap_update_bits(cpcap->regmap, CPCAP_REG_TXI,
- mask, voice_call ? 0 : mask);
- if (err)
- return err;
-
- /* Set MIC2_MUX for call */
- mask = BIT(CPCAP_BIT_MB_ON1L) | BIT(CPCAP_BIT_MB_ON1R) |
- BIT(CPCAP_BIT_MIC2_MUX) | BIT(CPCAP_BIT_MIC2_PGA_EN);
- err = regmap_update_bits(cpcap->regmap, CPCAP_REG_TXI,
- mask, voice_call ? mask : 0);
- if (err)
- return err;
-
- /* Enable LDSP for call */
- mask = BIT(CPCAP_BIT_A2_LDSP_L_EN) | BIT(CPCAP_BIT_A2_LDSP_R_EN);
- err = regmap_update_bits(cpcap->regmap, CPCAP_REG_RXOA,
- mask, voice_call ? mask : 0);
- if (err)
- return err;
-
- /* Enable CPCAP_BIT_PGA_CDC_EN for call */
- mask = BIT(CPCAP_BIT_PGA_CDC_EN);
- err = regmap_update_bits(cpcap->regmap, CPCAP_REG_RXCOA,
- mask, voice_call ? mask : 0);
- if (err)
- return err;
-
- /* Unmute voice for call */
- if (dai) {
- err = snd_soc_dai_digital_mute(dai, !voice_call,
- SNDRV_PCM_STREAM_PLAYBACK);
- if (err)
- return err;
- }
-
- /* Set modem to codec mic CDC and HPF for call */
- mask = BIT(CPCAP_BIT_MIC2_CDC_EN) | BIT(CPCAP_BIT_CDC_EN_RX) |
- BIT(CPCAP_BIT_AUDOHPF_1) | BIT(CPCAP_BIT_AUDOHPF_0) |
- BIT(CPCAP_BIT_AUDIHPF_1) | BIT(CPCAP_BIT_AUDIHPF_0);
- err = regmap_update_bits(cpcap->regmap, CPCAP_REG_CC,
- mask, voice_call ? mask : 0);
- if (err)
- return err;
-
- /* Enable modem to codec CDC for call*/
- mask = BIT(CPCAP_BIT_CDC_CLK_EN);
- err = regmap_update_bits(cpcap->regmap, CPCAP_REG_CDI,
- mask, voice_call ? mask : 0);
-
- return err;
-}
-
-static int cpcap_voice_set_tdm_slot(struct snd_soc_dai *dai,
- unsigned int tx_mask, unsigned int rx_mask,
- int slots, int slot_width)
-{
- struct snd_soc_component *component = dai->component;
- struct cpcap_audio *cpcap = snd_soc_component_get_drvdata(component);
- int err, ts_mask, mask;
- bool voice_call;
-
- /*
- * Primitive test for voice call, probably needs more checks
- * later on for 16-bit calls detected, Bluetooth headset etc.
- */
- if (tx_mask == 0 && rx_mask == 1 && slot_width == 8)
- voice_call = true;
- else
- voice_call = false;
-
- ts_mask = 0x7 << CPCAP_BIT_MIC2_TIMESLOT0;
- ts_mask |= 0x7 << CPCAP_BIT_MIC1_RX_TIMESLOT0;
-
- mask = (tx_mask & 0x7) << CPCAP_BIT_MIC2_TIMESLOT0;
- mask |= (rx_mask & 0x7) << CPCAP_BIT_MIC1_RX_TIMESLOT0;
-
- err = regmap_update_bits(cpcap->regmap, CPCAP_REG_CDI,
- ts_mask, mask);
- if (err)
- return err;
-
- err = cpcap_set_samprate(cpcap, CPCAP_DAI_VOICE, slot_width * 1000);
- if (err)
- return err;
-
- err = cpcap_voice_call(cpcap, dai, voice_call);
- if (err)
- return err;
-
- return 0;
-}
-
-static int cpcap_voice_set_mute(struct snd_soc_dai *dai, int mute, int direction)
+static int cpcap_voice_set_mute(struct snd_soc_dai *dai,
+ int mute, int direction)
{
struct snd_soc_component *component = dai->component;
struct cpcap_audio *cpcap = snd_soc_component_get_drvdata(component);
@@ -1526,7 +1404,6 @@ static const struct snd_soc_dai_ops cpcap_dai_voice_ops = {
.hw_params = cpcap_voice_hw_params,
.set_sysclk = cpcap_voice_set_dai_sysclk,
.set_fmt = cpcap_voice_set_dai_fmt,
- .set_tdm_slot = cpcap_voice_set_tdm_slot,
.mute_stream = cpcap_voice_set_mute,
.no_capture_mute = 1,
};
--
2.39.5