irq/generic-chip: Provide devm_irq_alloc_generic_chip()
Provide a resource managed variant of irq_alloc_generic_chip(). Signed-off-by: Bartosz Golaszewski <brgl@bgdev.pl> Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Acked-by: Marc Zyngier <marc.zyngier@arm.com> Cc: linux-doc@vger.kernel.org Cc: Jonathan Corbet <corbet@lwn.net> Link: http://lkml.kernel.org/r/1496246820-13250-5-git-send-email-brgl@bgdev.pl
This commit is contained in:
Родитель
f160203986
Коммит
1c3e36309f
|
@ -311,6 +311,7 @@ IRQ
|
|||
devm_irq_alloc_desc_at()
|
||||
devm_irq_alloc_desc_from()
|
||||
devm_irq_alloc_descs_from()
|
||||
devm_irq_alloc_generic_chip()
|
||||
|
||||
LED
|
||||
devm_led_classdev_register()
|
||||
|
|
|
@ -958,6 +958,11 @@ int irq_setup_alt_chip(struct irq_data *d, unsigned int type);
|
|||
void irq_remove_generic_chip(struct irq_chip_generic *gc, u32 msk,
|
||||
unsigned int clr, unsigned int set);
|
||||
|
||||
struct irq_chip_generic *
|
||||
devm_irq_alloc_generic_chip(struct device *dev, const char *name, int num_ct,
|
||||
unsigned int irq_base, void __iomem *reg_base,
|
||||
irq_flow_handler_t handler);
|
||||
|
||||
struct irq_chip_generic *irq_get_domain_generic_chip(struct irq_domain *d, unsigned int hw_irq);
|
||||
|
||||
int __irq_alloc_domain_generic_chips(struct irq_domain *d, int irqs_per_chip,
|
||||
|
|
|
@ -4,6 +4,8 @@
|
|||
#include <linux/gfp.h>
|
||||
#include <linux/irq.h>
|
||||
|
||||
#include "internals.h"
|
||||
|
||||
/*
|
||||
* Device resource management aware IRQ request/free implementation.
|
||||
*/
|
||||
|
@ -198,3 +200,35 @@ int __devm_irq_alloc_descs(struct device *dev, int irq, unsigned int from,
|
|||
return base;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(__devm_irq_alloc_descs);
|
||||
|
||||
#ifdef CONFIG_GENERIC_IRQ_CHIP
|
||||
/**
|
||||
* devm_irq_alloc_generic_chip - Allocate and initialize a generic chip
|
||||
* for a managed device
|
||||
* @dev: Device to allocate the generic chip for
|
||||
* @name: Name of the irq chip
|
||||
* @num_ct: Number of irq_chip_type instances associated with this
|
||||
* @irq_base: Interrupt base nr for this chip
|
||||
* @reg_base: Register base address (virtual)
|
||||
* @handler: Default flow handler associated with this chip
|
||||
*
|
||||
* Returns an initialized irq_chip_generic structure. The chip defaults
|
||||
* to the primary (index 0) irq_chip_type and @handler
|
||||
*/
|
||||
struct irq_chip_generic *
|
||||
devm_irq_alloc_generic_chip(struct device *dev, const char *name, int num_ct,
|
||||
unsigned int irq_base, void __iomem *reg_base,
|
||||
irq_flow_handler_t handler)
|
||||
{
|
||||
struct irq_chip_generic *gc;
|
||||
unsigned long sz = sizeof(*gc) + num_ct * sizeof(struct irq_chip_type);
|
||||
|
||||
gc = devm_kzalloc(dev, sz, GFP_KERNEL);
|
||||
if (gc)
|
||||
irq_init_generic_chip(gc, name, num_ct,
|
||||
irq_base, reg_base, handler);
|
||||
|
||||
return gc;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(devm_irq_alloc_generic_chip);
|
||||
#endif /* CONFIG_GENERIC_IRQ_CHIP */
|
||||
|
|
Загрузка…
Ссылка в новой задаче