Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

media: rc-core: consistent use of rc_repeat()

The NEC decoder and the Sanyo decoders check if dev->keypressed is true
before calling rc_repeat (without holding dev->keylock).

Meanwhile, the XMP and JVC decoders do no such checks.

This patch makes sure all users of rc_repeat() do so consistently by
removing extra checks in NEC/Sanyo and modifying the check a bit in
rc_repeat() so that no input event is generated if the key isn't pressed.

Signed-off-by: David Härdeman <david@hardeman.nu>
Signed-off-by: Sean Young <sean@mess.org>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>

authored by

David Härdeman and committed by
Mauro Carvalho Chehab
265a2988 ab45e858

+9 -17
+3 -7
drivers/media/rc/ir-nec-decoder.c
··· 88 88 data->state = STATE_BIT_PULSE; 89 89 return 0; 90 90 } else if (eq_margin(ev.duration, NEC_REPEAT_SPACE, NEC_UNIT / 2)) { 91 - if (!dev->keypressed) { 92 - IR_dprintk(1, "Discarding last key repeat: event after key up\n"); 93 - } else { 94 - rc_repeat(dev); 95 - IR_dprintk(1, "Repeat last key\n"); 96 - data->state = STATE_TRAILER_PULSE; 97 - } 91 + rc_repeat(dev); 92 + IR_dprintk(1, "Repeat last key\n"); 93 + data->state = STATE_TRAILER_PULSE; 98 94 return 0; 99 95 } 100 96
+3 -7
drivers/media/rc/ir-sanyo-decoder.c
··· 110 110 break; 111 111 112 112 if (!data->count && geq_margin(ev.duration, SANYO_REPEAT_SPACE, SANYO_UNIT / 2)) { 113 - if (!dev->keypressed) { 114 - IR_dprintk(1, "SANYO discarding last key repeat: event after key up\n"); 115 - } else { 116 - rc_repeat(dev); 117 - IR_dprintk(1, "SANYO repeat last key\n"); 118 - data->state = STATE_INACTIVE; 119 - } 113 + rc_repeat(dev); 114 + IR_dprintk(1, "SANYO repeat last key\n"); 115 + data->state = STATE_INACTIVE; 120 116 return 0; 121 117 } 122 118
+3 -3
drivers/media/rc/rc-main.c
··· 616 616 617 617 spin_lock_irqsave(&dev->keylock, flags); 618 618 619 - input_event(dev->input_dev, EV_MSC, MSC_SCAN, dev->last_scancode); 620 - input_sync(dev->input_dev); 621 - 622 619 if (!dev->keypressed) 623 620 goto out; 621 + 622 + input_event(dev->input_dev, EV_MSC, MSC_SCAN, dev->last_scancode); 623 + input_sync(dev->input_dev); 624 624 625 625 dev->keyup_jiffies = jiffies + msecs_to_jiffies(IR_KEYPRESS_TIMEOUT); 626 626 mod_timer(&dev->timer_keyup, dev->keyup_jiffies);