Skip to content

Commit 52066a5

Browse files
author
Linus Walleij
committed
pinctrl: equilibrium: Convert to immutable irq_chip
Convert the driver to immutable irq-chip with a bit of intuition. Cc: Marc Zyngier <maz@kernel.org> Signed-off-by: Linus Walleij <linus.walleij@linaro.org> Link: https://lore.kernel.org/r/20230403-immutable-irqchips-v1-5-503788a7f6e6@linaro.org
1 parent dcea54b commit 52066a5

2 files changed

Lines changed: 14 additions & 10 deletions

File tree

drivers/pinctrl/pinctrl-equilibrium.c

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ static void eqbr_gpio_disable_irq(struct irq_data *d)
3232
raw_spin_lock_irqsave(&gctrl->lock, flags);
3333
writel(BIT(offset), gctrl->membase + GPIO_IRNENCLR);
3434
raw_spin_unlock_irqrestore(&gctrl->lock, flags);
35+
gpiochip_disable_irq(gc, offset);
3536
}
3637

3738
static void eqbr_gpio_enable_irq(struct irq_data *d)
@@ -42,6 +43,7 @@ static void eqbr_gpio_enable_irq(struct irq_data *d)
4243
unsigned long flags;
4344

4445
gc->direction_input(gc, offset);
46+
gpiochip_enable_irq(gc, offset);
4547
raw_spin_lock_irqsave(&gctrl->lock, flags);
4648
writel(BIT(offset), gctrl->membase + GPIO_IRNRNSET);
4749
raw_spin_unlock_irqrestore(&gctrl->lock, flags);
@@ -161,6 +163,17 @@ static void eqbr_irq_handler(struct irq_desc *desc)
161163
chained_irq_exit(ic, desc);
162164
}
163165

166+
static const struct irq_chip eqbr_irq_chip = {
167+
.name = "gpio_irq",
168+
.irq_mask = eqbr_gpio_disable_irq,
169+
.irq_unmask = eqbr_gpio_enable_irq,
170+
.irq_ack = eqbr_gpio_ack_irq,
171+
.irq_mask_ack = eqbr_gpio_mask_ack_irq,
172+
.irq_set_type = eqbr_gpio_set_irq_type,
173+
.flags = IRQCHIP_IMMUTABLE,
174+
GPIOCHIP_IRQ_RESOURCE_HELPERS,
175+
};
176+
164177
static int gpiochip_setup(struct device *dev, struct eqbr_gpio_ctrl *gctrl)
165178
{
166179
struct gpio_irq_chip *girq;
@@ -176,15 +189,8 @@ static int gpiochip_setup(struct device *dev, struct eqbr_gpio_ctrl *gctrl)
176189
return 0;
177190
}
178191

179-
gctrl->ic.name = "gpio_irq";
180-
gctrl->ic.irq_mask = eqbr_gpio_disable_irq;
181-
gctrl->ic.irq_unmask = eqbr_gpio_enable_irq;
182-
gctrl->ic.irq_ack = eqbr_gpio_ack_irq;
183-
gctrl->ic.irq_mask_ack = eqbr_gpio_mask_ack_irq;
184-
gctrl->ic.irq_set_type = eqbr_gpio_set_irq_type;
185-
186192
girq = &gctrl->chip.irq;
187-
girq->chip = &gctrl->ic;
193+
gpio_irq_chip_set_chip(girq, &eqbr_irq_chip);
188194
girq->parent_handler = eqbr_irq_handler;
189195
girq->num_parents = 1;
190196
girq->parents = devm_kcalloc(dev, 1, sizeof(*girq->parents), GFP_KERNEL);

drivers/pinctrl/pinctrl-equilibrium.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,6 @@ struct fwnode_handle;
103103
* @fwnode: firmware node of gpio controller.
104104
* @bank: pointer to corresponding pin bank.
105105
* @membase: base address of the gpio controller.
106-
* @ic: irq chip.
107106
* @name: gpio chip name.
108107
* @virq: irq number of the gpio chip to parent's irq domain.
109108
* @lock: spin lock to protect gpio register write.
@@ -113,7 +112,6 @@ struct eqbr_gpio_ctrl {
113112
struct fwnode_handle *fwnode;
114113
struct eqbr_pin_bank *bank;
115114
void __iomem *membase;
116-
struct irq_chip ic;
117115
const char *name;
118116
unsigned int virq;
119117
raw_spinlock_t lock; /* protect gpio register */

0 commit comments

Comments
 (0)