diff mbox series

[1/2] driver core: platform: Introduce platform_get_irq_optional()

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

Commit Message

Thierry Reding Aug. 28, 2019, 8:34 a.m. UTC
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(+)

Comments

Greg KH Aug. 28, 2019, 8:57 a.m. UTC | #1
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
Thierry Reding Aug. 28, 2019, 9:32 a.m. UTC | #2
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
Guenter Roeck Aug. 28, 2019, 3:06 p.m. UTC | #3
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
Stephen Boyd Aug. 28, 2019, 3:46 p.m. UTC | #4
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>
Thierry Reding Aug. 29, 2019, 7:44 a.m. UTC | #5
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
Greg KH Aug. 29, 2019, 10:10 a.m. UTC | #6
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 mbox series

Patch

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,