ASoC: rt5651: Fix workqueue cancel vs irq free race on remove
authorHans de Goede <hdegoede@redhat.com>
Wed, 4 Jul 2018 22:59:31 +0000 (00:59 +0200)
committerMark Brown <broonie@kernel.org>
Tue, 10 Jul 2018 17:49:24 +0000 (18:49 +0100)
commit8d2d7bcdc1645dc243f7735278675b083c0e506c
tree52dfef63043f2c9d1e05a9ff3ccc48963616fc71
parent5f6fb23d2e114506ddb8437a3e65f4a20d081013
ASoC: rt5651: Fix workqueue cancel vs irq free race on remove

On removal we must free the IRQ *before* cancelling the jack-detect work,
so that the jack-detect work cannot be rescheduled by the IRQ.

Before this commit we were cancelling the jack-detect work from the
driver remove callback, while relying on devm to free the IRQ, which
happens after the remove callback.

This is the wrong order. This commit uses a devm-action to register
a devm callback which cancels the work, before requesting the IRQ
(devm tears things down in reverse order). This also allows us to
remove the now empty remove driver callback.

Cc: Carlo Caione <carlo@endlessm.com>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/codecs/rt5651.c