[U-Boot] [PATCH 1/8] dm: add dev_read_u32()
Masahiro Yamada
yamada.masahiro at socionext.com
Fri Dec 29 17:00:05 UTC 2017
dev_read_u32_default() always returns something even when the property
is missing. So, it is impossible to do nothing in the case. One
solution is to use ofnode_read_u32() instead, but adding dev_read_u32()
will be helpful.
BTW, Linux has an equvalent function, device_property_read_u32();
it is clearer that it reads a property. I cannot understand the
behavior of dev_read_u32() from its name.
Signed-off-by: Masahiro Yamada <yamada.masahiro at socionext.com>
---
BTW, I do not understand why we want *_default helpers.
It is pretty easy to do equivalent without _default.
priv->val = default; /* default in case property is missing */
dev_read_u32(dev, "foo-property", &priv->val);
On the other hand, if we want to do nothing for missing property,
we will end up with clumsy code.
/* we do not want to overwrite priv->val if property is missing */
if (dev_read_bool(dev, "foo-property") {
/* default value '0' will not be used anyway */
priv->val = dev_read_u32_default(dev, "foo-property", 0);
}
One more BTW, it was just painful to write equivalent code twice
for CONFIG_DM_DEV_READ_INLINE.
drivers/core/read.c | 5 +++++
include/dm/read.h | 16 ++++++++++++++++
2 files changed, 21 insertions(+)
diff --git a/drivers/core/read.c b/drivers/core/read.c
index 5d440ce..e027041 100644
--- a/drivers/core/read.c
+++ b/drivers/core/read.c
@@ -10,6 +10,11 @@
#include <mapmem.h>
#include <dm/of_access.h>
+int dev_read_u32(struct udevice *dev, const char *propname, u32 *outp)
+{
+ return ofnode_read_u32(dev_ofnode(dev), propname, outp);
+}
+
int dev_read_u32_default(struct udevice *dev, const char *propname, int def)
{
return ofnode_read_u32_default(dev_ofnode(dev), propname, def);
diff --git a/include/dm/read.h b/include/dm/read.h
index 8114037..5cacec8 100644
--- a/include/dm/read.h
+++ b/include/dm/read.h
@@ -46,6 +46,16 @@ static inline bool dev_of_valid(struct udevice *dev)
#ifndef CONFIG_DM_DEV_READ_INLINE
/**
+ * dev_read_u32() - read a 32-bit integer from a device's DT property
+ *
+ * @dev: device to read DT property from
+ * @propname: name of the property to read from
+ * @outp: place to put value (if found)
+ * @return 0 if OK, -ve on error
+ */
+int dev_read_u32(struct udevice *dev, const char *propname, u32 *outp);
+
+/**
* dev_read_u32_default() - read a 32-bit integer from a device's DT property
*
* @dev: device to read DT property from
@@ -412,6 +422,12 @@ int dev_read_resource_byname(struct udevice *dev, const char *name,
#else /* CONFIG_DM_DEV_READ_INLINE is enabled */
+static inline int dev_read_u32(struct udevice *dev,
+ const char *propname, u32 *outp)
+{
+ return ofnode_read_u32(dev_ofnode(dev), propname, outp);
+}
+
static inline int dev_read_u32_default(struct udevice *dev,
const char *propname, int def)
{
--
2.7.4
More information about the U-Boot
mailing list