All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dmitry Torokhov <dmitry.torokhov@gmail.com>
To: Liang Yan <lyan@suse.com>
Cc: linux-kernel@vger.kernel.org, linux-input@vger.kernel.org
Subject: Re: [PATCH] input/xen-kbdfront: Enable auto repeat for xen keyboard frontend driver
Date: Wed, 23 Aug 2017 11:36:48 -0700	[thread overview]
Message-ID: <20170823183648.GA37905@dtor-ws> (raw)
In-Reply-To: <20170823181026.8084-1-lyan@suse.com>

Hi Liang,

On Wed, Aug 23, 2017 at 02:10:26PM -0400, Liang Yan wrote:
> Long pressed key could not show right in XEN vncviewer after tigervnc
> client changed the way how to send repeat keys, from "Down Up Down Up
> ..." to "Down Down ... Up". By enable EV_REP bit here, XEN keyboard
> device will trigger default auto repeat process from input subsystem,
> and make auto repeat keys work correctly.

I almost applied it, but then I started to wonder: enabling autorepeat
in guest kernel means that autorepeat settings might differ between the
VNC client and the guest. Maybe the better fix would be to actually
assume that backend/client does not send duplicate events, but
autorepeat events, and do the following in xenkbd_handle_key_event():

static void xenkbd_handle_key_event(struct xenkbd_info *info,
				    struct xenkbd_key *key)
{
	struct input_dev *dev;
	int value = key->pressed;

	if (test_bit(key->keycode, info->ptr->keybit)) {
		dev = info->ptr;
	} else if (test_bit(key->keycode, info->kbd->keybit)) {
		dev = info->kbd;
		/* See if the key is already pressed */
		if (test_bit(key->keycode, info->kbd->key))
			value = 2; /* Report autorepeat */
	} else {
		pr_warn("unhandled keycode 0x%x\n", key->keycode);
		return;
	}

	input_event(dev, EV_KEY, key->keycode, value);
	input_sync(dev);
}

Thanks.

> 
> Signed-off-by: Liang Yan <lyan@suse.com>
> ---
>  drivers/input/misc/xen-kbdfront.c | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/drivers/input/misc/xen-kbdfront.c b/drivers/input/misc/xen-kbdfront.c
> index fa130e7b734c..0dce9830e2f4 100644
> --- a/drivers/input/misc/xen-kbdfront.c
> +++ b/drivers/input/misc/xen-kbdfront.c
> @@ -248,6 +248,7 @@ static int xenkbd_probe(struct xenbus_device *dev,
>  	kbd->id.product = 0xffff;
>  
>  	__set_bit(EV_KEY, kbd->evbit);
> +	__set_bit(EV_REP, kbd->evbit);
>  	for (i = KEY_ESC; i < KEY_UNKNOWN; i++)
>  		__set_bit(i, kbd->keybit);
>  	for (i = KEY_OK; i < KEY_MAX; i++)
> -- 
> 2.14.1
> 

-- 
Dmitry

  reply	other threads:[~2017-08-23 18:36 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-08-23 18:10 [PATCH] input/xen-kbdfront: Enable auto repeat for xen keyboard frontend driver Liang Yan
2017-08-23 18:36 ` Dmitry Torokhov [this message]
2017-08-24 12:39   ` Liang Yan

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20170823183648.GA37905@dtor-ws \
    --to=dmitry.torokhov@gmail.com \
    --cc=linux-input@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lyan@suse.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.