irqchip/imx-intmux: Move PM device over to irq domain
Move the reference to the device over to the irq domain. This allows the irq_chip structure to be directly used instead of taking a copy for each instance. Signed-off-by: Marc Zyngier <maz@kernel.org> Acked-by: Bartosz Golaszewski <brgl@bgdev.pl> Link: https://lore.kernel.org/r/20220201120310.878267-6-maz@kernel.org
This commit is contained in:
parent
c3ec838e3a
commit
fb140b9c0f
@ -61,7 +61,6 @@
|
|||||||
#define CHAN_MAX_NUM 0x8
|
#define CHAN_MAX_NUM 0x8
|
||||||
|
|
||||||
struct intmux_irqchip_data {
|
struct intmux_irqchip_data {
|
||||||
struct irq_chip chip;
|
|
||||||
u32 saved_reg;
|
u32 saved_reg;
|
||||||
int chanidx;
|
int chanidx;
|
||||||
int irq;
|
int irq;
|
||||||
@ -114,7 +113,7 @@ static void imx_intmux_irq_unmask(struct irq_data *d)
|
|||||||
raw_spin_unlock_irqrestore(&data->lock, flags);
|
raw_spin_unlock_irqrestore(&data->lock, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct irq_chip imx_intmux_irq_chip = {
|
static struct irq_chip imx_intmux_irq_chip __ro_after_init = {
|
||||||
.name = "intmux",
|
.name = "intmux",
|
||||||
.irq_mask = imx_intmux_irq_mask,
|
.irq_mask = imx_intmux_irq_mask,
|
||||||
.irq_unmask = imx_intmux_irq_unmask,
|
.irq_unmask = imx_intmux_irq_unmask,
|
||||||
@ -126,7 +125,7 @@ static int imx_intmux_irq_map(struct irq_domain *h, unsigned int irq,
|
|||||||
struct intmux_irqchip_data *data = h->host_data;
|
struct intmux_irqchip_data *data = h->host_data;
|
||||||
|
|
||||||
irq_set_chip_data(irq, data);
|
irq_set_chip_data(irq, data);
|
||||||
irq_set_chip_and_handler(irq, &data->chip, handle_level_irq);
|
irq_set_chip_and_handler(irq, &imx_intmux_irq_chip, handle_level_irq);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -241,8 +240,6 @@ static int imx_intmux_probe(struct platform_device *pdev)
|
|||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < channum; i++) {
|
for (i = 0; i < channum; i++) {
|
||||||
data->irqchip_data[i].chip = imx_intmux_irq_chip;
|
|
||||||
data->irqchip_data[i].chip.parent_device = &pdev->dev;
|
|
||||||
data->irqchip_data[i].chanidx = i;
|
data->irqchip_data[i].chanidx = i;
|
||||||
|
|
||||||
data->irqchip_data[i].irq = irq_of_parse_and_map(np, i);
|
data->irqchip_data[i].irq = irq_of_parse_and_map(np, i);
|
||||||
@ -260,6 +257,7 @@ static int imx_intmux_probe(struct platform_device *pdev)
|
|||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
data->irqchip_data[i].domain = domain;
|
data->irqchip_data[i].domain = domain;
|
||||||
|
irq_domain_set_pm_device(domain, &pdev->dev);
|
||||||
|
|
||||||
/* disable all interrupt sources of this channel firstly */
|
/* disable all interrupt sources of this channel firstly */
|
||||||
writel_relaxed(0, data->regs + CHANIER(i));
|
writel_relaxed(0, data->regs + CHANIER(i));
|
||||||
|
Loading…
Reference in New Issue
Block a user