static void bq24157_set_safety_limits(struct i2c_client *client) { struct sec_charger_info *charger = i2c_get_clientdata(client); u8 data; data = 0x00; data |= bq24157_get_fast_charging_current_data( charger->pdata->charging_current[ POWER_SUPPLY_TYPE_MAINS].fast_charging_current); data |= ((charger->pdata->chg_float_voltage - 4200) / 20); bq24157_set_command(client, BQ24157_SAFETY, data); }
static void bq24157_charger_function_conrol( struct i2c_client *client) { struct sec_charger_info *charger = i2c_get_clientdata(client); u8 data; if (charger->charging_current < 0) { dev_dbg(&client->dev, "%s : OTG is activated. Ignore command!\n", __func__); return; } if (charger->cable_type == POWER_SUPPLY_TYPE_BATTERY) { /* USB100 mode, turn off charger */ bq24157_set_command(client, BQ24157_CONTROL, 0x04); } else { data = 0x02; dev_dbg(&client->dev, "%s : float voltage (%dmV)\n", __func__, charger->pdata->chg_float_voltage); data |= bq24157_get_float_voltage_data( charger->pdata->chg_float_voltage); bq24157_set_command(client, BQ24157_VOLTAGE, data); data = 0x00; dev_dbg(&client->dev, "%s : fast charging current (%dmA)\n", __func__, charger->charging_current); data |= bq24157_get_fast_charging_current_data( charger->charging_current); dev_dbg(&client->dev, "%s : termination current (%dmA)\n", __func__, charger->pdata->charging_current[ charger->cable_type].full_check_current_1st); data |= bq24157_get_termination_current_limit_data( charger->pdata->charging_current[ charger->cable_type].full_check_current_1st); bq24157_set_command(client, BQ24157_CURRENT, data); /* Input current limit */ bq24157_i2c_read(client, BQ24157_CONTROL, &data); dev_dbg(&client->dev, "%s : input current (%dmA)\n", __func__, charger->pdata->charging_current [charger->cable_type].input_current_limit); data |= bq24157_get_input_current_limit_data( charger->pdata->charging_current [charger->cable_type].input_current_limit); bq24157_set_command(client, BQ24157_CONTROL, data); /* Special Charger Voltage : 4.520V * Normal charge current */ bq24157_i2c_read(client, BQ24157_SPECIAL, &data); data &= 0xdf; bq24157_set_command(client, BQ24157_SPECIAL, data); bq24157_i2c_read(client, BQ24157_CONTROL, &data); /* Enable charging */ data &= 0xfb; /* Termination setting */ switch (charger->pdata->full_check_type) { case SEC_BATTERY_FULLCHARGED_CHGGPIO: case SEC_BATTERY_FULLCHARGED_CHGINT: case SEC_BATTERY_FULLCHARGED_CHGPSY: /* Enable Current Termination */ data |= 0x08; break; case SEC_BATTERY_FULLCHARGED_ADC: case SEC_BATTERY_FULLCHARGED_ADC_DUAL: case SEC_BATTERY_FULLCHARGED_FG_CURRENT: case SEC_BATTERY_FULLCHARGED_FG_CURRENT_DUAL: break; } bq24157_set_command(client, BQ24157_CONTROL, data); } }