]> git.hungrycats.org Git - linux/commitdiff
ASoC: cpcap: Remove modem-specific voice call support
authorIvaylo Dimitrov <ivo.g.dimitrov.75@gmail.com>
Wed, 5 Aug 2026 14:44:33 +0000 (17:44 +0300)
committerMark Brown <broonie@kernel.org>
Wed, 5 Aug 2026 23:35:26 +0000 (00:35 +0100)
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@gmail.com>
Link: https://patch.msgid.link/20260805144434.1290261-2-ivo.g.dimitrov.75@gmail.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/codecs/cpcap.c

index 6b80c455b07471eb89286a7dbb4d75ea1cdd567c..987c63fc5fa4dffb4da64466018dddec38116869 100644 (file)
 /* 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,
 };