mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	media: rc: drivers should produce alternate pulse and space timing events
Report an error if this is not the case or any problem with the generated raw events. Signed-off-by: Sean Young <sean@mess.org> Signed-off-by: Mauro Carvalho Chehab <mchehab+samsung@kernel.org>
This commit is contained in:
		
							parent
							
								
									e0d51e6cef
								
							
						
					
					
						commit
						48231f289e
					
				
					 1 changed files with 15 additions and 4 deletions
				
			
		| 
						 | 
				
			
			@ -22,16 +22,27 @@ static int ir_raw_event_thread(void *data)
 | 
			
		|||
{
 | 
			
		||||
	struct ir_raw_event ev;
 | 
			
		||||
	struct ir_raw_handler *handler;
 | 
			
		||||
	struct ir_raw_event_ctrl *raw = (struct ir_raw_event_ctrl *)data;
 | 
			
		||||
	struct ir_raw_event_ctrl *raw = data;
 | 
			
		||||
	struct rc_dev *dev = raw->dev;
 | 
			
		||||
 | 
			
		||||
	while (1) {
 | 
			
		||||
		mutex_lock(&ir_raw_handler_lock);
 | 
			
		||||
		while (kfifo_out(&raw->kfifo, &ev, 1)) {
 | 
			
		||||
			if (is_timing_event(ev)) {
 | 
			
		||||
				if (ev.duration == 0)
 | 
			
		||||
					dev_err(&dev->dev, "nonsensical timing event of duration 0");
 | 
			
		||||
				if (is_timing_event(raw->prev_ev) &&
 | 
			
		||||
				    !is_transition(&ev, &raw->prev_ev))
 | 
			
		||||
					dev_err(&dev->dev, "two consecutive events of type %s",
 | 
			
		||||
						TO_STR(ev.pulse));
 | 
			
		||||
				if (raw->prev_ev.reset && ev.pulse == 0)
 | 
			
		||||
					dev_err(&dev->dev, "timing event after reset should be pulse");
 | 
			
		||||
			}
 | 
			
		||||
			list_for_each_entry(handler, &ir_raw_handler_list, list)
 | 
			
		||||
				if (raw->dev->enabled_protocols &
 | 
			
		||||
				if (dev->enabled_protocols &
 | 
			
		||||
				    handler->protocols || !handler->protocols)
 | 
			
		||||
					handler->decode(raw->dev, ev);
 | 
			
		||||
			ir_lirc_raw_event(raw->dev, ev);
 | 
			
		||||
					handler->decode(dev, ev);
 | 
			
		||||
			ir_lirc_raw_event(dev, ev);
 | 
			
		||||
			raw->prev_ev = ev;
 | 
			
		||||
		}
 | 
			
		||||
		mutex_unlock(&ir_raw_handler_lock);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue