Loading drivers/regulator/max8997.c +42 −13 Original line number Diff line number Diff line Loading @@ -489,9 +489,7 @@ static int max8997_set_voltage_ldobuck(struct regulator_dev *rdev, int min_vol = min_uV / 1000, max_vol = max_uV / 1000; const struct voltage_map_desc *desc; int rid = rdev_get_id(rdev); int reg, shift = 0, mask, ret; int i; u8 org; int i, reg, shift, mask, ret; switch (rid) { case MAX8997_LDO1 ... MAX8997_LDO21: Loading Loading @@ -520,21 +518,50 @@ static int max8997_set_voltage_ldobuck(struct regulator_dev *rdev, if (ret) return ret; max8997_read_reg(i2c, reg, &org); org = (org & mask) >> shift; ret = max8997_update_reg(i2c, reg, i << shift, mask << shift); *selector = i; if (rid == MAX8997_BUCK1 || rid == MAX8997_BUCK2 || rid == MAX8997_BUCK4 || rid == MAX8997_BUCK5) { /* If the voltage is increasing */ if (org < i) udelay(DIV_ROUND_UP(desc->step * (i - org), max8997->ramp_delay)); return ret; } return ret; static int max8997_set_voltage_ldobuck_time_sel(struct regulator_dev *rdev, unsigned int old_selector, unsigned int new_selector) { struct max8997_data *max8997 = rdev_get_drvdata(rdev); int rid = rdev_get_id(rdev); const struct voltage_map_desc *desc = reg_voltage_map[rid]; /* Delay is required only if the voltage is increasing */ if (old_selector >= new_selector) return 0; /* No need to delay if gpio_dvs_mode */ switch (rid) { case MAX8997_BUCK1: if (max8997->buck1_gpiodvs) return 0; break; case MAX8997_BUCK2: if (max8997->buck2_gpiodvs) return 0; break; case MAX8997_BUCK5: if (max8997->buck5_gpiodvs) return 0; break; } switch (rid) { case MAX8997_BUCK1: case MAX8997_BUCK2: case MAX8997_BUCK4: case MAX8997_BUCK5: return DIV_ROUND_UP(desc->step * (new_selector - old_selector), max8997->ramp_delay); } return 0; } /* Loading Loading @@ -780,6 +807,7 @@ static struct regulator_ops max8997_ldo_ops = { .disable = max8997_reg_disable, .get_voltage_sel = max8997_get_voltage_sel, .set_voltage = max8997_set_voltage_ldobuck, .set_voltage_time_sel = max8997_set_voltage_ldobuck_time_sel, .set_suspend_enable = max8997_reg_enable_suspend, .set_suspend_disable = max8997_reg_disable_suspend, }; Loading @@ -791,6 +819,7 @@ static struct regulator_ops max8997_buck_ops = { .disable = max8997_reg_disable, .get_voltage_sel = max8997_get_voltage_sel, .set_voltage = max8997_set_voltage_buck, .set_voltage_time_sel = max8997_set_voltage_ldobuck_time_sel, .set_suspend_enable = max8997_reg_enable_suspend, .set_suspend_disable = max8997_reg_disable_suspend, }; Loading Loading
drivers/regulator/max8997.c +42 −13 Original line number Diff line number Diff line Loading @@ -489,9 +489,7 @@ static int max8997_set_voltage_ldobuck(struct regulator_dev *rdev, int min_vol = min_uV / 1000, max_vol = max_uV / 1000; const struct voltage_map_desc *desc; int rid = rdev_get_id(rdev); int reg, shift = 0, mask, ret; int i; u8 org; int i, reg, shift, mask, ret; switch (rid) { case MAX8997_LDO1 ... MAX8997_LDO21: Loading Loading @@ -520,21 +518,50 @@ static int max8997_set_voltage_ldobuck(struct regulator_dev *rdev, if (ret) return ret; max8997_read_reg(i2c, reg, &org); org = (org & mask) >> shift; ret = max8997_update_reg(i2c, reg, i << shift, mask << shift); *selector = i; if (rid == MAX8997_BUCK1 || rid == MAX8997_BUCK2 || rid == MAX8997_BUCK4 || rid == MAX8997_BUCK5) { /* If the voltage is increasing */ if (org < i) udelay(DIV_ROUND_UP(desc->step * (i - org), max8997->ramp_delay)); return ret; } return ret; static int max8997_set_voltage_ldobuck_time_sel(struct regulator_dev *rdev, unsigned int old_selector, unsigned int new_selector) { struct max8997_data *max8997 = rdev_get_drvdata(rdev); int rid = rdev_get_id(rdev); const struct voltage_map_desc *desc = reg_voltage_map[rid]; /* Delay is required only if the voltage is increasing */ if (old_selector >= new_selector) return 0; /* No need to delay if gpio_dvs_mode */ switch (rid) { case MAX8997_BUCK1: if (max8997->buck1_gpiodvs) return 0; break; case MAX8997_BUCK2: if (max8997->buck2_gpiodvs) return 0; break; case MAX8997_BUCK5: if (max8997->buck5_gpiodvs) return 0; break; } switch (rid) { case MAX8997_BUCK1: case MAX8997_BUCK2: case MAX8997_BUCK4: case MAX8997_BUCK5: return DIV_ROUND_UP(desc->step * (new_selector - old_selector), max8997->ramp_delay); } return 0; } /* Loading Loading @@ -780,6 +807,7 @@ static struct regulator_ops max8997_ldo_ops = { .disable = max8997_reg_disable, .get_voltage_sel = max8997_get_voltage_sel, .set_voltage = max8997_set_voltage_ldobuck, .set_voltage_time_sel = max8997_set_voltage_ldobuck_time_sel, .set_suspend_enable = max8997_reg_enable_suspend, .set_suspend_disable = max8997_reg_disable_suspend, }; Loading @@ -791,6 +819,7 @@ static struct regulator_ops max8997_buck_ops = { .disable = max8997_reg_disable, .get_voltage_sel = max8997_get_voltage_sel, .set_voltage = max8997_set_voltage_buck, .set_voltage_time_sel = max8997_set_voltage_ldobuck_time_sel, .set_suspend_enable = max8997_reg_enable_suspend, .set_suspend_disable = max8997_reg_disable_suspend, }; Loading