Commit add679d2 authored by Marc Zyngier's avatar Marc Zyngier
Browse files

Merge branch irq/parent_device into irq/irqchip-next



* irq/parent_device:
  : .
  : Move irq_chip::parent_device to irq_domain::dev to track the
  : PM state of the device implementing the irqchip.
  : .
  genirq: Kill irq_chip::parent_device
  pinctrl: starfive: Move PM device over to irq domain
  pinctrl: npcm: Fix broken references to chip->parent_device
  gpio: tpmx86: Move PM device over to irq domain
  gpio: rcar: Move PM device over to irq domain
  gpio: omap: Move PM device over to irq domain
  gpio: mt7621: Kill parent_device usage
  irqchip/imx-intmux: Move PM device over to irq domain
  irqchip/renesas-irqc: Move PM device over to irq domain
  irqchip/renesas-intc-irqpin: Move PM device over to irq domain
  irqchip/gic: Move PM device over to irq domain
  genirq: Allow the PM device to originate from irq domain

Signed-off-by: default avatarMarc Zyngier <maz@kernel.org>
parents 689daef6 beb06221
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -239,7 +239,6 @@ mediatek_gpio_bank_probe(struct device *dev, int bank)

	rg->chip.offset = bank * MTK_BANK_WIDTH;
	rg->irq_chip.name = dev_name(dev);
	rg->irq_chip.parent_device = dev;
	rg->irq_chip.irq_unmask = mediatek_gpio_irq_unmask;
	rg->irq_chip.irq_mask = mediatek_gpio_irq_mask;
	rg->irq_chip.irq_mask_ack = mediatek_gpio_irq_mask;
+4 −3
Original line number Diff line number Diff line
@@ -986,7 +986,8 @@ static void omap_gpio_mod_init(struct gpio_bank *bank)
		writel_relaxed(0, base + bank->regs->ctrl);
}

static int omap_gpio_chip_init(struct gpio_bank *bank, struct irq_chip *irqc)
static int omap_gpio_chip_init(struct gpio_bank *bank, struct irq_chip *irqc,
			       struct device *pm_dev)
{
	struct gpio_irq_chip *irq;
	static int gpio;
@@ -1052,6 +1053,7 @@ static int omap_gpio_chip_init(struct gpio_bank *bank, struct irq_chip *irqc)
	if (ret)
		return dev_err_probe(bank->chip.parent, ret, "Could not register gpio chip\n");

	irq_domain_set_pm_device(bank->chip.irq.domain, pm_dev);
	ret = devm_request_irq(bank->chip.parent, bank->irq,
			       omap_gpio_irq_handler,
			       0, dev_name(bank->chip.parent), bank);
@@ -1402,7 +1404,6 @@ static int omap_gpio_probe(struct platform_device *pdev)
	irqc->irq_bus_sync_unlock = gpio_irq_bus_sync_unlock,
	irqc->name = dev_name(&pdev->dev);
	irqc->flags = IRQCHIP_MASK_ON_SUSPEND;
	irqc->parent_device = dev;

	bank->irq = platform_get_irq(pdev, 0);
	if (bank->irq <= 0) {
@@ -1466,7 +1467,7 @@ static int omap_gpio_probe(struct platform_device *pdev)

	omap_gpio_mod_init(bank);

	ret = omap_gpio_chip_init(bank, irqc);
	ret = omap_gpio_chip_init(bank, irqc, dev);
	if (ret) {
		pm_runtime_put_sync(dev);
		pm_runtime_disable(dev);
+1 −1
Original line number Diff line number Diff line
@@ -530,7 +530,6 @@ static int gpio_rcar_probe(struct platform_device *pdev)

	irq_chip = &p->irq_chip;
	irq_chip->name = "gpio-rcar";
	irq_chip->parent_device = dev;
	irq_chip->irq_mask = gpio_rcar_irq_disable;
	irq_chip->irq_unmask = gpio_rcar_irq_enable;
	irq_chip->irq_set_type = gpio_rcar_irq_set_type;
@@ -552,6 +551,7 @@ static int gpio_rcar_probe(struct platform_device *pdev)
		goto err0;
	}

	irq_domain_set_pm_device(gpio_chip->irq.domain, dev);
	ret = devm_request_irq(dev, p->irq_parent, gpio_rcar_irq_handler,
			       IRQF_SHARED, name, p);
	if (ret) {
+2 −1
Original line number Diff line number Diff line
@@ -281,7 +281,6 @@ static int tqmx86_gpio_probe(struct platform_device *pdev)
		u8 irq_status;

		irq_chip->name = chip->label;
		irq_chip->parent_device = &pdev->dev;
		irq_chip->irq_mask = tqmx86_gpio_irq_mask;
		irq_chip->irq_unmask = tqmx86_gpio_irq_unmask;
		irq_chip->irq_set_type = tqmx86_gpio_irq_set_type;
@@ -316,6 +315,8 @@ static int tqmx86_gpio_probe(struct platform_device *pdev)
		goto out_pm_dis;
	}

	irq_domain_set_pm_device(girq->domain, dev);

	dev_info(dev, "GPIO functionality initialized with %d pins\n",
		 chip->ngpio);

+6 −6
Original line number Diff line number Diff line
@@ -1127,13 +1127,12 @@ static const struct irq_domain_ops gic_irq_domain_ops = {
	.unmap = gic_irq_domain_unmap,
};

static void gic_init_chip(struct gic_chip_data *gic, struct device *dev,
			  const char *name, bool use_eoimode1)
static void gic_init_chip(struct gic_chip_data *gic, const char *name,
			  bool use_eoimode1)
{
	/* Initialize irq_chip */
	gic->chip = gic_chip;
	gic->chip.name = name;
	gic->chip.parent_device = dev;

	if (use_eoimode1) {
		gic->chip.irq_mask = gic_eoimode1_mask_irq;
@@ -1268,10 +1267,10 @@ static int __init __gic_init_bases(struct gic_chip_data *gic,

	if (static_branch_likely(&supports_deactivate_key) && gic == &gic_data[0]) {
		name = kasprintf(GFP_KERNEL, "GICv2");
		gic_init_chip(gic, NULL, name, true);
		gic_init_chip(gic, name, true);
	} else {
		name = kasprintf(GFP_KERNEL, "GIC-%d", (int)(gic-&gic_data[0]));
		gic_init_chip(gic, NULL, name, false);
		gic_init_chip(gic, name, false);
	}

	ret = gic_init_bases(gic, handle);
@@ -1460,7 +1459,7 @@ int gic_of_init_child(struct device *dev, struct gic_chip_data **gic, int irq)
	if (!*gic)
		return -ENOMEM;

	gic_init_chip(*gic, dev, dev->of_node->name, false);
	gic_init_chip(*gic, dev->of_node->name, false);

	ret = gic_of_setup(*gic, dev->of_node);
	if (ret)
@@ -1472,6 +1471,7 @@ int gic_of_init_child(struct device *dev, struct gic_chip_data **gic, int irq)
		return ret;
	}

	irq_domain_set_pm_device((*gic)->domain, dev);
	irq_set_chained_handler_and_data(irq, gic_handle_cascade_irq, *gic);

	return 0;
Loading