Use regulator_set/get_current_limit_regmap helpers to save some code.

Signed-off-by: Axel Lin <axel....@ingics.com>
---
 drivers/mfd/wm831x-core.c            |  2 +-
 drivers/regulator/wm831x-isink.c     | 45 +++++-----------------------
 include/linux/mfd/wm831x/regulator.h |  2 +-
 3 files changed, 9 insertions(+), 40 deletions(-)

diff --git a/drivers/mfd/wm831x-core.c b/drivers/mfd/wm831x-core.c
index 25fbbaf39cb9..21bae64e0451 100644
--- a/drivers/mfd/wm831x-core.c
+++ b/drivers/mfd/wm831x-core.c
@@ -34,7 +34,7 @@
 /* Current settings - values are 2*2^(reg_val/4) microamps.  These are
  * exported since they are used by multiple drivers.
  */
-int wm831x_isinkv_values[WM831X_ISINK_MAX_ISEL + 1] = {
+const unsigned int wm831x_isinkv_values[WM831X_ISINK_MAX_ISEL + 1] = {
        2,
        2,
        3,
diff --git a/drivers/regulator/wm831x-isink.c b/drivers/regulator/wm831x-isink.c
index 676a4701c986..c4bc3d3361aa 100644
--- a/drivers/regulator/wm831x-isink.c
+++ b/drivers/regulator/wm831x-isink.c
@@ -92,48 +92,12 @@ static int wm831x_isink_is_enabled(struct regulator_dev 
*rdev)
                return 0;
 }
 
-static int wm831x_isink_set_current(struct regulator_dev *rdev,
-                                   int min_uA, int max_uA)
-{
-       struct wm831x_isink *isink = rdev_get_drvdata(rdev);
-       struct wm831x *wm831x = isink->wm831x;
-       int ret, i;
-
-       for (i = ARRAY_SIZE(wm831x_isinkv_values) - 1; i >= 0; i--) {
-               int val = wm831x_isinkv_values[i];
-               if (min_uA <= val && val <= max_uA) {
-                       ret = wm831x_set_bits(wm831x, isink->reg,
-                                             WM831X_CS1_ISEL_MASK, i);
-                       return ret;
-               }
-       }
-
-       return -EINVAL;
-}
-
-static int wm831x_isink_get_current(struct regulator_dev *rdev)
-{
-       struct wm831x_isink *isink = rdev_get_drvdata(rdev);
-       struct wm831x *wm831x = isink->wm831x;
-       int ret;
-
-       ret = wm831x_reg_read(wm831x, isink->reg);
-       if (ret < 0)
-               return ret;
-
-       ret &= WM831X_CS1_ISEL_MASK;
-       if (ret > WM831X_ISINK_MAX_ISEL)
-               ret = WM831X_ISINK_MAX_ISEL;
-
-       return wm831x_isinkv_values[ret];
-}
-
 static const struct regulator_ops wm831x_isink_ops = {
        .is_enabled = wm831x_isink_is_enabled,
        .enable = wm831x_isink_enable,
        .disable = wm831x_isink_disable,
-       .set_current_limit = wm831x_isink_set_current,
-       .get_current_limit = wm831x_isink_get_current,
+       .set_current_limit = regulator_set_current_limit_regmap,
+       .get_current_limit = regulator_get_current_limit_regmap,
 };
 
 static irqreturn_t wm831x_isink_irq(int irq, void *data)
@@ -187,10 +151,15 @@ static int wm831x_isink_probe(struct platform_device 
*pdev)
        isink->desc.ops = &wm831x_isink_ops;
        isink->desc.type = REGULATOR_CURRENT;
        isink->desc.owner = THIS_MODULE;
+       isink->desc.curr_table = wm831x_isinkv_values,
+       isink->desc.n_current_limits = ARRAY_SIZE(wm831x_isinkv_values),
+       isink->desc.csel_reg = isink->reg,
+       isink->desc.csel_mask = WM831X_CS1_ISEL_MASK,
 
        config.dev = pdev->dev.parent;
        config.init_data = pdata->isink[id];
        config.driver_data = isink;
+       config.regmap = wm831x->regmap;
 
        isink->regulator = devm_regulator_register(&pdev->dev, &isink->desc,
                                                   &config);
diff --git a/include/linux/mfd/wm831x/regulator.h 
b/include/linux/mfd/wm831x/regulator.h
index 955d30fc6a27..30c587a0624c 100644
--- a/include/linux/mfd/wm831x/regulator.h
+++ b/include/linux/mfd/wm831x/regulator.h
@@ -1213,6 +1213,6 @@
 #define WM831X_LDO1_OK_WIDTH                         1  /* LDO1_OK */
 
 #define WM831X_ISINK_MAX_ISEL 55
-extern int wm831x_isinkv_values[WM831X_ISINK_MAX_ISEL + 1];
+extern const unsigned int wm831x_isinkv_values[WM831X_ISINK_MAX_ISEL + 1];
 
 #endif
-- 
2.17.1

Reply via email to