diff options
Diffstat (limited to 'drivers/of/irq.c')
| -rw-r--r-- | drivers/of/irq.c | 28 | 
1 files changed, 27 insertions, 1 deletions
| diff --git a/drivers/of/irq.c b/drivers/of/irq.c index 9bcf2cf19357..5aeb89411350 100644 --- a/drivers/of/irq.c +++ b/drivers/of/irq.c @@ -364,7 +364,7 @@ int of_irq_to_resource(struct device_node *dev, int index, struct resource *r)  		memset(r, 0, sizeof(*r));  		/* -		 * Get optional "interrupts-names" property to add a name +		 * Get optional "interrupt-names" property to add a name  		 * to the resource.  		 */  		of_property_read_string_index(dev, "interrupt-names", index, @@ -380,6 +380,32 @@ int of_irq_to_resource(struct device_node *dev, int index, struct resource *r)  EXPORT_SYMBOL_GPL(of_irq_to_resource);  /** + * of_irq_get - Decode a node's IRQ and return it as a Linux irq number + * @dev: pointer to device tree node + * @index: zero-based index of the irq + * + * Returns Linux irq number on success, or -EPROBE_DEFER if the irq domain + * is not yet created. + * + */ +int of_irq_get(struct device_node *dev, int index) +{ +	int rc; +	struct of_phandle_args oirq; +	struct irq_domain *domain; + +	rc = of_irq_parse_one(dev, index, &oirq); +	if (rc) +		return rc; + +	domain = irq_find_host(oirq.np); +	if (!domain) +		return -EPROBE_DEFER; + +	return irq_create_of_mapping(&oirq); +} + +/**   * of_irq_count - Count the number of IRQs a node uses   * @dev: pointer to device tree node   */ | 

