示例#1
0
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);
	}
}