forked from Minki/linux
lib: add linear range get selector within
Add linear range get selector within for choose closest selector between minimum and maximum selector. Signed-off-by: Gene Chen <gene_chen@richtek.com> Reviewed-by: Matti Vaittinen <matti.vaittinen@fi.rohmeurope.com> Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
This commit is contained in:
parent
e73f0f0ee7
commit
e12ef7bf34
@ -41,6 +41,8 @@ int linear_range_get_selector_low(const struct linear_range *r,
|
||||
int linear_range_get_selector_high(const struct linear_range *r,
|
||||
unsigned int val, unsigned int *selector,
|
||||
bool *found);
|
||||
void linear_range_get_selector_within(const struct linear_range *r,
|
||||
unsigned int val, unsigned int *selector);
|
||||
int linear_range_get_selector_low_array(const struct linear_range *r,
|
||||
int ranges, unsigned int val,
|
||||
unsigned int *selector, bool *found);
|
||||
|
@ -241,5 +241,36 @@ int linear_range_get_selector_high(const struct linear_range *r,
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(linear_range_get_selector_high);
|
||||
|
||||
/**
|
||||
* linear_range_get_selector_within - return linear range selector for value
|
||||
* @r: pointer to linear range where selector is looked from
|
||||
* @val: value for which the selector is searched
|
||||
* @selector: address where found selector value is updated
|
||||
*
|
||||
* Return selector for which range value is closest match for given
|
||||
* input value. Value is matching if it is equal or lower than given
|
||||
* value. But return maximum selector if given value is higher than
|
||||
* maximum value.
|
||||
*/
|
||||
void linear_range_get_selector_within(const struct linear_range *r,
|
||||
unsigned int val, unsigned int *selector)
|
||||
{
|
||||
if (r->min > val) {
|
||||
*selector = r->min_sel;
|
||||
return;
|
||||
}
|
||||
|
||||
if (linear_range_get_max_value(r) < val) {
|
||||
*selector = r->max_sel;
|
||||
return;
|
||||
}
|
||||
|
||||
if (r->step == 0)
|
||||
*selector = r->min_sel;
|
||||
else
|
||||
*selector = (val - r->min) / r->step + r->min_sel;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(linear_range_get_selector_within);
|
||||
|
||||
MODULE_DESCRIPTION("linear-ranges helper");
|
||||
MODULE_LICENSE("GPL");
|
||||
|
Loading…
Reference in New Issue
Block a user