All of lore.kernel.org
 help / color / mirror / Atom feed
From: Peter Mamonov <pmamonov@gmail.com>
To: Sascha Hauer <s.hauer@pengutronix.de>
Cc: barebox@lists.infradead.org
Subject: Re: [RFC] WIP: add usb keyboard driver
Date: Thu, 10 Sep 2015 18:51:33 +0300	[thread overview]
Message-ID: <20150910185133.7a11e8f0@berta> (raw)
In-Reply-To: <20150910073815.GQ18700@pengutronix.de>

On Thu, 10 Sep 2015 09:38:15 +0200
Sascha Hauer <s.hauer@pengutronix.de> wrote:

> Excellent! This makes the framebuffer console support complete :)

I'm sorry to dissapoint you, but this implementation of the usb
keyboard driver seems to be wrong. The driver employs the get_report
request to poll the keyboard state via the control endpoint, however
the "Device Class Definition for Human Interface Devices (HID)" states
the following:
"This request is not intended to be used for polling the device state
on a regular basis. [...] The Interrupt In pipe should be used for
recurring Input reports."

I guess this is the source of the problems with some keyboards: 2 of 4
keyboards I've tested changed their state only on key down, but not
on key up.

So, according the standard, we need to poll a keyboard via interrupt
endpoint. However, current implementation of EHCI driver doesn't support
interrupt transactions: submit_int_msg() in ehci-hcd.c is a stub. I'll
try to implement it.

Peter

> 
> I have not much to say, the driver looks ok to me. I'll test it once I
> find time. Some smally comments inline.
> 
> On Wed, Sep 09, 2015 at 07:36:52PM +0300, Peter Mamonov wrote:
> > diff --git a/drivers/input/usb_kbd.c b/drivers/input/usb_kbd.c
> 
> Please add some copyright header and don't forget to put references in
> it where you got the code from.
> 
> > +	if (pressed == 1) {
> > +		if (scancode == NUM_LOCK) {
> > +			data->flags ^= USB_KBD_NUMLOCK;
> > +			return 1;
> > +		}
> > +
> > +		if (scancode == CAPS_LOCK) {
> > +			data->flags ^= USB_KBD_CAPSLOCK;
> > +			return 1;
> > +		}
> > +		if (scancode == SCROLL_LOCK) {
> > +			data->flags ^= USB_KBD_SCROLLLOCK;
> > +			return 1;
> > +		}
> > +	}
> > +
> > +	/* Report keycode if any */
> > +	if (keycode) {
> > +		pr_debug("%s: key pressed: '%c'\n", __FUNCTION__,
> > keycode);
> 
> Please use __func__ rather than __FUNCTION__
> 
> Sascha
> 


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

  reply	other threads:[~2015-09-10 15:49 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-09-09 16:36 [RFC] WIP: add usb keyboard driver Peter Mamonov
2015-09-10  7:38 ` Sascha Hauer
2015-09-10 15:51   ` Peter Mamonov [this message]
2015-09-10 17:21     ` Sascha Hauer
2015-09-11 14:56       ` Peter Mamonov

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=20150910185133.7a11e8f0@berta \
    --to=pmamonov@gmail.com \
    --cc=barebox@lists.infradead.org \
    --cc=s.hauer@pengutronix.de \
    /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.