예제 #1
0
static int wm831x_buckv_get_voltage(struct regulator_dev *rdev)
{
	struct wm831x_dcdc *dcdc = rdev_get_drvdata(rdev);

	if (dcdc->dvs_gpio && dcdc->dvs_gpio_state)
		return wm831x_buckv_list_voltage(rdev, dcdc->dvs_vsel);
	else
		return wm831x_buckv_list_voltage(rdev, dcdc->on_vsel);
}
예제 #2
0
static int wm831x_buckv_select_max_voltage(struct regulator_dev *rdev,
					   int min_uV, int max_uV)
{
	u16 vsel;

	if (max_uV < 600000 || max_uV > 1800000)
		return -EINVAL;

	vsel = ((max_uV - 600000) / 12500) + 8;

	if (wm831x_buckv_list_voltage(rdev, vsel) < min_uV ||
	    wm831x_buckv_list_voltage(rdev, vsel) < max_uV)
		return -EINVAL;

	return vsel;
}
예제 #3
0
static int wm831x_buckv_select_min_voltage(struct regulator_dev *rdev,
					   int min_uV, int max_uV)
{
	u16 vsel;

	if (min_uV < 600000)
		vsel = 0;
	else if (min_uV <= 1800000)
		vsel = ((min_uV - 600000) / 12500) + 8;
	else
		return -EINVAL;

	if (wm831x_buckv_list_voltage(rdev, vsel) > max_uV)
		return -EINVAL;

	return vsel;
}