Skip to content

Commit 08f12b4

Browse files
prabhakarladMarc Zyngier
authored andcommitted
gpio: gpiolib: Allow free() callback to be overridden
Allow free() callback to be overridden from irq_domain_ops for hierarchical chips. This allows drivers to free up resources which are allocated during child_to_parent_hwirq()/populate_parent_alloc_arg() callbacks. On Renesas RZ/G2L platform a bitmap is maintained for TINT slots, a slot is allocated in child_to_parent_hwirq() callback which is freed up in free callback hence this override. Signed-off-by: Lad Prabhakar <prabhakar.mahadev-lad.rj@bp.renesas.com> Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be> Acked-by: Bartosz Golaszewski <brgl@bgdev.pl> Signed-off-by: Marc Zyngier <maz@kernel.org> Link: https://lore.kernel.org/r/20220707182314.66610-5-prabhakar.mahadev-lad.rj@bp.renesas.com
1 parent 3fed095 commit 08f12b4

File tree

1 file changed

+6
-3
lines changed

1 file changed

+6
-3
lines changed

drivers/gpio/gpiolib.c

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1181,15 +1181,18 @@ static void gpiochip_hierarchy_setup_domain_ops(struct irq_domain_ops *ops)
11811181
ops->activate = gpiochip_irq_domain_activate;
11821182
ops->deactivate = gpiochip_irq_domain_deactivate;
11831183
ops->alloc = gpiochip_hierarchy_irq_domain_alloc;
1184-
ops->free = irq_domain_free_irqs_common;
11851184

11861185
/*
1187-
* We only allow overriding the translate() function for
1186+
* We only allow overriding the translate() and free() functions for
11881187
* hierarchical chips, and this should only be done if the user
1189-
* really need something other than 1:1 translation.
1188+
* really need something other than 1:1 translation for translate()
1189+
* callback and free if user wants to free up any resources which
1190+
* were allocated during callbacks, for example populate_parent_alloc_arg.
11901191
*/
11911192
if (!ops->translate)
11921193
ops->translate = gpiochip_hierarchy_irq_domain_translate;
1194+
if (!ops->free)
1195+
ops->free = irq_domain_free_irqs_common;
11931196
}
11941197

11951198
static int gpiochip_hierarchy_add_domain(struct gpio_chip *gc)

0 commit comments

Comments
 (0)