Message ID | 1639660402-31207-2-git-send-email-akhilrajeev@nvidia.com |
---|---|
State | Superseded |
Headers | show |
Series | Enable named interrupt smbus-alert for ACPI as well | expand |
> On Thu, Dec 16, 2021 at 3:14 PM Akhil R <akhilrajeev@nvidia.com> wrote: > > > > Get interrupt by name from ACPI table as well. > > the interrupt resource > > > Add option to use 'interrupt-names' in _DSD which can map to interrupt > > by index. The implementation is similar to 'interrupt-names' in devicetree. > > Also add a common routine to get irq by name from devicetree and ACPI > > table. > > > > Signed-off-by: Akhil R <akhilrajeev@nvidia.com> > > --- > > drivers/base/property.c | 35 +++++++++++++++++++++++++++++++++++ > > include/linux/property.h | 3 +++ > > 2 files changed, 38 insertions(+) > > > > diff --git a/drivers/base/property.c b/drivers/base/property.c index > > cbe4fa2..7acf4fc 100644 > > --- a/drivers/base/property.c > > +++ b/drivers/base/property.c > > @@ -920,6 +920,41 @@ int fwnode_irq_get(const struct fwnode_handle > > *fwnode, unsigned int index) EXPORT_SYMBOL(fwnode_irq_get); > > > > /** > > + * fwnode_irq_get_byname - Get IRQ from a fwnode using its name > > + * @fwnode: Pointer to the firmware node > > + * @index: IRQ name > > + * > > Needs a description to explain how the name is described. > > > + * Returns Linux IRQ number on success, errno otherwise. > > + */ > > +int fwnode_irq_get_byname(const struct fwnode_handle *fwnode, const > > +char *name) { > > + int index; > > + > > + if (unlikely(!name)) > > + return -EINVAL; > > + > > + index = fwnode_property_match_string(fwnode, "interrupt-names", > name); > > + if (index < 0) > > + return index; > > This property ise needs to be described in the ACPI documentation: > https://www.kernel.org/doc/html/latest/firmware- > guide/acpi/enumeration.html > > Perhaps after the DMA section. Do you mean to document the complete interrupt usage in ACPI including getting interrupt by index or only the named interrupt part? Also please share if anything on the discussion we had previously. Thanks, Akhil
diff --git a/drivers/base/property.c b/drivers/base/property.c index cbe4fa2..7acf4fc 100644 --- a/drivers/base/property.c +++ b/drivers/base/property.c @@ -920,6 +920,41 @@ int fwnode_irq_get(const struct fwnode_handle *fwnode, unsigned int index) EXPORT_SYMBOL(fwnode_irq_get); /** + * fwnode_irq_get_byname - Get IRQ from a fwnode using its name + * @fwnode: Pointer to the firmware node + * @index: IRQ name + * + * Returns Linux IRQ number on success, errno otherwise. + */ +int fwnode_irq_get_byname(const struct fwnode_handle *fwnode, const char *name) +{ + int index; + + if (unlikely(!name)) + return -EINVAL; + + index = fwnode_property_match_string(fwnode, "interrupt-names", name); + if (index < 0) + return index; + + return fwnode_irq_get(fwnode, index); +} +EXPORT_SYMBOL(fwnode_irq_get_byname); + +/** + * device_irq_get_byname - Get IRQ of a device using interrupt name + * @dev: Device to get the interrupt + * @index: IRQ name + * + * Returns Linux IRQ number on success, errno otherwise. + */ +int device_irq_get_byname(struct device *dev, const char *name) +{ + return fwnode_irq_get_byname(dev_fwnode(dev), name); +} +EXPORT_SYMBOL_GPL(device_irq_get_byname); + +/** * fwnode_graph_get_next_endpoint - Get next endpoint firmware node * @fwnode: Pointer to the parent firmware node * @prev: Previous endpoint node or %NULL to get the first diff --git a/include/linux/property.h b/include/linux/property.h index 16f736c..bc49350 100644 --- a/include/linux/property.h +++ b/include/linux/property.h @@ -121,6 +121,9 @@ struct fwnode_handle *fwnode_handle_get(struct fwnode_handle *fwnode); void fwnode_handle_put(struct fwnode_handle *fwnode); int fwnode_irq_get(const struct fwnode_handle *fwnode, unsigned int index); +int fwnode_irq_get_byname(const struct fwnode_handle *fwnode, const char *name); + +int device_irq_get_byname(struct device *dev, const char *name); unsigned int device_get_child_node_count(struct device *dev);
Get interrupt by name from ACPI table as well. Add option to use 'interrupt-names' in _DSD which can map to interrupt by index. The implementation is similar to 'interrupt-names' in devicetree. Also add a common routine to get irq by name from devicetree and ACPI table. Signed-off-by: Akhil R <akhilrajeev@nvidia.com> --- drivers/base/property.c | 35 +++++++++++++++++++++++++++++++++++ include/linux/property.h | 3 +++ 2 files changed, 38 insertions(+)