From 25d845b5bf3b28092e10f960786e4155b162c94a Mon Sep 17 00:00:00 2001 From: root Date: Fri, 17 Jun 2011 04:01:28 +0800 Subject: [PATCH] 1.make sure power key can wake up system and light lcd even though pressure time is short. 2.mask some unused log. --- drivers/input/misc/wm831x-on.c | 45 +++++++++++++++++++------- drivers/input/touchscreen/ili2102_ts.c | 2 +- drivers/regulator/wm831x-ldo.c | 4 +-- drivers/video/backlight/aw9364_bl.c | 2 +- 4 files changed, 38 insertions(+), 15 deletions(-) diff --git a/drivers/input/misc/wm831x-on.c b/drivers/input/misc/wm831x-on.c index 3d1787ac4410..4b8782d662f2 100755 --- a/drivers/input/misc/wm831x-on.c +++ b/drivers/input/misc/wm831x-on.c @@ -41,6 +41,8 @@ struct wm831x_on { struct input_dev *dev; struct delayed_work work; struct wm831x *wm831x; + int flag_resume; + spinlock_t flag_lock; struct wake_lock wm831x_on_wake; }; @@ -63,24 +65,39 @@ void rk28_send_wakeup_key(void) } #endif -#if 0 +#if 1 static int wm831x_on_suspend_noirq(struct device *dev) { DBG("%s\n",__FUNCTION__); + + if(!g_wm831x_on) + { + printk("%s:addr err!\n",__FUNCTION__); + return -1; + } + + spin_lock(&g_wm831x_on->flag_lock); + g_wm831x_on->flag_resume = 0; + spin_unlock(&g_wm831x_on->flag_lock); return 0; } static int wm831x_on_resume_noirq(struct device *dev) { - int poll, ret; + //int poll, ret; if(!g_wm831x_on) { printk("%s:addr err!\n",__FUNCTION__); - return; + return -1; } + spin_lock(&g_wm831x_on->flag_lock); + g_wm831x_on->flag_resume = 1; + spin_unlock(&g_wm831x_on->flag_lock); + +#if 0 ret = wm831x_reg_read(g_wm831x_on->wm831x, WM831X_ON_PIN_CONTROL); if (ret >= 0) { poll = !(ret & WM831X_ON_PIN_STS); @@ -89,7 +106,7 @@ static int wm831x_on_resume_noirq(struct device *dev) input_sync(g_wm831x_on->dev); DBG("%s:poll=%d,ret=0x%x\n",__FUNCTION__,poll,ret); } - +#endif DBG("%s\n",__FUNCTION__); return 0; } @@ -173,11 +190,17 @@ static irqreturn_t wm831x_on_irq(int irq, void *data) int poll, ret; //wake_lock(&wm831x_on->wm831x_on_wake); - -read_again: - - ret = wm831x_reg_read(wm831x, WM831X_ON_PIN_CONTROL); + + ret = wm831x_reg_read(wm831x, WM831X_ON_PIN_CONTROL);//it may be unpress if start to read register now if (ret >= 0) { + if(wm831x_on->flag_resume) + { + poll = 1; + spin_lock(&wm831x_on->flag_lock); + wm831x_on->flag_resume = 0; + spin_unlock(&wm831x_on->flag_lock); + } + else poll = !(ret & WM831X_ON_PIN_STS); input_report_key(wm831x_on->dev, KEY_POWER, poll); input_sync(wm831x_on->dev); @@ -200,8 +223,8 @@ read_again: static int __devinit wm831x_on_probe(struct platform_device *pdev) { - struct wm831x *wm831x = dev_get_drvdata(pdev->dev.parent);; - struct wm831x_on *wm831x_on; + struct wm831x *wm831x = dev_get_drvdata(pdev->dev.parent); + struct wm831x_on *wm831x_on = NULL; int irq = platform_get_irq(pdev, 0); int ret; printk("%s irq=%d\n", __FUNCTION__,irq); @@ -230,7 +253,7 @@ static int __devinit wm831x_on_probe(struct platform_device *pdev) wm831x_on->dev->dev.parent = &pdev->dev; g_wm831x_on = wm831x_on; -// wm831x_on_pm_init(); + wm831x_on_pm_init(); ret = request_threaded_irq(irq, NULL, wm831x_on_irq, IRQF_TRIGGER_RISING, "wm831x_on", diff --git a/drivers/input/touchscreen/ili2102_ts.c b/drivers/input/touchscreen/ili2102_ts.c index 6000f2c7dd74..e5b78bc772c3 100755 --- a/drivers/input/touchscreen/ili2102_ts.c +++ b/drivers/input/touchscreen/ili2102_ts.c @@ -810,7 +810,7 @@ static void ili2102_ts_resume_work_func(struct work_struct *work) printk("%s:request irq=%d failed,ret=%d\n",__FUNCTION__,ts->client->irq,ret); PREPARE_DELAYED_WORK(&ts->work, ili2102_ts_work_func); - printk("%s,irq=%d\n",__FUNCTION__,ts->client->irq); + DBG("%s,irq=%d\n",__FUNCTION__,ts->client->irq); } diff --git a/drivers/regulator/wm831x-ldo.c b/drivers/regulator/wm831x-ldo.c index 30d5dbec2605..f74692826dfb 100755 --- a/drivers/regulator/wm831x-ldo.c +++ b/drivers/regulator/wm831x-ldo.c @@ -143,7 +143,7 @@ static int wm831x_gp_ldo_set_voltage(struct regulator_dev *rdev, { struct wm831x_ldo *ldo = rdev_get_drvdata(rdev); int reg = ldo->base + WM831X_LDO_ON_CONTROL; - printk("%s base=%x,%d,%d\n", __FUNCTION__,ldo->base,min_uV,max_uV); + //printk("%s base=%x,%d,%d\n", __FUNCTION__,ldo->base,min_uV,max_uV); return wm831x_gp_ldo_set_voltage_int(rdev, reg, min_uV, max_uV); } @@ -166,7 +166,7 @@ static int wm831x_gp_ldo_get_voltage(struct regulator_dev *rdev) ret = wm831x_reg_read(wm831x, reg); if (ret < 0) return ret; - printk("%s base=%x,ret=%x\n", __FUNCTION__,ldo->base,ret); + //printk("%s base=%x,ret=%x\n", __FUNCTION__,ldo->base,ret); ret &= WM831X_LDO1_ON_VSEL_MASK; return wm831x_gp_ldo_list_voltage(rdev, ret); diff --git a/drivers/video/backlight/aw9364_bl.c b/drivers/video/backlight/aw9364_bl.c index 35b05142020e..bd9c2f60eda4 100755 --- a/drivers/video/backlight/aw9364_bl.c +++ b/drivers/video/backlight/aw9364_bl.c @@ -124,7 +124,7 @@ static int aw9364_backlight_update_status(struct backlight_device *bl) if (bl->props.state & BL_CORE_SUSPENDED) brightness = 0; - printk("backlight brightness=%d\n", brightness); + DBG("backlight brightness=%d\n", brightness); return aw9364_backlight_set(bl, brightness); } -- 2.34.1