Skip to content

Commit 35845da

Browse files
committed
regmap-irq: Provide IRQ resource request and release callbacks
The users which rely on regmap IRQ to create the IRQ chip may also want to have an additional tracking of the IRQ requests and releases. Provide a callback for them.
2 parents dffd32e + 9bb4c0b commit 35845da

2 files changed

Lines changed: 24 additions & 0 deletions

File tree

drivers/base/regmap/regmap-irq.c

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -296,13 +296,35 @@ static int regmap_irq_set_wake(struct irq_data *data, unsigned int on)
296296
return 0;
297297
}
298298

299+
static int regmap_irq_reqres(struct irq_data *data)
300+
{
301+
struct regmap_irq_chip_data *d = irq_data_get_irq_chip_data(data);
302+
irq_hw_number_t hwirq = irqd_to_hwirq(data);
303+
304+
if (d->chip->irq_reqres)
305+
return d->chip->irq_reqres(d->chip->irq_drv_data, hwirq);
306+
307+
return 0;
308+
}
309+
310+
static void regmap_irq_relres(struct irq_data *data)
311+
{
312+
struct regmap_irq_chip_data *d = irq_data_get_irq_chip_data(data);
313+
irq_hw_number_t hwirq = irqd_to_hwirq(data);
314+
315+
if (d->chip->irq_relres)
316+
d->chip->irq_relres(d->chip->irq_drv_data, hwirq);
317+
}
318+
299319
static const struct irq_chip regmap_irq_chip = {
300320
.irq_bus_lock = regmap_irq_lock,
301321
.irq_bus_sync_unlock = regmap_irq_sync_unlock,
302322
.irq_disable = regmap_irq_disable,
303323
.irq_enable = regmap_irq_enable,
304324
.irq_set_type = regmap_irq_set_type,
305325
.irq_set_wake = regmap_irq_set_wake,
326+
.irq_request_resources = regmap_irq_reqres,
327+
.irq_release_resources = regmap_irq_relres,
306328
};
307329

308330
static inline int read_sub_irq_data(struct regmap_irq_chip_data *data,

include/linux/regmap.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1770,6 +1770,8 @@ struct regmap_irq_chip {
17701770
void *irq_drv_data);
17711771
unsigned int (*get_irq_reg)(struct regmap_irq_chip_data *data,
17721772
unsigned int base, int index);
1773+
int (*irq_reqres)(void *irq_drv_data, irq_hw_number_t hwirq);
1774+
void (*irq_relres)(void *irq_drv_data, irq_hw_number_t hwirq);
17731775
void *irq_drv_data;
17741776
};
17751777

0 commit comments

Comments
 (0)