aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/power/sec_battery_u1.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/power/sec_battery_u1.c')
-rw-r--r--drivers/power/sec_battery_u1.c93
1 files changed, 72 insertions, 21 deletions
diff --git a/drivers/power/sec_battery_u1.c b/drivers/power/sec_battery_u1.c
index a442251..3dcd150 100644
--- a/drivers/power/sec_battery_u1.c
+++ b/drivers/power/sec_battery_u1.c
@@ -39,8 +39,13 @@
#if defined(CONFIG_TARGET_LOCALE_NAATT)
#define VF_CHECK_INTERVAL (5 * 1000)
+#if defined(CONFIG_MACH_U1_NA_SPR) || defined(CONFIG_MACH_U1_NA_USCC)
+#define MAX_VF 1500
+#define MIN_VF 1350
+#else
#define MAX_VF 1800
#define MIN_VF 1100
+#endif
#define VF_COUNT 1
#elif defined(CONFIG_MACH_Q1_BD)
#define VF_CHECK_INTERVAL (5 * 1000)
@@ -126,6 +131,17 @@
#define LOW_BLOCK_TEMP_ADC_LPM 521
#define HIGH_RECOVER_TEMP_ADC_LPM 714
#define LOW_RECOVER_TEMP_ADC_LPM 522
+#elif defined(CONFIG_MACH_U1_NA_USCC)
+#define EVENT_BLOCK_TEMP_ADC 770
+#define HIGH_BLOCK_TEMP_ADC 770
+#define LOW_BLOCK_TEMP_ADC 502
+#define HIGH_RECOVER_TEMP_ADC 699
+#define LOW_RECOVER_TEMP_ADC 516
+
+#define HIGH_BLOCK_TEMP_ADC_LPM 710
+#define LOW_BLOCK_TEMP_ADC_LPM 506
+#define HIGH_RECOVER_TEMP_ADC_LPM 702
+#define LOW_RECOVER_TEMP_ADC_LPM 512
#else
#define EVENT_BLOCK_TEMP_ADC 777
#define HIGH_BLOCK_TEMP_ADC 729
@@ -367,6 +383,10 @@ static enum power_supply_property sec_battery_props[] = {
POWER_SUPPLY_PROP_TECHNOLOGY,
POWER_SUPPLY_PROP_VOLTAGE_NOW,
POWER_SUPPLY_PROP_CAPACITY,
+#ifdef CONFIG_SLP
+ POWER_SUPPLY_PROP_CHARGE_NOW,
+ POWER_SUPPLY_PROP_CHARGE_FULL,
+#endif
POWER_SUPPLY_PROP_TEMP,
POWER_SUPPLY_PROP_CURRENT_AVG,
};
@@ -492,6 +512,20 @@ static int sec_bat_get_property(struct power_supply *ps,
if (val->intval == -1)
return -EINVAL;
break;
+#ifdef CONFIG_SLP
+ case POWER_SUPPLY_PROP_CHARGE_FULL:
+ if (info->charging_status == POWER_SUPPLY_STATUS_FULL)
+ val->intval = true;
+ else
+ val->intval = false;
+ break;
+ case POWER_SUPPLY_PROP_CHARGE_NOW:
+ if (info->charging_status == POWER_SUPPLY_STATUS_CHARGING)
+ val->intval = true;
+ else
+ val->intval = false;
+ break;
+#endif
case POWER_SUPPLY_PROP_CAPACITY:
#ifdef CONFIG_TARGET_LOCALE_NA
if (info->charging_status != POWER_SUPPLY_STATUS_FULL
@@ -513,7 +547,7 @@ static int sec_bat_get_property(struct power_supply *ps,
val->intval = POWER_SUPPLY_TECHNOLOGY_LION;
break;
case POWER_SUPPLY_PROP_CURRENT_AVG:
- val->intval = -1;
+ val->intval = 1;
break;
default:
return -EINVAL;
@@ -783,12 +817,16 @@ static int is_event_end_timer_running(struct sec_bat_info *info)
if (time_after(passed_time, (unsigned long)EVENT_OVER_TIME)) {
info->event_end_time = 0xFFFFFFFF;
+ #ifndef PRODUCT_SHIP
dev_info(info->dev, "%s: Event timer is over 10 min\n",
__func__);
+ #endif
return false;
} else {
+ #ifndef PRODUCT_SHIP
dev_info(info->dev, "%s: Event timer is running(%u s)\n",
__func__, jiffies_to_msecs(passed_time) / 1000);
+ #endif
return true;
}
@@ -816,13 +854,17 @@ static int is_event_end_timer_running(struct sec_bat_info *info)
if (time_after(passed_time, (unsigned long)BAT_USE_TIMER_EXPIRE)) {
info->event_expired_time = 0xFFFFFFFF;
+ #ifndef PRODUCT_SHIP
dev_info(info->dev, "[SPR_NA] %s: Event timer is over 10 min\n",
__func__);
+ #endif
return false;
} else {
+#ifndef PRODUCT_SHIP
dev_info(info->dev,
"[SPR_NA] %s: Event timer is running(%u s)\n",
__func__, jiffies_to_msecs(passed_time) / 1000);
+#endif
return true;
}
@@ -932,9 +974,11 @@ static int sec_bat_check_temper(struct sec_bat_info *info)
} else {
if ((info->batt_event_status)
|| (is_event_end_timer_running(info))) {
+#ifndef PRODUCT_SHIP
dev_info(info->dev,
- "[NA_SPR] Changed Put off Current",
+ "%s: [NA_SPR] Changed Put off Current",
__func__);
+#endif
if (temp_radc >= EVENT_BLOCK_TEMP_ADC) {
if (health !=
POWER_SUPPLY_HEALTH_OVERHEAT
@@ -943,7 +987,7 @@ static int sec_bat_check_temper(struct sec_bat_info *info)
if (info->batt_temp_high_cnt <
TEMP_BLOCK_COUNT)
info->
- batt_temp_high_cnt++;
+ batt_temp_high_cnt++;
dev_info(info->dev,
"%s: high count = %d\n",
__func__,
@@ -962,7 +1006,7 @@ static int sec_bat_check_temper(struct sec_bat_info *info)
batt_temp_recover_cnt <
TEMP_BLOCK_COUNT)
info->
- batt_temp_recover_cnt++;
+ batt_temp_recover_cnt++;
dev_info(info->dev,
"%s: recovery count = %d\n",
__func__,
@@ -995,7 +1039,7 @@ static int sec_bat_check_temper(struct sec_bat_info *info)
if (info->batt_temp_high_cnt <
TEMP_BLOCK_COUNT)
info->
- batt_temp_high_cnt++;
+ batt_temp_high_cnt++;
dev_info(info->dev,
"%s: high count = %d\n",
__func__,
@@ -1015,7 +1059,7 @@ static int sec_bat_check_temper(struct sec_bat_info *info)
batt_temp_recover_cnt <
TEMP_BLOCK_COUNT)
info->
- batt_temp_recover_cnt++;
+ batt_temp_recover_cnt++;
dev_info(info->dev,
"%s: recovery count = %d\n",
__func__,
@@ -1073,9 +1117,9 @@ static int sec_bat_check_temper(struct sec_bat_info *info)
__func__, ret);
}
}
-
+#ifndef PRODUCT_SHIP
dev_info(info->dev, "%s: temp=%d, adc=%d\n", __func__, temp, temp_adc);
-
+#endif
return temp;
}
@@ -1263,8 +1307,9 @@ static int sec_bat_check_temper(struct sec_bat_info *info)
__func__, ret);
}
}
-
+#ifndef PRODUCT_SHIP
dev_info(info->dev, "%s: temp=%d, adc=%d\n", __func__, temp, temp_adc);
+#endif
return temp;
}
@@ -1350,9 +1395,9 @@ static int sec_bat_check_temper(struct sec_bat_info *info)
__func__, ret);
}
}
-
+#ifndef PRODUCT_SHIP
dev_info(info->dev, "%s: temp=%d, adc=%d\n", __func__, temp, temp_adc);
-
+#endif
return temp;
}
#endif
@@ -1729,9 +1774,10 @@ static bool sec_bat_charging_time_management(struct sec_bat_info *info)
dev_info(info->dev, "%s: Undefine Battery Status\n", __func__);
return false;
}
-
+#ifndef PRODUCT_SHIP
dev_info(info->dev, "Time past : %u secs\n",
jiffies_to_msecs(info->charging_passed_time) / 1000);
+#endif
return false;
}
@@ -1953,9 +1999,9 @@ static bool sec_bat_check_ing_level_trigger(struct sec_bat_info *info)
charging_int_full_count >=
FULL_CHG_COND_COUNT) {
info->
- charging_int_full_count
+ charging_int_full_count
= 0;
- sec_bat_handle_charger_topoff
+ sec_bat_handle_charger_topoff
(info);
return true;
}
@@ -1963,7 +2009,7 @@ static bool sec_bat_check_ing_level_trigger(struct sec_bat_info *info)
"%s : full interrupt cnt = %d\n",
__func__,
info->
- charging_int_full_count);
+ charging_int_full_count);
} else {
info->charging_int_full_count =
0;
@@ -2042,9 +2088,9 @@ static bool sec_bat_check_ing_level_trigger(struct sec_bat_info *info)
charging_int_full_count >=
FULL_CHG_COND_COUNT) {
info->
- charging_int_full_count
+ charging_int_full_count
= 0;
- sec_bat_handle_charger_topoff
+ sec_bat_handle_charger_topoff
(info);
return true;
}
@@ -2052,13 +2098,14 @@ static bool sec_bat_check_ing_level_trigger(struct sec_bat_info *info)
"%s : full interrupt cnt = %d\n",
__func__,
info->
- charging_int_full_count);
+ charging_int_full_count);
} else {
info->charging_int_full_count =
0;
/*reactivate charging in */
/*next monitor work */
- /*for abnormal full-charged status */
+ /*for abnormal
+ full-charged status */
info->charging_next_time =
info->charging_passed_time +
HZ;
@@ -2230,12 +2277,14 @@ static void sec_bat_monitor_work(struct work_struct *work)
info->batt_temp / 10, info->charging_status, info->batt_health,
info->batt_vf_adc);
#else
+#ifndef PRODUCT_SHIP
dev_info(info->dev,
"soc(%d), vfocv(%d), vcell(%d), temp(%d), charging(%d), health(%d), chg_adc(%d)\n",
info->batt_soc, info->batt_vfocv, info->batt_vcell / 1000,
info->batt_temp / 10, info->charging_status,
info->batt_health, info->batt_current_adc);
#endif
+#endif
power_supply_changed(&info->psy_bat);
@@ -2449,10 +2498,10 @@ static void sec_bat_check_event_status(struct sec_bat_info *info, int mode,
if (info->batt_event_status & offset)
info->batt_event_status &= ~offset;
}
-
+#ifndef PRODUCT_SHIP
printk(KERN_DEBUG "[%s] current batt_event_status = 0x%x\n", __func__,
info->batt_event_status);
-
+#endif
if ((info->batt_event_status == 0) && (is_event_running == 1))
info->event_expired_time = jiffies;
@@ -2463,6 +2512,7 @@ int sec_bat_use_wimax(int onoff)
{
struct sec_bat_info *info = pchg;
sec_bat_check_event_status(info, onoff, USE_WIMAX);
+ return 0;
}
EXPORT_SYMBOL(sec_bat_use_wimax);
#endif
@@ -2916,6 +2966,7 @@ static ssize_t sec_bat_store(struct device *dev,
case BATT_CAMERA:
/* TODO */
if (sscanf(buf, "%d\n", &x) == 1) {
+ info->use_camera = x;
dev_info(info->dev, "[NA_SPR]%s: CAMERA(%d)\n",
__func__, x);
ret = count;