4.14-stable review patch.  If anyone has any objections, please let me know.

------------------

From: Sean Young <[email protected]>

commit 829bbf268894d0866bb9dd2b1e430cfa5c5f0779 upstream.

When receiving an nec repeat, rc_repeat() is called and then rc_keydown()
with the last decoded scancode. That last call is redundant.

Fixes: 265a2988d202 ("media: rc-core: consistent use of rc_repeat()")

Signed-off-by: Sean Young <[email protected]>
Signed-off-by: Mauro Carvalho Chehab <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>

---
 drivers/media/rc/ir-nec-decoder.c |   31 ++++++++++++++++++-------------
 1 file changed, 18 insertions(+), 13 deletions(-)

--- a/drivers/media/rc/ir-nec-decoder.c
+++ b/drivers/media/rc/ir-nec-decoder.c
@@ -87,8 +87,6 @@ static int ir_nec_decode(struct rc_dev *
                        data->state = STATE_BIT_PULSE;
                        return 0;
                } else if (eq_margin(ev.duration, NEC_REPEAT_SPACE, NEC_UNIT / 
2)) {
-                       rc_repeat(dev);
-                       IR_dprintk(1, "Repeat last key\n");
                        data->state = STATE_TRAILER_PULSE;
                        return 0;
                }
@@ -151,19 +149,26 @@ static int ir_nec_decode(struct rc_dev *
                if (!geq_margin(ev.duration, NEC_TRAILER_SPACE, NEC_UNIT / 2))
                        break;
 
-               address     = bitrev8((data->bits >> 24) & 0xff);
-               not_address = bitrev8((data->bits >> 16) & 0xff);
-               command     = bitrev8((data->bits >>  8) & 0xff);
-               not_command = bitrev8((data->bits >>  0) & 0xff);
-
-               scancode = ir_nec_bytes_to_scancode(address, not_address,
-                                                   command, not_command,
-                                                   &rc_proto);
+               if (data->count == NEC_NBITS) {
+                       address     = bitrev8((data->bits >> 24) & 0xff);
+                       not_address = bitrev8((data->bits >> 16) & 0xff);
+                       command     = bitrev8((data->bits >>  8) & 0xff);
+                       not_command = bitrev8((data->bits >>  0) & 0xff);
+
+                       scancode = ir_nec_bytes_to_scancode(address,
+                                                           not_address,
+                                                           command,
+                                                           not_command,
+                                                           &rc_proto);
+
+                       if (data->is_nec_x)
+                               data->necx_repeat = true;
 
-               if (data->is_nec_x)
-                       data->necx_repeat = true;
+                       rc_keydown(dev, rc_proto, scancode, 0);
+               } else {
+                       rc_repeat(dev);
+               }
 
-               rc_keydown(dev, rc_proto, scancode, 0);
                data->state = STATE_INACTIVE;
                return 0;
        }


Reply via email to