Skip to content

Commit c923e77

Browse files
charleskeepaxbroonie
authored andcommitted
ASoC: cs42l43: Add shared IRQ flag for shutters
The microphone and speaker shutters on cs42l43 can be configured to trigger from the same GPIO, in this case the current code returns an error as we attempt to request two IRQ handlers for the same IRQ. Fix this by always requesting the shutter IRQs with the IRQF_SHARED flag. Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com> Link: https://lore.kernel.org/r/20230915144300.120100-1-ckeepax@opensource.cirrus.com Signed-off-by: Mark Brown <broonie@kernel.org>
1 parent b19a573 commit c923e77

File tree

1 file changed

+8
-6
lines changed

1 file changed

+8
-6
lines changed

sound/soc/codecs/cs42l43.c

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2077,7 +2077,8 @@ static const struct cs42l43_irq cs42l43_irqs[] = {
20772077

20782078
static int cs42l43_request_irq(struct cs42l43_codec *priv,
20792079
struct irq_domain *dom, const char * const name,
2080-
unsigned int irq, irq_handler_t handler)
2080+
unsigned int irq, irq_handler_t handler,
2081+
unsigned long flags)
20812082
{
20822083
int ret;
20832084

@@ -2087,8 +2088,8 @@ static int cs42l43_request_irq(struct cs42l43_codec *priv,
20872088

20882089
dev_dbg(priv->dev, "Request IRQ %d for %s\n", ret, name);
20892090

2090-
ret = devm_request_threaded_irq(priv->dev, ret, NULL, handler, IRQF_ONESHOT,
2091-
name, priv);
2091+
ret = devm_request_threaded_irq(priv->dev, ret, NULL, handler,
2092+
IRQF_ONESHOT | flags, name, priv);
20922093
if (ret)
20932094
return dev_err_probe(priv->dev, ret, "Failed to request IRQ %s\n", name);
20942095

@@ -2124,11 +2125,11 @@ static int cs42l43_shutter_irq(struct cs42l43_codec *priv,
21242125
return 0;
21252126
}
21262127

2127-
ret = cs42l43_request_irq(priv, dom, close_name, close_irq, handler);
2128+
ret = cs42l43_request_irq(priv, dom, close_name, close_irq, handler, IRQF_SHARED);
21282129
if (ret)
21292130
return ret;
21302131

2131-
return cs42l43_request_irq(priv, dom, open_name, open_irq, handler);
2132+
return cs42l43_request_irq(priv, dom, open_name, open_irq, handler, IRQF_SHARED);
21322133
}
21332134

21342135
static int cs42l43_codec_probe(struct platform_device *pdev)
@@ -2178,7 +2179,8 @@ static int cs42l43_codec_probe(struct platform_device *pdev)
21782179

21792180
for (i = 0; i < ARRAY_SIZE(cs42l43_irqs); i++) {
21802181
ret = cs42l43_request_irq(priv, dom, cs42l43_irqs[i].name,
2181-
cs42l43_irqs[i].irq, cs42l43_irqs[i].handler);
2182+
cs42l43_irqs[i].irq,
2183+
cs42l43_irqs[i].handler, 0);
21822184
if (ret)
21832185
goto err_pm;
21842186
}

0 commit comments

Comments
 (0)