[PATCH 1/2] ASoC: cpcap: Remove modem-specific voice call support

Ivaylo Dimitrov <[email protected]> Wed, 5 Aug 2026 17:44:33 +0300
Newsgroups org.kernel.vger.linux-sound,org.kernel.vger.linux-kernel
Message-ID <[email protected]>
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 <[email protected]>
---
 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