static int s2mpu02_set_ramp_delay(struct regulator_dev *rdev, int ramp_delay) { unsigned int ramp_val, ramp_shift, ramp_reg; switch (rdev_get_id(rdev)) { case S2MPU02_BUCK1: ramp_shift = S2MPU02_BUCK1_RAMP_SHIFT; break; case S2MPU02_BUCK2: ramp_shift = S2MPU02_BUCK2_RAMP_SHIFT; break; case S2MPU02_BUCK3: ramp_shift = S2MPU02_BUCK3_RAMP_SHIFT; break; case S2MPU02_BUCK4: ramp_shift = S2MPU02_BUCK4_RAMP_SHIFT; break; default: return 0; } ramp_reg = S2MPU02_REG_RAMP1; ramp_val = get_ramp_delay(ramp_delay); return regmap_update_bits(rdev->regmap, ramp_reg, S2MPU02_BUCK1234_RAMP_MASK << ramp_shift, ramp_val << ramp_shift); }
static int s2m_set_ramp_delay(struct regulator_dev *rdev, int ramp_delay) { int ramp_reg, ramp_shift, reg_id = rdev_get_id(rdev); int ramp_mask = 0x03; unsigned int ramp_value = 0; ramp_value = get_ramp_delay(ramp_delay/1000); if (ramp_value > 4) { pr_warn("%s: ramp_delay: %d not supported\n", rdev->desc->name, ramp_delay); } switch (reg_id) { case S2MPS13_BUCK1: case S2MPS13_BUCK5: ramp_reg = S2MPS13_REG_BUCK_RAMP2; ramp_shift = 0; break; case S2MPS13_BUCK2: ramp_reg = S2MPS13_REG_BUCK_RAMP1; ramp_shift = 6; break; case S2MPS13_BUCK3: ramp_reg = S2MPS13_REG_BUCK_RAMP1; ramp_shift = 4; break; case S2MPS13_BUCK4: ramp_reg = S2MPS13_REG_BUCK_RAMP1; ramp_shift = 2; break; case S2MPS13_BUCK6: ramp_reg = S2MPS13_REG_BUCK_RAMP1; ramp_shift = 0; break; case S2MPS13_BUCK7: case S2MPS13_BUCK10: ramp_reg = S2MPS13_REG_BUCK_RAMP2; ramp_shift = 6; break; case S2MPS13_BUCK8 ... S2MPS13_BUCK9: ramp_reg = S2MPS13_REG_BUCK_RAMP2; ramp_shift = 4; break; case S2MPS13_BB1: ramp_reg = S2MPS13_REG_BUCK_RAMP2; ramp_shift = 2; break; default: return -EINVAL; } return regmap_update_bits(rdev->regmap, ramp_reg, ramp_mask << ramp_shift, ramp_value << ramp_shift); }
static int s2m_set_ramp_delay(struct regulator_dev *rdev, int ramp_delay) { struct s2mps16_info *s2mps16 = rdev_get_drvdata(rdev); int ramp_shift, reg_id = rdev_get_id(rdev); int ramp_mask = 0x03; unsigned int ramp_value = 0; ramp_value = get_ramp_delay(ramp_delay/1000); if (ramp_value > 4) { pr_warn("%s: ramp_delay: %d not supported\n", rdev->desc->name, ramp_delay); } switch (reg_id) { case S2MPS16_BUCK2: case S2MPS16_BUCK4: case S2MPS16_BUCK5: ramp_shift = 6; break; case S2MPS16_BUCK1: case S2MPS16_BUCK3: case S2MPS16_BUCK6: ramp_shift = 4; break; case S2MPS16_BUCK7: case S2MPS16_BUCK11: ramp_shift = 2; break; case S2MPS16_BUCK8: case S2MPS16_BUCK9: case S2MPS16_BB1: ramp_shift = 0; break; default: return -EINVAL; } return sec_reg_update(s2mps16->iodev, S2MPS16_REG_BUCK_RAMP, ramp_value << ramp_shift, ramp_mask << ramp_shift); }
static int s2mps11_set_ramp_delay(struct regulator_dev *rdev, int ramp_delay) { struct s2mps11_info *s2mps11 = rdev_get_drvdata(rdev); unsigned int ramp_val, ramp_shift, ramp_reg = S2MPS11_REG_RAMP_BUCK; unsigned int ramp_enable = 1, enable_shift = 0; int ret; switch (rdev_get_id(rdev)) { case S2MPS11_BUCK1: if (ramp_delay > s2mps11->ramp_delay16) s2mps11->ramp_delay16 = ramp_delay; else ramp_delay = s2mps11->ramp_delay16; ramp_shift = S2MPS11_BUCK16_RAMP_SHIFT; break; case S2MPS11_BUCK2: enable_shift = S2MPS11_BUCK2_RAMP_EN_SHIFT; if (!ramp_delay) { ramp_enable = 0; break; } s2mps11->ramp_delay2 = ramp_delay; ramp_shift = S2MPS11_BUCK2_RAMP_SHIFT; ramp_reg = S2MPS11_REG_RAMP; break; case S2MPS11_BUCK3: enable_shift = S2MPS11_BUCK3_RAMP_EN_SHIFT; if (!ramp_delay) { ramp_enable = 0; break; } if (ramp_delay > s2mps11->ramp_delay34) s2mps11->ramp_delay34 = ramp_delay; else ramp_delay = s2mps11->ramp_delay34; ramp_shift = S2MPS11_BUCK34_RAMP_SHIFT; ramp_reg = S2MPS11_REG_RAMP; break; case S2MPS11_BUCK4: enable_shift = S2MPS11_BUCK4_RAMP_EN_SHIFT; if (!ramp_delay) { ramp_enable = 0; break; } if (ramp_delay > s2mps11->ramp_delay34) s2mps11->ramp_delay34 = ramp_delay; else ramp_delay = s2mps11->ramp_delay34; ramp_shift = S2MPS11_BUCK34_RAMP_SHIFT; ramp_reg = S2MPS11_REG_RAMP; break; case S2MPS11_BUCK5: s2mps11->ramp_delay5 = ramp_delay; ramp_shift = S2MPS11_BUCK5_RAMP_SHIFT; break; case S2MPS11_BUCK6: enable_shift = S2MPS11_BUCK6_RAMP_EN_SHIFT; if (!ramp_delay) { ramp_enable = 0; break; } if (ramp_delay > s2mps11->ramp_delay16) s2mps11->ramp_delay16 = ramp_delay; else ramp_delay = s2mps11->ramp_delay16; ramp_shift = S2MPS11_BUCK16_RAMP_SHIFT; break; case S2MPS11_BUCK7: case S2MPS11_BUCK8: case S2MPS11_BUCK10: if (ramp_delay > s2mps11->ramp_delay7810) s2mps11->ramp_delay7810 = ramp_delay; else ramp_delay = s2mps11->ramp_delay7810; ramp_shift = S2MPS11_BUCK7810_RAMP_SHIFT; break; case S2MPS11_BUCK9: s2mps11->ramp_delay9 = ramp_delay; ramp_shift = S2MPS11_BUCK9_RAMP_SHIFT; break; default: return 0; } if (!ramp_enable) goto ramp_disable; /* Ramp delay can be enabled/disabled only for buck[2346] */ if ((rdev_get_id(rdev) >= S2MPS11_BUCK2 && rdev_get_id(rdev) <= S2MPS11_BUCK4) || rdev_get_id(rdev) == S2MPS11_BUCK6) { ret = regmap_update_bits(rdev->regmap, S2MPS11_REG_RAMP, 1 << enable_shift, 1 << enable_shift); if (ret) { dev_err(&rdev->dev, "failed to enable ramp rate\n"); return ret; } } ramp_val = get_ramp_delay(ramp_delay); return regmap_update_bits(rdev->regmap, ramp_reg, 0x3 << ramp_shift, ramp_val << ramp_shift); ramp_disable: return regmap_update_bits(rdev->regmap, S2MPS11_REG_RAMP, 1 << enable_shift, 0); }