static enum manta_charge_source detect_charge_source(enum charge_connector conn, bool online, bool force_dock_redetect, bool usbin_redetect) { enum manta_charge_source charge_source; int ret; manta_bat_dock = false; if (!online) { if (conn == CHARGE_CONNECTOR_POGO) manta_pogo_set_vbus(online, NULL); return MANTA_CHARGE_SOURCE_NONE; } charge_source = force_dock_redetect ? MANTA_CHARGE_SOURCE_USB : check_samsung_charger(conn, usbin_redetect); if (conn == CHARGE_CONNECTOR_POGO && charge_source == MANTA_CHARGE_SOURCE_USB) { ret = manta_pogo_set_vbus(online, &charge_source); manta_bat_dock = ret >= 0; } return charge_source; }
static int sec_bat_charging_control(struct chg_data *chg) { static enum cable_type_t prev_cable_status = CABLE_TYPE_NONE; static bool prev_charging = false; int ret; if(chg->cable_status != prev_cable_status || chg->charging != prev_charging) { /* disable max8998 charer */ if(chg->pdata->pmic_charger && chg->pdata->pmic_charger->charging_control) { ret = chg->pdata->pmic_charger->charging_control(0, chg->cable_status); if (ret < 0) goto err; } if (!chg->charging) { /* disable charging */ gpio_set_value(GPIO_TA_EN, 1); // External charger disable } else { /* enable charging */ if(chg->pdata->external_charger && chg->pdata->external_charger->charging_control) { if ((chg->cable_status == CABLE_TYPE_AC) && !check_samsung_charger()) { chg->pdata->external_charger->charging_control(1, CABLE_TYPE_IMPROPER_AC); // Improper charger chg->bat_info.batt_improper_ta = true; // Improper charger } else { chg->pdata->external_charger->charging_control(1, chg->cable_status); // TA or USB cable } } gpio_set_value(GPIO_TA_EN, 0); // External charger enable // Stop low battery compensation algorithm if(chg->pdata && chg->pdata->fuelgauge_cb) chg->pdata->fuelgauge_cb(REQ_LOW_BATTERY_COMPENSATION, 0, 0); } /* update previous status values */ prev_cable_status = chg->cable_status; prev_charging = chg->charging; } else { // do nothing... status is same as previous one. } return 0; err: pr_err("max8998_read_reg error\n"); return ret; }