regulator: Implement enable_time() for WM835x ISINKs

Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
This commit is contained in:
Mark Brown 2010-01-04 17:24:01 +00:00 committed by Liam Girdwood
parent 31aae2beeb
commit 75c8ac22e4
1 changed files with 46 additions and 0 deletions

View File

@ -290,6 +290,51 @@ static int wm8350_isink_is_enabled(struct regulator_dev *rdev)
return -EINVAL; return -EINVAL;
} }
static int wm8350_isink_enable_time(struct regulator_dev *rdev)
{
struct wm8350 *wm8350 = rdev_get_drvdata(rdev);
int isink = rdev_get_id(rdev);
int reg;
switch (isink) {
case WM8350_ISINK_A:
reg = wm8350_reg_read(wm8350, WM8350_CSA_FLASH_CONTROL);
break;
case WM8350_ISINK_B:
reg = wm8350_reg_read(wm8350, WM8350_CSB_FLASH_CONTROL);
break;
default:
return -EINVAL;
}
if (reg & WM8350_CS1_FLASH_MODE) {
switch (reg & WM8350_CS1_ON_RAMP_MASK) {
case 0:
return 0;
case 1:
return 1950;
case 2:
return 3910;
case 3:
return 7800;
}
} else {
switch (reg & WM8350_CS1_ON_RAMP_MASK) {
case 0:
return 0;
case 1:
return 250000;
case 2:
return 500000;
case 3:
return 1000000;
}
}
return -EINVAL;
}
int wm8350_isink_set_flash(struct wm8350 *wm8350, int isink, u16 mode, int wm8350_isink_set_flash(struct wm8350 *wm8350, int isink, u16 mode,
u16 trigger, u16 duration, u16 on_ramp, u16 off_ramp, u16 trigger, u16 duration, u16 on_ramp, u16 off_ramp,
u16 drive) u16 drive)
@ -1221,6 +1266,7 @@ static struct regulator_ops wm8350_isink_ops = {
.enable = wm8350_isink_enable, .enable = wm8350_isink_enable,
.disable = wm8350_isink_disable, .disable = wm8350_isink_disable,
.is_enabled = wm8350_isink_is_enabled, .is_enabled = wm8350_isink_is_enabled,
.enable_time = wm8350_isink_enable_time,
}; };
static struct regulator_desc wm8350_reg[NUM_WM8350_REGULATORS] = { static struct regulator_desc wm8350_reg[NUM_WM8350_REGULATORS] = {