]> git.proxmox.com Git - mirror_ubuntu-hirsute-kernel.git/blobdiff - drivers/regulator/tps65910-regulator.c
regulator: Fix s5m8767_set_voltage_time_sel calculation value
[mirror_ubuntu-hirsute-kernel.git] / drivers / regulator / tps65910-regulator.c
index 15b5f1ec17b79d4dc435cdf3b301275e4934124f..b0533c11157175201ec850673c7fadcd10a8e6d4 100644 (file)
@@ -28,7 +28,8 @@
 #define TPS65910_SUPPLY_STATE_ENABLED  0x1
 #define EXT_SLEEP_CONTROL (TPS65910_SLEEP_CONTROL_EXT_INPUT_EN1 |      \
                        TPS65910_SLEEP_CONTROL_EXT_INPUT_EN2 |          \
-                       TPS65910_SLEEP_CONTROL_EXT_INPUT_EN3)
+                       TPS65910_SLEEP_CONTROL_EXT_INPUT_EN3 |          \
+                       TPS65911_SLEEP_CONTROL_EXT_INPUT_SLEEP)
 
 /* supported VIO voltages in milivolts */
 static const u16 VIO_VSEL_table[] = {
@@ -922,6 +923,8 @@ static int tps65910_set_ext_sleep_config(struct tps65910_reg *pmic,
                                TPS65910_SLEEP_CONTROL_EXT_INPUT_EN2) != 0);
                en_count += ((ext_sleep_config &
                                TPS65910_SLEEP_CONTROL_EXT_INPUT_EN3) != 0);
+               en_count += ((ext_sleep_config &
+                               TPS65911_SLEEP_CONTROL_EXT_INPUT_SLEEP) != 0);
                if (en_count > 1) {
                        dev_err(mfd->dev,
                                "External sleep control flag is not proper\n");
@@ -1018,12 +1021,18 @@ static int tps65910_set_ext_sleep_config(struct tps65910_reg *pmic,
 
        ret = tps65910_clear_bits(mfd,
                        TPS65910_SLEEP_KEEP_LDO_ON + regoffs, bit_pos);
-       if (!ret)
-               ret = tps65910_set_bits(mfd,
-                       TPS65910_SLEEP_SET_LDO_OFF + regoffs, bit_pos);
+       if (!ret) {
+               if (ext_sleep_config & TPS65911_SLEEP_CONTROL_EXT_INPUT_SLEEP)
+                       ret = tps65910_set_bits(mfd,
+                               TPS65910_SLEEP_SET_LDO_OFF + regoffs, bit_pos);
+               else
+                       ret = tps65910_clear_bits(mfd,
+                               TPS65910_SLEEP_SET_LDO_OFF + regoffs, bit_pos);
+       }
        if (ret < 0)
                dev_err(mfd->dev,
                        "Error in configuring SLEEP register\n");
+
        return ret;
 }