mail archive of the barebox mailing list
 help / color / mirror / Atom feed
From: Aleksey Kuleshov <rndfax@yandex.ru>
To: barebox@lists.infradead.org
Cc: Aleksey Kuleshov <rndfax@yandex.ru>
Subject: [PATCH v3 4/5] usb_kbd: use async polling instead of regular polling
Date: Wed,  9 Mar 2016 13:17:51 +0300	[thread overview]
Message-ID: <1457518672-30074-4-git-send-email-rndfax@yandex.ru> (raw)
In-Reply-To: <1457518672-30074-1-git-send-email-rndfax@yandex.ru>

This fixes the overpolling of USB keyboard which
causes slowdown of entier barebox by using periodic
polling occuting once per some milliseconds.

Signed-off-by: Aleksey Kuleshov <rndfax@yandex.ru>
---
 drivers/input/usb_kbd.c | 20 +++++++++++++-------
 1 file changed, 13 insertions(+), 7 deletions(-)

diff --git a/drivers/input/usb_kbd.c b/drivers/input/usb_kbd.c
index 6f7a081..bdaf305 100644
--- a/drivers/input/usb_kbd.c
+++ b/drivers/input/usb_kbd.c
@@ -48,7 +48,7 @@ struct usb_kbd_pdata;
 struct usb_kbd_pdata {
 	uint8_t		*new;
 	uint8_t		old[USB_KBD_BOOT_REPORT_SIZE];
-	struct poller_struct	poller;
+	struct poller_async	poller;
 	struct usb_device	*usbdev;
 	int		lock;
 	unsigned long	intpipe;
@@ -92,10 +92,9 @@ static const unsigned char usb_kbd_keycode[256] = {
 	150,158,159,128,136,177,178,176,142,152,173,140
 };
 
-static void usb_kbd_poll(struct poller_struct *poller)
+static void usb_kbd_poll(void *arg)
 {
-	struct usb_kbd_pdata *data = container_of(poller,
-						  struct usb_kbd_pdata, poller);
+	struct usb_kbd_pdata *data = arg;
 	struct usb_device *usbdev = data->usbdev;
 	int ret, i;
 
@@ -146,6 +145,7 @@ static void usb_kbd_poll(struct poller_struct *poller)
 
 exit:
 	data->lock = 0;
+	poller_call_async(&data->poller, data->intinterval * MSECOND, usb_kbd_poll, data);
 }
 
 static int usb_kbd_probe(struct usb_device *usbdev,
@@ -201,16 +201,22 @@ static int usb_kbd_probe(struct usb_device *usbdev,
 		return ret;
 	}
 
-	data->poller.func = usb_kbd_poll;
+	ret = poller_async_register(&data->poller);
+	if (ret) {
+		dev_err(&usbdev->dev, "can't setup poller\n");
+		return ret;
+	}
+
+	poller_call_async(&data->poller, data->intinterval * MSECOND, usb_kbd_poll, data);
 
-	return poller_register(&data->poller);
+	return 0;
 }
 
 static void usb_kbd_disconnect(struct usb_device *usbdev)
 {
 	struct usb_kbd_pdata *data = usbdev->drv_data;
 
-	poller_unregister(&data->poller);
+	poller_async_unregister(&data->poller);
 	input_device_unregister(&data->input);
 	dma_free(data->new);
 	free(data);
-- 
2.6.2


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

  parent reply	other threads:[~2016-03-09 10:54 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-03-09 10:17 [PATCH v3 1/5] usb_kbd: remove unused fields Aleksey Kuleshov
2016-03-09 10:17 ` [PATCH v3 2/5] usb_kbd: check for registering error Aleksey Kuleshov
2016-03-09 10:17 ` [PATCH v3 3/5] usb_kbd: style fixes Aleksey Kuleshov
2016-03-09 10:17 ` Aleksey Kuleshov [this message]
2016-03-09 10:17 ` [PATCH v3 5/5] usb_kbd: lock is useless since pollers are atomic Aleksey Kuleshov
2016-03-10  9:01 ` [PATCH v3 1/5] usb_kbd: remove unused fields Sascha Hauer

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=1457518672-30074-4-git-send-email-rndfax@yandex.ru \
    --to=rndfax@yandex.ru \
    --cc=barebox@lists.infradead.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox