Michael Walle <michael@xxxxxxxx> writes: > This patch adds support for the interrupt controller inside the sl28 git grep 'This patch' Documentation/process/ > CPLD management controller. > > +static int sl28cpld_intc_probe(struct platform_device *pdev) > +{ > + struct sl28cpld_intc *irqchip; > + struct resource *res; > + unsigned int irq; > + int ret; > + > + if (!pdev->dev.parent) > + return -ENODEV; > + > + irqchip = devm_kzalloc(&pdev->dev, sizeof(*irqchip), GFP_KERNEL); > + if (!irqchip) > + return -ENOMEM; > + > + irqchip->regmap = dev_get_regmap(pdev->dev.parent, NULL); > + if (!irqchip->regmap) > + return -ENODEV; > + > + irq = platform_get_irq(pdev, 0); > + if (irq < 0) > + return irq; > + > + res = platform_get_resource(pdev, IORESOURCE_REG, 0); > + if (!res) > + return -EINVAL; > + > + irqchip->chip.name = "sl28cpld-intc"; > + irqchip->chip.irqs = sl28cpld_irqs; > + irqchip->chip.num_irqs = ARRAY_SIZE(sl28cpld_irqs); > + irqchip->chip.num_regs = 1; > + irqchip->chip.status_base = res->start + INTC_IP; > + irqchip->chip.mask_base = res->start + INTC_IE; > + irqchip->chip.mask_invert = true, > + irqchip->chip.ack_base = res->start + INTC_IP; > + > + ret = devm_regmap_add_irq_chip(&pdev->dev, irqchip->regmap, irq, > + IRQF_SHARED | IRQF_ONESHOT, 0, What's the point of IRQF_SHARED | IRQF_ONESHOT here? > + &irqchip->chip, &irqchip->irq_data); Thanks, tglx