mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-16 00:51:51 -04:00
lib/linear_ranges: Add linear_range_get_selector_high_array
Add a helper function to find the selector for a given value in a linear range array. The selector should be such that the value it represents should be higher or equal to the given value. Signed-off-by: Amit Sunil Dhamne <amitsd@google.com> Reviewed-by: Matti Vaittinen <mazziesaccount@gmail.com> Acked-by: Mark Brown <broonie@kernel.org> Link: https://patch.msgid.link/20260325-max77759-charger-v9-4-4486dd297adc@google.com Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
b422f7c072
commit
f23388d0f6
@@ -57,5 +57,8 @@ void linear_range_get_selector_within(const struct linear_range *r,
|
||||
int linear_range_get_selector_low_array(const struct linear_range *r,
|
||||
int ranges, unsigned int val,
|
||||
unsigned int *selector, bool *found);
|
||||
int linear_range_get_selector_high_array(const struct linear_range *r,
|
||||
int ranges, unsigned int val,
|
||||
unsigned int *selector, bool *found);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -241,6 +241,42 @@ int linear_range_get_selector_high(const struct linear_range *r,
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(linear_range_get_selector_high);
|
||||
|
||||
/**
|
||||
* linear_range_get_selector_high_array - return linear range selector for value
|
||||
* @r: pointer to array of linear ranges where selector is looked from
|
||||
* @ranges: amount of ranges to scan from array
|
||||
* @val: value for which the selector is searched
|
||||
* @selector: address where found selector value is updated
|
||||
* @found: flag to indicate that given value was in the range
|
||||
*
|
||||
* Scan array of ranges for selector for which range value matches given
|
||||
* input value. Value is matching if it is equal or higher than given value
|
||||
* If given value is found to be in a range scanning is stopped and @found is
|
||||
* set true. If a range with values greater than given value is found
|
||||
* but the range min is being greater than given value, then the range's
|
||||
* lowest selector is updated to @selector and scanning is stopped.
|
||||
*
|
||||
* Return: 0 on success, -EINVAL if range array is invalid or does not contain
|
||||
* range with a value greater or equal to given value
|
||||
*/
|
||||
int linear_range_get_selector_high_array(const struct linear_range *r,
|
||||
int ranges, unsigned int val,
|
||||
unsigned int *selector, bool *found)
|
||||
{
|
||||
int i;
|
||||
int ret;
|
||||
|
||||
for (i = 0; i < ranges; i++) {
|
||||
ret = linear_range_get_selector_high(&r[i], val, selector,
|
||||
found);
|
||||
if (!ret)
|
||||
return 0;
|
||||
}
|
||||
|
||||
return -EINVAL;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(linear_range_get_selector_high_array);
|
||||
|
||||
/**
|
||||
* linear_range_get_selector_within - return linear range selector for value
|
||||
* @r: pointer to linear range where selector is looked from
|
||||
|
||||
Reference in New Issue
Block a user