]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
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)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 8 Nov 2023 13:09:01 +0000 (14:09 +0100)
[ Upstream commit e8ecffd9962fe051d53a0761921b26d653b3df6b ]

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>
Signed-off-by: Sasha Levin <sashal@kernel.org>
sound/soc/codecs/da7219-aad.c

index 581b334a6631d72de5818d035cb1fbc331173f18..3bbe850916493249522c10e5bad4256112344efd 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;