* [PATCHv2] crypto: talitos: Use platform_get_irq() to retrieve interrupt
@ 2026-07-29 3:02 Rosen Penev
0 siblings, 0 replies; only message in thread
From: Rosen Penev @ 2026-07-29 3:02 UTC (permalink / raw)
To: linux-crypto; +Cc: Herbert Xu, David S. Miller, open list
Remove the need to call irq_dispose_mapping as needed by
irq_of_parse_and_map().
Simplify the function as a result. No need for gotos anymore.
Add a missing free_irq.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
v2: change irq checks as a result
drivers/crypto/talitos.c | 30 +++++++++++++-----------------
1 file changed, 13 insertions(+), 17 deletions(-)
diff --git a/drivers/crypto/talitos.c b/drivers/crypto/talitos.c
index 3a3fd21d2c4d..fa96b6bf17e3 100644
--- a/drivers/crypto/talitos.c
+++ b/drivers/crypto/talitos.c
@@ -191,7 +191,7 @@ static int reset_device(struct device *dev)
&& --timeout)
cpu_relax();
- if (priv->irq[1]) {
+ if (priv->irq[1] > 0) {
mcr = TALITOS_MCR_RCA1 | TALITOS_MCR_RCA3;
setbits32(priv->reg + TALITOS_MCR, mcr);
}
@@ -3241,13 +3241,11 @@ static void talitos_remove(struct platform_device *ofdev)
talitos_unregister_rng(dev);
for (i = 0; i < 2; i++)
- if (priv->irq[i]) {
+ if (priv->irq[i] > 0)
free_irq(priv->irq[i], dev);
- irq_dispose_mapping(priv->irq[i]);
- }
tasklet_kill(&priv->done_task[0]);
- if (priv->irq[1])
+ if (priv->irq[1] > 0)
tasklet_kill(&priv->done_task[1]);
}
@@ -3353,26 +3351,26 @@ static struct talitos_crypto_alg *talitos_alg_alloc(struct device *dev,
static int talitos_probe_irq(struct platform_device *ofdev)
{
struct device *dev = &ofdev->dev;
- struct device_node *np = ofdev->dev.of_node;
struct talitos_private *priv = dev_get_drvdata(dev);
int err;
bool is_sec1 = has_ftr_sec1(priv);
- priv->irq[0] = irq_of_parse_and_map(np, 0);
- if (!priv->irq[0]) {
- dev_err(dev, "failed to map irq\n");
- return -EINVAL;
- }
+ priv->irq[0] = platform_get_irq(ofdev, 0);
+ if (priv->irq[0] < 0)
+ return priv->irq[0];
+
if (is_sec1) {
err = request_irq(priv->irq[0], talitos1_interrupt_4ch, 0,
dev_driver_string(dev), dev);
goto primary_out;
}
- priv->irq[1] = irq_of_parse_and_map(np, 1);
+ priv->irq[1] = platform_get_irq_optional(ofdev, 1);
+ if (priv->irq[1] == -EPROBE_DEFER)
+ return priv->irq[1];
/* get the primary irq line */
- if (!priv->irq[1]) {
+ if (priv->irq[1] < 0) {
err = request_irq(priv->irq[0], talitos2_interrupt_4ch, 0,
dev_driver_string(dev), dev);
goto primary_out;
@@ -3388,7 +3386,6 @@ static int talitos_probe_irq(struct platform_device *ofdev)
dev_driver_string(dev), dev);
if (err) {
dev_err(dev, "failed to request secondary irq\n");
- irq_dispose_mapping(priv->irq[1]);
priv->irq[1] = 0;
}
@@ -3397,7 +3394,6 @@ static int talitos_probe_irq(struct platform_device *ofdev)
primary_out:
if (err) {
dev_err(dev, "failed to request primary irq\n");
- irq_dispose_mapping(priv->irq[0]);
priv->irq[0] = 0;
}
@@ -3498,7 +3494,7 @@ static int talitos_probe(struct platform_device *ofdev)
tasklet_init(&priv->done_task[0], talitos1_done_4ch,
(unsigned long)dev);
} else {
- if (priv->irq[1]) {
+ if (priv->irq[1] > 0) {
tasklet_init(&priv->done_task[0], talitos2_done_ch0_2,
(unsigned long)dev);
tasklet_init(&priv->done_task[1], talitos2_done_ch1_3,
@@ -3516,7 +3512,7 @@ static int talitos_probe(struct platform_device *ofdev)
for (i = 0; i < priv->num_channels; i++) {
priv->chan[i].reg = priv->reg + stride * (i + 1);
- if (!priv->irq[1] || !(i & 1))
+ if (priv->irq[1] < 0 || !(i & 1))
priv->chan[i].reg += TALITOS_CH_BASE_OFFSET;
spin_lock_init(&priv->chan[i].head_lock);
--
2.55.0
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2026-07-29 3:02 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-29 3:02 [PATCHv2] crypto: talitos: Use platform_get_irq() to retrieve interrupt Rosen Penev
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.