mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-24 03:24:55 +08:00
device property: Add fwnode_property_match_property_string()
Sometimes the users want to match the single value string property against an array of predefined strings. Create a helper for them. Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Acked-by: Rafael J. Wysocki <rafael@kernel.org> Link: https://lore.kernel.org/r/20230808162800.61651-3-andriy.shevchenko@linux.intel.com Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
This commit is contained in:
parent
086386311b
commit
fac4a53575
@ -498,6 +498,41 @@ out_free:
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(fwnode_property_match_string);
|
||||
|
||||
/**
|
||||
* fwnode_property_match_property_string - find a property string value in an array and return index
|
||||
* @fwnode: Firmware node to get the property of
|
||||
* @propname: Name of the property holding the string value
|
||||
* @array: String array to search in
|
||||
* @n: Size of the @array
|
||||
*
|
||||
* Find a property string value in a given @array and if it is found return
|
||||
* the index back.
|
||||
*
|
||||
* Return: index, starting from %0, if the string value was found in the @array (success),
|
||||
* %-ENOENT when the string value was not found in the @array,
|
||||
* %-EINVAL if given arguments are not valid,
|
||||
* %-ENODATA if the property does not have a value,
|
||||
* %-EPROTO or %-EILSEQ if the property is not a string,
|
||||
* %-ENXIO if no suitable firmware interface is present.
|
||||
*/
|
||||
int fwnode_property_match_property_string(const struct fwnode_handle *fwnode,
|
||||
const char *propname, const char * const *array, size_t n)
|
||||
{
|
||||
const char *string;
|
||||
int ret;
|
||||
|
||||
ret = fwnode_property_read_string(fwnode, propname, &string);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
ret = match_string(array, n, string);
|
||||
if (ret < 0)
|
||||
ret = -ENOENT;
|
||||
|
||||
return ret;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(fwnode_property_match_property_string);
|
||||
|
||||
/**
|
||||
* fwnode_property_get_reference_args() - Find a reference with arguments
|
||||
* @fwnode: Firmware node where to look for the reference
|
||||
|
@ -98,6 +98,18 @@ static inline bool device_is_compatible(const struct device *dev, const char *co
|
||||
return fwnode_device_is_compatible(dev_fwnode(dev), compat);
|
||||
}
|
||||
|
||||
int fwnode_property_match_property_string(const struct fwnode_handle *fwnode,
|
||||
const char *propname,
|
||||
const char * const *array, size_t n);
|
||||
|
||||
static inline
|
||||
int device_property_match_property_string(const struct device *dev,
|
||||
const char *propname,
|
||||
const char * const *array, size_t n)
|
||||
{
|
||||
return fwnode_property_match_property_string(dev_fwnode(dev), propname, array, n);
|
||||
}
|
||||
|
||||
int fwnode_property_get_reference_args(const struct fwnode_handle *fwnode,
|
||||
const char *prop, const char *nargs_prop,
|
||||
unsigned int nargs, unsigned int index,
|
||||
|
Loading…
Reference in New Issue
Block a user