/* 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;
}