diff options
author | David Jung <djung@nvidia.com> | 2013-02-21 13:45:45 -0800 |
---|---|---|
committer | Dan Willemsen <dwillemsen@nvidia.com> | 2013-09-14 13:00:34 -0700 |
commit | c9459dc8ecffb531d1a5ee9d678031637374041c (patch) | |
tree | 5b7b62a1fe92dabbc95e2122ea152e1b2350cec0 /drivers/input/touchscreen/rm31080a_ts.c | |
parent | 29f0830b428cada079594ad12e3abae981018678 (diff) |
input: touch: raydium: correct queueing of resumes
Raydium code drop. Queue a maximum of one resume.
Bug 1225919
Change-Id: Ice8433752483c9a1b1b73266705d3d19fbd553ff
Signed-off-by: David Jung <djung@nvidia.com>
Reviewed-on: http://git-master/r/203052
Reviewed-by: Robert Collins <rcollins@nvidia.com>
Tested-by: Robert Collins <rcollins@nvidia.com>
Reviewed-by: Thomas Cherry <tcherry@nvidia.com>
Reviewed-by: Automatic_Commit_Validation_User
Diffstat (limited to 'drivers/input/touchscreen/rm31080a_ts.c')
-rw-r--r-- | drivers/input/touchscreen/rm31080a_ts.c | 43 |
1 files changed, 41 insertions, 2 deletions
diff --git a/drivers/input/touchscreen/rm31080a_ts.c b/drivers/input/touchscreen/rm31080a_ts.c index 9223681e779f..8c7c63036eec 100644 --- a/drivers/input/touchscreen/rm31080a_ts.c +++ b/drivers/input/touchscreen/rm31080a_ts.c @@ -101,11 +101,16 @@ struct rm31080a_ts_para { bool bEnableAutoScan; bool bIsSuspended; + bool bInitStartFlag; + bool bInitFailFlag; + bool bReissueSignalFlag; + struct mutex mutex_scan_mode; #ifdef ENABLE_WORK_QUEUE struct workqueue_struct *rm_workqueue; struct work_struct rm_work; #endif + #ifdef ENABLE_RAW_DATA_QUEUE u8 u8ScanModeState; #endif @@ -690,13 +695,14 @@ void rm31080_ctrl_enter_auto_mode(void) { if (g_stCtrl.bICVersion == T007A6) rm31080_ts_send_signal(g_stTs.ulHalPID, - RM_SIGNAL_ENTER_AUTO_SCAN); + RM_SIGNAL_ENTER_AUTO_SCAN); /*Enable auto scan */ if (g_stCtrl.bfIdleMessage) rm_printk("Enter Auto Scan Mode\n"); /*Set idle*/ rm_set_idle(1); + if (g_stCtrl.bSTScan) rm_set_auto(1); else @@ -712,6 +718,7 @@ void rm31080_ctrl_leave_auto_mode(void) rm_printk("Leave Auto Scan Mode\n"); /*leave idle*/ rm_set_idle(0); + if (g_stCtrl.bSTScan) rm_set_auto(0); else @@ -826,6 +833,9 @@ static int rm31080_ctrl_suspend(struct rm31080_ts *ts) "raydium regulator 1.8V disable failed: %d\n", error); } + printk(KERN_ALERT "Raydium Sending SUSPEND complete\n"); + if (g_stTs.bInitStartFlag) + g_stTs.bInitFailFlag = 1; mutex_unlock(&g_stTs.mutex_scan_mode); return 1; } @@ -1620,6 +1630,11 @@ static void rm31080_init_ts_structure(void) g_stTs.rm_workqueue = create_singlethread_workqueue("rm_work"); INIT_WORK(&g_stTs.rm_work, rm_work_handler); #endif + + g_stTs.bInitStartFlag = 0; + g_stTs.bInitFailFlag = 0; + g_stTs.bReissueSignalFlag = 0; + mutex_init(&g_stTs.mutex_scan_mode); } @@ -1779,7 +1794,18 @@ static void rm31080_start(struct rm31080_ts *ts) /* 7. delay */ msleep(20); rm31080_init_ts_structure_part(); - rm31080_ts_send_signal(g_stTs.ulHalPID, RM_SIGNAL_RESUME); + + if (g_stTs.bInitStartFlag) { + if (!g_stTs.bReissueSignalFlag) { + printk(KERN_ALERT "Raydium Re-Sending RESUME complete\n"); + rm31080_ts_send_signal(g_stTs.ulHalPID, + RM_SIGNAL_RESUME); + g_stTs.bReissueSignalFlag = 1; + } + } else { + printk(KERN_ALERT "Raydium Sending RESUME complete\n"); + rm31080_ts_send_signal(g_stTs.ulHalPID, RM_SIGNAL_RESUME); + } #elif defined(ENABLE_AUTO_SCAN) rm31080_ctrl_clear_int(); rm31080_ctrl_scan_start(); @@ -1897,6 +1923,7 @@ struct rm31080_ts *rm31080_input_init(struct device *dev, unsigned int irq, ts->irq = irq; pdata = dev->platform_data; + if (pdata->name_of_clock || pdata->name_of_clock_con) { ts->clk = clk_get_sys(pdata->name_of_clock, pdata->name_of_clock_con); @@ -2070,11 +2097,19 @@ static long dev_ioctl(struct file *file, unsigned int cmd, unsigned long arg) break; case RM_IOCTL_INIT_START: g_stTs.bInitFinish = 0; + g_stTs.bInitStartFlag = 1; + printk(KERN_ALERT "Raydium Received RM_IOCTL_INIT_START."); + printk(KERN_ALERT " Touch not ready, ScanModeState = 0x%x\n", + g_stTs.u8ScanModeState); rm31080_enter_manual_mode(); break; case RM_IOCTL_INIT_END: + printk(KERN_ALERT "Raydium Received RM_IOCTL_INIT_END"); + printk(KERN_ALERT " Touch ready.\n"); g_stTs.bInitFinish = 1; g_stTs.bCalcFinish = 1; + g_stTs.bInitStartFlag = 0; + g_stTs.bReissueSignalFlag = 0; #ifdef ENABLE_RAW_DATA_QUEUE ret = rm31080_ctrl_scan_start(); #endif @@ -2121,6 +2156,10 @@ static long dev_ioctl(struct file *file, unsigned int cmd, unsigned long arg) case RM_IOCTL_GET_SACN_MODE: rm31080_ctrl_get_idle_mode((u8 *) arg); break; + case RM_IOCTL_CHECK_INIT_STATUS: + ret = g_stTs.bInitFailFlag; + g_stTs.bInitFailFlag = 0; + break; default: break; |