Commit 393e1280 authored by Marc Zyngier's avatar Marc Zyngier

genirq: Allow irq_chip registration functions to take a const irq_chip

In order to let a const irqchip be fed to the irqchip layer, adjust
the various prototypes. An extra cast in irq_set_chip()() is required
to avoid a warning.
Signed-off-by: default avatarMarc Zyngier <maz@kernel.org>
Acked-by: default avatarLinus Walleij <linus.walleij@linaro.org>
Link: https://lore.kernel.org/r/20220209162607.1118325-3-maz@kernel.org
parent 45ec846c
...@@ -710,10 +710,11 @@ extern struct irq_chip no_irq_chip; ...@@ -710,10 +710,11 @@ extern struct irq_chip no_irq_chip;
extern struct irq_chip dummy_irq_chip; extern struct irq_chip dummy_irq_chip;
extern void extern void
irq_set_chip_and_handler_name(unsigned int irq, struct irq_chip *chip, irq_set_chip_and_handler_name(unsigned int irq, const struct irq_chip *chip,
irq_flow_handler_t handle, const char *name); irq_flow_handler_t handle, const char *name);
static inline void irq_set_chip_and_handler(unsigned int irq, struct irq_chip *chip, static inline void irq_set_chip_and_handler(unsigned int irq,
const struct irq_chip *chip,
irq_flow_handler_t handle) irq_flow_handler_t handle)
{ {
irq_set_chip_and_handler_name(irq, chip, handle, NULL); irq_set_chip_and_handler_name(irq, chip, handle, NULL);
...@@ -803,7 +804,7 @@ static inline void irq_set_percpu_devid_flags(unsigned int irq) ...@@ -803,7 +804,7 @@ static inline void irq_set_percpu_devid_flags(unsigned int irq)
} }
/* Set/get chip/data for an IRQ: */ /* Set/get chip/data for an IRQ: */
extern int irq_set_chip(unsigned int irq, struct irq_chip *chip); extern int irq_set_chip(unsigned int irq, const struct irq_chip *chip);
extern int irq_set_handler_data(unsigned int irq, void *data); extern int irq_set_handler_data(unsigned int irq, void *data);
extern int irq_set_chip_data(unsigned int irq, void *data); extern int irq_set_chip_data(unsigned int irq, void *data);
extern int irq_set_irq_type(unsigned int irq, unsigned int type); extern int irq_set_irq_type(unsigned int irq, unsigned int type);
......
...@@ -38,7 +38,7 @@ struct irqaction chained_action = { ...@@ -38,7 +38,7 @@ struct irqaction chained_action = {
* @irq: irq number * @irq: irq number
* @chip: pointer to irq chip description structure * @chip: pointer to irq chip description structure
*/ */
int irq_set_chip(unsigned int irq, struct irq_chip *chip) int irq_set_chip(unsigned int irq, const struct irq_chip *chip)
{ {
unsigned long flags; unsigned long flags;
struct irq_desc *desc = irq_get_desc_lock(irq, &flags, 0); struct irq_desc *desc = irq_get_desc_lock(irq, &flags, 0);
...@@ -46,10 +46,7 @@ int irq_set_chip(unsigned int irq, struct irq_chip *chip) ...@@ -46,10 +46,7 @@ int irq_set_chip(unsigned int irq, struct irq_chip *chip)
if (!desc) if (!desc)
return -EINVAL; return -EINVAL;
if (!chip) desc->irq_data.chip = (struct irq_chip *)(chip ?: &no_irq_chip);
chip = &no_irq_chip;
desc->irq_data.chip = chip;
irq_put_desc_unlock(desc, flags); irq_put_desc_unlock(desc, flags);
/* /*
* For !CONFIG_SPARSE_IRQ make the irq show up in * For !CONFIG_SPARSE_IRQ make the irq show up in
...@@ -1073,7 +1070,7 @@ irq_set_chained_handler_and_data(unsigned int irq, irq_flow_handler_t handle, ...@@ -1073,7 +1070,7 @@ irq_set_chained_handler_and_data(unsigned int irq, irq_flow_handler_t handle,
EXPORT_SYMBOL_GPL(irq_set_chained_handler_and_data); EXPORT_SYMBOL_GPL(irq_set_chained_handler_and_data);
void void
irq_set_chip_and_handler_name(unsigned int irq, struct irq_chip *chip, irq_set_chip_and_handler_name(unsigned int irq, const struct irq_chip *chip,
irq_flow_handler_t handle, const char *name) irq_flow_handler_t handle, const char *name)
{ {
irq_set_chip(irq, chip); irq_set_chip(irq, chip);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment