Message ID | 20190828083411.2496-1-thierry.reding@gmail.com (mailing list archive) |
---|---|
State | Not Applicable |
Headers | show |
Series | [1/2] driver core: platform: Introduce platform_get_irq_optional() | expand |
On Wed, Aug 28, 2019 at 10:34:10AM +0200, Thierry Reding wrote: > From: Thierry Reding <treding@nvidia.com> > > In some cases the interrupt line of a device is optional. Introduce a > new platform_get_irq_optional() that works much like platform_get_irq() > but does not output an error on failure to find the interrupt. > > Signed-off-by: Thierry Reding <treding@nvidia.com> > --- > drivers/base/platform.c | 22 ++++++++++++++++++++++ > include/linux/platform_device.h | 1 + > 2 files changed, 23 insertions(+) > > diff --git a/drivers/base/platform.c b/drivers/base/platform.c > index 8ad701068c11..0dda6ade50fd 100644 > --- a/drivers/base/platform.c > +++ b/drivers/base/platform.c > @@ -192,6 +192,28 @@ int platform_get_irq(struct platform_device *dev, unsigned int num) > } > EXPORT_SYMBOL_GPL(platform_get_irq); > > +/** > + * platform_get_irq_optional - get an optional IRQ for a device > + * @dev: platform device > + * @num: IRQ number index > + * > + * Gets an IRQ for a platform device. Device drivers should check the return > + * value for errors so as to not pass a negative integer value to the > + * request_irq() APIs. This is the same as platform_get_irq(), except that it > + * does not print an error message if an IRQ can not be obtained. Kind of funny that the work people did to put error messages in a central place needs to be worked around at times :) Anyway, I have no objection to this, but it looks like it has to go in through my tree. I can take the hwmon patch as well through my tree if the hwmon maintainer(s) say it is ok to do so. thanks, greg k-h
On Wed, Aug 28, 2019 at 10:57:24AM +0200, Greg Kroah-Hartman wrote: > On Wed, Aug 28, 2019 at 10:34:10AM +0200, Thierry Reding wrote: > > From: Thierry Reding <treding@nvidia.com> > > > > In some cases the interrupt line of a device is optional. Introduce a > > new platform_get_irq_optional() that works much like platform_get_irq() > > but does not output an error on failure to find the interrupt. > > > > Signed-off-by: Thierry Reding <treding@nvidia.com> > > --- > > drivers/base/platform.c | 22 ++++++++++++++++++++++ > > include/linux/platform_device.h | 1 + > > 2 files changed, 23 insertions(+) > > > > diff --git a/drivers/base/platform.c b/drivers/base/platform.c > > index 8ad701068c11..0dda6ade50fd 100644 > > --- a/drivers/base/platform.c > > +++ b/drivers/base/platform.c > > @@ -192,6 +192,28 @@ int platform_get_irq(struct platform_device *dev, unsigned int num) > > } > > EXPORT_SYMBOL_GPL(platform_get_irq); > > > > +/** > > + * platform_get_irq_optional - get an optional IRQ for a device > > + * @dev: platform device > > + * @num: IRQ number index > > + * > > + * Gets an IRQ for a platform device. Device drivers should check the return > > + * value for errors so as to not pass a negative integer value to the > > + * request_irq() APIs. This is the same as platform_get_irq(), except that it > > + * does not print an error message if an IRQ can not be obtained. > > Kind of funny that the work people did to put error messages in a > central place needs to be worked around at times :) Indeed. I think it does make sense in this case to have the error message in a central place, because it really does seem like the vast majority of users really do want that IRQ. Having the _optional variant makes it really explicit in the cases where it's fine to continue without the IRQ. > Anyway, I have no objection to this, but it looks like it has to go in > through my tree. I can take the hwmon patch as well through my tree if > the hwmon maintainer(s) say it is ok to do so. I suppose we could technically make this go through the driver core and hwmon trees separately with a bit of timing, but the hwmon patch is so trivial that it would indeed be simplest to take it through the driver core tree as well. Thierry
On Wed, Aug 28, 2019 at 10:57:24AM +0200, Greg Kroah-Hartman wrote: > On Wed, Aug 28, 2019 at 10:34:10AM +0200, Thierry Reding wrote: > > From: Thierry Reding <treding@nvidia.com> > > > > In some cases the interrupt line of a device is optional. Introduce a > > new platform_get_irq_optional() that works much like platform_get_irq() > > but does not output an error on failure to find the interrupt. > > > > Signed-off-by: Thierry Reding <treding@nvidia.com> > > --- > > drivers/base/platform.c | 22 ++++++++++++++++++++++ > > include/linux/platform_device.h | 1 + > > 2 files changed, 23 insertions(+) > > > > diff --git a/drivers/base/platform.c b/drivers/base/platform.c > > index 8ad701068c11..0dda6ade50fd 100644 > > --- a/drivers/base/platform.c > > +++ b/drivers/base/platform.c > > @@ -192,6 +192,28 @@ int platform_get_irq(struct platform_device *dev, unsigned int num) > > } > > EXPORT_SYMBOL_GPL(platform_get_irq); > > > > +/** > > + * platform_get_irq_optional - get an optional IRQ for a device > > + * @dev: platform device > > + * @num: IRQ number index > > + * > > + * Gets an IRQ for a platform device. Device drivers should check the return > > + * value for errors so as to not pass a negative integer value to the > > + * request_irq() APIs. This is the same as platform_get_irq(), except that it > > + * does not print an error message if an IRQ can not be obtained. > > Kind of funny that the work people did to put error messages in a > central place needs to be worked around at times :) > > Anyway, I have no objection to this, but it looks like it has to go in > through my tree. I can take the hwmon patch as well through my tree if > the hwmon maintainer(s) say it is ok to do so. > Ok with me. Guenter
Quoting Thierry Reding (2019-08-28 01:34:10) > From: Thierry Reding <treding@nvidia.com> > > In some cases the interrupt line of a device is optional. Introduce a > new platform_get_irq_optional() that works much like platform_get_irq() > but does not output an error on failure to find the interrupt. > > Signed-off-by: Thierry Reding <treding@nvidia.com> > --- Thanks! Reviewed-by: Stephen Boyd <swboyd@chromium.org>
On Wed, Aug 28, 2019 at 10:34:10AM +0200, Thierry Reding wrote: > From: Thierry Reding <treding@nvidia.com> > > In some cases the interrupt line of a device is optional. Introduce a > new platform_get_irq_optional() that works much like platform_get_irq() > but does not output an error on failure to find the interrupt. > > Signed-off-by: Thierry Reding <treding@nvidia.com> > --- > drivers/base/platform.c | 22 ++++++++++++++++++++++ > include/linux/platform_device.h | 1 + > 2 files changed, 23 insertions(+) > > diff --git a/drivers/base/platform.c b/drivers/base/platform.c > index 8ad701068c11..0dda6ade50fd 100644 > --- a/drivers/base/platform.c > +++ b/drivers/base/platform.c > @@ -192,6 +192,28 @@ int platform_get_irq(struct platform_device *dev, unsigned int num) > } > EXPORT_SYMBOL_GPL(platform_get_irq); > > +/** > + * platform_get_irq_optional - get an optional IRQ for a device > + * @dev: platform device > + * @num: IRQ number index > + * > + * Gets an IRQ for a platform device. Device drivers should check the return > + * value for errors so as to not pass a negative integer value to the > + * request_irq() APIs. This is the same as platform_get_irq(), except that it > + * does not print an error message if an IRQ can not be obtained. > + * > + * Example: > + * int irq = platform_get_irq_optional(pdev, 0); > + * if (irq < 0) > + * return irq; > + * > + * Return: IRQ number on success, negative error number on failure. > + */ > +int platform_get_irq_optional(struct platform_device *dev, unsigned int num) > +{ > + return __platform_get_irq(dev, num); > +} Oh my... this is embarrassing, but the kbuild test robot reported that the second patch here fails to build because I forgot to export this symbol. I've attached a patch that fixes it. Thierry > + > /** > * platform_irq_count - Count the number of IRQs a platform device uses > * @dev: platform device > diff --git a/include/linux/platform_device.h b/include/linux/platform_device.h > index 37e15a935a42..35bc4355a9df 100644 > --- a/include/linux/platform_device.h > +++ b/include/linux/platform_device.h > @@ -58,6 +58,7 @@ extern void __iomem * > devm_platform_ioremap_resource(struct platform_device *pdev, > unsigned int index); > extern int platform_get_irq(struct platform_device *, unsigned int); > +extern int platform_get_irq_optional(struct platform_device *, unsigned int); > extern int platform_irq_count(struct platform_device *); > extern struct resource *platform_get_resource_byname(struct platform_device *, > unsigned int, > -- > 2.22.0 > From 0f7695c4d3f30b2946c97160b717de03c3deb73f Mon Sep 17 00:00:00 2001 From: Thierry Reding <treding@nvidia.com> Date: Thu, 29 Aug 2019 09:29:32 +0200 Subject: [PATCH] driver core: platform: Export platform_get_irq_optional() This function can be used by modules, so it needs to be exported. Reported-by: kbuild test robot <lkp@intel.com> Signed-off-by: Thierry Reding <treding@nvidia.com> --- drivers/base/platform.c | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/base/platform.c b/drivers/base/platform.c index 014dc07b0056..b6c6c7d97d5b 100644 --- a/drivers/base/platform.c +++ b/drivers/base/platform.c @@ -194,6 +194,7 @@ int platform_get_irq_optional(struct platform_device *dev, unsigned int num) { return __platform_get_irq(dev, num); } +EXPORT_SYMBOL_GPL(platform_get_irq_optional); /** * platform_irq_count - Count the number of IRQs a platform device uses
On Thu, Aug 29, 2019 at 09:44:08AM +0200, Thierry Reding wrote: > On Wed, Aug 28, 2019 at 10:34:10AM +0200, Thierry Reding wrote: > > From: Thierry Reding <treding@nvidia.com> > > > > In some cases the interrupt line of a device is optional. Introduce a > > new platform_get_irq_optional() that works much like platform_get_irq() > > but does not output an error on failure to find the interrupt. > > > > Signed-off-by: Thierry Reding <treding@nvidia.com> > > --- > > drivers/base/platform.c | 22 ++++++++++++++++++++++ > > include/linux/platform_device.h | 1 + > > 2 files changed, 23 insertions(+) > > > > diff --git a/drivers/base/platform.c b/drivers/base/platform.c > > index 8ad701068c11..0dda6ade50fd 100644 > > --- a/drivers/base/platform.c > > +++ b/drivers/base/platform.c > > @@ -192,6 +192,28 @@ int platform_get_irq(struct platform_device *dev, unsigned int num) > > } > > EXPORT_SYMBOL_GPL(platform_get_irq); > > > > +/** > > + * platform_get_irq_optional - get an optional IRQ for a device > > + * @dev: platform device > > + * @num: IRQ number index > > + * > > + * Gets an IRQ for a platform device. Device drivers should check the return > > + * value for errors so as to not pass a negative integer value to the > > + * request_irq() APIs. This is the same as platform_get_irq(), except that it > > + * does not print an error message if an IRQ can not be obtained. > > + * > > + * Example: > > + * int irq = platform_get_irq_optional(pdev, 0); > > + * if (irq < 0) > > + * return irq; > > + * > > + * Return: IRQ number on success, negative error number on failure. > > + */ > > +int platform_get_irq_optional(struct platform_device *dev, unsigned int num) > > +{ > > + return __platform_get_irq(dev, num); > > +} > > Oh my... this is embarrassing, but the kbuild test robot reported that > the second patch here fails to build because I forgot to export this > symbol. I've attached a patch that fixes it. > > Thierry > > > + > > /** > > * platform_irq_count - Count the number of IRQs a platform device uses > > * @dev: platform device > > diff --git a/include/linux/platform_device.h b/include/linux/platform_device.h > > index 37e15a935a42..35bc4355a9df 100644 > > --- a/include/linux/platform_device.h > > +++ b/include/linux/platform_device.h > > @@ -58,6 +58,7 @@ extern void __iomem * > > devm_platform_ioremap_resource(struct platform_device *pdev, > > unsigned int index); > > extern int platform_get_irq(struct platform_device *, unsigned int); > > +extern int platform_get_irq_optional(struct platform_device *, unsigned int); > > extern int platform_irq_count(struct platform_device *); > > extern struct resource *platform_get_resource_byname(struct platform_device *, > > unsigned int, > > -- > > 2.22.0 > > > From 0f7695c4d3f30b2946c97160b717de03c3deb73f Mon Sep 17 00:00:00 2001 > From: Thierry Reding <treding@nvidia.com> > Date: Thu, 29 Aug 2019 09:29:32 +0200 > Subject: [PATCH] driver core: platform: Export platform_get_irq_optional() > > This function can be used by modules, so it needs to be exported. > > Reported-by: kbuild test robot <lkp@intel.com> > Signed-off-by: Thierry Reding <treding@nvidia.com> > --- > drivers/base/platform.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/drivers/base/platform.c b/drivers/base/platform.c > index 014dc07b0056..b6c6c7d97d5b 100644 > --- a/drivers/base/platform.c > +++ b/drivers/base/platform.c > @@ -194,6 +194,7 @@ int platform_get_irq_optional(struct platform_device *dev, unsigned int num) > { > return __platform_get_irq(dev, num); > } > +EXPORT_SYMBOL_GPL(platform_get_irq_optional); > > /** > * platform_irq_count - Count the number of IRQs a platform device uses > -- > 2.22.0 > Now merged, thanks. greg k-h
diff --git a/drivers/base/platform.c b/drivers/base/platform.c index 8ad701068c11..0dda6ade50fd 100644 --- a/drivers/base/platform.c +++ b/drivers/base/platform.c @@ -192,6 +192,28 @@ int platform_get_irq(struct platform_device *dev, unsigned int num) } EXPORT_SYMBOL_GPL(platform_get_irq); +/** + * platform_get_irq_optional - get an optional IRQ for a device + * @dev: platform device + * @num: IRQ number index + * + * Gets an IRQ for a platform device. Device drivers should check the return + * value for errors so as to not pass a negative integer value to the + * request_irq() APIs. This is the same as platform_get_irq(), except that it + * does not print an error message if an IRQ can not be obtained. + * + * Example: + * int irq = platform_get_irq_optional(pdev, 0); + * if (irq < 0) + * return irq; + * + * Return: IRQ number on success, negative error number on failure. + */ +int platform_get_irq_optional(struct platform_device *dev, unsigned int num) +{ + return __platform_get_irq(dev, num); +} + /** * platform_irq_count - Count the number of IRQs a platform device uses * @dev: platform device diff --git a/include/linux/platform_device.h b/include/linux/platform_device.h index 37e15a935a42..35bc4355a9df 100644 --- a/include/linux/platform_device.h +++ b/include/linux/platform_device.h @@ -58,6 +58,7 @@ extern void __iomem * devm_platform_ioremap_resource(struct platform_device *pdev, unsigned int index); extern int platform_get_irq(struct platform_device *, unsigned int); +extern int platform_get_irq_optional(struct platform_device *, unsigned int); extern int platform_irq_count(struct platform_device *); extern struct resource *platform_get_resource_byname(struct platform_device *, unsigned int,