On Tue, 20 May 2014 13:42:02 +0300, Grygorii Strashko <grygorii.strashko@xxxxxx> wrote: > The commit 9ec36cafe43bf835f8f29273597a5b0cbc8267ef > "of/irq: do irq resolution in platform_get_irq" from Rob Herring - > moves resolving of the interrupt resources in platform_get_irq(). > But this solution isn't complete because platform_get_irq_byname() > need to be modified the same way. > > Hence, fix it by adding interrupt resolution code at the > platform_get_irq_byname() function too. > > Cc: Russell King <linux@xxxxxxxxxxxxxxxx> > Cc: Rob Herring <robh@xxxxxxxxxx> > Cc: Tony Lindgren <tony@xxxxxxxxxxx> > Cc: Grant Likely <grant.likely@xxxxxxxxxx> > Cc: Thierry Reding <thierry.reding@xxxxxxxxx> > > Signed-off-by: Grygorii Strashko <grygorii.strashko@xxxxxx> Applied, Thanks. g. > --- > Changes in v1: > - use of_property_match_string() to get IRQ index by name > - minor comments fixed > > RFC: > https://lkml.org/lkml/2014/5/19/325 > > drivers/base/platform.c | 7 +++++-- > drivers/of/irq.c | 22 ++++++++++++++++++++++ > include/linux/of_irq.h | 5 +++++ > 3 files changed, 32 insertions(+), 2 deletions(-) > > diff --git a/drivers/base/platform.c b/drivers/base/platform.c > index 5b47210..9e9227e 100644 > --- a/drivers/base/platform.c > +++ b/drivers/base/platform.c > @@ -131,9 +131,12 @@ EXPORT_SYMBOL_GPL(platform_get_resource_byname); > */ > int platform_get_irq_byname(struct platform_device *dev, const char *name) > { > - struct resource *r = platform_get_resource_byname(dev, IORESOURCE_IRQ, > - name); > + struct resource *r; > + > + if (IS_ENABLED(CONFIG_OF_IRQ) && dev->dev.of_node) > + return of_irq_get_byname(dev->dev.of_node, name); > > + r = platform_get_resource_byname(dev, IORESOURCE_IRQ, name); > return r ? r->start : -ENXIO; > } > EXPORT_SYMBOL_GPL(platform_get_irq_byname); > diff --git a/drivers/of/irq.c b/drivers/of/irq.c > index 5aeb894..3e06a69 100644 > --- a/drivers/of/irq.c > +++ b/drivers/of/irq.c > @@ -406,6 +406,28 @@ int of_irq_get(struct device_node *dev, int index) > } > > /** > + * of_irq_get_byname - Decode a node's IRQ and return it as a Linux irq number > + * @dev: pointer to device tree node > + * @name: irq name > + * > + * Returns Linux irq number on success, or -EPROBE_DEFER if the irq domain > + * is not yet created, or error code in case of any other failure. > + */ > +int of_irq_get_byname(struct device_node *dev, const char *name) > +{ > + int index; > + > + if (unlikely(!name)) > + return -EINVAL; > + > + index = of_property_match_string(dev, "interrupt-names", name); > + if (index < 0) > + return index; > + > + return of_irq_get(dev, index); > +} > + > +/** > * of_irq_count - Count the number of IRQs a node uses > * @dev: pointer to device tree node > */ > diff --git a/include/linux/of_irq.h b/include/linux/of_irq.h > index 6404253..bfec136 100644 > --- a/include/linux/of_irq.h > +++ b/include/linux/of_irq.h > @@ -45,6 +45,7 @@ extern void of_irq_init(const struct of_device_id *matches); > #ifdef CONFIG_OF_IRQ > extern int of_irq_count(struct device_node *dev); > extern int of_irq_get(struct device_node *dev, int index); > +extern int of_irq_get_byname(struct device_node *dev, const char *name); > #else > static inline int of_irq_count(struct device_node *dev) > { > @@ -54,6 +55,10 @@ static inline int of_irq_get(struct device_node *dev, int index) > { > return 0; > } > +static inline int of_irq_get_byname(struct device_node *dev, const char *name) > +{ > + return 0; > +} > #endif > > #if defined(CONFIG_OF) > -- > 1.7.9.5 > -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html