ASoC: es8316: Handle optional IRQ assignment
authorCristian Ciocaltea <cristian.ciocaltea@collabora.com>
Tue, 28 Mar 2023 09:49:01 +0000 (12:49 +0300)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 11 May 2023 14:03:28 +0000 (23:03 +0900)
[ Upstream commit 39db65a0a17b54915b269d3685f253a4731f344c ]

The driver is able to work fine without relying on a mandatory interrupt
being assigned to the I2C device. This is only needed when making use of
the jack-detect support.

However, the following warning message is always emitted when there is
no such interrupt available:

  es8316 0-0011: Failed to get IRQ 0: -22

Do not attempt to request an IRQ if it is not available/valid. This also
ensures the rather misleading message is not displayed anymore.

Also note the IRQ validation relies on commit dab472eb931bc291 ("i2c /
ACPI: Use 0 to indicate that device does not have interrupt assigned").

Fixes: 822257661031 ("ASoC: es8316: Add jack-detect support")
Signed-off-by: Cristian Ciocaltea <cristian.ciocaltea@collabora.com>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Link: https://lore.kernel.org/r/20230328094901.50763-1-cristian.ciocaltea@collabora.com
Signed-off-by: Mark Brown <broonie@kernel.org>
Signed-off-by: Sasha Levin <sashal@kernel.org>
sound/soc/codecs/es8316.c

index 056c308..f7d7a9c 100644 (file)
@@ -842,12 +842,14 @@ static int es8316_i2c_probe(struct i2c_client *i2c_client)
        es8316->irq = i2c_client->irq;
        mutex_init(&es8316->lock);
 
-       ret = devm_request_threaded_irq(dev, es8316->irq, NULL, es8316_irq,
-                                       IRQF_TRIGGER_HIGH | IRQF_ONESHOT | IRQF_NO_AUTOEN,
-                                       "es8316", es8316);
-       if (ret) {
-               dev_warn(dev, "Failed to get IRQ %d: %d\n", es8316->irq, ret);
-               es8316->irq = -ENXIO;
+       if (es8316->irq > 0) {
+               ret = devm_request_threaded_irq(dev, es8316->irq, NULL, es8316_irq,
+                                               IRQF_TRIGGER_HIGH | IRQF_ONESHOT | IRQF_NO_AUTOEN,
+                                               "es8316", es8316);
+               if (ret) {
+                       dev_warn(dev, "Failed to get IRQ %d: %d\n", es8316->irq, ret);
+                       es8316->irq = -ENXIO;
+               }
        }
 
        return devm_snd_soc_register_component(&i2c_client->dev,