/* Minimum voltage stepper delay for each step. */
 #define SPMI_FTSMPS_STEP_DELAY         8
+#define SPMI_DEFAULT_STEP_DELAY                20
 
 /*
  * The ratio SPMI_FTSMPS_STEP_MARGIN_NUM/SPMI_FTSMPS_STEP_MARGIN_DEN is used to
        .disable                = spmi_regulator_common_disable,
        .is_enabled             = spmi_regulator_common_is_enabled,
        .set_voltage            = spmi_regulator_common_set_voltage,
+       .set_voltage_time_sel   = spmi_regulator_set_voltage_time_sel,
        .get_voltage            = spmi_regulator_common_get_voltage,
        .list_voltage           = spmi_regulator_common_list_voltage,
        .set_mode               = spmi_regulator_common_set_mode,
        .disable                = spmi_regulator_common_disable,
        .is_enabled             = spmi_regulator_common_is_enabled,
        .set_voltage            = spmi_regulator_ult_lo_smps_set_voltage,
+       .set_voltage_time_sel   = spmi_regulator_set_voltage_time_sel,
        .get_voltage            = spmi_regulator_ult_lo_smps_get_voltage,
        .list_voltage           = spmi_regulator_common_list_voltage,
        .set_mode               = spmi_regulator_common_set_mode,
        .disable                = spmi_regulator_common_disable,
        .is_enabled             = spmi_regulator_common_is_enabled,
        .set_voltage            = spmi_regulator_single_range_set_voltage,
+       .set_voltage_time_sel   = spmi_regulator_set_voltage_time_sel,
        .get_voltage            = spmi_regulator_single_range_get_voltage,
        .list_voltage           = spmi_regulator_common_list_voltage,
        .set_mode               = spmi_regulator_common_set_mode,
        return 0;
 }
 
-static int spmi_regulator_ftsmps_init_slew_rate(struct spmi_regulator *vreg)
+static int spmi_regulator_init_slew_rate(struct spmi_regulator *vreg)
 {
        int ret;
        u8 reg = 0;
-       int step, delay, slew_rate;
+       int step, delay, slew_rate, step_delay;
        const struct spmi_voltage_range *range;
 
        ret = spmi_vreg_read(vreg, SPMI_COMMON_REG_STEP_CTRL, ®, 1);
        if (!range)
                return -EINVAL;
 
+       switch (vreg->logical_type) {
+       case SPMI_REGULATOR_LOGICAL_TYPE_FTSMPS:
+               step_delay = SPMI_FTSMPS_STEP_DELAY;
+               break;
+       default:
+               step_delay = SPMI_DEFAULT_STEP_DELAY;
+               break;
+       }
+
        step = reg & SPMI_FTSMPS_STEP_CTRL_STEP_MASK;
        step >>= SPMI_FTSMPS_STEP_CTRL_STEP_SHIFT;
 
 
        /* slew_rate has units of uV/us */
        slew_rate = SPMI_FTSMPS_CLOCK_RATE * range->step_uV * (1 << step);
-       slew_rate /= 1000 * (SPMI_FTSMPS_STEP_DELAY << delay);
+       slew_rate /= 1000 * (step_delay << delay);
        slew_rate *= SPMI_FTSMPS_STEP_MARGIN_NUM;
        slew_rate /= SPMI_FTSMPS_STEP_MARGIN_DEN;
 
                return ret;
        }
 
-       if (vreg->logical_type == SPMI_REGULATOR_LOGICAL_TYPE_FTSMPS) {
-               ret = spmi_regulator_ftsmps_init_slew_rate(vreg);
+       switch (vreg->logical_type) {
+       case SPMI_REGULATOR_LOGICAL_TYPE_FTSMPS:
+       case SPMI_REGULATOR_LOGICAL_TYPE_ULT_LO_SMPS:
+       case SPMI_REGULATOR_LOGICAL_TYPE_ULT_HO_SMPS:
+       case SPMI_REGULATOR_LOGICAL_TYPE_SMPS:
+               ret = spmi_regulator_init_slew_rate(vreg);
                if (ret)
                        return ret;
+       default:
+               break;
        }
 
        if (vreg->logical_type != SPMI_REGULATOR_LOGICAL_TYPE_VS)