Skip to content

Commit 421f162

Browse files
author
Marc Zyngier
committed
irqchip/mvebu-pic: Switch to dynamic chip name output
Instead of overriding the name field, track the corresponding device and use the relevant callback to output its name. This allows us to make the irq_chip structure const. Signed-off-by: Marc Zyngier <maz@kernel.org> Reviewed-by: Gregory CLEMENT <gregory.clement@bootlin.com> Acked-by: Linus Walleij <linus.walleij@linaro.org> Link: https://lore.kernel.org/r/20220209162607.1118325-6-maz@kernel.org
1 parent 3655502 commit 421f162

1 file changed

Lines changed: 18 additions & 10 deletions

File tree

drivers/irqchip/irq-mvebu-pic.c

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include <linux/module.h>
1919
#include <linux/of_irq.h>
2020
#include <linux/platform_device.h>
21+
#include <linux/seq_file.h>
2122

2223
#define PIC_CAUSE 0x0
2324
#define PIC_MASK 0x4
@@ -29,7 +30,7 @@ struct mvebu_pic {
2930
void __iomem *base;
3031
u32 parent_irq;
3132
struct irq_domain *domain;
32-
struct irq_chip irq_chip;
33+
struct platform_device *pdev;
3334
};
3435

3536
static void mvebu_pic_reset(struct mvebu_pic *pic)
@@ -66,15 +67,28 @@ static void mvebu_pic_unmask_irq(struct irq_data *d)
6667
writel(reg, pic->base + PIC_MASK);
6768
}
6869

70+
static void mvebu_pic_print_chip(struct irq_data *d, struct seq_file *p)
71+
{
72+
struct mvebu_pic *pic = irq_data_get_irq_chip_data(d);
73+
74+
seq_printf(p, dev_name(&pic->pdev->dev));
75+
}
76+
77+
static const struct irq_chip mvebu_pic_chip = {
78+
.irq_mask = mvebu_pic_mask_irq,
79+
.irq_unmask = mvebu_pic_unmask_irq,
80+
.irq_eoi = mvebu_pic_eoi_irq,
81+
.irq_print_chip = mvebu_pic_print_chip,
82+
};
83+
6984
static int mvebu_pic_irq_map(struct irq_domain *domain, unsigned int virq,
7085
irq_hw_number_t hwirq)
7186
{
7287
struct mvebu_pic *pic = domain->host_data;
7388

7489
irq_set_percpu_devid(virq);
7590
irq_set_chip_data(virq, pic);
76-
irq_set_chip_and_handler(virq, &pic->irq_chip,
77-
handle_percpu_devid_irq);
91+
irq_set_chip_and_handler(virq, &mvebu_pic_chip, handle_percpu_devid_irq);
7892
irq_set_status_flags(virq, IRQ_LEVEL);
7993
irq_set_probe(virq);
8094

@@ -120,22 +134,16 @@ static int mvebu_pic_probe(struct platform_device *pdev)
120134
{
121135
struct device_node *node = pdev->dev.of_node;
122136
struct mvebu_pic *pic;
123-
struct irq_chip *irq_chip;
124137

125138
pic = devm_kzalloc(&pdev->dev, sizeof(struct mvebu_pic), GFP_KERNEL);
126139
if (!pic)
127140
return -ENOMEM;
128141

142+
pic->pdev = pdev;
129143
pic->base = devm_platform_ioremap_resource(pdev, 0);
130144
if (IS_ERR(pic->base))
131145
return PTR_ERR(pic->base);
132146

133-
irq_chip = &pic->irq_chip;
134-
irq_chip->name = dev_name(&pdev->dev);
135-
irq_chip->irq_mask = mvebu_pic_mask_irq;
136-
irq_chip->irq_unmask = mvebu_pic_unmask_irq;
137-
irq_chip->irq_eoi = mvebu_pic_eoi_irq;
138-
139147
pic->parent_irq = irq_of_parse_and_map(node, 0);
140148
if (pic->parent_irq <= 0) {
141149
dev_err(&pdev->dev, "Failed to parse parent interrupt\n");

0 commit comments

Comments
 (0)