Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 254650
b: refs/heads/master
c: 98c32bc
h: refs/heads/master
v: v3
  • Loading branch information
Jarod Wilson authored and Mauro Carvalho Chehab committed Jul 1, 2011
1 parent 761e835 commit 5661aac
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 24 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 372b4249243d1e7c12a0f2b67e7badc608fcff45
refs/heads/master: 98c32bcded0e249fd48726930ae9f393e0e318b4
48 changes: 25 additions & 23 deletions trunk/drivers/media/rc/rc-main.c
Original file line number Diff line number Diff line change
Expand Up @@ -522,18 +522,20 @@ EXPORT_SYMBOL_GPL(rc_g_keycode_from_table);
/**
* ir_do_keyup() - internal function to signal the release of a keypress
* @dev: the struct rc_dev descriptor of the device
* @sync: whether or not to call input_sync
*
* This function is used internally to release a keypress, it must be
* called with keylock held.
*/
static void ir_do_keyup(struct rc_dev *dev)
static void ir_do_keyup(struct rc_dev *dev, bool sync)
{
if (!dev->keypressed)
return;

IR_dprintk(1, "keyup key 0x%04x\n", dev->last_keycode);
input_report_key(dev->input_dev, dev->last_keycode, 0);
input_sync(dev->input_dev);
if (sync)
input_sync(dev->input_dev);
dev->keypressed = false;
}

Expand All @@ -549,7 +551,7 @@ void rc_keyup(struct rc_dev *dev)
unsigned long flags;

spin_lock_irqsave(&dev->keylock, flags);
ir_do_keyup(dev);
ir_do_keyup(dev, true);
spin_unlock_irqrestore(&dev->keylock, flags);
}
EXPORT_SYMBOL_GPL(rc_keyup);
Expand Down Expand Up @@ -578,7 +580,7 @@ static void ir_timer_keyup(unsigned long cookie)
*/
spin_lock_irqsave(&dev->keylock, flags);
if (time_is_before_eq_jiffies(dev->keyup_jiffies))
ir_do_keyup(dev);
ir_do_keyup(dev, true);
spin_unlock_irqrestore(&dev->keylock, flags);
}

Expand All @@ -597,6 +599,7 @@ void rc_repeat(struct rc_dev *dev)
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;
Expand All @@ -622,29 +625,28 @@ EXPORT_SYMBOL_GPL(rc_repeat);
static void ir_do_keydown(struct rc_dev *dev, int scancode,
u32 keycode, u8 toggle)
{
input_event(dev->input_dev, EV_MSC, MSC_SCAN, scancode);

/* Repeat event? */
if (dev->keypressed &&
dev->last_scancode == scancode &&
dev->last_toggle == toggle)
return;
bool new_event = !dev->keypressed ||
dev->last_scancode != scancode ||
dev->last_toggle != toggle;

/* Release old keypress */
ir_do_keyup(dev);
if (new_event && dev->keypressed)
ir_do_keyup(dev, false);

dev->last_scancode = scancode;
dev->last_toggle = toggle;
dev->last_keycode = keycode;
input_event(dev->input_dev, EV_MSC, MSC_SCAN, scancode);

if (keycode == KEY_RESERVED)
return;
if (new_event && keycode != KEY_RESERVED) {
/* Register a keypress */
dev->keypressed = true;
dev->last_scancode = scancode;
dev->last_toggle = toggle;
dev->last_keycode = keycode;

IR_dprintk(1, "%s: key down event, "
"key 0x%04x, scancode 0x%04x\n",
dev->input_name, keycode, scancode);
input_report_key(dev->input_dev, keycode, 1);
}

/* Register a keypress */
dev->keypressed = true;
IR_dprintk(1, "%s: key down event, key 0x%04x, scancode 0x%04x\n",
dev->input_name, keycode, scancode);
input_report_key(dev->input_dev, dev->last_keycode, 1);
input_sync(dev->input_dev);
}

Expand Down

0 comments on commit 5661aac

Please sign in to comment.