Exemplo n.º 1
0
int max8893_ldo_disable_direct(int ldo)
{
	struct max8893_data *max8893 = client_8893data_p;
	int value, shift;

	if((ldo < MAX8893_LDO1) || (ldo > MAX8893_BUCK))
	{
		printk("ERROR: Invalid argument passed\n");
		return -EINVAL;
	}

	DBG("func =%s called for regulator = %d\n",__func__,ldo);


    //Thomas Ryu 20100409
    //(MSB)EBUK:1, ELS:X,ELDO1:0,ELDO2:0,ELDO3:X,ELDO4:0,ELDO5:0,EUSB:X(LSB)
    if(ldo == MAX8893_BUCK)
    {
      shift = 7;
    }
    else
    {
      shift = 6 - ldo;
    }

	value = max8893_read_reg(max8893, MAX8893_REG_ONOFF);
	value &= ~(1 << shift);
	max8893_write_reg(max8893, value, MAX8893_REG_ONOFF);
	
	return 0;
}
Exemplo n.º 2
0
int max8893_ldo_set_voltage_direct(int ldo,
				int min_uV, int max_uV)
{
	struct max8893_data *max8893 = client_8893data_p;
	int value, shift = 0, mask = 0xff, reg;
	int min_vol = min_uV / 1000, max_vol = max_uV / 1000;
	const int *vol_map = ldo_8893_voltage_map[ldo];
	int i = 0;

	if((ldo < MAX8893_LDO1) || (ldo > MAX8893_BUCK))
	{
		printk("ERROR: Invalid argument passed\n");
		return -EINVAL;
	}
 
	DBG("func =%s called for regulator = %d, min_v=%d, max_v=%d\n",__func__,ldo,min_uV,max_uV);

	if (min_vol < 800 ||
	    max_vol > 3300)
		return -EINVAL;

	while (vol_map[i]) {
		if (vol_map[i] >= min_vol)
			break;
		i++;
	}

 value = i;
	
	DBG("Found voltage=%d, i = %x\n",vol_map[i], i);

	if (!vol_map[i])
		return -EINVAL;

	if (vol_map[i] > max_vol)
		return -EINVAL;

	if (ldo == MAX8893_LDO1) {
		reg  = MAX8893_REG_LDO1;
	} else if (ldo == MAX8893_LDO2) {
		reg  = MAX8893_REG_LDO2;
	} else if (ldo == MAX8893_LDO3) {
		reg  = MAX8893_REG_LDO3;
	} else if (ldo == MAX8893_LDO4) {
		reg  = MAX8893_REG_LDO4;
	} else if (ldo == MAX8893_LDO5) {
		reg  = MAX8893_REG_LDO5;
	} else if (ldo == MAX8893_BUCK) {
		reg  = MAX8893_REG_BUCK;
	}

//	value = max8893_read_reg(max8893, reg);
//	value &= ~mask;
//	value |= (i << shift);
	max8893_write_reg(max8893, value, reg);

	return 0;
}
Exemplo n.º 3
0
int max8893_onoff_set_direct(int value)
{
	struct max8893_data *max8893 = client_8893data_p;

    DBG("func =%s value = %d\n",__func__,value);
	max8893_write_reg(max8893, value, MAX8893_REG_ONOFF);

    return 0;
}
Exemplo n.º 4
0
static int max8893_ldo_set_voltage(struct regulator_dev *rdev,
				int min_uV, int max_uV)
{
	struct max8893_data *max8893 = rdev_get_drvdata(rdev);
	int ldo = max8893_get_ldo(rdev);
	int value, shift = 0, mask = 0xff, reg;
	int min_vol = min_uV / 1000, max_vol = max_uV / 1000;
	const int *vol_map = ldo_8893_voltage_map[ldo];
	int i = 0;
 
	DBG("func =%s called for regulator = %d, min_v=%d, max_v=%d\n",__func__,ldo,min_uV,max_uV);

	if (min_vol < 800 ||
	    max_vol > 3300)
		return -EINVAL;

	while (vol_map[i]) {
		if (vol_map[i] >= min_vol)
			break;
		i++;
	}

 value = i;
	
	DBG("Found voltage=%d, i = %x\n",vol_map[i], i);

	if (!vol_map[i])
		return -EINVAL;

	if (vol_map[i] > max_vol)
		return -EINVAL;

	if (ldo == MAX8893_LDO1) {
		reg  = MAX8893_REG_LDO1;
	} else if (ldo == MAX8893_LDO2) {
		reg  = MAX8893_REG_LDO2;
	} else if (ldo == MAX8893_LDO3) {
		reg  = MAX8893_REG_LDO3;
	} else if (ldo == MAX8893_LDO4) {
		reg  = MAX8893_REG_LDO4;
	} else if (ldo == MAX8893_LDO5) {
		reg  = MAX8893_REG_LDO5;
	} else if (ldo == MAX8893_BUCK) {
		reg  = MAX8893_REG_BUCK;
	}

//	value = max8893_read_reg(max8893, reg);
//	value &= ~mask;
//	value |= (i << shift);
	max8893_write_reg(max8893, value, reg);

	return 0;
}
Exemplo n.º 5
0
static int max8893_ldo_disable(struct regulator_dev *rdev)
{
	struct max8893_data *max8893 = rdev_get_drvdata(rdev);
	int ldo = max8893_get_ldo(rdev);
	int value, shift;
	
	DBG("func =%s called for regulator = %d\n",__func__,ldo);

	if (ldo <= MAX8893_LDO5) { /*LDO1~LDO5*/
		value = max8893_read_reg(max8893, MAX8893_REG_ONOFF);
		shift = 6 - ldo;
		value &= ~(1 << shift);
		max8893_write_reg(max8893, value, MAX8893_REG_ONOFF);
	} else { /*BUCK*/
		value = max8893_read_reg(max8893, MAX8893_REG_ONOFF);
		shift = 7;
		value &= ~(1 << shift);
		max8893_write_reg(max8893, value, MAX8893_REG_ONOFF);
	}

	return 0;
}
Exemplo n.º 6
0
int max8893_onoff_enable_direct(int bit_position)
{
	struct max8893_data *max8893 = client_8893data_p;
    int value;

	DBG("func =%s called bit position = %d\n",__func__,bit_position);

    //(MSB)EBUK:1, ELS:X,ELDO1:0,ELDO2:0,ELDO3:X,ELDO4:0,ELDO5:0,EUSB:X(LSB)
	value = max8893_read_reg(max8893, MAX8893_REG_ONOFF);
	value |= (1 << bit_position);
	max8893_write_reg(max8893, value, MAX8893_REG_ONOFF);

	return 0;
}
Exemplo n.º 7
0
static int max8893_ldo_enable(struct regulator_dev *rdev)
{
	struct max8893_data *max8893 = rdev_get_drvdata(rdev);

	
int ldo = max8893_get_ldo(rdev);
	u8 value, shift;   //NAGSM_Android_SEL_Kernel_Aakash_20101005

	DBG("func =%s called for regulator = %d\n",__func__,ldo);

	if (ldo <= MAX8893_LDO5) { /*LDO1~LDO5*/
		value = max8893_read_reg(max8893, MAX8893_REG_ONOFF);
		shift = 6 - ldo;
		value |= (1 << shift);
		max8893_write_reg(max8893, value, MAX8893_REG_ONOFF);
	} else { /*BUCK*/
		value = max8893_read_reg(max8893, MAX8893_REG_ONOFF);
		shift = 7;
		value |= (1 << shift);
		max8893_write_reg(max8893, value, MAX8893_REG_ONOFF);
	}
 
	return 0;
}