]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - drivers/regulator/da9062-regulator.c
ALSA: sparc: Constify snd_kcontrol_new items
[linux.git] / drivers / regulator / da9062-regulator.c
index 710e67081d531e630d972feadfd08b177b6748bd..d3ce0278bfbec3a5a307f63e948c7b3de8987202 100644 (file)
@@ -16,6 +16,7 @@
 #include <linux/regulator/of_regulator.h>
 #include <linux/mfd/da9062/core.h>
 #include <linux/mfd/da9062/registers.h>
+#include <dt-bindings/regulator/dlg,da9063-regulator.h>
 
 /* Regulator IDs */
 enum {
@@ -75,14 +76,6 @@ struct da9062_regulators {
        struct da9062_regulator                 regulator[0];
 };
 
-/* BUCK modes */
-enum {
-       BUCK_MODE_MANUAL,       /* 0 */
-       BUCK_MODE_SLEEP,        /* 1 */
-       BUCK_MODE_SYNC,         /* 2 */
-       BUCK_MODE_AUTO          /* 3 */
-};
-
 /* Regulator operations */
 
 /* Current limits array (in uA)
@@ -105,6 +98,20 @@ static const unsigned int da9062_buck_b_limits[] = {
        2300000, 2400000, 2500000, 2600000, 2700000, 2800000, 2900000, 3000000
 };
 
+static unsigned int da9062_map_buck_mode(unsigned int mode)
+{
+       switch (mode) {
+       case DA9063_BUCK_MODE_SLEEP:
+               return REGULATOR_MODE_STANDBY;
+       case DA9063_BUCK_MODE_SYNC:
+               return REGULATOR_MODE_FAST;
+       case DA9063_BUCK_MODE_AUTO:
+               return REGULATOR_MODE_NORMAL;
+       default:
+               return REGULATOR_MODE_INVALID;
+       }
+}
+
 static int da9062_buck_set_mode(struct regulator_dev *rdev, unsigned mode)
 {
        struct da9062_regulator *regl = rdev_get_drvdata(rdev);
@@ -112,13 +119,13 @@ static int da9062_buck_set_mode(struct regulator_dev *rdev, unsigned mode)
 
        switch (mode) {
        case REGULATOR_MODE_FAST:
-               val = BUCK_MODE_SYNC;
+               val = DA9063_BUCK_MODE_SYNC;
                break;
        case REGULATOR_MODE_NORMAL:
-               val = BUCK_MODE_AUTO;
+               val = DA9063_BUCK_MODE_AUTO;
                break;
        case REGULATOR_MODE_STANDBY:
-               val = BUCK_MODE_SLEEP;
+               val = DA9063_BUCK_MODE_SLEEP;
                break;
        default:
                return -EINVAL;
@@ -136,7 +143,7 @@ static int da9062_buck_set_mode(struct regulator_dev *rdev, unsigned mode)
 static unsigned da9062_buck_get_mode(struct regulator_dev *rdev)
 {
        struct da9062_regulator *regl = rdev_get_drvdata(rdev);
-       unsigned int val, mode = 0;
+       unsigned int val;
        int ret;
 
        ret = regmap_field_read(regl->mode, &val);
@@ -145,15 +152,13 @@ static unsigned da9062_buck_get_mode(struct regulator_dev *rdev)
 
        switch (val) {
        default:
-       case BUCK_MODE_MANUAL:
-               mode = REGULATOR_MODE_FAST | REGULATOR_MODE_STANDBY;
                /* Sleep flag bit decides the mode */
                break;
-       case BUCK_MODE_SLEEP:
+       case DA9063_BUCK_MODE_SLEEP:
                return REGULATOR_MODE_STANDBY;
-       case BUCK_MODE_SYNC:
+       case DA9063_BUCK_MODE_SYNC:
                return REGULATOR_MODE_FAST;
-       case BUCK_MODE_AUTO:
+       case DA9063_BUCK_MODE_AUTO:
                return REGULATOR_MODE_NORMAL;
        }
 
@@ -162,11 +167,9 @@ static unsigned da9062_buck_get_mode(struct regulator_dev *rdev)
                return 0;
 
        if (val)
-               mode &= REGULATOR_MODE_STANDBY;
+               return REGULATOR_MODE_STANDBY;
        else
