linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v1] device property: Add helpers to count items in an array
@ 2019-05-20 12:38 Andy Shevchenko
  2019-05-20 12:52 ` Sakari Ailus
  2019-05-20 13:37 ` Heikki Krogerus
  0 siblings, 2 replies; 4+ messages in thread
From: Andy Shevchenko @ 2019-05-20 12:38 UTC (permalink / raw)
  To: Rafael J. Wysocki, Heikki Krogerus, linux-kernel, Sakari Ailus
  Cc: Andy Shevchenko

The usual pattern to allocate the necessary space for an array of properties is
to count them fist using:

  count = device_property_read_uXX_array(dev, propname, NULL, 0);

Introduce helpers device_property_count_uXX() to count items by supplying hard
coded last two parameters to device_property_readXX_array().

Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 include/linux/property.h | 44 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 44 insertions(+)

diff --git a/include/linux/property.h b/include/linux/property.h
index a29369c89e6e..65e31c090f9f 100644
--- a/include/linux/property.h
+++ b/include/linux/property.h
@@ -144,6 +144,26 @@ static inline int device_property_read_u64(struct device *dev,
 	return device_property_read_u64_array(dev, propname, val, 1);
 }
 
+static inline int device_property_count_u8(struct device *dev, const char *propname)
+{
+	return device_property_read_u8_array(dev, propname, NULL, 0);
+}
+
+static inline int device_property_count_u16(struct device *dev, const char *propname)
+{
+	return device_property_read_u16_array(dev, propname, NULL, 0);
+}
+
+static inline int device_property_count_u32(struct device *dev, const char *propname)
+{
+	return device_property_read_u32_array(dev, propname, NULL, 0);
+}
+
+static inline int device_property_count_u64(struct device *dev, const char *propname)
+{
+	return device_property_read_u64_array(dev, propname, NULL, 0);
+}
+
 static inline bool fwnode_property_read_bool(const struct fwnode_handle *fwnode,
 					     const char *propname)
 {
@@ -174,6 +194,30 @@ static inline int fwnode_property_read_u64(const struct fwnode_handle *fwnode,
 	return fwnode_property_read_u64_array(fwnode, propname, val, 1);
 }
 
+static inline int fwnode_property_count_u8(const struct fwnode_handle *fwnode,
+					   const char *propname)
+{
+	return fwnode_property_read_u8_array(fwnode, propname, NULL, 0);
+}
+
+static inline int fwnode_property_count_u16(const struct fwnode_handle *fwnode,
+					    const char *propname)
+{
+	return fwnode_property_read_u16_array(fwnode, propname, NULL, 0);
+}
+
+static inline int fwnode_property_count_u32(const struct fwnode_handle *fwnode,
+					    const char *propname)
+{
+	return fwnode_property_read_u32_array(fwnode, propname, NULL, 0);
+}
+
+static inline int fwnode_property_count_u64(const struct fwnode_handle *fwnode,
+					    const char *propname)
+{
+	return fwnode_property_read_u64_array(fwnode, propname, NULL, 0);
+}
+
 /**
  * struct property_entry - "Built-in" device property representation.
  * @name: Name of the property.
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH v1] device property: Add helpers to count items in an array
  2019-05-20 12:38 [PATCH v1] device property: Add helpers to count items in an array Andy Shevchenko
@ 2019-05-20 12:52 ` Sakari Ailus
  2019-05-20 13:37 ` Heikki Krogerus
  1 sibling, 0 replies; 4+ messages in thread
From: Sakari Ailus @ 2019-05-20 12:52 UTC (permalink / raw)
  To: Andy Shevchenko; +Cc: Rafael J. Wysocki, Heikki Krogerus, linux-kernel

Hi Andy,

On Mon, May 20, 2019 at 03:38:48PM +0300, Andy Shevchenko wrote:
> The usual pattern to allocate the necessary space for an array of properties is
> to count them fist using:

s/fist/first/

With that,

Acked-by: Sakari Ailus <sakari.ailus@linux.intel.com>

> 
>   count = device_property_read_uXX_array(dev, propname, NULL, 0);
> 
> Introduce helpers device_property_count_uXX() to count items by supplying hard
> coded last two parameters to device_property_readXX_array().
> 
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> ---
>  include/linux/property.h | 44 ++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 44 insertions(+)
> 
> diff --git a/include/linux/property.h b/include/linux/property.h
> index a29369c89e6e..65e31c090f9f 100644
> --- a/include/linux/property.h
> +++ b/include/linux/property.h
> @@ -144,6 +144,26 @@ static inline int device_property_read_u64(struct device *dev,
>  	return device_property_read_u64_array(dev, propname, val, 1);
>  }
>  
> +static inline int device_property_count_u8(struct device *dev, const char *propname)
> +{
> +	return device_property_read_u8_array(dev, propname, NULL, 0);
> +}
> +
> +static inline int device_property_count_u16(struct device *dev, const char *propname)
> +{
> +	return device_property_read_u16_array(dev, propname, NULL, 0);
> +}
> +
> +static inline int device_property_count_u32(struct device *dev, const char *propname)
> +{
> +	return device_property_read_u32_array(dev, propname, NULL, 0);
> +}
> +
> +static inline int device_property_count_u64(struct device *dev, const char *propname)
> +{
> +	return device_property_read_u64_array(dev, propname, NULL, 0);
> +}
> +
>  static inline bool fwnode_property_read_bool(const struct fwnode_handle *fwnode,
>  					     const char *propname)
>  {
> @@ -174,6 +194,30 @@ static inline int fwnode_property_read_u64(const struct fwnode_handle *fwnode,
>  	return fwnode_property_read_u64_array(fwnode, propname, val, 1);
>  }
>  
> +static inline int fwnode_property_count_u8(const struct fwnode_handle *fwnode,
> +					   const char *propname)
> +{
> +	return fwnode_property_read_u8_array(fwnode, propname, NULL, 0);
> +}
> +
> +static inline int fwnode_property_count_u16(const struct fwnode_handle *fwnode,
> +					    const char *propname)
> +{
> +	return fwnode_property_read_u16_array(fwnode, propname, NULL, 0);
> +}
> +
> +static inline int fwnode_property_count_u32(const struct fwnode_handle *fwnode,
> +					    const char *propname)
> +{
> +	return fwnode_property_read_u32_array(fwnode, propname, NULL, 0);
> +}
> +
> +static inline int fwnode_property_count_u64(const struct fwnode_handle *fwnode,
> +					    const char *propname)
> +{
> +	return fwnode_property_read_u64_array(fwnode, propname, NULL, 0);
> +}
> +
>  /**
>   * struct property_entry - "Built-in" device property representation.
>   * @name: Name of the property.
> -- 
> 2.20.1
> 

-- 
Sakari Ailus
sakari.ailus@linux.intel.com

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH v1] device property: Add helpers to count items in an array
  2019-05-20 12:38 [PATCH v1] device property: Add helpers to count items in an array Andy Shevchenko
  2019-05-20 12:52 ` Sakari Ailus
@ 2019-05-20 13:37 ` Heikki Krogerus
  2019-05-20 13:48   ` Andy Shevchenko
  1 sibling, 1 reply; 4+ messages in thread
From: Heikki Krogerus @ 2019-05-20 13:37 UTC (permalink / raw)
  To: Andy Shevchenko; +Cc: Rafael J. Wysocki, linux-kernel, Sakari Ailus

On Mon, May 20, 2019 at 03:38:48PM +0300, Andy Shevchenko wrote:
> The usual pattern to allocate the necessary space for an array of properties is
> to count them fist using:
> 
>   count = device_property_read_uXX_array(dev, propname, NULL, 0);
> 
> Introduce helpers device_property_count_uXX() to count items by supplying hard
> coded last two parameters to device_property_readXX_array().
> 
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

OK by me. FWIW:

Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>

> ---
>  include/linux/property.h | 44 ++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 44 insertions(+)
> 
> diff --git a/include/linux/property.h b/include/linux/property.h
> index a29369c89e6e..65e31c090f9f 100644
> --- a/include/linux/property.h
> +++ b/include/linux/property.h
> @@ -144,6 +144,26 @@ static inline int device_property_read_u64(struct device *dev,
>  	return device_property_read_u64_array(dev, propname, val, 1);
>  }
>  
> +static inline int device_property_count_u8(struct device *dev, const char *propname)
> +{
> +	return device_property_read_u8_array(dev, propname, NULL, 0);
> +}
> +
> +static inline int device_property_count_u16(struct device *dev, const char *propname)
> +{
> +	return device_property_read_u16_array(dev, propname, NULL, 0);
> +}
> +
> +static inline int device_property_count_u32(struct device *dev, const char *propname)
> +{
> +	return device_property_read_u32_array(dev, propname, NULL, 0);
> +}
> +
> +static inline int device_property_count_u64(struct device *dev, const char *propname)
> +{
> +	return device_property_read_u64_array(dev, propname, NULL, 0);
> +}
> +
>  static inline bool fwnode_property_read_bool(const struct fwnode_handle *fwnode,
>  					     const char *propname)
>  {
> @@ -174,6 +194,30 @@ static inline int fwnode_property_read_u64(const struct fwnode_handle *fwnode,
>  	return fwnode_property_read_u64_array(fwnode, propname, val, 1);
>  }
>  
> +static inline int fwnode_property_count_u8(const struct fwnode_handle *fwnode,
> +					   const char *propname)
> +{
> +	return fwnode_property_read_u8_array(fwnode, propname, NULL, 0);
> +}
> +
> +static inline int fwnode_property_count_u16(const struct fwnode_handle *fwnode,
> +					    const char *propname)
> +{
> +	return fwnode_property_read_u16_array(fwnode, propname, NULL, 0);
> +}
> +
> +static inline int fwnode_property_count_u32(const struct fwnode_handle *fwnode,
> +					    const char *propname)
> +{
> +	return fwnode_property_read_u32_array(fwnode, propname, NULL, 0);
> +}
> +
> +static inline int fwnode_property_count_u64(const struct fwnode_handle *fwnode,
> +					    const char *propname)
> +{
> +	return fwnode_property_read_u64_array(fwnode, propname, NULL, 0);
> +}
> +
>  /**
>   * struct property_entry - "Built-in" device property representation.
>   * @name: Name of the property.

Off topic question: Shouldn't we also be able to read the number of
references a reference property holds? I mean, shouldn't
fwnode_property_get_referece_args() also return the number of
references in the property if called without the value parameter?

There can be "empty" references in the middle of the "array" of
references which cause the function to return -ENOENT just like when
called with index out of bounds, so the caller now has in practice
know how many references the property actually has in advance.


thanks,

-- 
heikki

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH v1] device property: Add helpers to count items in an array
  2019-05-20 13:37 ` Heikki Krogerus
@ 2019-05-20 13:48   ` Andy Shevchenko
  0 siblings, 0 replies; 4+ messages in thread
From: Andy Shevchenko @ 2019-05-20 13:48 UTC (permalink / raw)
  To: Heikki Krogerus; +Cc: Rafael J. Wysocki, linux-kernel, Sakari Ailus

On Mon, May 20, 2019 at 04:37:58PM +0300, Heikki Krogerus wrote:
> On Mon, May 20, 2019 at 03:38:48PM +0300, Andy Shevchenko wrote:
> > The usual pattern to allocate the necessary space for an array of properties is
> > to count them fist using:
> > 
> >   count = device_property_read_uXX_array(dev, propname, NULL, 0);
> > 
> > Introduce helpers device_property_count_uXX() to count items by supplying hard
> > coded last two parameters to device_property_readXX_array().
> > 
> > Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
> 
> OK by me. FWIW:
> 
> Reviewed-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>

Thanks!

> Off topic question: Shouldn't we also be able to read the number of
> references a reference property holds? I mean, shouldn't
> fwnode_property_get_referece_args() also return the number of
> references in the property if called without the value parameter?
> 
> There can be "empty" references in the middle of the "array" of
> references which cause the function to return -ENOENT just like when
> called with index out of bounds, so the caller now has in practice
> know how many references the property actually has in advance.

The idea is good, though I'm not so familiar with reference sub-API, don't know
what would be the best approach to cover all: ACPI, DT, swnode.

-- 
With Best Regards,
Andy Shevchenko



^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2019-05-20 13:49 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-05-20 12:38 [PATCH v1] device property: Add helpers to count items in an array Andy Shevchenko
2019-05-20 12:52 ` Sakari Ailus
2019-05-20 13:37 ` Heikki Krogerus
2019-05-20 13:48   ` Andy Shevchenko

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).