mirror of
				git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
				synced 2025-10-31 16:54:21 +00:00 
			
		
		
		
	Input: update input_mt_report_pointer_emulation to support hovering
For devices that are incapable of reporting per-contact distance and can
only report ABS_DISTANCE, just distance is not enough for upper layers of
OS to determine whether contact is leaving the area or if it is continuing
hovering, we need BTN_TOOL_FINGER for that:
                                   Contact State
                    Inactive          Hovering            Active
                   (far away)    (inside hover area)  (touching surface)
BTN_TOUCH              0                 0                   1
BTN_TOOL_FINGER        0                 1                   1
ABS_DISTANCE          N/A                1                   0
Signed-off-by: KT Liao <kt.liao@emc.com.tw>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
			
			
This commit is contained in:
		
							parent
							
								
									cd467299c1
								
							
						
					
					
						commit
						0fd80a77e4
					
				
					 1 changed files with 16 additions and 1 deletions
				
			
		|  | @ -218,8 +218,23 @@ void input_mt_report_pointer_emulation(struct input_dev *dev, bool use_count) | |||
| 	} | ||||
| 
 | ||||
| 	input_event(dev, EV_KEY, BTN_TOUCH, count > 0); | ||||
| 	if (use_count) | ||||
| 
 | ||||
| 	if (use_count) { | ||||
| 		if (count == 0 && | ||||
| 		    !test_bit(ABS_MT_DISTANCE, dev->absbit) && | ||||
| 		    test_bit(ABS_DISTANCE, dev->absbit) && | ||||
| 		    input_abs_get_val(dev, ABS_DISTANCE) != 0) { | ||||
| 			/*
 | ||||
| 			 * Force reporting BTN_TOOL_FINGER for devices that | ||||
| 			 * only report general hover (and not per-contact | ||||
| 			 * distance) when contact is in proximity but not | ||||
| 			 * on the surface. | ||||
| 			 */ | ||||
| 			count = 1; | ||||
| 		} | ||||
| 
 | ||||
| 		input_mt_report_finger_count(dev, count); | ||||
| 	} | ||||
| 
 | ||||
| 	if (oldest) { | ||||
| 		int x = input_mt_get_value(oldest, ABS_MT_POSITION_X); | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 KT Liao
						KT Liao