/* callback for battery check * return : bool * true - battery detected, false battery NOT detected */ static bool sec_bat_check_callback(void) { int i, present; present = 0; if (sec_bat_recovery_mode == 1) { pr_info("%s : recovery_mode, skip batt check\n", __func__); present = 1; return present; } pm8921_enable_batt_therm(1); /* check battery 5 times */ for (i = 0; i < 5; i++) { msleep(500); present = !gpio_get_value_cansleep( PM8921_GPIO_PM_TO_SYS( PMIC_GPIO_BATT_INT)); /* If the battery is missing, then check more */ if (present) { i++; break; } } pm8921_enable_batt_therm(0); pr_info("%s : battery is %s (%d time%c)\n", __func__, present ? "present" : "absent", i, (i == 1) ? ' ' : 's'); return present ? true : false; }
/* callback for battery check * return : bool * true - battery detected, false battery NOT detected */ static bool sec_bat_check_callback(void) { pm8921_enable_batt_therm(1); msleep(1000); if (gpio_get_value_cansleep( PM8921_GPIO_PM_TO_SYS( PMIC_GPIO_BATT_INT))) { pr_info("%s : CF open, Battery NOT detected\n", __func__); pm8921_enable_batt_therm(0); return false; } pm8921_enable_batt_therm(0); return true; }
static bool sec_bat_check_cable_result_callback( int cable_type) { struct regulator *l29; current_cable_type = cable_type; if(system_rev < 0x3) { if (current_cable_type == POWER_SUPPLY_TYPE_BATTERY) { pr_info("%s set ldo off\n", __func__); l29 = regulator_get(NULL, "8921_l29"); if(l29 > 0) regulator_disable(l29); } else { pr_info("%s set ldo on\n", __func__); l29 = regulator_get(NULL, "8921_l29"); if(l29 > 0) regulator_enable(l29); } } else { if (current_cable_type == POWER_SUPPLY_TYPE_BATTERY) { pr_info("%s set Vref_batt_therm off\n", __func__); pm8921_enable_batt_therm(0); } else { pr_info("%s set Vref_batt_therm on\n", __func__); pm8921_enable_batt_therm(1); } } return true; }