Commit e4817477 authored by Sakari Ailus's avatar Sakari Ailus Committed by Rafael J. Wysocki
Browse files

device property: Read strings using string array reading functions



Always read strings using of_property_read_string_array() instead of
of_property_read_string(). This allows using a single operation struct
callback for accessing strings.

Same for pset_prop_read_string_array() and pset_prop_read_string().

Signed-off-by: default avatarSakari Ailus <sakari.ailus@linux.intel.com>
Reviewed-by: default avatarMika Westerberg <mika.westerberg@linux.intel.com>
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
parent b0b027ce
Loading
Loading
Loading
Loading
+1 −44
Original line number Diff line number Diff line
@@ -180,31 +180,6 @@ static int pset_prop_read_string_array(struct property_set *pset,
	return array_len;
}

static int pset_prop_read_string(struct property_set *pset,
				 const char *propname, const char **strings)
{
	const struct property_entry *prop;
	const char * const *pointer;

	prop = pset_prop_get(pset, propname);
	if (!prop)
		return -EINVAL;
	if (!prop->is_string)
		return -EILSEQ;
	if (prop->is_array) {
		pointer = prop->pointer.str;
		if (!pointer)
			return -ENODATA;
	} else {
		pointer = &prop->value.str;
		if (*pointer && strnlen(*pointer, prop->length) >= prop->length)
			return -EILSEQ;
	}

	*strings = *pointer;
	return 0;
}

struct fwnode_handle *dev_fwnode(struct device *dev)
{
	return IS_ENABLED(CONFIG_OF) && dev->of_node ?
@@ -582,19 +557,6 @@ static int __fwnode_property_read_string_array(struct fwnode_handle *fwnode,
	return -ENXIO;
}

static int __fwnode_property_read_string(struct fwnode_handle *fwnode,
					 const char *propname, const char **val)
{
	if (is_of_node(fwnode))
		return of_property_read_string(to_of_node(fwnode), propname, val);
	else if (is_acpi_node(fwnode))
		return acpi_node_prop_read(fwnode, propname, DEV_PROP_STRING,
					   val, 1);
	else if (is_pset_node(fwnode))
		return pset_prop_read_string(to_pset_node(fwnode), propname, val);
	return -ENXIO;
}

/**
 * fwnode_property_read_string_array - return string array property of a node
 * @fwnode: Firmware node to get the property of
@@ -646,13 +608,8 @@ EXPORT_SYMBOL_GPL(fwnode_property_read_string_array);
int fwnode_property_read_string(struct fwnode_handle *fwnode,
				const char *propname, const char **val)
{
	int ret;
	int ret = fwnode_property_read_string_array(fwnode, propname, val, 1);

	ret = __fwnode_property_read_string(fwnode, propname, val);
	if (ret == -EINVAL && !IS_ERR_OR_NULL(fwnode) &&
	    !IS_ERR_OR_NULL(fwnode->secondary))
		ret = __fwnode_property_read_string(fwnode->secondary,
						    propname, val);
	return ret < 0 ? ret : 0;
}
EXPORT_SYMBOL_GPL(fwnode_property_read_string);