irqchip/imx-intmux: Move PM device over to irq domain
authorMarc Zyngier <maz@kernel.org>
Tue, 1 Feb 2022 12:03:03 +0000 (12:03 +0000)
committerMarc Zyngier <maz@kernel.org>
Wed, 9 Feb 2022 13:36:53 +0000 (13:36 +0000)
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
drivers/irqchip/irq-imx-intmux.c

index e86ff74..80aaea8 100644 (file)
@@ -61,7 +61,6 @@
 #define CHAN_MAX_NUM           0x8
 
 struct intmux_irqchip_data {
-       struct irq_chip         chip;
        u32                     saved_reg;
        int                     chanidx;
        int                     irq;
@@ -114,7 +113,7 @@ static void imx_intmux_irq_unmask(struct irq_data *d)
        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",
        .irq_mask       = imx_intmux_irq_mask,
        .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;
 
        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;
 }
@@ -241,8 +240,6 @@ static int imx_intmux_probe(struct platform_device *pdev)
        }
 
        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].irq = irq_of_parse_and_map(np, i);
@@ -260,6 +257,7 @@ static int imx_intmux_probe(struct platform_device *pdev)
                        goto out;
                }
                data->irqchip_data[i].domain = domain;
+               irq_domain_set_pm_device(domain, &pdev->dev);
 
                /* disable all interrupt sources of this channel firstly */
                writel_relaxed(0, data->regs + CHANIER(i));