Input: MT - handle semi-mt devices in core
Most semi-mt drivers use the slots in a manual way, but really only need to treat the finger count manually. With this patch, a semi-mt driver may use the input-mt core for everything else. Signed-off-by: Henrik Rydberg <rydberg@euromail.se> Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
This commit is contained in:
		
					parent
					
						
							
								7a246777a6
							
						
					
				
			
			
				commit
				
					
						a0ef6a348a
					
				
			
		
					 2 changed files with 8 additions and 1 deletions
				
			
		| 
						 | 
				
			
			@ -79,6 +79,8 @@ int input_mt_init_slots(struct input_dev *dev, unsigned int num_slots,
 | 
			
		|||
	}
 | 
			
		||||
	if (flags & INPUT_MT_DIRECT)
 | 
			
		||||
		__set_bit(INPUT_PROP_DIRECT, dev->propbit);
 | 
			
		||||
	if (flags & INPUT_MT_SEMI_MT)
 | 
			
		||||
		__set_bit(INPUT_PROP_SEMI_MT, dev->propbit);
 | 
			
		||||
	if (flags & INPUT_MT_TRACK) {
 | 
			
		||||
		unsigned int n2 = num_slots * num_slots;
 | 
			
		||||
		mt->red = kcalloc(n2, sizeof(*mt->red), GFP_KERNEL);
 | 
			
		||||
| 
						 | 
				
			
			@ -246,6 +248,7 @@ void input_mt_sync_frame(struct input_dev *dev)
 | 
			
		|||
{
 | 
			
		||||
	struct input_mt *mt = dev->mt;
 | 
			
		||||
	struct input_mt_slot *s;
 | 
			
		||||
	bool use_count = false;
 | 
			
		||||
 | 
			
		||||
	if (!mt)
 | 
			
		||||
		return;
 | 
			
		||||
| 
						 | 
				
			
			@ -259,7 +262,10 @@ void input_mt_sync_frame(struct input_dev *dev)
 | 
			
		|||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	input_mt_report_pointer_emulation(dev, (mt->flags & INPUT_MT_POINTER));
 | 
			
		||||
	if ((mt->flags & INPUT_MT_POINTER) && !(mt->flags & INPUT_MT_SEMI_MT))
 | 
			
		||||
		use_count = true;
 | 
			
		||||
 | 
			
		||||
	input_mt_report_pointer_emulation(dev, use_count);
 | 
			
		||||
 | 
			
		||||
	mt->frame++;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -19,6 +19,7 @@
 | 
			
		|||
#define INPUT_MT_DIRECT		0x0002	/* direct device, e.g. touchscreen */
 | 
			
		||||
#define INPUT_MT_DROP_UNUSED	0x0004	/* drop contacts not seen in frame */
 | 
			
		||||
#define INPUT_MT_TRACK		0x0008	/* use in-kernel tracking */
 | 
			
		||||
#define INPUT_MT_SEMI_MT	0x0010	/* semi-mt device, finger count handled manually */
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * struct input_mt_slot - represents the state of an input MT slot
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue