dm: core: add function dev_write_u32_array() to write u32 array values

Change-Id: I6633395c7704eefff59c2145562fe239e21f3b35
Signed-off-by: Joseph Chen <chenjh@rock-chips.com>
This commit is contained in:
Joseph Chen 2019-06-03 12:55:59 +08:00 committed by Jianhong Chen
parent 7b4692447b
commit 04539b46d5
6 changed files with 90 additions and 0 deletions

View File

@ -485,6 +485,25 @@ int of_read_u32_array(const struct device_node *np, const char *propname,
return 0;
}
int of_write_u32_array(const struct device_node *np, const char *propname,
u32 *values, size_t sz)
{
__be32 *val;
debug("%s: %s: ", __func__, propname);
val = of_find_property_value_of_size(np, propname,
sz * sizeof(*values));
if (IS_ERR(val))
return PTR_ERR(val);
debug("size %zd\n", sz);
while (sz--)
*val++ = cpu_to_be32p(values++);
return 0;
}
int of_property_match_string(const struct device_node *np, const char *propname,
const char *string)
{

View File

@ -160,6 +160,21 @@ int ofnode_read_u32_array(ofnode node, const char *propname,
}
}
int ofnode_write_u32_array(ofnode node, const char *propname,
u32 *values, size_t sz)
{
assert(ofnode_valid(node));
debug("%s: %s: ", __func__, propname);
if (ofnode_is_np(node)) {
return of_write_u32_array(ofnode_to_np(node), propname,
values, sz);
} else {
return fdt_setprop((void *)gd->fdt_blob, ofnode_to_offset(node),
propname, values, sz);
}
}
ofnode ofnode_first_subnode(ofnode node)
{
assert(ofnode_valid(node));

View File

@ -175,6 +175,14 @@ int dev_read_u32_array(struct udevice *dev, const char *propname,
return ofnode_read_u32_array(dev_ofnode(dev), propname, out_values, sz);
}
int dev_write_u32_array(struct udevice *dev, const char *propname,
u32 *values, size_t sz)
{
if (!dev_of_valid(dev))
return -EINVAL;
return ofnode_write_u32_array(dev_ofnode(dev), propname, values, sz);
}
const uint8_t *dev_read_u8_array_ptr(struct udevice *dev, const char *propname,
size_t sz)
{

View File

@ -251,6 +251,22 @@ int of_property_read_u64(const struct device_node *np, const char *propname,
int of_read_u32_array(const struct device_node *np, const char *propname,
u32 *out_values, size_t sz);
/**
* of_write_u32_array() - Find and write an array of 32 bit integers
*
* Search for a property in a device node and write 32-bit value(s) to
* it.
*
* @np: device node from which the property value is to be read.
* @propname: name of the property to be searched.
* @values: pointer to update value, modified only if return value is 0.
* @sz: number of array elements to read
* @return 0 on success, -EINVAL if the property does not exist, -ENODATA
* if property does not have a value, and -EOVERFLOW is longer than sz.
*/
int of_write_u32_array(const struct device_node *np, const char *propname,
u32 *values, size_t sz);
/**
* of_property_match_string() - Find string in a list and return index
*

View File

@ -274,6 +274,19 @@ const char *ofnode_read_string(ofnode node, const char *propname);
int ofnode_read_u32_array(ofnode node, const char *propname,
u32 *out_values, size_t sz);
/**
* ofnode_write_u32_array() - Find and write an array of 32 bit integers
*
* @node: valid node reference to read property from
* @propname: name of the property to read
* @values: pointer to update value, modified only if return value is 0
* @sz: number of array elements to read
* @return 0 on success, -EINVAL if the property does not exist, -ENODATA
* if property does not have a value, and -EOVERFLOW is longer than sz.
*/
int ofnode_write_u32_array(ofnode node, const char *propname,
u32 *values, size_t sz);
/**
* ofnode_read_bool() - read a boolean value from a property
*

View File

@ -341,6 +341,25 @@ int dev_read_alias_seq(struct udevice *dev, int *devnump);
int dev_read_u32_array(struct udevice *dev, const char *propname,
u32 *out_values, size_t sz);
/**
* dev_write_u32_array() - Find and write an array of 32 bit integers
*
* Search for a property in a device node and write 32-bit value(s) to
* it.
*
* The out_values is modified only if a valid u32 value can be decoded.
*
* @dev: device to look up
* @propname: name of the property to read
* @values: pointer to update value, modified only if return value is 0
* @sz: number of array elements to read
* @return 0 on success, -EINVAL if the property does not exist, -ENODATA if
* property does not have a value, and -EOVERFLOW if the property data isn't
* large enough.
*/
int dev_write_u32_array(struct udevice *dev, const char *propname,
u32 *values, size_t sz);
/**
* dev_read_first_subnode() - find the first subnode of a device's node
*