mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-25 07:10:50 +07:00
regulator: wm8350: Use wm8350_ldo_list_voltage instead of open code to verify selected voltage
Call wm8350_ldo_list_voltage() instead of open code to verify selected voltage falls within specified range. Use wm8350_ldo_list_voltage() here is less error prone. wm8350_ldo_val_to_mvolts() is only used in wm8350_ldo_list_voltage now, so remove it and move the implementation to wm8350_ldo_list_voltage(). This patch also include below small changes in wm8350_ldo_map_voltage: 1. wm8350_ldo_map_voltage() returns selector, thus rename variable mV to sel. 2. Use DIV_ROUND_UP macro to calculate selector. Signed-off-by: Axel Lin <axel.lin@gmail.com> Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
This commit is contained in:
parent
b4bc9ef625
commit
a967fbfaca
@ -108,15 +108,6 @@ static int get_isink_val(int min_uA, int max_uA, u16 *setting)
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline int wm8350_ldo_val_to_mvolts(unsigned int val)
|
|
||||||
{
|
|
||||||
if (val < 16)
|
|
||||||
return (val * 50) + 900;
|
|
||||||
else
|
|
||||||
return ((val - 16) * 100) + 1800;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline unsigned int wm8350_ldo_mvolts_to_val(int mV)
|
static inline unsigned int wm8350_ldo_mvolts_to_val(int mV)
|
||||||
{
|
{
|
||||||
if (mV < 1800)
|
if (mV < 1800)
|
||||||
@ -671,10 +662,22 @@ static int wm8350_ldo_set_suspend_disable(struct regulator_dev *rdev)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int wm8350_ldo_list_voltage(struct regulator_dev *rdev,
|
||||||
|
unsigned selector)
|
||||||
|
{
|
||||||
|
if (selector > WM8350_LDO1_VSEL_MASK)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
if (selector < 16)
|
||||||
|
return (selector * 50000) + 900000;
|
||||||
|
else
|
||||||
|
return ((selector - 16) * 100000) + 1800000;
|
||||||
|
}
|
||||||
|
|
||||||
static int wm8350_ldo_map_voltage(struct regulator_dev *rdev, int min_uV,
|
static int wm8350_ldo_map_voltage(struct regulator_dev *rdev, int min_uV,
|
||||||
int max_uV)
|
int max_uV)
|
||||||
{
|
{
|
||||||
int mV;
|
int volt, sel;
|
||||||
int min_mV = min_uV / 1000;
|
int min_mV = min_uV / 1000;
|
||||||
int max_mV = max_uV / 1000;
|
int max_mV = max_uV / 1000;
|
||||||
|
|
||||||
@ -683,29 +686,16 @@ static int wm8350_ldo_map_voltage(struct regulator_dev *rdev, int min_uV,
|
|||||||
if (max_mV < 900 || max_mV > 3300)
|
if (max_mV < 900 || max_mV > 3300)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
if (min_mV < 1800) {
|
if (min_mV < 1800) /* step size is 50mV < 1800mV */
|
||||||
/* step size is 50mV < 1800mV */
|
sel = DIV_ROUND_UP(min_uV - 900, 50);
|
||||||
mV = (min_mV - 851) / 50;
|
else /* step size is 100mV > 1800mV */
|
||||||
if (wm8350_ldo_val_to_mvolts(mV) > max_mV)
|
sel = DIV_ROUND_UP(min_uV - 1800, 100) + 16;
|
||||||
return -EINVAL;
|
|
||||||
BUG_ON(wm8350_ldo_val_to_mvolts(mV) < min_mV);
|
|
||||||
} else {
|
|
||||||
/* step size is 100mV > 1800mV */
|
|
||||||
mV = ((min_mV - 1701) / 100) + 16;
|
|
||||||
if (wm8350_ldo_val_to_mvolts(mV) > max_mV)
|
|
||||||
return -EINVAL;
|
|
||||||
BUG_ON(wm8350_ldo_val_to_mvolts(mV) < min_mV);
|
|
||||||
}
|
|
||||||
|
|
||||||
return mV;
|
volt = wm8350_ldo_list_voltage(rdev, sel);
|
||||||
}
|
if (volt < min_uV || volt > max_uV)
|
||||||
|
|
||||||
static int wm8350_ldo_list_voltage(struct regulator_dev *rdev,
|
|
||||||
unsigned selector)
|
|
||||||
{
|
|
||||||
if (selector > WM8350_LDO1_VSEL_MASK)
|
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
return wm8350_ldo_val_to_mvolts(selector) * 1000;
|
|
||||||
|
return sel;
|
||||||
}
|
}
|
||||||
|
|
||||||
int wm8350_dcdc_set_slot(struct wm8350 *wm8350, int dcdc, u16 start,
|
int wm8350_dcdc_set_slot(struct wm8350 *wm8350, int dcdc, u16 start,
|
||||||
|
Loading…
Reference in New Issue
Block a user