Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b8e22c1f authored by Lars-Peter Clausen's avatar Lars-Peter Clausen Committed by Mark Brown
Browse files

ASoC: jack: Fix race in snd_soc_jack_add_gpios



The irq can fire as soon as it has been requested, thus all fields accessed
from within the irq handler must be initialized prior to requesting the irq.

Signed-off-by: default avatarLars-Peter Clausen <lars@metafoo.de>
Signed-off-by: default avatarMark Brown <broonie@opensource.wolfsonmicro.com>
parent 77ee09c6
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -221,6 +221,9 @@ int snd_soc_jack_add_gpios(struct snd_soc_jack *jack, int count,
		if (ret)
			goto err;

		INIT_WORK(&gpios[i].work, gpio_work);
		gpios[i].jack = jack;

		ret = request_irq(gpio_to_irq(gpios[i].gpio),
				gpio_handler,
				IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
@@ -234,9 +237,6 @@ int snd_soc_jack_add_gpios(struct snd_soc_jack *jack, int count,
		gpio_export(gpios[i].gpio, false);
#endif

		INIT_WORK(&gpios[i].work, gpio_work);
		gpios[i].jack = jack;

		/* Update initial jack status */
		snd_soc_jack_gpio_detect(&gpios[i]);
	}