From cd9e20a9fbeb93b4679fd7268b06cd2345dc34f4 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=E5=BC=A0=E6=99=B4?= Date: Sat, 28 Jul 2012 16:18:32 +0800 Subject: [PATCH] rk30:sdk:regulator get voltage form pmic registers when set voltage failed --- drivers/regulator/wm831x-dcdc.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/drivers/regulator/wm831x-dcdc.c b/drivers/regulator/wm831x-dcdc.c index edff1e53ebdd..c4ac471e0832 100755 --- a/drivers/regulator/wm831x-dcdc.c +++ b/drivers/regulator/wm831x-dcdc.c @@ -358,7 +358,10 @@ static int wm831x_buckv_set_voltage(struct regulator_dev *rdev, /* Always set the ON status to the minimum voltage */ ret = wm831x_set_bits(wm831x, on_reg, WM831X_DC1_ON_VSEL_MASK, vsel); if (ret < 0) + { + dcdc->on_vsel = 0; return ret; + } dcdc->on_vsel = vsel; if (!dcdc->dvs_gpio) @@ -412,7 +415,12 @@ static int wm831x_buckv_set_suspend_voltage(struct regulator_dev *rdev, static int wm831x_buckv_get_voltage(struct regulator_dev *rdev) { struct wm831x_dcdc *dcdc = rdev_get_drvdata(rdev); - + struct wm831x *wm831x = dcdc->wm831x; + int on_reg = dcdc->base + WM831X_DCDC_ON_CONFIG; + if (dcdc->on_vsel == 0){ + dcdc->on_vsel = wm831x_reg_read(wm831x,on_reg); + dcdc->on_vsel = dcdc->on_vsel & WM831X_DC1_DVS_VSEL_MASK; + } if (dcdc->dvs_gpio && dcdc->dvs_gpio_state) return wm831x_buckv_list_voltage(rdev, dcdc->dvs_vsel); else -- 2.34.1