Commit bb391410 authored by Rob Herring (Arm)'s avatar Rob Herring (Arm)
Browse files

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: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Reviewed-by: default avatarKrzysztof Kozlowski <krzk@kernel.org>
Acked-by: default avatarRafael 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: default avatarRob Herring (Arm) <robh@kernel.org>
parent de7323f6
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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 =				\
+38 −0
Original line number Diff line number Diff line
@@ -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
+1 −0
Original line number Diff line number Diff line
@@ -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,
+7 −0
Original line number Diff line number Diff line
@@ -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,
+3 −0
Original line number Diff line number Diff line
@@ -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,
Loading