-               mode &= REGULATOR_MODE_NORMAL | REGULATOR_MODE_FAST;
-
-       return mode;
+               return REGULATOR_MODE_FAST;
 }
 
 /*
@@ -282,13 +285,13 @@ static int da9062_buck_set_suspend_mode(struct regulator_dev *rdev,
 
        switch (mode) {
        case REGULATOR_MODE_FAST:
-               val = BUCK_MODE_SYNC;
+               val = DA9063_BUCK_MODE_SYNC;
                break;
        case REGULATOR_MODE_NORMAL:
-               val = BUCK_MODE_AUTO;
+               val = DA9063_BUCK_MODE_AUTO;
                break;
        case REGULATOR_MODE_STANDBY:
-               val = BUCK_MODE_SLEEP;
+               val = DA9063_BUCK_MODE_SLEEP;
                break;
        default:
                return -EINVAL;
@@ -371,6 +374,7 @@ static const struct da9062_regulator_info local_da9061_regulator_info[] = {
                .desc.vsel_reg = DA9062AA_VBUCK1_A,
                .desc.vsel_mask = DA9062AA_VBUCK1_A_MASK,
                .desc.linear_min_sel = 0,
+               .desc.of_map_mode = da9062_map_buck_mode,
                .sleep = REG_FIELD(DA9062AA_VBUCK1_A,
                        __builtin_ffs((int)DA9062AA_BUCK1_SL_A_MASK) - 1,
                        sizeof(unsigned int) * 8 -
@@ -407,6 +411,7 @@ static const struct da9062_regulator_info local_da9061_regulator_info[] = {
                .desc.vsel_reg = DA9062AA_VBUCK3_A,
                .desc.vsel_mask = DA9062AA_VBUCK3_A_MASK,
                .desc.linear_min_sel = 0,
+               .desc.of_map_mode = da9062_map_buck_mode,
                .sleep = REG_FIELD(DA9062AA_VBUCK3_A,
                        __builtin_ffs((int)DA9062AA_BUCK3_SL_A_MASK) - 1,
                        sizeof(unsigned int) * 8 -
@@ -443,6 +448,7 @@ static const struct da9062_regulator_info local_da9061_regulator_info[] = {
                .desc.vsel_reg = DA9062AA_VBUCK4_A,
                .desc.vsel_mask = DA9062AA_VBUCK4_A_MASK,
                .desc.linear_min_sel = 0,
+               .desc.of_map_mode = da9062_map_buck_mode,
                .sleep = REG_FIELD(DA9062AA_VBUCK4_A,
                        __builtin_ffs((int)DA9062AA_BUCK4_SL_A_MASK) - 1,
                        sizeof(unsigned int) * 8 -
@@ -615,6 +621,7 @@ static const struct da9062_regulator_info local_da9062_regulator_info[] = {
                .desc.vsel_reg = DA9062AA_VBUCK1_A,
                .desc.vsel_mask = DA9062AA_VBUCK1_A_MASK,
                .desc.linear_min_sel = 0,
+               .desc.of_map_mode = da9062_map_buck_mode,
                .sleep = REG_FIELD(DA9062AA_VBUCK1_A,
                        __builtin_ffs((int)DA9062AA_BUCK1_SL_A_MASK) - 1,
                        sizeof(unsigned int) * 8 -
@@ -651,6 +658,7 @@ static const struct da9062_regulator_info local_da9062_regulator_info[] = {
                .desc.vsel_reg = DA9062AA_VBUCK2_A,
                .desc.vsel_mask = DA9062AA_VBUCK2_A_MASK,
                .desc.linear_min_sel = 0,
+               .desc.of_map_mode = da9062_map_buck_mode,
                .sleep = REG_FIELD(DA9062AA_VBUCK2_A,
                        __builtin_ffs((int)DA9062AA_BUCK2_SL_A_MASK) - 1,
                        sizeof(unsigned int) * 8 -
@@ -687,6 +695,7 @@ static const struct da9062_regulator_info local_da9062_regulator_info[] = {
                .desc.vsel_reg = DA9062AA_VBUCK3_A,
                .desc.vsel_mask = DA9062AA_VBUCK3_A_MASK,
                .desc.linear_min_sel = 0,
+               .desc.of_map_mode = da9062_map_buck_mode,
                .sleep = REG_FIELD(DA9062AA_VBUCK3_A,
                        __builtin_ffs((int)DA9062AA_BUCK3_SL_A_MASK) - 1,
                        sizeof(unsigned int) * 8 -
@@ -723,6 +732,7 @@ static const struct da9062_regulator_info local_da9062_regulator_info[] = {
                .desc.vsel_reg = DA9062AA_VBUCK4_A,
                .desc.vsel_mask = DA9062AA_VBUCK4_A_MASK,
                .desc.linear_min_sel = 0,
+               .desc.of_map_mode = da9062_map_buck_mode,
                .sleep = REG_FIELD(DA9062AA_VBUCK4_A,
                        __builtin_ffs((int)DA9062AA_BUCK4_SL_A_MASK) - 1,
                        sizeof(unsigned int) * 8 -
@@ -942,8 +952,7 @@ static int da9062_regulator_probe(struct platform_device *pdev)
        regulators->n_regulators = max_regulators;
        platform_set_drvdata(pdev, regulators);
 
-       n = 0;
-       while (n < regulators->n_regulators) {
+       for (n = 0; n < regulators->n_regulators; n++) {
                /* Initialise regulator structure */
                regl = &regulators->regulator[n];
                regl->hw = chip;
@@ -1002,8 +1011,6 @@ static int da9062_regulator_probe(struct platform_device *pdev)
                                regl->desc.name);
                        return PTR_ERR(regl->rdev);
                }
-
-               n++;
        }
 
        /* LDOs overcurrent event support */