data->state = STATE_BIT_PULSE;
                        return 0;
                } else if (eq_margin(ev.duration, NEC_REPEAT_SPACE, NEC_UNIT / 2)) {
-                       if (!dev->keypressed) {
-                               IR_dprintk(1, "Discarding last key repeat: event after key up\n");
-                       } else {
-                               rc_repeat(dev);
-                               IR_dprintk(1, "Repeat last key\n");
-                               data->state = STATE_TRAILER_PULSE;
-                       }
+                       rc_repeat(dev);
+                       IR_dprintk(1, "Repeat last key\n");
+                       data->state = STATE_TRAILER_PULSE;
                        return 0;
                }
 
 
                        break;
 
                if (!data->count && geq_margin(ev.duration, SANYO_REPEAT_SPACE, SANYO_UNIT / 2)) {
-                       if (!dev->keypressed) {
-                               IR_dprintk(1, "SANYO discarding last key repeat: event after key up\n");
-                       } else {
-                               rc_repeat(dev);
-                               IR_dprintk(1, "SANYO repeat last key\n");
-                               data->state = STATE_INACTIVE;
-                       }
+                       rc_repeat(dev);
+                       IR_dprintk(1, "SANYO repeat last key\n");
+                       data->state = STATE_INACTIVE;
                        return 0;
                }
 
 
 
        spin_lock_irqsave(&dev->keylock, flags);
 
-       input_event(dev->input_dev, EV_MSC, MSC_SCAN, dev->last_scancode);
-       input_sync(dev->input_dev);
-
        if (!dev->keypressed)
                goto out;
 
+       input_event(dev->input_dev, EV_MSC, MSC_SCAN, dev->last_scancode);
+       input_sync(dev->input_dev);
+
        dev->keyup_jiffies = jiffies + msecs_to_jiffies(IR_KEYPRESS_TIMEOUT);
        mod_timer(&dev->timer_keyup, dev->keyup_jiffies);