Commit 05f0edad authored by Sean Young's avatar Sean Young Committed by Mauro Carvalho Chehab
Browse files

media: Revert "media: rc: some events are dropped by userspace"



When an rc device is created, we do not know what key codes it will
support, since a new keymap might be loaded at some later point. So,
we set all keybit in the input device.

The uevent for the input device includes all the key codes, of which
there are now 768. This overflows the size of the uevent
(UEVENT_BUFFER_SIZE) and no event is generated.

Revert for now until we figure out a different solution.

This reverts commit fec225a0.

Cc: <stable@vger.kernel.org> # 4.20+
Reported-by: default avatarChristian Holpert <christian@holpert.de>
Signed-off-by: default avatarSean Young <sean@mess.org>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+samsung@kernel.org>
parent 9fabe1d1
Loading
Loading
Loading
Loading
+12 −1
Original line number Diff line number Diff line
@@ -280,6 +280,7 @@ static unsigned int ir_update_mapping(struct rc_dev *dev,
				      unsigned int new_keycode)
{
	int old_keycode = rc_map->scan[index].keycode;
	int i;

	/* Did the user wish to remove the mapping? */
	if (new_keycode == KEY_RESERVED || new_keycode == KEY_UNKNOWN) {
@@ -294,9 +295,20 @@ static unsigned int ir_update_mapping(struct rc_dev *dev,
			old_keycode == KEY_RESERVED ? "New" : "Replacing",
			rc_map->scan[index].scancode, new_keycode);
		rc_map->scan[index].keycode = new_keycode;
		__set_bit(new_keycode, dev->input_dev->keybit);
	}

	if (old_keycode != KEY_RESERVED) {
		/* A previous mapping was updated... */
		__clear_bit(old_keycode, dev->input_dev->keybit);
		/* ... but another scancode might use the same keycode */
		for (i = 0; i < rc_map->len; i++) {
			if (rc_map->scan[i].keycode == old_keycode) {
				__set_bit(old_keycode, dev->input_dev->keybit);
				break;
			}
		}

		/* Possibly shrink the keytable, failure is not a problem */
		ir_resize_table(dev, rc_map, GFP_ATOMIC);
	}
@@ -1759,7 +1771,6 @@ static int rc_prepare_rx_device(struct rc_dev *dev)
	set_bit(EV_REP, dev->input_dev->evbit);
	set_bit(EV_MSC, dev->input_dev->evbit);
	set_bit(MSC_SCAN, dev->input_dev->mscbit);
	bitmap_fill(dev->input_dev->keybit, KEY_CNT);

	/* Pointer/mouse events */
	set_bit(EV_REL, dev->input_dev->evbit);