OSDN Git Service

ASoC: cs42l42: Check jack status before reporting button events
authorLucas Tanure <tanureal@opensource.cirrus.com>
Tue, 25 May 2021 09:08:22 +0000 (10:08 +0100)
committerMark Brown <broonie@sirena.org.uk>
Tue, 25 May 2021 15:45:05 +0000 (16:45 +0100)
Jack must be connected before reporting button events and
if the jack is disconnected button release must be reported

Signed-off-by: Lucas Tanure <tanureal@opensource.cirrus.com>
Reviewed-by: Richard Fitzgerald <rf@opensource.cirrus.com>
Message-Id: <20210525090822.64577-4-tanureal@opensource.cirrus.com>
Signed-off-by: Mark Brown <broonie@sirena.org.uk>
sound/soc/codecs/cs42l42.c

index 8260de8..eff013f 100644 (file)
@@ -1478,6 +1478,10 @@ static irqreturn_t cs42l42_irq_thread(int irq, void *data)
                                default:
                                        break;
                                }
+                               snd_soc_jack_report(cs42l42->jack, 0,
+                                                   SND_JACK_BTN_0 | SND_JACK_BTN_1 |
+                                                   SND_JACK_BTN_2 | SND_JACK_BTN_3);
+
                                dev_dbg(component->dev, "Unplug event\n");
                        }
                        break;
@@ -1489,7 +1493,7 @@ static irqreturn_t cs42l42_irq_thread(int irq, void *data)
        }
 
        /* Check button detect status */
-       if ((~masks[7]) & irq_params_table[7].mask) {
+       if (cs42l42->plug_state == CS42L42_TS_PLUG && ((~masks[7]) & irq_params_table[7].mask)) {
                if (!(current_button_status &
                        CS42L42_M_HSBIAS_HIZ_MASK)) {