mirror of
https://github.com/torvalds/linux.git
synced 2026-06-08 22:52:35 +02:00
rk29 phone:add wake lock support if SYSVDD under voltage
This commit is contained in:
parent
2905f5e385
commit
4e5e35cefe
|
|
@ -95,6 +95,7 @@ struct wm831x_power {
|
|||
struct work_struct batt_work;
|
||||
struct timer_list timer;
|
||||
struct wm_batt_priv_data batt_info;
|
||||
struct wake_lock syslo_wake;
|
||||
int interval;
|
||||
};
|
||||
|
||||
|
|
@ -699,7 +700,8 @@ static irqreturn_t wm831x_syslo_irq(int irq, void *data)
|
|||
|
||||
/* 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;
|
||||
}
|
||||
|
||||
|
|
@ -730,8 +732,8 @@ void wm831x_batt_vol_level(struct wm831x_power *wm831x_power, int batt_vol, int
|
|||
{
|
||||
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;
|
||||
|
|
@ -789,7 +791,7 @@ void wm831x_batt_vol_level(struct wm831x_power *wm831x_power, int batt_vol, int
|
|||
*level = 100;
|
||||
|
||||
// ³õʼ״̬
|
||||
if ((disp_plus == 100) && (disp_minus == 100))
|
||||
if ((disp_plus == 1000) && (disp_minus == 1000))
|
||||
{
|
||||
*level = *level;
|
||||
disp_plus = 0;
|
||||
|
|
@ -798,14 +800,14 @@ void wm831x_batt_vol_level(struct wm831x_power *wm831x_power, int batt_vol, int
|
|||
}
|
||||
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
|
||||
|
|
@ -818,7 +820,7 @@ void wm831x_batt_vol_level(struct wm831x_power *wm831x_power, int batt_vol, int
|
|||
disp_plus = 0;
|
||||
disp_minus = 0;
|
||||
|
||||
if (++disp_curr > 4)
|
||||
if (++disp_curr > 50)
|
||||
{
|
||||
*level = *level;
|
||||
disp_curr = 0;
|
||||
|
|
@ -828,14 +830,14 @@ void wm831x_batt_vol_level(struct wm831x_power *wm831x_power, int batt_vol, int
|
|||
*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
|
||||
|
|
@ -1003,6 +1005,7 @@ static __devinit int wm831x_power_probe(struct platform_device *pdev)
|
|||
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);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user