Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a967fbfa authored by Axel Lin's avatar Axel Lin Committed by Mark Brown
Browse files

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: default avatarAxel Lin <axel.lin@gmail.com>
Signed-off-by: default avatarMark Brown <broonie@opensource.wolfsonmicro.com>
parent b4bc9ef6
Loading
Loading
Loading
Loading
+21 −31
Original line number Diff line number Diff line
@@ -108,15 +108,6 @@ static int get_isink_val(int min_uA, int max_uA, u16 *setting)
	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)
{
	if (mV < 1800)
@@ -671,10 +662,22 @@ static int wm8350_ldo_set_suspend_disable(struct regulator_dev *rdev)
	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,
				  int max_uV)
{
	int mV;
	int volt, sel;
	int min_mV = min_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)
		return -EINVAL;

	if (min_mV < 1800) {
		/* step size is 50mV < 1800mV */
		mV = (min_mV - 851) / 50;
		if (wm8350_ldo_val_to_mvolts(mV) > max_mV)
			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;
}
	if (min_mV < 1800) /* step size is 50mV < 1800mV */
		sel = DIV_ROUND_UP(min_uV - 900, 50);
	else /* step size is 100mV > 1800mV */
		sel = DIV_ROUND_UP(min_uV - 1800, 100) + 16;

static int wm8350_ldo_list_voltage(struct regulator_dev *rdev,
				    unsigned selector)
{
	if (selector > WM8350_LDO1_VSEL_MASK)
	volt = wm8350_ldo_list_voltage(rdev, sel);
	if (volt < min_uV || volt > max_uV)
		return -EINVAL;
	return wm8350_ldo_val_to_mvolts(selector) * 1000;

	return sel;
}

int wm8350_dcdc_set_slot(struct wm8350 *wm8350, int dcdc, u16 start,