Beispiel #1
0
/*
 * Return battery voltage
 * Or < 0 on failure.
 */
static int twl4030battery_voltage(void)
{
	int ret, volt;
	u8 hwsts;
	struct twl4030_madc_request req;

	twl4030_i2c_read_u8(TWL4030_MODULE_PM_MASTER, &hwsts,
		REG_STS_HW_CONDITIONS);

	if ((hwsts & STS_CHG) || (hwsts & STS_VBUS)) {
		/* AC or USB charger connected */
		volt = read_bci_val(T2_BATTERY_VOLT);
		return (volt * VOLT_STEP_SIZE) / VOLT_PSR_R;
	} else {
		/* Use madc conversion */
		req.channels = (1 << 12);
		req.do_avg = 0;
		req.method = TWL4030_MADC_SW1;
		req.active = 0;
		req.func_cb = NULL;
		twl4030_madc_conversion(&req);
		volt = (u16)req.rbuf[12];
		return (volt * VOLT_STEP_SIZE) / VOLT_PSR_R;
	}
}
/*
 * Return battery voltage
 * Or < 0 on failure.
 */
static int twl4030battery_voltage(void)
{
	int volt;

	if(system_rev >= 2){	// B-Project Rev.D (AP Fuel Gauge)
		return max17043_get_voltage();
	}
	else
	{
		volt = read_bci_val(T2_BATTERY_VOLT);
		return (volt * VOLT_STEP_SIZE) / VOLT_PSR_R; 
	} 
}
Beispiel #3
0
/*
 * Return the battery current
 * Or < 0 on failure.
 */
static int twl4030battery_current(void)
{
	int ret, curr = read_bci_val(T2_BATTERY_CUR);
	u8 uninitialized_var(val);

	ret = twl4030_i2c_read_u8(TWL4030_MODULE_MAIN_CHARGE, &val,
		REG_BCICTL1);
	if (ret)
		return ret;

	if (val & CGAIN) /* slope of 0.44 mV/mA */
		return (curr * CURR_STEP_SIZE) / CURR_PSR_R1;
	else /* slope of 0.88 mV/mA */
		return (curr * CURR_STEP_SIZE) / CURR_PSR_R2;
}
Beispiel #4
0
/*
 * Return battery temperature
 * Or < 0 on failure.
 */
static int twl4030battery_temperature(void)
{
	u8 uninitialized_var(val);
	int temp, curr, volt, res, ret;

	/* Getting and calculating the thermistor voltage */
	ret = read_bci_val(T2_BATTERY_TEMP);
	if (ret < 0)
		return ret;

	volt = (ret * TEMP_STEP_SIZE) / TEMP_PSR_R;

	/* Getting and calculating the supply current in micro ampers */
	ret = twl4030_i2c_read_u8(TWL4030_MODULE_MAIN_CHARGE, &val,
		 REG_BCICTL2);
	if (ret)
		return 0;

	curr = ((val & ITHSENS) + 1) * 10;

	/* Getting and calculating the thermistor resistance in ohms*/
	res = volt * 1000 / curr;

	/*calculating temperature*/
	for (temp = 58; temp >= 0; temp--) {
		int actual = therm_tbl[temp];
		if ((actual - res) >= 0)
			break;
	}

	/* Negative temperature */
	if (temp < 3) {
		if (temp == 2)
			temp = -1;
		else if (temp == 1)
			temp = -2;
		else
			temp = -3;
	}

	return temp + 1;
}