Exemplo n.º 1
0
static int d2041_regulator_set_voltage(struct regulator_dev *rdev, int min_uV, int max_uV)
{
    struct d2041 *d2041 = rdev_get_drvdata(rdev);
    int mV_val;
    int min_mV = uV_to_mV(min_uV);
    int max_mV = uV_to_mV(max_uV);
    unsigned int reg_num, regulator_id = rdev_get_id(rdev);
    u8 val;
    int ret = 0;

    /* before we do anything check the lock bit */
    ret = d2041_reg_read(d2041, D2041_SUPPLY_REG, &val);
    if(val & D2041_SUPPLY_VLOCK)
        d2041_clear_bits(d2041, D2041_SUPPLY_REG, D2041_SUPPLY_VLOCK);

    mV_val =  d2041_regulator_mvolts_to_val(min_mV, regulator_id, rdev);

    /* Sanity check for maximum value */
    if (d2041_regulator_val_to_mvolts(mV_val, regulator_id, rdev) > max_mV)
        return -EINVAL;

    reg_num = get_regulator_reg(regulator_id);

    ret = d2041_reg_read(d2041, reg_num, &val);
    val &= ~D2041_MAX_VSEL;
    d2041_reg_write(d2041, reg_num, (val | mV_val));

    /* For BUCKs enable the ramp */
    if (regulator_id <= D2041_BUCK_4)
        d2041_set_bits(d2041, D2041_SUPPLY_REG, (D2041_SUPPLY_VBUCK1GO << regulator_id));

    return ret;
}
Exemplo n.º 2
0
static unsigned int d2041_regulator_mvolts_to_val(int mV, int regulator_id, struct regulator_dev *rdev)
{
    struct regulation_constraints *constraints =  rdev->constraints;
    int min_mV = uV_to_mV(constraints->min_uV);

    if ( (regulator_id >= D2041_BUCK_1) && (regulator_id <= D2041_BUCK_4) )
        return ((mV - min_mV) / D2041_BUCK_VOLT_STEP);

    return ((mV - min_mV) / D2041_LDO_VOLT_STEP);
}
Exemplo n.º 3
0
static int d2083_regulator_set_voltage(struct regulator_dev *rdev, int min_uV, int max_uV,unsigned *selector)
{
	struct d2083 *d2083 = rdev_get_drvdata(rdev);
	int mV_val;
	int min_mV = uV_to_mV(min_uV);
	int max_mV = uV_to_mV(max_uV);
	unsigned int reg_num, regulator_id = rdev_get_id(rdev);
	u8 val;	
	int ret = 0;
	*selector = -1;

	// Neet to implement parameter *selector : reference v_table / num_voltages

	/* before we do anything check the lock bit */
	ret = d2083_reg_read(d2083, D2083_SUPPLY_REG, &val);
	if(val & D2083_SUPPLY_VLOCK)
		d2083_clear_bits(d2083, D2083_SUPPLY_REG, D2083_SUPPLY_VLOCK);

	mV_val =  d2083_regulator_mvolts_to_val(min_mV, regulator_id, rdev);

	/* Sanity check for maximum value */
	if (d2083_regulator_val_to_mvolts(mV_val, regulator_id, rdev) > max_mV)
		return -EINVAL;

	reg_num = get_regulator_reg(regulator_id);

	ret = d2083_reg_read(d2083, reg_num, &val);
	val &= ~D2083_MAX_VSEL;
	
	d2083_reg_write(d2083, reg_num, (val | mV_val));

	/* For BUCKs enable the ramp */
	if (regulator_id <= D2083_BUCK_4)
		d2083_set_bits(d2083, D2083_SUPPLY_REG, (D2083_SUPPLY_VBUCK1GO << regulator_id));

	*selector = regulator_id;
	
	return ret;
}
Exemplo n.º 4
0
static int d2041_regulator_val_to_mvolts(unsigned int val, int regulator_id, struct regulator_dev *rdev)
{
    struct regulation_constraints *constraints;
    int min_mV, mvolts;

    constraints =  rdev->constraints;
    min_mV = uV_to_mV(constraints->min_uV);

    if ( (regulator_id >= D2041_BUCK_1) && (regulator_id <= D2041_BUCK_4) )
        return ((val * D2041_BUCK_VOLT_STEP) + min_mV );

    mvolts = (val * D2041_LDO_VOLT_STEP) + min_mV;
    if(mvolts > MAX_MILLI_VOLT)
        mvolts = MAX_MILLI_VOLT;

    return mvolts;
}