]> git.baikalelectronics.ru Git - kernel.git/commit
ASoC: cs42l42: Fix WARN in remove() if running without an interrupt
authorRichard Fitzgerald <rf@opensource.cirrus.com>
Fri, 15 Oct 2021 13:36:18 +0000 (14:36 +0100)
committerMark Brown <broonie@kernel.org>
Fri, 15 Oct 2021 15:14:23 +0000 (16:14 +0100)
commitea8194934e459d9e4ac42ccc4b5a61870e90fa43
tree464272722f7ec93f417b48eb694a439638e8e59e
parenta6cc317b3718cb45c007adb90d5475f1546cd4de
ASoC: cs42l42: Fix WARN in remove() if running without an interrupt

The driver must free the IRQ in remove() to prevent the potential race
where an IRQ starts to be handled while the driver is being removed but
devres has not yet called free_irq(). However, the driver can run without
an interrupt but devm_free_irq() will hit a WARN() if no devres-managed
interrupt was ever created.

Fix this by only attempting to create the interrupt handler if the hardware
config specified an interrupt, and failing probe() if the interrupt could
not be created. This means that in cs42l42_remove() an interrupt must have
been registered if the irq number is valid and therefore it is safe to call
devm_free_irq().

Signed-off-by: Richard Fitzgerald <rf@opensource.cirrus.com>
Link: https://lore.kernel.org/r/20211015133619.4698-16-rf@opensource.cirrus.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/codecs/cs42l42.c