Exemplo n.º 1
0
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);
}
Exemplo n.º 2
0
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);
}
Exemplo n.º 3
0
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);
}
Exemplo n.º 4
0
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);
}