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; }
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; }
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; }
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; }
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; }
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; }
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; }