Commit 6628da00 authored by DidntRead's avatar DidntRead
Browse files

power: add more info about battery

parent f8cb7f3c
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -187,6 +187,7 @@ typedef struct {
	signed int charger_protect_status;
	signed int ICharging;
	signed int IBattery;
	signed int CURRENT_NOW;
	signed int temperature;
	signed int temperatureR;
	signed int temperatureV;
+2 −0
Original line number Diff line number Diff line
@@ -344,6 +344,7 @@ extern int IMM_GetOneChannelValue_Cali(int Channel, int *voltage);
extern signed int battery_meter_get_battery_voltage(kal_bool update);
extern signed int battery_meter_get_charging_current_imm(void);
extern signed int battery_meter_get_charging_current(void);
extern signed int battery_meter_get_charger_current(void);
extern signed int battery_meter_get_battery_current(void);
extern kal_bool battery_meter_get_battery_current_sign(void);
extern signed int battery_meter_get_car(void);
@@ -360,6 +361,7 @@ extern signed int battery_meter_get_battery_nPercent_UI_SOC(void); /* tracking p

extern signed int battery_meter_get_tempR(signed int dwVolt);
extern signed int battery_meter_get_tempV(void);
extern signed int battery_meter_get_QMAX25(void);
extern signed int battery_meter_get_VSense(void);/* isense voltage */
extern int wakeup_fg_algo(int flow_state);

+71 −10
Original line number Diff line number Diff line
@@ -279,6 +279,7 @@ struct battery_data {
	int BAT_BatterySenseVoltage;
	int BAT_ISenseVoltage;
	int BAT_ChargerVoltage;
	int BAT_CURRENT_NOW;
	/* Dual battery */
	int status_smb;
	int capacity_smb;
@@ -291,25 +292,39 @@ struct battery_data {

static enum power_supply_property wireless_props[] = {
	POWER_SUPPLY_PROP_ONLINE,
	POWER_SUPPLY_PROP_CURRENT_AVG,
	POWER_SUPPLY_PROP_VOLTAGE_AVG,
};

static enum power_supply_property ac_props[] = {
	POWER_SUPPLY_PROP_ONLINE,
	POWER_SUPPLY_PROP_CURRENT_AVG,
	POWER_SUPPLY_PROP_VOLTAGE_AVG,
};

static enum power_supply_property usb_props[] = {
	POWER_SUPPLY_PROP_ONLINE,
	POWER_SUPPLY_PROP_CURRENT_AVG,
	POWER_SUPPLY_PROP_CURRENT_MAX,
	POWER_SUPPLY_PROP_VOLTAGE_AVG,
	POWER_SUPPLY_PROP_VOLTAGE_MAX,
};

static enum power_supply_property battery_props[] = {
	POWER_SUPPLY_PROP_MODEL_NAME,
	POWER_SUPPLY_PROP_MANUFACTURER,
	POWER_SUPPLY_PROP_STATUS,
	POWER_SUPPLY_PROP_HEALTH,
	POWER_SUPPLY_PROP_PRESENT,
	POWER_SUPPLY_PROP_TECHNOLOGY,
	POWER_SUPPLY_PROP_CAPACITY,
	POWER_SUPPLY_PROP_CURRENT_NOW,
	POWER_SUPPLY_PROP_CHARGE_COUNTER,
	/* Add for Battery Service */
	POWER_SUPPLY_PROP_batt_vol,
	POWER_SUPPLY_PROP_batt_temp,
	POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN,
	POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN,
	POWER_SUPPLY_PROP_VOLTAGE_NOW,
	POWER_SUPPLY_PROP_TEMP,
	/* Add for EM */
	POWER_SUPPLY_PROP_TemperatureR,
	POWER_SUPPLY_PROP_TempBattVoltage,
@@ -531,6 +546,12 @@ static int wireless_get_property(struct power_supply *psy,
	case POWER_SUPPLY_PROP_ONLINE:
		val->intval = data->WIRELESS_ONLINE;
		break;
	case POWER_SUPPLY_PROP_CURRENT_AVG:
		val->intval = data->WIRELESS_ONLINE ? battery_meter_get_charger_current() * 1000 : 0;
		break;
	case POWER_SUPPLY_PROP_VOLTAGE_AVG:
		val->intval = data->WIRELESS_ONLINE ? battery_meter_get_charger_voltage() * 1000 : 0;
		break;
	default:
		ret = -EINVAL;
		break;
@@ -548,6 +569,12 @@ static int ac_get_property(struct power_supply *psy,
	case POWER_SUPPLY_PROP_ONLINE:
		val->intval = data->AC_ONLINE;
		break;
	case POWER_SUPPLY_PROP_CURRENT_AVG:
		val->intval = data->AC_ONLINE ? battery_meter_get_charger_current() * 1000 : 0;
		break;
	case POWER_SUPPLY_PROP_VOLTAGE_AVG:
		val->intval = data->AC_ONLINE ? battery_meter_get_charger_voltage() * 1000 : 0;
		break;
	default:
		ret = -EINVAL;
		break;
@@ -575,6 +602,18 @@ static int usb_get_property(struct power_supply *psy,
		val->intval = data->USB_ONLINE;
#endif
		break;
	case POWER_SUPPLY_PROP_VOLTAGE_MAX:
		val->intval = 5000000;
		break;
	case POWER_SUPPLY_PROP_CURRENT_MAX:
		val->intval = 900000;
		break;
	case POWER_SUPPLY_PROP_CURRENT_AVG:
		val->intval = data->USB_ONLINE ? battery_meter_get_charger_current() * 1000 : 0;
		break;
	case POWER_SUPPLY_PROP_VOLTAGE_AVG:
		val->intval = data->USB_ONLINE ? battery_meter_get_charger_voltage() * 1000 : 0;
		break;
	default:
		ret = -EINVAL;
		break;
@@ -589,6 +628,12 @@ static int battery_get_property(struct power_supply *psy,
	struct battery_data *data = container_of(psy, struct battery_data, psy);

	switch (psp) {
	case POWER_SUPPLY_PROP_MODEL_NAME:
		val->strval = "BL256";
		break;
	case POWER_SUPPLY_PROP_MANUFACTURER:
		val->strval = "Lenovo";
		break;
	case POWER_SUPPLY_PROP_STATUS:
		val->intval = data->BAT_STATUS;
		break;
@@ -604,10 +649,25 @@ static int battery_get_property(struct power_supply *psy,
	case POWER_SUPPLY_PROP_CAPACITY:
		val->intval = data->BAT_CAPACITY;
		break;
	case POWER_SUPPLY_PROP_batt_vol:
	case POWER_SUPPLY_PROP_CURRENT_NOW:
		val->intval = data->BAT_CURRENT_NOW;
		break;
	case POWER_SUPPLY_PROP_CHARGE_COUNTER:
		val->intval = battery_meter_get_QMAX25() * 1000;
		break;
	case POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN:
		val->intval = data->charge_full_design;
		break;
	case POWER_SUPPLY_PROP_VOLTAGE_NOW:
		val->intval = data->BAT_batt_vol;
		break;
	case POWER_SUPPLY_PROP_batt_temp:
	case POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN:
		val->intval = 4350000;
		break;
	case POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN:
		val->intval = 3400000; //TODO verify
		break;
	case POWER_SUPPLY_PROP_TEMP:
		val->intval = data->BAT_batt_temp;
		break;
	case POWER_SUPPLY_PROP_TemperatureR:
@@ -644,11 +704,6 @@ static int battery_get_property(struct power_supply *psy,
	case POWER_SUPPLY_PROP_adjust_power:
		val->intval = data->adjust_power;
		break;
//lenovo-sw mahj2 add for full charge capacity Begin
	case POWER_SUPPLY_PROP_CHARGE_FULL_DESIGN:
		val->intval = data->charge_full_design;
		break;
//lenovo-sw mahj2 add for full charge capacity End

	default:
		ret = -EINVAL;
@@ -1660,6 +1715,7 @@ static void mt_battery_update_EM(struct battery_data *bat_data)
	bat_data->BAT_BatterySenseVoltage = BMT_status.bat_vol;
	bat_data->BAT_ISenseVoltage = BMT_status.Vsense;	/* API */
	bat_data->BAT_ChargerVoltage = BMT_status.charger_vol;
	bat_data->BAT_CURRENT_NOW = BMT_status.CURRENT_NOW * 100; /* 0.1mA to uA */
	/* Dual battery */
	bat_data->status_smb = g_status_smb;
	bat_data->capacity_smb = g_capacity_smb;
@@ -2343,6 +2399,7 @@ void mt_battery_GetBatteryData(void)
	static signed int batteryTempBuffer[BATTERY_AVERAGE_SIZE];
	static unsigned char batteryIndex;
	static signed int previous_SOC = -1;
	bool current_sign;

	bat_vol = battery_meter_get_battery_voltage(KAL_TRUE);
	Vsense = battery_meter_get_VSense();
@@ -2410,6 +2467,10 @@ void mt_battery_GetBatteryData(void)
	BMT_status.temperatureR = temperatureR;
	BMT_status.SOC = SOC;
	BMT_status.ZCV = ZCV;
	BMT_status.IBattery = battery_meter_get_battery_current();
	current_sign = battery_meter_get_battery_current_sign();
	BMT_status.IBattery *= (current_sign ? 1 : (-1));
	BMT_status.CURRENT_NOW = BMT_status.IBattery;

#if !defined(CUST_CAPACITY_OCV2CV_TRANSFORM)
	if (BMT_status.charger_exist == KAL_FALSE) {
+76 −0
Original line number Diff line number Diff line
@@ -3514,6 +3514,77 @@ signed int battery_meter_get_charging_current(void)
#endif
}

signed int battery_meter_get_charger_current(void)
{
#ifdef DISABLE_CHARGING_CURRENT_MEASURE
	return 0;
	/* lenovo-sw mahj2 support meter charger current use charger ic Begin*/
#elif defined (CHAGER_CURRENT_USE_SWITCHIC_METER)
	signed int adc_current = 0;
	signed int charger_current = 0;

	adc_current = get_charger_current_adc(CHARGER_CURRENT_ADC);
	charger_current = adc_current*CHARGER_IC_KLIM/CHARGER_IC_RLIM;
	printk("battery_meter_get_charging_current : charger_current=%d \n",charger_current);

	return charger_current;
	/* lenovo-sw mahj2 support meter charger current use charger ic End*/
#elif !defined(EXTERNAL_SWCHR_SUPPORT)
	signed int ADC_I_SENSE_tmp[20] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
	signed int ADC_I_SENSE_sum = 0;
	signed int ADC_I_SENSE = 0;
	int repeat = 20;
	int i = 0;
	int j = 0;
	signed int temp = 0;
	int ICharging = 0;
	int ret = 0;
	int val = 1;

	for (i = 0; i < repeat; i++) {
		val = 1;	/* set avg times */
		ret = battery_meter_ctrl(BATTERY_METER_CMD_GET_ADC_V_I_SENSE, &val);
		ADC_I_SENSE_tmp[i] = val;

		ADC_I_SENSE_sum += ADC_I_SENSE_tmp[i];
	}

	/* sorting    I_SENSE */
	for (i = 0; i < repeat; i++) {
		for (j = i; j < repeat; j++) {
			if (ADC_I_SENSE_tmp[j] < ADC_I_SENSE_tmp[i]) {
				temp = ADC_I_SENSE_tmp[j];
				ADC_I_SENSE_tmp[j] = ADC_I_SENSE_tmp[i];
				ADC_I_SENSE_tmp[i] = temp;
			}
		}
	}

	bm_print(BM_LOG_FULL, "[g_Get_I_Charging:I_SENSE]\r\n");
	for (i = 0; i < repeat; i++)
		bm_print(BM_LOG_FULL, "%d,", ADC_I_SENSE_tmp[i]);

	bm_print(BM_LOG_FULL, "\r\n");

	ADC_I_SENSE_sum -= ADC_I_SENSE_tmp[0];
	ADC_I_SENSE_sum -= ADC_I_SENSE_tmp[1];
	ADC_I_SENSE_sum -= ADC_I_SENSE_tmp[18];
	ADC_I_SENSE_sum -= ADC_I_SENSE_tmp[19];
	ADC_I_SENSE = ADC_I_SENSE_sum / (repeat - 4);

	bm_print(BM_LOG_FULL, "[g_Get_I_Charging] ADC_I_SENSE(Before)=%d\r\n", ADC_I_SENSE);


	bm_print(BM_LOG_FULL, "[g_Get_I_Charging] ADC_I_SENSE(After)=%d\r\n", ADC_I_SENSE);

	ICharging = (ADC_I_SENSE + g_I_SENSE_offset) * 1000 / batt_meter_cust_data.cust_r_sense;

	return ICharging;
#else
	return 0;
#endif
}

signed int battery_meter_get_battery_current(void)
{
	int ret = 0;
@@ -3917,6 +3988,11 @@ signed int battery_meter_get_VSense(void)
#endif
}

signed int battery_meter_get_QMAX25(void)
{
	return batt_meter_cust_data.q_max_pos_25;
}

/* ============================================================ // */
static ssize_t fgadc_log_write(struct file *filp, const char __user *buff,
			       size_t len, loff_t *data)