patch-2.4.0-test7 linux/drivers/usb/usbkbd.c
Next file: linux/drivers/video/acornfb.c
Previous file: linux/drivers/usb/usb.c
Back to the patch index
Back to the overall index
- Lines: 75
- Date:
Tue Aug 22 15:19:52 2000
- Orig file:
v2.4.0-test6/linux/drivers/usb/usbkbd.c
- Orig date:
Wed Aug 9 19:19:51 2000
diff -u --recursive --new-file v2.4.0-test6/linux/drivers/usb/usbkbd.c linux/drivers/usb/usbkbd.c
@@ -1,5 +1,5 @@
/*
- * $Id: usbkbd.c,v 1.11 2000/05/29 09:01:52 vojtech Exp $
+ * $Id: usbkbd.c,v 1.16 2000/08/14 21:05:26 vojtech Exp $
*
* Copyright (c) 1999-2000 Vojtech Pavlik
*
@@ -47,8 +47,8 @@
105,108,103, 69, 98, 55, 74, 78, 96, 79, 80, 81, 75, 76, 77, 71,
72, 73, 82, 83, 86,127,116,117, 85, 89, 90, 91, 92, 93, 94, 95,
120,121,122,123,134,138,130,132,128,129,131,137,133,135,136,113,
- 115,114, 0, 0, 0, 0, 0,124, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 115,114, 0, 0, 0,124, 0,181,182,183,184,185,186,187,188,189,
+ 190,191,192,193,194,195,196,197,198, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
@@ -63,7 +63,7 @@
unsigned char old[8];
struct urb irq, led;
devrequest dr;
- unsigned char leds;
+ unsigned char leds, newleds;
char name[128];
int open;
};
@@ -104,28 +104,37 @@
if (type != EV_LED) return -1;
- if (kbd->led.status == -EINPROGRESS) {
- warn("had to kill led urb");
- usb_unlink_urb(&kbd->led);
- }
- kbd->leds = (!!test_bit(LED_KANA, dev->led) << 3) | (!!test_bit(LED_COMPOSE, dev->led) << 3) |
- (!!test_bit(LED_SCROLLL, dev->led) << 2) | (!!test_bit(LED_CAPSL, dev->led) << 1) |
- (!!test_bit(LED_NUML, dev->led));
+ kbd->newleds = (!!test_bit(LED_KANA, dev->led) << 3) | (!!test_bit(LED_COMPOSE, dev->led) << 3) |
+ (!!test_bit(LED_SCROLLL, dev->led) << 2) | (!!test_bit(LED_CAPSL, dev->led) << 1) |
+ (!!test_bit(LED_NUML, dev->led));
+ if (kbd->led.status == -EINPROGRESS)
+ return 0;
- if (usb_submit_urb(&kbd->led)) {
+ if (kbd->leds == kbd->newleds)
+ return 0;
+
+ kbd->leds = kbd->newleds;
+ if (usb_submit_urb(&kbd->led))
err("usb_submit_urb(leds) failed");
- return -1;
- }
return 0;
}
static void usb_kbd_led(struct urb *urb)
{
+ struct usb_kbd *kbd = urb->context;
+
if (urb->status)
warn("led urb status %d received", urb->status);
+
+ if (kbd->leds == kbd->newleds)
+ return;
+
+ kbd->leds = kbd->newleds;
+ if (usb_submit_urb(&kbd->led))
+ err("usb_submit_urb(leds) failed");
}
static int usb_kbd_open(struct input_dev *dev)
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)