mirror of
git://git.yoctoproject.org/linux-yocto.git
synced 2025-10-22 23:13:01 +02:00
device property: Split property reading bool and presence test ops
The fwnode/device property API currently implement (fwnode|device)_property_read_bool() with (fwnode|device)_property_present(). That does not allow having different behavior depending on the backend. Specifically, the usage of (fwnode|device)_property_read_bool() on non-boolean properties is deprecated on DT. In order to add a warning on this deprecated use, these 2 APIs need separate ops for the backend. Acked-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Reviewed-by: Krzysztof Kozlowski <krzk@kernel.org> Acked-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> Link: https://lore.kernel.org/r/20250109-dt-type-warnings-v1-1-0150e32e716c@kernel.org Signed-off-by: Rob Herring (Arm) <robh@kernel.org>
This commit is contained in:
parent
de7323f6fc
commit
bb3914101f
|
@ -1656,6 +1656,7 @@ static int acpi_fwnode_irq_get(const struct fwnode_handle *fwnode,
|
|||
acpi_fwnode_device_dma_supported, \
|
||||
.device_get_dma_attr = acpi_fwnode_device_get_dma_attr, \
|
||||
.property_present = acpi_fwnode_property_present, \
|
||||
.property_read_bool = acpi_fwnode_property_present, \
|
||||
.property_read_int_array = \
|
||||
acpi_fwnode_property_read_int_array, \
|
||||
.property_read_string_array = \
|
||||
|
|
|
@ -70,6 +70,44 @@ bool fwnode_property_present(const struct fwnode_handle *fwnode,
|
|||
}
|
||||
EXPORT_SYMBOL_GPL(fwnode_property_present);
|
||||
|
||||
/**
|
||||
* device_property_read_bool - Return the value for a boolean property of a device
|
||||
* @dev: Device whose property is being checked
|
||||
* @propname: Name of the property
|
||||
*
|
||||
* Return if property @propname is true or false in the device firmware description.
|
||||
*
|
||||
* Return: true if property @propname is present. Otherwise, returns false.
|
||||
*/
|
||||
bool device_property_read_bool(const struct device *dev, const char *propname)
|
||||
{
|
||||
return fwnode_property_read_bool(dev_fwnode(dev), propname);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(device_property_read_bool);
|
||||
|
||||
/**
|
||||
* fwnode_property_read_bool - Return the value for a boolean property of a firmware node
|
||||
* @fwnode: Firmware node whose property to check
|
||||
* @propname: Name of the property
|
||||
*
|
||||
* Return if property @propname is true or false in the firmware description.
|
||||
*/
|
||||
bool fwnode_property_read_bool(const struct fwnode_handle *fwnode,
|
||||
const char *propname)
|
||||
{
|
||||
bool ret;
|
||||
|
||||
if (IS_ERR_OR_NULL(fwnode))
|
||||
return false;
|
||||
|
||||
ret = fwnode_call_bool_op(fwnode, property_read_bool, propname);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
return fwnode_call_bool_op(fwnode->secondary, property_read_bool, propname);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(fwnode_property_read_bool);
|
||||
|
||||
/**
|
||||
* device_property_read_u8_array - return a u8 array property of a device
|
||||
* @dev: Device to get the property of
|
||||
|
|
|
@ -677,6 +677,7 @@ static const struct fwnode_operations software_node_ops = {
|
|||
.get = software_node_get,
|
||||
.put = software_node_put,
|
||||
.property_present = software_node_property_present,
|
||||
.property_read_bool = software_node_property_present,
|
||||
.property_read_int_array = software_node_read_int_array,
|
||||
.property_read_string_array = software_node_read_string_array,
|
||||
.get_name = software_node_get_name,
|
||||
|
|
|
@ -965,6 +965,12 @@ of_fwnode_device_get_dma_attr(const struct fwnode_handle *fwnode)
|
|||
|
||||
static bool of_fwnode_property_present(const struct fwnode_handle *fwnode,
|
||||
const char *propname)
|
||||
{
|
||||
return of_property_present(to_of_node(fwnode), propname);
|
||||
}
|
||||
|
||||
static bool of_fwnode_property_read_bool(const struct fwnode_handle *fwnode,
|
||||
const char *propname)
|
||||
{
|
||||
return of_property_read_bool(to_of_node(fwnode), propname);
|
||||
}
|
||||
|
@ -1562,6 +1568,7 @@ const struct fwnode_operations of_fwnode_ops = {
|
|||
.device_dma_supported = of_fwnode_device_dma_supported,
|
||||
.device_get_dma_attr = of_fwnode_device_get_dma_attr,
|
||||
.property_present = of_fwnode_property_present,
|
||||
.property_read_bool = of_fwnode_property_read_bool,
|
||||
.property_read_int_array = of_fwnode_property_read_int_array,
|
||||
.property_read_string_array = of_fwnode_property_read_string_array,
|
||||
.get_name = of_fwnode_get_name,
|
||||
|
|
|
@ -112,6 +112,7 @@ struct fwnode_reference_args {
|
|||
* @device_is_available: Return true if the device is available.
|
||||
* @device_get_match_data: Return the device driver match data.
|
||||
* @property_present: Return true if a property is present.
|
||||
* @property_read_bool: Return a boolean property value.
|
||||
* @property_read_int_array: Read an array of integer properties. Return zero on
|
||||
* success, a negative error code otherwise.
|
||||
* @property_read_string_array: Read an array of string properties. Return zero
|
||||
|
@ -141,6 +142,8 @@ struct fwnode_operations {
|
|||
(*device_get_dma_attr)(const struct fwnode_handle *fwnode);
|
||||
bool (*property_present)(const struct fwnode_handle *fwnode,
|
||||
const char *propname);
|
||||
bool (*property_read_bool)(const struct fwnode_handle *fwnode,
|
||||
const char *propname);
|
||||
int (*property_read_int_array)(const struct fwnode_handle *fwnode,
|
||||
const char *propname,
|
||||
unsigned int elem_size, void *val,
|
||||
|
|
|
@ -1271,7 +1271,9 @@ static inline bool of_property_read_bool(const struct device_node *np,
|
|||
*/
|
||||
static inline bool of_property_present(const struct device_node *np, const char *propname)
|
||||
{
|
||||
return of_property_read_bool(np, propname);
|
||||
struct property *prop = of_find_property(np, propname, NULL);
|
||||
|
||||
return prop ? true : false;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -37,6 +37,7 @@ struct fwnode_handle *__dev_fwnode(struct device *dev);
|
|||
struct device *: __dev_fwnode)(dev)
|
||||
|
||||
bool device_property_present(const struct device *dev, const char *propname);
|
||||
bool device_property_read_bool(const struct device *dev, const char *propname);
|
||||
int device_property_read_u8_array(const struct device *dev, const char *propname,
|
||||
u8 *val, size_t nval);
|
||||
int device_property_read_u16_array(const struct device *dev, const char *propname,
|
||||
|
@ -54,6 +55,8 @@ int device_property_match_string(const struct device *dev,
|
|||
|
||||
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_u8_array(const struct fwnode_handle *fwnode,
|
||||
const char *propname, u8 *val,
|
||||
size_t nval);
|
||||
|
@ -207,12 +210,6 @@ int fwnode_irq_get_byname(const struct fwnode_handle *fwnode, const char *name);
|
|||
|
||||
unsigned int device_get_child_node_count(const struct device *dev);
|
||||
|
||||
static inline bool device_property_read_bool(const struct device *dev,
|
||||
const char *propname)
|
||||
{
|
||||
return device_property_present(dev, propname);
|
||||
}
|
||||
|
||||
static inline int device_property_read_u8(const struct device *dev,
|
||||
const char *propname, u8 *val)
|
||||
{
|
||||
|
@ -263,12 +260,6 @@ static inline int device_property_string_array_count(const struct device *dev,
|
|||
return device_property_read_string_array(dev, propname, NULL, 0);
|
||||
}
|
||||
|
||||
static inline bool fwnode_property_read_bool(const struct fwnode_handle *fwnode,
|
||||
const char *propname)
|
||||
{
|
||||
return fwnode_property_present(fwnode, propname);
|
||||
}
|
||||
|
||||
static inline int fwnode_property_read_u8(const struct fwnode_handle *fwnode,
|
||||
const char *propname, u8 *val)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue
Block a user