driver core: platform: Add platform_get_irq_byname_optional()
Some drivers (e.g dwc3) first try to get an IRQ byname and then fall back to the one at index 0. In this case we do not want the error(s) printed by platform_get_irq_byname(). This commit adds a new platform_get_irq_byname_optional(), which does not print errors, for this. While at it also improve the kdoc text for platform_get_irq_byname() a bit. BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=205037 Signed-off-by: Hans de Goede <hdegoede@redhat.com> Reviewed-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Link: https://lore.kernel.org/r/20191005210449.3926-2-hdegoede@redhat.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
e2fbe60043
commit
f1da567f1d
|
@ -241,12 +241,8 @@ struct resource *platform_get_resource_byname(struct platform_device *dev,
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(platform_get_resource_byname);
|
||||
|
||||
/**
|
||||
* platform_get_irq_byname - get an IRQ for a device by name
|
||||
* @dev: platform device
|
||||
* @name: IRQ name
|
||||
*/
|
||||
int platform_get_irq_byname(struct platform_device *dev, const char *name)
|
||||
static int __platform_get_irq_byname(struct platform_device *dev,
|
||||
const char *name)
|
||||
{
|
||||
struct resource *r;
|
||||
|
||||
|
@ -262,11 +258,47 @@ int platform_get_irq_byname(struct platform_device *dev, const char *name)
|
|||
if (r)
|
||||
return r->start;
|
||||
|
||||
dev_err(&dev->dev, "IRQ %s not found\n", name);
|
||||
return -ENXIO;
|
||||
}
|
||||
|
||||
/**
|
||||
* platform_get_irq_byname - get an IRQ for a device by name
|
||||
* @dev: platform device
|
||||
* @name: IRQ name
|
||||
*
|
||||
* Get an IRQ like platform_get_irq(), but then by name rather then by index.
|
||||
*
|
||||
* Return: IRQ number on success, negative error number on failure.
|
||||
*/
|
||||
int platform_get_irq_byname(struct platform_device *dev, const char *name)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = __platform_get_irq_byname(dev, name);
|
||||
if (ret < 0 && ret != -EPROBE_DEFER)
|
||||
dev_err(&dev->dev, "IRQ %s not found\n", name);
|
||||
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(platform_get_irq_byname);
|
||||
|
||||
/**
|
||||
* platform_get_irq_byname_optional - get an optional IRQ for a device by name
|
||||
* @dev: platform device
|
||||
* @name: IRQ name
|
||||
*
|
||||
* Get an optional IRQ by name like platform_get_irq_byname(). Except that it
|
||||
* does not print an error message if an IRQ can not be obtained.
|
||||
*
|
||||
* Return: IRQ number on success, negative error number on failure.
|
||||
*/
|
||||
int platform_get_irq_byname_optional(struct platform_device *dev,
|
||||
const char *name)
|
||||
{
|
||||
return __platform_get_irq_byname(dev, name);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(platform_get_irq_byname_optional);
|
||||
|
||||
/**
|
||||
* platform_add_devices - add a numbers of platform devices
|
||||
* @devs: array of platform devices to add
|
||||
|
|
|
@ -64,6 +64,8 @@ extern struct resource *platform_get_resource_byname(struct platform_device *,
|
|||
unsigned int,
|
||||
const char *);
|
||||
extern int platform_get_irq_byname(struct platform_device *, const char *);
|
||||
extern int platform_get_irq_byname_optional(struct platform_device *dev,
|
||||
const char *name);
|
||||
extern int platform_add_devices(struct platform_device **, int);
|
||||
|
||||
struct platform_device_info {
|
||||
|
|
Loading…
Reference in New Issue