static int adc_get_vcell(struct i2c_client *client) { struct sec_fuelgauge_info *fuelgauge = i2c_get_clientdata(client); int vcell; vcell = adc_get_data_by_adc(fuelgauge, get_battery_data(fuelgauge).adc2vcell_table, get_battery_data(fuelgauge).adc2vcell_table_size, adc_get_adc_value(fuelgauge, SEC_BAT_ADC_CHANNEL_VOLTAGE_NOW)); return vcell; }
static int adc_get_current(struct i2c_client *client) { union power_supply_propval value; struct sec_fuelgauge_info *fuelgauge = i2c_get_clientdata(client); int current_now; current_now = adc_get_data_by_adc(fuelgauge, get_battery_data(fuelgauge).adc2current_table, get_battery_data(fuelgauge).adc2current_table_size, adc_get_adc_value(fuelgauge, SEC_BAT_ADC_CHANNEL_CURRENT_NOW)); if (!current_now) { psy_do_property("sec-charger", get, POWER_SUPPLY_PROP_CURRENT_NOW, value); current_now = value.intval; } return current_now; }
static int adc_get_vcell(struct i2c_client *client) { union power_supply_propval cable; union power_supply_propval event; union power_supply_propval is_charging; struct sec_fuelgauge_info *fuelgauge = i2c_get_clientdata(client); int vcell, vcell_raw; vcell = adc_get_data_by_adc(fuelgauge, get_battery_data(fuelgauge).adc2vcell_table, get_battery_data(fuelgauge).adc2vcell_table_size, adc_get_adc_value(fuelgauge, SEC_BAT_ADC_CHANNEL_VOLTAGE_NOW)); vcell_raw = vcell; psy_do_property("battery", get, POWER_SUPPLY_PROP_ONLINE, cable); /* get current event status */ event.intval = BATT_EVENT; psy_do_property("battery", get, POWER_SUPPLY_PROP_TECHNOLOGY, event); psy_do_property("battery", get, POWER_SUPPLY_PROP_CHARGE_NOW, is_charging); if (is_charging.intval != SEC_BATTERY_CHARGING_NONE) { /* compensate voltage by cable only in charging status */ if (cable.intval != POWER_SUPPLY_TYPE_BATTERY) vcell += get_cable_compensation_voltage( fuelgauge, vcell); } else { /* need compensation before cable detection * in power-off charging */ if ((cable.intval == POWER_SUPPLY_TYPE_BATTERY) && (fuelgauge->pdata->is_lpm() || fuelgauge->pdata->check_vbus_status())) { dev_dbg(&client->dev, "%s: VBUS compensation\n", __func__); vcell += get_cable_compensation_voltage( fuelgauge, vcell); } } if (event.intval) { if (fuelgauge->pdata->check_vbus_status() && (event.intval & EVENT_BOOTING)) dev_dbg(&client->dev, "%s: no event compensation " "in booting with charging\n", __func__); else vcell += get_event_compensation_voltage( fuelgauge, event.intval); } #if defined(SEC_FUELGAUGE_ADC_DELTA_COMPENSATION) if (!fuelgauge->pdata->monitor_initial_count) vcell += get_delta_compensation_voltage( fuelgauge, vcell, vcell_raw); #endif return vcell; }