| From 95c6d008740c05006bc4f3511da48c7897316d50 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Tue, 28 Mar 2023 12:49:01 +0300 |
| Subject: ASoC: es8316: Handle optional IRQ assignment |
| |
| From: Cristian Ciocaltea <cristian.ciocaltea@collabora.com> |
| |
| [ 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 | 14 ++++++++------ |
| 1 file changed, 8 insertions(+), 6 deletions(-) |
| |
| diff --git a/sound/soc/codecs/es8316.c b/sound/soc/codecs/es8316.c |
| index 056c3082fe02c..f7d7a9c91e04c 100644 |
| --- a/sound/soc/codecs/es8316.c |
| +++ b/sound/soc/codecs/es8316.c |
| @@ -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, |
| -- |
| 2.39.2 |
| |