Input - HID - fix find_next_zero usage [1/5]
PATCH 1/1 Input - HID - fix find_next_zero usage [1/5]
You can import this changeset into BK by piping this whole message to:
'| bk receive [path to repository]' or apply the patch as usual. 'bk pull bk://linux-input.bkbits.net/linux-input' should work as well.
===================================================================
[email protected], 2002-10-10 01:22:17-03:00, [email protected]
o hid-input: fix find_next_zero_bit usage
It was swapping the parameters, using the bitfield size for the offset and the offset for the bitfield size. With this the mouse buttons in my wireless USB keyboard finally works 8) 2.4 has the same problem.
hid-input.c | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-)
===================================================================
drivers/usb/input/hid-input.c +1 -1
@@ -348,7 +348,7 @@set_bit (usage->type, input->evbit);while (usage->code <= max &&test_and_set_bit (usage->code, bit)) { - usage->code =find_next_zero_bit (bit, max +1 , usage->code); + usage->code =find_next_zero_bit (bit, usage->code, max +1 ); }if (usage->code > max)return ;
===================================================================
This BitKeeper patch contains the following changesets:
1.733.3.1
## Wrapped with gzip_uu ##
begin 664 bkpatch1632 M'XL(`"RKICT``^U56V^;,!1^CG_%D?JRJ@W8AD!@2I6UG;9NDU:UJO88&6R" M%\(FZ2I^/%S:):N6U9UT_HVL(6.S\7G\GWB&ZT:.+!4GTU(LW1;Q7VL0# MW6KAI'=6OE+*RFZN2N%NK=QDX<JJ;@VR^DMFTAR6HM'Q@#C>[L2L:Q$/KMZ^ MN_GTY@JAR03.<E;-Q;4P,)D@HYHE*[B>,I,7JG),PRI="L.<5)7=SK2C&%/[ MCDCHX5'0D0#[89<23@CSB>"8^N/1^=L*?GL@\@RT:RGC+/:YKDG$L$XHA3[ M'NY(%'@4G0-Q0L]S/(<IB[!=@$F,:4Q"8?8BS$&EI9BRO.T)E%H8U8B-7+) MX(C$*-3^+>5G*$4%.22#_L.QY#)6[LK/JO$K9G=B4;-$FF@U6PNK*U=%P96 M3(->L;J6U1Q,+J!F#;,YV*D<6]/OI][email protected]=@$PUF]/-A5FF[5A8Q7NS MK;C5/_9RX(LT=KJYU+VR5!8I-D32&J,J#;*"<@TKV8A":TWUZ>P$.M$L89O MRF!%8;6J66@8'P)U?,B9WF:A;<90-RHI1.F@CTBCQ)T^8;-/S#!R',,#JQ MW;"(W#\?WL@-=MU6)^ZNZTZZFQ;%9.R1CHZLT$4^SP(^#CPQ#KV>[^!QJ.@ M?<!?0A-LH>C;&\*.1GX4]1YTFU#FI>JVV)/34K6<AY;IPV75GZ/Z,0'-(1 M(:.^MM"-HPB/Y$)Q_099"+_R?1R9+H?SF<8-JM^67)</@VXOV#;N3<B0-#% M_6<PZ/LZ/$D5%S#9T_A7=A_##U;'4+);.)R^/KAWY+F(EWHMIQP/,:92"+T )#4&:=1RV!@``
`
end
PATCH 1/1 Input - Fix atkbd.c oops on Alpha [2/5]
You can import this changeset into BK by piping this whole message to:
'| bk receive [path to repository]' or apply the patch as usual. 'bk pull bk://linux-input.bkbits.net/linux-input' should work as well.
===================================================================
[email protected], 2002-10-10 17:28:04-07:00, [email protected]
Avoid oops on systems that set atkbd_reset.
atkbd.c | 5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-)
===================================================================
drivers/input/keyboard/atkbd.c +3 -2
@@ -244,8 +244,9 @@while (atkbd->cmdcnt && timeout--)udelay (10 ); -for (i =0 ; i < receive; i++) - param[i] = atkbd->cmdbuf[(receive -1 ) - i]; +if (param) +for (i =0 ; i < receive; i++) + param[i] = atkbd->cmdbuf[(receive -1 ) - i];if (atkbd->cmdcnt)return (atkbd->cmdcnt =0 ) -1 ;
===================================================================
This BitKeeper patch contains the following changesets:
1.733.2.4
## Wrapped with gzip_uu ##
begin 664 bkpatch1661 M'XL(`#.KICT``[64;4_;,!#'7\>?XB3>@%`2/Z5NPXI@;-JF30(Q\0JAR8E= MXK6)*]LMZI0//S=4H$ECL&DD5I2S+^>[^__B/;CRVI7)VGX/NF[0'GRT/I2) M7WF=U3^B?6EMM//&MCK?>>75/#?=<A507+^0H6Y@K9TO$Y*QAYFP6>HRN7S_ MX>K+Z25"TRF<-;*[U5][email protected]!>O6<J'\B0S-PG99<++SK0XRJVW;/[CV%&,:
M[X((AHM13T:8B[XFBA#)B5:8\O&((Q>:$V5#YF>5W&1.JT:&WP0BF&",B>"L M)VS""O0.2"88RVC&=.<X#BB)*.2\Q3+$J,X:G8<$@@Q>@M_-]2SE-IVMK M%%B[]&[\!L?=.LAQ(W!Q_;),*_4-Z?C>X8^^&"<W3QV%^4_N6%$)88'<-. MWY-P9Q;FM@G9JKZ+%/3*F:W]Z+G<[VIK'0J'_+(ZOO"!&:$X3''/9F,">FK M2DTTQ5H1-IH(]F0;7Q(\ZA:%HZ*@/:=X-!EP^O-W6\9>L9R'V+L?Y655XF) MRA>XYX2,V4?+7X%3Y0%?18\!BE]%?#.6Q,1BW$UF"Y86$HG6S`SB-/&0[=:
M++;$W8MP#JF[&T8DZ.(9/?Z!R7>4"Z#H4TP/&$IB%OM#/@<H26;6P;Z!*>C M,/&G*YUW#X:AX?;]63PO#8WT67((#VN6U6M9M?[.U=(@1S$A[DY>CS&ZD;7 4<[]JIUHH/E(S@GX"1ADK_R$%````
`
end
PATCH 1/1 Input - Fixes in Active PS/2 Multiplexing support [3/5]
You can import this changeset into BK by piping this whole message to:
'| bk receive [path to repository]' or apply the patch as usual. 'bk pull bk://linux-input.bkbits.net/linux-input' should work as well.
===================================================================
[email protected], 2002-10-11 11:24:16+02:00, [email protected]
Fixes in i8042.c Active Multiplexing support.
i8042.c | 48 +++++++++++++++++++++++++++++++----------------- 1 files changed, 31 insertions(+), 17 deletions(-)
===================================================================
drivers/input/serio/i8042.c +31 -17
@@ -26,14 +26,16 @@MODULE_LICENSE ("GPL" );MODULE_PARM (i8042_noaux,"1i" ); +MODULE_PARM (i8042_nomux,"1i" );MODULE_PARM (i8042_unlock,"1i" );MODULE_PARM (i8042_reset,"1i" );MODULE_PARM (i8042_direct,"1i" );MODULE_PARM (i8042_dumbkbd,"1i" ); +static int i8042_reset;static int i8042_noaux; +static int i8042_nomux;static int i8042_unlock; -static int i8042_reset;static int i8042_direct;static int i8042_dumbkbd;
@@ -220,7 +222,6 @@return retval; } -/* * i8042_open() is called when a port is open by the higher layer. * It allocates the interrupt and enables in in the chip.
@@ -323,8 +324,8 @@static struct i8042_values i8042_mux_values[4 ];static struct serio i8042_mux_port[4 ]; -static char i8042_mux_names[4 ][16 ]; -static char i8042_mux_short[4 ][8 ]; +static char i8042_mux_names[4 ][32 ]; +static char i8042_mux_short[4 ][16 ];static char i8042_mux_phys[4 ][32 ];/*
@@ -364,15 +365,15 @@ dfl = ((str &I8042_STR_PARITY ) ?SERIO_PARITY :0 ) | ((str &I8042_STR_TIMEOUT ) ?SERIO_TIMEOUT :0 ); -if (i8042_mux_values[0 ].exists && (buffer[i].str &I8042_STR_AUXDATA )) { +if (i8042_mux_values[0 ].exists && (str &I8042_STR_AUXDATA )) { -if (buffer[i].str &I8042_STR_MUXERR ) { -switch (buffer[i].data) { +if (str &I8042_STR_MUXERR ) { +switch (data) {case 0xfd :case 0xfe : dfl =SERIO_TIMEOUT ;break ;case 0xff : dfl =SERIO_PARITY ;break ; } - buffer[i].data =0xfe ; + data =0xfe ; }else dfl =0 ; dbg("%02x <- i8042 (interrupt, aux%d, %d%s%s)",
@@ -380,8 +381,7 @@ dfl &SERIO_PARITY ?", bad parity" :"" , dfl & SERIO_TIMEOUT ? ", timeout" : ""); -if (i8042_mux_values[(str >>6 )].exists) -serio_interrupt (i8042_mux_port + (str >>6 ), buffer[i].data, dfl); +serio_interrupt (i8042_mux_port + ((str >>6 ) &3 ), data, dfl);continue ; }
@@ -390,8 +390,8 @@ dfl &SERIO_PARITY ?", bad parity" :"" , dfl & SERIO_TIMEOUT ? ", timeout" : ""); -if (i8042_aux_values.exists && (buffer[i].str &I8042_STR_AUXDATA )) { -serio_interrupt (&i8042_aux_port, buffer[i].data, dfl); +if (i8042_aux_values.exists && (str &I8042_STR_AUXDATA )) { +serio_interrupt (&i8042_aux_port, data, dfl);continue ; }
@@ -602,8 +602,14 @@if (i8042_command (¶m,I8042_CMD_AUX_LOOP ) || param ==0x5b )return -1 ; -printk (KERN_INFO "i8042.c: Detected active multiplexing controller, rev%d.%d.\n" , - ~param >>4 , ~param &0xf ); +printk (KERN_INFO "i8042.c: Detected active multiplexing controller, rev %d.%d.\n" , + (~param >>4 ) &0xf , ~param &0xf ); + +/* +* In MUX mode the keyboard translation seems to be always off. +*/ + + i8042_direct =1 ;/* * Disable all muxed ports by disabling AUX.
@@ -742,6 +748,12 @@static int __init i8042_setup_noaux (char *str) { i8042_noaux =1 ; + i8042_nomux =1 ; +return 1 ; +} +static int __init i8042_setup_nomux (char *str) +{ + i8042_nomux =1 ;return 1 ; }static int __init i8042_setup_unlock (char *str)
@@ -762,6 +774,7 @@__setup ("i8042_reset" , i8042_setup_reset);__setup ("i8042_noaux" , i8042_setup_noaux); +__setup ("i8042_nomux" , i8042_setup_nomux);__setup ("i8042_unlock" , i8042_setup_unlock);__setup ("i8042_direct" , i8042_setup_direct);__setup ("i8042_dumbkbd" , i8042_setup_dumbkbd);
@@ -796,6 +809,7 @@sprintf (i8042_mux_short[index],"AUX%d" , index); port->name = i8042_mux_names[index]; port->phys = i8042_mux_phys[index]; + port->driver = values; values->name = i8042_mux_short[index]; values->mux = index; }
@@ -809,8 +823,8 @@if (i8042_platform_init ())return -EBUSY ; - i8042_aux_values.irq =I8042_AUX_IRQ ; - i8042_kbd_values.irq =I8042_KBD_IRQ ; + i8042_aux_values.irq =I8042_AUX_IRQ ; + i8042_kbd_values.irq =I8042_KBD_IRQ ;if (i8042_controller_init ())return -ENODEV ;
@@ -821,7 +835,7 @@for (i =0 ; i <4 ; i++)i8042_init_mux_values (i8042_mux_values + i, i8042_mux_port + i, i); -if (!i8042_noaux && !i8042_check_mux (&i8042_aux_values)) +if (!i8042_nomux && !i8042_check_mux (&i8042_aux_values))for (i =0 ; i <4 ; i++)i8042_port_register (i8042_mux_values + i, i8042_mux_port + i);else
===================================================================
This BitKeeper patch contains the following changesets:
1.740
## Wrapped with gzip_uu ##
begin 664 bkpatch1691 M'XL(`#JKICT``[56?V_:2!#]V_LIIE0704+,[GJQ#1%1:4FO*$V3HXU4J8V0 M8R_!!6QNO<Z/*W>?_6;7)$%)VMZ=KF!YL6?F[9N9-RN>PVDA5=>YS+]H&4_) M<WB3%[KK%&4AW?@/?![E.3ZWIOE"MM9>K?-9*\V6I29H/XET/(5+J8JNPUSO M[HV^6<JN,SKX]?1M?T1(KP>OIE%V(=]+#;T>T;FZC.9)\2+2TWF>N5I%6;&0 M.G+C?+&Z<UUQ2CE^VRSP:-M?,9^*8!6SA+%(,)E0+D)?D#6Q%VO:#^(998SZ M@GMBY87M=D@&P-Q4*"\Q6B+,6"LRT67^3N4=RF%!W"PPV"7DI?P_Y)^16)X MG5[+M(,TI*[L;0CW5Z*>&HG.MT.9?7:78!1;E<YDJ[Y!"0O_#(R7TMR>Z_ M_!!"(TKV[W+45^D\O9AJMXRO3.D2E9IF5@UNH3C2O+4F5^454(_QML_\E8>5 MY:NFI0B%DLJV(0F#ZOW0T3;G@X7C*]\O'M6+-\),O+Y:>P?2>G'[&F'!HRU MVROA!UQ8<?''VN+?TI:'XF+!3U37)%=/R<K(J:KW,>RJ*WNA/$Z^5_K_H+8A M#X&1H^/!Z=N#\4E_=%2W6.,L7Y373:BQM-;8(T//0Z]"1SJ-<1QT-0]C)0NI MC54\9;40>V3@^6@=<&X@!A[W@6,$#W!9A\332*UC,&*<10M9?!)GGSQ^MO<- MGV**$V=\F']FMP@0?%@MCI-.H'[OBUTK$9">N5C80A>PM07U0BO8@J%U>O]A M-.Z??AST/_0;#?AJX#J69$!Q<2J\AP%'IQ\/1B/CC@Y.<96:4[6>1#JJ((*V M9607XV$LT-Z/9&&<.C9'4)1F6T;QU@[J52YU!OLS=$".U"W!/;WP6\@#:_1 M!.(]\F\8?Z%5Y'6,;W!8CN"O!/LW^"S=8]EJ'S8&^?MLW>/O4A),Y28=RL M?G@P>C<>OGM]#+6U.+LPD#A:6B8057)?;)ZB<9YIE<_G4C5!R4OX)7'Q^IS5 MFLBH_M<R4M'"Y"],_EC%)JS?V2?D\9FTM@ELPS#[TL\D2"GDJ8R9OS/%() MV(&=HYKR#HI%P6.-)Q+B.97T4T!^63B8GR+'&J?)-4(5]L&D.-!T*?VNQ MTJX,CI*Z5)GY^>?F#(RQ?NGM*."8E,LJJFZ5O(T=:)"O3^-]]H8ES%U&L; M#K7F8S@SG$''S+!C6K.[7QT/B%5U'?L3,F[Z$S(C$>>1+%+U.WI76D=C(>C MW_9NW6;GR5-NAR\'E=L@Y(;LL%JL[)YM9H1:6S_'4QG/C*WQ51!-QKW?U2L 36U$N>N*<<43EY&]6@L^@`PD`````
`
end
PATCH 1/1 Input - Fixes in uinput.c [4/5]
You can import this changeset into BK by piping this whole message to:
'| bk receive [path to repository]' or apply the patch as usual. 'bk pull bk://linux-input.bkbits.net/linux-input' should work as well.
===================================================================
[email protected], 2002-10-11 11:50:35+02:00, [email protected]
Several fixes in the uinput.c userspace input driver. Size of fifo, handling of flag bits, etc.
drivers/input/misc/uinput.c | 132 +++++++++++++++++++++++++++----------------- include/linux/uinput.h | 4 - 2 files changed, 83 insertions(+), 53 deletions(-)
===================================================================
drivers/input/misc/uinput.c +81 -51
@@ -49,7 +49,7 @@ udev = (struct uinput_device *)dev->private; - udev->head = (udev->head +1 ) &0xF ; + udev->head = (udev->head +1 ) %UINPUT_BUFFER_SIZE ; udev->buff[udev->head].type = type; udev->buff[udev->head].code = code; udev->buff[udev->head].value = value;
@@ -87,14 +87,14 @@input_register_device (udev->dev); - udev->state |=UIST_CREATED ; +set_bit (UIST_CREATED , &(udev->state));return 0 ; }static int uinput_destroy_device (struct uinput_device *udev) { -if (!(udev->state &UIST_CREATED )) { +if (!test_bit (UIST_CREATED , &(udev->state))) {printk (KERN_WARNING "%s: create the device first\n" ,UINPUT_NAME );return -EINVAL ; }
@@ -135,6 +135,39 @@return -ENOMEM ; } +static int uinput_validate_absbits (struct input_dev *dev) +{ +unsigned int cnt; +int retval =0 ; + +for (cnt =0 ; cnt <ABS_MAX ; cnt++) { +if (!test_bit (cnt, dev->absbit)) +continue ; + +if (/*!dev->absmin[cnt] || !dev->absmax[cnt] || */ + (dev->absmax[cnt] <= dev->absmin[cnt])) { +printk (KERN_DEBUG +"%s: invalid abs[%02x] min:%d max:%d\n" , +UINPUT_NAME , cnt, + dev->absmin[cnt], dev->absmax[cnt]); + retval = -EINVAL ; +break ; + } + +if ((dev->absflat[cnt] < dev->absmin[cnt]) || + (dev->absflat[cnt] > dev->absmax[cnt])) { +printk (KERN_DEBUG +"%s: absflat[%02x] out of range: %d " +"(min:%d/max:%d)\n" , +UINPUT_NAME , cnt, dev->absflat[cnt], + dev->absmin[cnt], dev->absmax[cnt]); + retval = -EINVAL ; +break ; + } + } +return retval; +} +static int uinput_alloc_device (struct file *file,const char *buffer,size_t count) {struct uinput_user_dev user_dev;
@@ -145,14 +178,17 @@ retval = count; + udev = (struct uinput_device *)file->private_data; + dev = udev->dev; +if (copy_from_user (&user_dev, buffer,sizeof (struct uinput_user_dev ))) { retval = -EFAULT ; goto exit; } - udev = (struct uinput_device *)file->private_data; - dev = udev->dev; - +if (NULL != dev->name) +kfree (dev->name); + size =strnlen (user_dev.name,UINPUT_MAX_NAME_SIZE ); dev->name =kmalloc (size +1 ,GFP_KERNEL );if (!dev->name) {
@@ -168,7 +204,7 @@ dev->id.version = user_dev.id.version; dev->ff_effects_max = user_dev.ff_effects_max; - size =sizeof (unsigned long ) *NBITS (ABS_MAX +1 ); + size =sizeof (int ) * (ABS_MAX +1 );memcpy (dev->absmax, user_dev.absmax, size);memcpy (dev->absmin, user_dev.absmin, size);memcpy (dev->absfuzz, user_dev.absfuzz, size);
@@ -177,33 +213,20 @@/* check if absmin/absmax/absfuzz/absflat are filled as * told in Documentation/input/input-programming.txt */ if (test_bit (EV_ABS , dev->evbit)) { -unsigned int cnt; -for (cnt =1 ; cnt <ABS_MAX ; cnt++) -if (test_bit (cnt, dev->absbit) && - (!dev->absmin[cnt] || - !dev->absmax[cnt] || - !dev->absfuzz[cnt] || - !dev->absflat[cnt])) { -printk (KERN_DEBUG "%s: set abs fields " -"first\n" ,UINPUT_NAME ); - retval = -EINVAL ; - goto free_name; - } + retval =uinput_validate_absbits (dev); +if (retval <0 ) +kfree (dev->name); } exit:return retval; -free_name: -kfree (dev->name); - goto exit; }static int uinput_write (struct file *file,const char *buffer,size_t count,loff_t *ppos) {struct uinput_device *udev = file->private_data; - -if (udev->state &UIST_CREATED ) { +if (test_bit (UIST_CREATED , &(udev->state))) {struct input_event ev;if (copy_from_user (&ev, buffer,sizeof (struct input_event )))
@@ -220,23 +243,28 @@ {struct uinput_device *udev = file->private_data;int retval =0 ; + +if (!test_bit (UIST_CREATED , &(udev->state))) +return -ENODEV ; -if (udev->head == udev->tail && (udev->state &UIST_CREATED ) && (file->f_flags &O_NONBLOCK )) +if ((udev->head == udev->tail) && (file->f_flags &O_NONBLOCK ))return -EAGAIN ; retval =wait_event_interruptible (udev->waitq, - udev->head != udev->tail && (udev->state &UIST_CREATED )); - + (udev->head != udev->tail) || + !test_bit (UIST_CREATED , &(udev->state))); +if (retval)return retval; -if (!(udev->state &UIST_CREATED )) +if (!test_bit (UIST_CREATED , &(udev->state)))return -ENODEV ; -while (udev->head != udev->tail && retval +sizeof (struct uinput_device ) <= count) { +while ((udev->head != udev->tail) && + (retval +sizeof (struct uinput_device ) <= count)) {if (copy_to_user (buffer + retval, &(udev->buff[udev->tail]),sizeof (struct input_event )))return -EFAULT ; - udev->tail = (udev->tail +1 ) % (UINPUT_BUFFER_SIZE -1 ); + udev->tail = (udev->tail +1 ) %UINPUT_BUFFER_SIZE ; retval +=sizeof (struct input_event ); }
@@ -245,7 +273,7 @@static unsigned int uinput_poll (struct file *file,poll_table *wait) { -struct uinput_device *udev = file->private_data; +struct uinput_device *udev = file->private_data;poll_wait (file, &udev->waitq, wait);
@@ -257,7 +285,7 @@static int uinput_burn_device (struct uinput_device *udev) { -if (udev->state &UIST_CREATED ) +if (test_bit (UIST_CREATED , &(udev->state)))uinput_destroy_device (udev);kfree (udev->dev);
@@ -282,50 +310,52 @@ udev = (struct uinput_device *)file->private_data; -if (cmd >=UI_SET_EVBIT && (udev->state &UIST_CREATED )) +/* device attributes can not be changed after the device is created */ +if (cmd >=UI_SET_EVBIT &&test_bit (UIST_CREATED , &(udev->state)))return -EINVAL ;switch (cmd) {case UI_DEV_CREATE : retval =uinput_create_device (udev); -break ; +case UI_DEV_DESTROY : retval =uinput_destroy_device (udev); -break ; + +case UI_SET_EVBIT :set_bit (arg, udev->dev->evbit); - -break ; +break ; +case UI_SET_KEYBIT :set_bit (arg, udev->dev->keybit); - -break ; +break ; +case UI_SET_RELBIT :set_bit (arg, udev->dev->relbit); - -break ; +break ; +case UI_SET_ABSBIT :set_bit (arg, udev->dev->absbit); - -break ; +break ; +case UI_SET_MSCBIT :set_bit (arg, udev->dev->mscbit); - -break ; +break ; +case UI_SET_LEDBIT :set_bit (arg, udev->dev->ledbit); - -break ; +break ; +case UI_SET_SNDBIT :set_bit (arg, udev->dev->sndbit); - -break ; +break ; +case UI_SET_FFBIT :set_bit (arg, udev->dev->ffbit); - -break ; +break ; +default : retval = -EFAULT ; }
include/linux/uinput.h +2 -2
@@ -29,9 +29,9 @@#define UINPUT_MINOR 223#define UINPUT_NAME "uinput"#define UINPUT_BUFFER_SIZE 16 -#define U_MAX_NAME_SIZE 50 -#define UIST_CREATED 1 +/* state flags => bit index for {set|clear|test}_bit ops */ +#define UIST_CREATED 0struct uinput_device {struct input_dev *dev;
===================================================================
This BitKeeper patch contains the following changesets:
1.741
## Wrapped with gzip_uu ##
begin 664 bkpatch1720 M'XL(`$&KICT``[U8;5/;.!#^;/^*I1V8!/(BR2^)0\,42-K+E:&D,[-M9V, ML17BDMB,K0!MT_]^*\DA0'(YZ+47,G8L[:Z>?;2[6O,2^AE/&\9U\D7P8&2^ MA#^23#2,;)KQ2O-GT^3!)^KHV3"J[E4]?RR&L574V'B_(DO@A%<\S1K&+1B MW8V(KU>\89RVW_:/]D]-L]F$PY$?7_>%]!LFB))K_UQF+WVQ6B<Q!61^G$V MX<*O!,ED=B<Z8X0P_'-HS2*..Z,NL6NS@(:4^C;E(6%VW;7-'-CK'/8C?4HH M)1ZSJ3NSZHYMF2V@E9I-@;J)55*@=*&0QJ6LT-8@Q#X=H.6KG@ZG@91&(FO ME1A![SH$_,?BWR0S.'D?Z_#$,HUN>012#&'&8*H8K:!+:7;E!QS4"(1I MA.(5Z$7?."1#U!HF);2""X?C*+Y08V/_LXCD96[email protected]>8>;+8!+/\
MS(]I$I^8>S#G6MQ$X^AB)"K3X$9R'L7!>!KR*F*8WE9S^"--0XU:E-H4"2U MYCHS)V2>.[1#&G>4K::\746]98ZQ*(SQ_%H?0TNS5>F(W9N)7B("P,#P5FS MT'<<2GRO%OBNRQR^&M=#BY,H"QZ:O0?.MNNUFHK^-4HR'WX'^J6T^'?@Q$/P MS$%6F>/EB;*4)G1MFM0IE!WZ^Q-%1K6F]QC*Z8WZ8I2>K&/Z)X*^Y3"@9D== M#8S&Z_+>B/LA-*%P[VD':!$VH=_IGO3/!@?]-V_:IX->YZ_VKMGRB#2@KD;& MQ0#SLM#O],X&AZ?M_;-VJP1;N:E,^((7BU*GIG3DU8B&4-@0/'N"9A&^FQUJ MU<"R3#D4!5@T1%Y+!K@;48AR_\\D\6AD(ET&@A=5P9H![;Q4C2_HZ-Q%EW$ M/%3J02QV$0;^2KE(^@[P0'3&"8I%'!6#4@Q>7[![W!^_T_U>/.C@1D//( M)TJ@4&L<B!IEC"")!28Z1\M&KE/=WIC+3:+X(RI^AMD,%H/^[=W@=A65#^% MI=E737ALIJB!&5<ING59>-<^[0Y:[8/^6P7%>+&9-=!U11B@VL=-PFX_VHW M-D-PWC[%+\H*>%\T[O[[]LE4,ZIX<=++GR>RM*5XT[3LOM3O?#_I$:/$^Y M?RE__3_Y63<^87%7>2.+?N%5#SF82&_MPSA"3S,36@.$CR"\(1)9?8V-EX MH24+FIRJ)J>XAITE7*5?RI?\HLPTC?-PW34EB1TLD6#I%);)F\?^]"[X(SQA MMXO#:,S+>TC'M4P4S!8?K6H5G6EXV45S+>I8:*Y#'4=:E1O4[1\=P48>:[$_ MX2JN+X<IYX7%FKO%JU1F>#Z9F3R*&^"O"7#NY$$;:AD&>2JBU8$F@=*PA# M'8_*%1<\_%-VRUS>S8,G%WX%I"CI6@;5HIZ+9EM8AP$78<2=EYYG5![&F(3V MO)*E79';56YWCUOM#PB&,5O2HV\Z^N^7WOE>"#\:%V%K"PIZVX8#V?ADL7' M@^YQ]^#H^/=+H#FZLHIYBGFC/O&-AX:PTHB)9X*7I;!%K,LA5;=GN<[ZKI:
MUT6$QLT(_7CH[,:2LZ9.[WQ+=^9ALRJ@B[+V!<DT%FJ#<#5/KR9OAK$PO#C. MU-.ZXPR/8V5#W8S5:90GV:ID:C%7G8?Z]IP(0]6ZHU3K,D:-ZC;DZ_E"I-'Y M%.UX,<0)P+..02JP\#Z/10\53UU+AZA&-8+@7/RU)0@DD(>TUT>-!KGPW:
M'PXZ9Y+JIR/S5#XS3[4),L.9I[%Z<F,_R8K!/$]&H86=$WM0LU#:(I:>LU?- MU?1<?<4<=F5RCK)5<XZ><U?-:2QL%1:FL;!56)C&PI:QR"9W=<>^KK_]+V\- M/V<4NUO;<@F3+:Y-5(MK/[/%Q3=!]O\TN/KEYE&#N]J]G^EM+1FN+4L56TMN M-^:4"FK0A;2Y)]\B<<&0WX+L]KYC`SL+QMQ/9S([email protected],N3#*.9P ?/U<,@RS^21",>'"932=-.R2AC[%G_@VLXD3-?Q``````
`
end
PATCH 1/1 Input - Fix keyboard autorepeat ioctl [5/5]
You can import this changeset into BK by piping this whole message to:
'| bk receive [path to repository]' or apply the patch as usual. 'bk pull bk://linux-input.bkbits.net/linux-input' should work as well.
===================================================================
[email protected], 2002-10-11 12:02:20+02:00, [email protected]
Since 2.5.32 the keyboard repeat code was broken.
The reason Vojtech broke it was the stupid name of a field in struct kbd_repeat, namely "rate". Every sane person expects that a rate has dimension [1/sec], but here the "rate" is a time period measured in msec.
So, the patch below first of all fixes the code, and secondly changes the name.
Since Vojtech used PERIOD as index, I also used period as field name in the struct.
Half of the stuff below is actually from Alan Stern.
Andries
drivers/char/keyboard.c | 31 +++++++++++++++++++++---------- drivers/char/vt_ioctl.c | 6 ++++-- drivers/sbus/char/uctrl.c | 2 +- include/linux/kd.h | 3 ++- 4 files changed, 28 insertions(+), 14 deletions(-)
===================================================================
drivers/char/keyboard.c +21 -10
@@ -264,23 +264,34 @@/* * Setting the keyboard rate. */ +static inline unsigned int ms_to_jiffies (unsigned int ms) { +unsigned int j; + + j = (ms *HZ +500 ) /1000 ; +return (j >0 ) ? j :1 ; +} +int kbd_rate (struct kbd_repeat *rep) { -struct list_head * node; - -if (rep->rate <0 || rep->delay <0 ) -return -EINVAL ; +struct list_head *node; +unsigned int d =0 ; +unsigned int p =0 ;list_for_each (node,&kbd_handler.h_list) {struct input_handle *handle =to_handle_h (node); -if (test_bit (EV_REP , handle->dev->evbit)) { -if (rep->rate >HZ ) rep->rate =HZ ; - handle->dev->rep[REP_PERIOD ] = rep->rate ? (HZ / rep->rate) :0 ; - handle->dev->rep[REP_DELAY ] = rep->delay *HZ /1000 ; -if (handle->dev->rep[REP_DELAY ] < handle->dev->rep[REP_PERIOD ]) - handle->dev->rep[REP_DELAY ] = handle->dev->rep[REP_PERIOD ]; +struct input_dev *dev = handle->dev; + +if (test_bit (EV_REP , dev->evbit)) { +if (rep->delay >0 ) + dev->rep[REP_DELAY ] =ms_to_jiffies (rep->delay); +if (rep->period >0 ) + dev->rep[REP_PERIOD ] =ms_to_jiffies (rep->period); + d = dev->rep[REP_DELAY ] *1000 /HZ ; + p = dev->rep[REP_PERIOD ] *1000 /HZ ; } } + rep->delay = d; + rep->period = p;return 0 ; }
drivers/char/vt_ioctl.c +4 -2
@@ -430,6 +430,7 @@case KDKBDREP : {struct kbd_repeat kbrep; +int err;if (!capable (CAP_SYS_TTY_CONFIG ))return -EPERM ;
@@ -437,8 +438,9 @@if (copy_from_user (&kbrep, (void *)arg,sizeof (struct kbd_repeat )))return -EFAULT ; -if ((i =kbd_rate ( &kbrep ))) -return i; + err =kbd_rate (&kbrep); +if (err) +return err;if (copy_to_user ((void *)arg, &kbrep,sizeof (struct kbd_repeat )))return -EFAULT ;
drivers/sbus/char/uctrl.c +1 -1
@@ -107,7 +107,7 @@u8 speaker_volume;/* 0x23 */ u8 control_tft_brightness;/* 0x24 */ u8 control_kbd_repeat_delay;/* 0x28 */ -u8 control_kbd_repeat_rate;/* 0x29 */ +u8 control_kbd_repeat_period;/* 0x29 */ u8 control_screen_contrast;/* 0x2F */ };
include/linux/kd.h +2 -1
@@ -134,7 +134,8 @@struct kbd_repeat {int delay;/* in msec; <= 0: don't change */ -int rate;/* in msec; <= 0: don't change */ +int period;/* in msec; <= 0: don't change */ +/* earlier this field was misnamed "rate" */ };#define KDKBDREP 0x4B52/* set keyboard delay/repeat rate;
===================================================================
This BitKeeper patch contains the following changesets:
1.743
## Wrapped with gzip_uu ##
begin 664 bkpatch1749 M'XL(`$BKICT``\58>V_;-A#_V_H4AQ;8DC212;TLV7.6M$F78`4:I&N!M2L, M6J)CV1)ED%02=]YWWU%27G;=/+9U=B!#Y-WQ=^]CGL-[Q66W=5Y,-(_'UG,X M*I3NME2IN!U_P??3HL#W]KC(>;NA:@^G[53,2FWA_@G3\1C.N53=%K7=ZQ4] MG_%NZ_3PE_=O]D\MJ]^'5V,FSO@[KJ'?MW0ASUF6J#VFQUDA;"V94#G7S(Z+ M?'%-NG(<?#KTXY+_&!!^)U%C%-*&4>Y0EQO##PK;87@-[B9\22BDAU'$6 M;M0AU#H:G<\%XC3IJ1-*5"G2YRN0U[@DQ#8%XE,N;)?RJ*\X'(OODAMD<$+ M#W:(]1+^7>ROK!C>I2+FX-B^[3J@QQRF?#XLF$Q\AEG&N(BX7#!%QE,>7" M1I[?D$QRI@H!'VKUZTU(=45IQ"A=SM($!,LY%"-@,$IYEB!S*G!/EK&&Z39 MU(=L5W39')Y)IODS&^0W3H'Q02'&3JX$,C)+V<\UD8\PF)@2&&,QR5ISH5* M$<TGVE8\_KP-PU+#F$MNH"!G+192A6P:J8W,M$@@1R5*R1,#*D=.HYRQ2;%= MZ3"KPFG(L^("X4NE*TVR#%\N>:VFL<XVLC"1``HH1():Q)4?:@*CF'UMYRMS M8;D<')X>OSV%"#5"3\<AN.4;@JZLT:H9&L:M/5ID2@M76-!1NX1RP;&62- MV4>C!K)1-]8EI[#2!8Y[&=,P#O-I6@XFVBS?@4W<J/0.KG)%&OGD1_+(HQ8 MN_>$*)YG$K:-)I+M<VW'MT+5(\1;!"[FS,(/@L=,>HSCU#FKLN+97&#M(AU MU@AM<L^AWL*+"(D>A^TJ#581^GY$HP7WXH3P8.@D(SX:N<&#$"X)O860>AX- M'HQ0#<M&(D:!S)8P4BPV3N0[BRB,8RP[H<N"P^=Z#Z,7Q=["Z7OX>=>E!CI M69GP=I:*\K(]3>SQ[7H4>61!?>J'"R\9AF[HCX8D][email protected]@K9%W&U<8=(*J MTJ\Q]_UU_Q\Y?Z4+?-OK)#1?ERP(!J97]00:+;<$ZMW3$AP*._2_:0JOT\M; M?<#46<6U3L69C:6B#M6WL",OJC],_9-U=G]"%3EV@@ZEM),IZ9;H-<YE%C? MST15J#56ZH$N!I-TA'51;2QM;<*?5NO.VJ1G_6&U)M"'C5S!%AQ]A!?@$[() M;4!?D)[5DER74L#&!'8!UW^&"72!]JR_D//"2+P$%;'==J-;TK2Y4>C#E+ M8$M@"^@MG9G@:61Y<58O'CB=``(4&%*(K-:5Q&JL&23\'+;,HX^M#9L)W]G% MMTJ#5CJ"#<WQW&&J-PX_#$X/3[8!=W=V^3DN;5:JUV385@UCQN:51F:Y55'B MQB?D&QP<OMG__3.><M>8-WR;O3NRFH;Y=6%U(ULCK>:LQ1FS?T&>L5XAUR M]+$BG"T37AUQAQ!-Z()CW'>MK>'K-2L-YC[,>JNUX:99/+(V/+QI61.5YGDA MU%[.+B]XEMF<292?BJDM,!^_U;Q(1#LT=#JNO_Z/JT'1QH^[email protected]\_Q)1 M]]MOE8@;=9]2(CR<5:G)",PJ+B7FE.<1C(1C+$TF25NXB'ZO!DR$MO'#=(@1 M4<6@B6C<K:*X2?M*PNT6>F##P^1)W9F2Y9*S_?,,R[DS(BT67F?UZ-2$"I M'V%C=E"(B9'']Q'31KY_B-2CQ)H06='W"4%R@,,!!LEQ_=,J0YS5A99%-KBY M=PSJ$M&#]A:02QR0MMI5(*Q.'/='P%.G'NM+.IOQ;*_BV\F#<&H7\FRM.!^] MWJ$X1:#/]^M?.X]?G;X?WQ>C6E+/E]5]$G.=CN5L_$'&T+5;6O7MM"US>VN M!S]A`^Y"4H@?=7-),Q['2H!$6)NSE$N\1:57-RYSE\U392Y>R=4=TD3(U3\:
7XC&/IZK,^\Q+T$1#8OT-CH##&-40````
`
end