Message ID | 20250326171411.590681-4-remo@buenzli.dev (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | More Rust bindings for device property reads | expand |
On Wed, Mar 26, 2025 at 06:13:42PM +0100, Remo Senekowitsch wrote: > The rust bindings for reading device properties has a single > implementation supporting differing sizes of integers. The fwnode C API > already has a similar interface, but it is not exposed with the > fwnode_property_ API. Add the fwnode_property_read_int_array() wrapper. ... > +EXPORT_SYMBOL_GPL(fwnode_property_read_int_array); I'm not sure about this. We have a lot of assumptions in the code that the arrays beneath are only represented by the selected number of integer types. This opens a Pandora's box, e.g., reading in u24, which is not supported by the upper layers.. > +int fwnode_property_read_int_array(const struct fwnode_handle *fwnode, const char *propname, > + unsigned int elem_size, void *val, size_t nval);
diff --git a/drivers/base/property.c b/drivers/base/property.c index c1392743d..64d5b7055 100644 --- a/drivers/base/property.c +++ b/drivers/base/property.c @@ -292,10 +292,10 @@ int device_property_match_string(const struct device *dev, const char *propname, } EXPORT_SYMBOL_GPL(device_property_match_string); -static int fwnode_property_read_int_array(const struct fwnode_handle *fwnode, - const char *propname, - unsigned int elem_size, void *val, - size_t nval) +int fwnode_property_read_int_array(const struct fwnode_handle *fwnode, + const char *propname, + unsigned int elem_size, void *val, + size_t nval) { int ret; @@ -310,6 +310,7 @@ static int fwnode_property_read_int_array(const struct fwnode_handle *fwnode, return fwnode_call_int_op(fwnode->secondary, property_read_int_array, propname, elem_size, val, nval); } +EXPORT_SYMBOL_GPL(fwnode_property_read_int_array); /** * fwnode_property_read_u8_array - return a u8 array property of firmware node diff --git a/include/linux/property.h b/include/linux/property.h index e214ecd24..441a1ad76 100644 --- a/include/linux/property.h +++ b/include/linux/property.h @@ -57,6 +57,8 @@ bool fwnode_property_present(const struct fwnode_handle *fwnode, const char *propname); bool fwnode_property_read_bool(const struct fwnode_handle *fwnode, const char *propname); +int fwnode_property_read_int_array(const struct fwnode_handle *fwnode, const char *propname, + unsigned int elem_size, void *val, size_t nval); int fwnode_property_read_u8_array(const struct fwnode_handle *fwnode, const char *propname, u8 *val, size_t nval);