ASoC: da7219: Correct the process of setting up Gnd switch in AAD
authorDavid Rau <David.Rau.opensource@dm.renesas.com>
Tue, 17 Oct 2023 02:12:58 +0000 (10:12 +0800)
committerMark Brown <broonie@kernel.org>
Tue, 17 Oct 2023 11:59:13 +0000 (12:59 +0100)
Enable Gnd switch to improve stability when Jack insert event
occurs, and then disable Gnd switch after Jack type detection
is finished.

Signed-off-by: David Rau <David.Rau.opensource@dm.renesas.com>
Link: https://lore.kernel.org/r/20231017021258.5929-1-David.Rau.opensource@dm.renesas.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/codecs/da7219-aad.c

index 581b334..3bbe850 100644 (file)
@@ -59,9 +59,6 @@ static void da7219_aad_btn_det_work(struct work_struct *work)
        bool micbias_up = false;
        int retries = 0;
 
-       /* Disable ground switch */
-       snd_soc_component_update_bits(component, 0xFB, 0x01, 0x00);
-
        /* Drive headphones/lineout */
        snd_soc_component_update_bits(component, DA7219_HP_L_CTRL,
                            DA7219_HP_L_AMP_OE_MASK,
@@ -155,9 +152,6 @@ static void da7219_aad_hptest_work(struct work_struct *work)
                tonegen_freq_hptest = cpu_to_le16(DA7219_AAD_HPTEST_RAMP_FREQ_INT_OSC);
        }
 
-       /* Disable ground switch */
-       snd_soc_component_update_bits(component, 0xFB, 0x01, 0x00);
-
        /* Ensure gain ramping at fastest rate */
        gain_ramp_ctrl = snd_soc_component_read(component, DA7219_GAIN_RAMP_CTRL);
        snd_soc_component_write(component, DA7219_GAIN_RAMP_CTRL, DA7219_GAIN_RAMP_RATE_X8);
@@ -421,6 +415,11 @@ static irqreturn_t da7219_aad_irq_thread(int irq, void *data)
                         * handle a removal, and we can check at the end of
                         * hptest if we have a valid result or not.
                         */
+
+                       cancel_delayed_work_sync(&da7219_aad->jack_det_work);
+                       /* Disable ground switch */
+                       snd_soc_component_update_bits(component, 0xFB, 0x01, 0x00);
+
                        if (statusa & DA7219_JACK_TYPE_STS_MASK) {
                                report |= SND_JACK_HEADSET;
                                mask |= SND_JACK_HEADSET | SND_JACK_LINEOUT;