struct work_struct batt_work;
struct timer_list timer;
struct wm_batt_priv_data batt_info;
+ struct wake_lock syslo_wake;
int interval;
};
/* Not much we can actually *do* but tell people for
* posterity, we're probably about to run out of power. */
- dev_crit(wm831x->dev, "SYSVDD under voltage\n");
+ dev_crit(wm831x->dev, "SYSVDD under voltage and wake lock 60s\n");
+ wake_lock_timeout(&wm831x_power->syslo_wake,60*HZ);//wait for android closing system
return IRQ_HANDLED;
}
{
int i, ret, status;
static int count = 0;
- static int disp_plus = 100;
- static int disp_minus = 100;
+ static int disp_plus = 1000;
+ static int disp_minus = 1000;
static int disp_curr = 0;
*level = wm831x_power->batt_info.level;
*level = 100;
// ³õʼ״̬
- if ((disp_plus == 100) && (disp_minus == 100))
+ if ((disp_plus == 1000) && (disp_minus == 1000))
{
*level = *level;
disp_plus = 0;
}
else
{
- if (*level <= (wm831x_power->batt_info.level-3))
+ if (*level <= (wm831x_power->batt_info.level-1))
{
disp_plus = 0;
disp_curr = 0;
- if (++disp_minus > 4)
+ if (++disp_minus > 50)
{
- *level = wm831x_power->batt_info.level - 3;
+ *level = wm831x_power->batt_info.level - 1;
disp_minus = 0;
}
else
disp_plus = 0;
disp_minus = 0;
- if (++disp_curr > 4)
+ if (++disp_curr > 50)
{
*level = *level;
disp_curr = 0;
*level = wm831x_power->batt_info.level;
}
}
- else if (*level >= (wm831x_power->batt_info.level+3))
+ else if (*level >= (wm831x_power->batt_info.level+1))
{
disp_minus = 0;
disp_curr = 0;
- if (++disp_plus > 10)
+ if (++disp_plus > 100)
{
- *level = wm831x_power->batt_info.level + 3;
+ *level = wm831x_power->batt_info.level + 1;
disp_plus = 0;
}
else
power->batt_info.status = POWER_SUPPLY_STATUS_DISCHARGING;
power->batt_info.health = POWER_SUPPLY_HEALTH_GOOD;
+ wake_lock_init(&power->syslo_wake, WAKE_LOCK_SUSPEND, "wm831x_syslo_wake");
INIT_WORK(&power->batt_work, wm831x_batt_work);
setup_timer(&power->timer, wm831x_batt_timer_handler, (unsigned long)power);
power->timer.expires = jiffies + msecs_to_jiffies(1000);