static void max14577_set_charging(struct sec_charger_info *charger) { union power_supply_propval val; int full_check_type; u8 data; if (charger->cable_type == POWER_SUPPLY_TYPE_BATTERY) { /* turn off charger */ data = 0x00; max14577_set_command(charger, MAX14577_CHG_REG_CHG_CTRL2, data); } else { /* Battery Fast-Charge Timer disabled [6:4] = 0b111 */ data = 0x70; max14577_set_command(charger, MAX14577_CHG_REG_CHG_CTRL1, data); /* Battery-Charger Constant Voltage(CV) Mode, float voltage */ data = 0; data |= max14577_get_float_voltage_data( charger->pdata->chg_float_voltage); dev_dbg(&charger->client->dev, "%s : float voltage (%dmV)\n", __func__, charger->pdata->chg_float_voltage); max14577_set_command(charger, MAX14577_CHG_REG_CHG_CTRL3, data); /* Fast Battery Charge Current */ dev_info(&charger->client->dev, "%s : batt_booting_chk = %d\n", __func__, batt_booting_chk); if (batt_booting_chk) { data = 0; data |= max14577_get_fast_charging_current_data( charger->charging_current); dev_dbg(&charger->client->dev, "%s : charging current (%dmA)\n", __func__, charger->charging_current); max14577_set_command(charger, MAX14577_CHG_REG_CHG_CTRL4, data); } /* End-of-Charge Current Setting */ data = 0; psy_do_property("battery", get, POWER_SUPPLY_PROP_CHARGE_NOW, val); if (val.intval == SEC_BATTERY_CHARGING_1ST) full_check_type = charger->pdata->full_check_type; else full_check_type = charger->pdata->full_check_type_2nd; switch (full_check_type) { case SEC_BATTERY_FULLCHARGED_CHGGPIO: case SEC_BATTERY_FULLCHARGED_CHGINT: /* EOC interrupt NOT masked [0] = 1 */ data = 0x01; max14577_set_command(charger, 0x09, data); case SEC_BATTERY_FULLCHARGED_CHGPSY: if (val.intval == SEC_BATTERY_CHARGING_1ST) { data |= max14577_get_term_current_data( charger->pdata->charging_current[ charger->cable_type]. full_check_current_1st); dev_dbg(&charger->client->dev, "%s : term current (%dmA)\n", __func__, charger->pdata->charging_current[ charger->cable_type]. full_check_current_1st); } else { data |= max14577_get_term_current_data( charger->pdata->charging_current[ charger->cable_type]. full_check_current_2nd); dev_dbg(&charger->client->dev, "%s : term current (%dmA)\n", __func__, charger->pdata->charging_current[ charger->cable_type]. full_check_current_2nd); } break; } /* Set the End Of Charge [EOCS] charging threshold to 50mA i.e. * b1010 so that when battery is nearing charge completion i.e. * SOC=100 & charging current falls below 50mA, EOC IRQ would be * triggered. EOC IRQ status can be read using STATUS3 [0x6] * register. */ max14577_set_command(charger, MAX14577_CHG_REG_CHG_CTRL5, data); /* Auto Charging Stop disabled [5] = 0 */ data = 0x20; max14577_set_command(charger, MAX14577_CHG_REG_CHG_CTRL6, data); /* Overvoltage-Protection Threshold 6.5V [1:0] = 0b10 */ data = 0x02; max14577_set_command(charger, MAX14577_CHG_REG_CHG_CTRL7, data); /* turn on charger */ data = 0xc0; max14577_set_command(charger, MAX14577_CHG_REG_CHG_CTRL2, data); } }
static void max14577_set_charging(struct sec_charger_info *charger) { union power_supply_propval val; int full_check_type; u8 data; if (charger->cable_type == POWER_SUPPLY_TYPE_BATTERY) { /* turn off charger */ data = 0x80; max14577_set_command(charger, MAX14577_CHG_REG_CHG_CTRL2, data); } else { /* Battery Fast-Charge Timer disabled [6:4] = 0b111 */ data = 0x70; max14577_set_command(charger, MAX14577_CHG_REG_CHG_CTRL1, data); /* Battery-Charger Constant Voltage(CV) Mode, float voltage */ data = 0; data |= max14577_get_float_voltage_data( charger->pdata->chg_float_voltage); dev_dbg(&charger->client->dev, "%s : float voltage (%dmV)\n", __func__, charger->pdata->chg_float_voltage); max14577_set_command(charger, MAX14577_CHG_REG_CHG_CTRL3, data); /* Fast Battery Charge Current */ data = 0; data |= max14577_get_fast_charging_current_data( charger->charging_current); dev_dbg(&charger->client->dev, "%s : charging current (%dmA)\n", __func__, charger->charging_current); max14577_set_command(charger, MAX14577_CHG_REG_CHG_CTRL4, data); /* End-of-Charge Current Setting */ data = 0; psy_do_property("battery", get, POWER_SUPPLY_PROP_CHARGE_NOW, val); if (val.intval == SEC_BATTERY_CHARGING_1ST) full_check_type = charger->pdata->full_check_type; else full_check_type = charger->pdata->full_check_type_2nd; switch (full_check_type) { case SEC_BATTERY_FULLCHARGED_CHGGPIO: case SEC_BATTERY_FULLCHARGED_CHGINT: case SEC_BATTERY_FULLCHARGED_CHGPSY: if (val.intval == SEC_BATTERY_CHARGING_1ST) { data |= max14577_get_term_current_data( charger->pdata->charging_current[ charger->cable_type]. full_check_current_1st); dev_dbg(&charger->client->dev, "%s : term current (%dmA)\n", __func__, charger->pdata->charging_current[ charger->cable_type]. full_check_current_1st); } else { data |= max14577_get_term_current_data( charger->pdata->charging_current[ charger->cable_type]. full_check_current_2nd); dev_dbg(&charger->client->dev, "%s : term current (%dmA)\n", __func__, charger->pdata->charging_current[ charger->cable_type]. full_check_current_2nd); } break; } max14577_set_command(charger, MAX14577_CHG_REG_CHG_CTRL5, data); /* Auto Charging Stop disabled [5] = 0 */ data = 0; max14577_set_command(charger, MAX14577_CHG_REG_CHG_CTRL6, data); /* Overvoltage-Protection Threshold 6.5V [1:0] = 0b10 */ data = 0x02; max14577_set_command(charger, MAX14577_CHG_REG_CHG_CTRL7, data); /* turn on charger */ data = 0xc0; max14577_set_command(charger, MAX14577_CHG_REG_CHG_CTRL2, data); } }