regulator: Implement enable_time() for WM835x ISINKs
authorMark Brown <broonie@opensource.wolfsonmicro.com>
Mon, 4 Jan 2010 17:24:01 +0000 (17:24 +0000)
committerLiam Girdwood <lrg@slimlogic.co.uk>
Wed, 3 Mar 2010 14:49:23 +0000 (14:49 +0000)
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
drivers/regulator/wm8350-regulator.c

index e7b89e7..94227dd 100644 (file)
@@ -290,6 +290,51 @@ static int wm8350_isink_is_enabled(struct regulator_dev *rdev)
        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,
                           u16 trigger, u16 duration, u16 on_ramp, u16 off_ramp,
                           u16 drive)
@@ -1221,6 +1266,7 @@ static struct regulator_ops wm8350_isink_ops = {
        .enable = wm8350_isink_enable,
        .disable = wm8350_isink_disable,
        .is_enabled = wm8350_isink_is_enabled,
+       .enable_time = wm8350_isink_enable_time,
 };
 
 static struct regulator_desc wm8350_reg[NUM_WM8350_REGULATORS] = {