Add a input_sync() a method to tell which events belong together.
Subsystems (4)
A message that is not in the archive (sent off-list or not yet received): [email protected]
Hi!
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 http://linux-input.bkbits.net:8080/linux-input' should also work.
===================================================================
[email protected], 2002-07-25 13:56:28+02:00, [email protected]
By popular request, and explicit method of telling which events from a device belong together was implemented - input_sync() and EV_SYN. Touches every input driver. The first to make use of it is mousedev.c to properly merge events into PS/2 packets.
===================================================================
Documentation/input/input-programming.txt | 12 ++++++++- drivers/input/input.c | 32 +++++++++++++++++-------- drivers/input/joystick/a3d.c | 4 +++ drivers/input/joystick/adi.c | 2 + drivers/input/joystick/amijoy.c | 2 + drivers/input/joystick/analog.c | 2 + drivers/input/joystick/cobra.c | 2 + drivers/input/joystick/db9.c | 2 + drivers/input/joystick/gamecon.c | 11 ++++++++ drivers/input/joystick/gf2k.c | 2 + drivers/input/joystick/grip.c | 2 + drivers/input/joystick/grip_mp.c | 4 +++ drivers/input/joystick/guillemot.c | 2 + drivers/input/joystick/iforce/iforce-packets.c | 3 ++ drivers/input/joystick/interact.c | 2 + drivers/input/joystick/magellan.c | 2 + drivers/input/joystick/sidewinder.c | 10 +++++++ drivers/input/joystick/spaceball.c | 2 + drivers/input/joystick/spaceorb.c | 2 + drivers/input/joystick/stinger.c | 2 + drivers/input/joystick/tmdc.c | 2 + drivers/input/joystick/turbografx.c | 2 + drivers/input/joystick/twidjoy.c | 2 + drivers/input/joystick/warrior.c | 7 +++-- drivers/input/keybdev.c | 3 -- drivers/input/keyboard/amikbd.c | 2 + drivers/input/keyboard/atkbd.c | 1 drivers/input/keyboard/maple_keyb.c | 2 + drivers/input/keyboard/newtonkbd.c | 2 + drivers/input/keyboard/ps2serkbd.c | 1 drivers/input/keyboard/sunkbd.c | 1 drivers/input/keyboard/xtkbd.c | 1 drivers/input/mouse/amimouse.c | 2 + drivers/input/mouse/inport.c | 2 + drivers/input/mouse/logibm.c | 2 + drivers/input/mouse/maplemouse.c | 1 drivers/input/mouse/pc110pad.c | 3 -- drivers/input/mouse/psmouse.c | 1 drivers/input/mouse/rpcmouse.c | 2 + drivers/input/mouse/sermouse.c | 4 +++ drivers/input/mousedev.c | 21 ++++++++++------ drivers/input/touchscreen/gunze.c | 1 drivers/input/touchscreen/h3600_ts_input.c | 4 +++ drivers/macintosh/adbhid.c | 6 ++++ drivers/macintosh/mac_hid.c | 1 drivers/usb/input/aiptek.c | 2 + drivers/usb/input/hid-core.c | 3 ++ drivers/usb/input/hid-input.c | 5 +++ drivers/usb/input/hid.h | 2 + drivers/usb/input/powermate.c | 1 drivers/usb/input/usbkbd.c | 4 ++- drivers/usb/input/usbmouse.c | 4 ++- drivers/usb/input/wacom.c | 5 +++ drivers/usb/input/xpad.c | 2 + include/linux/input.h | 20 +++++++++++---- 55 files changed, 193 insertions(+), 33 deletions(-)
Documentation/input/input-programming.txt +11 -1
@@ -23,6 +23,7 @@ static void button_interrupt(int irq, void *dummy, struct pt_regs *fp) { input_report_key(&button_dev, BTN_1, inb(BUTTON_PORT) & 1); + input_sync(&button_dev); } static int __init button_init(void)
@@ -86,12 +87,21 @@ which upon every interrupt from the button checks its state and reports it via the - input_report_btn() + input_report_key() call to the input system. There is no need to check whether the interrupt routine isn't reporting two same value events (press, press for example) to the input system, because the input_report_* functions check that themselves. + +Then there is the + + input_sync() + +call to tell those who receive the events that we've sent a complete report. +This doesn't seem important in the one button case, but is quite important +for for example mouse movement, where you don't want the X and Y values +to be interpreted separately, because that'd result in a different movement. 1.2 dev->open() and dev->close() ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/input/input.c +22 -10
@@ -72,16 +72,9 @@ {struct input_handle *handle = dev->handle; -/* -* Wake up the device if it is sleeping. -*/ if (dev->pm_dev)pm_access (dev->pm_dev); -/* -* Filter non-events, and bad input values out. -*/ -if (type >EV_MAX || !test_bit (type, dev->evbit))return ;
@@ -89,6 +82,19 @@switch (type) { +case EV_SYN : +switch (code) { +case SYN_CONFIG : +if (dev->event) dev->event (dev, type, code, value); +break ; + +case SYN_REPORT : +if (dev->sync)return ; + dev->sync =1 ; +break ; + } +break ; +case EV_KEY :if (code >KEY_MAX || !test_bit (code, dev->keybit) || !!test_bit (code, dev->key) == value)
@@ -185,9 +191,8 @@break ; } -/* -* Distribute the event to handler modules. -*/ +if (type !=EV_SYN ) + dev->sync =0 ;while (handle) {if (handle->open)
@@ -200,6 +205,7 @@ {struct input_dev *dev = (void *) data;input_event (dev,EV_KEY , dev->repeat_key,2 ); +input_sync (dev);mod_timer (&dev->timer, jiffies + dev->rep[REP_PERIOD ]); }
@@ -437,6 +443,12 @@struct input_handler *handler = input_handler;struct input_handle *handle;struct input_device_id *id; + +/* +* Add the EV_SYN capability. +*/ + +set_bit (EV_SYN , dev->evbit);/* * Initialize repeat timer to default values.
drivers/input/joystick/a3d.c +4 -0
@@ -130,6 +130,8 @@input_report_key (dev,BTN_LEFT , data[3 ] &2 );input_report_key (dev,BTN_MIDDLE , data[3 ] &4 ); +input_sync (dev); + a3d->axes[0 ] = ((signed char )((data[11 ] <<6 ) | (data[12 ] <<3 ) | (data[13 ]))) +128 ; a3d->axes[1 ] = ((signed char )((data[14 ] <<6 ) | (data[15 ] <<3 ) | (data[16 ]))) +128 ; a3d->axes[2 ] = ((signed char )((data[17 ] <<6 ) | (data[18 ] <<3 ) | (data[19 ]))) +128 ;
@@ -164,6 +166,8 @@input_report_key (dev,BTN_THUMB , data[8 ] &2 );input_report_key (dev,BTN_TOP , data[8 ] &4 );input_report_key (dev,BTN_PINKIE , data[7 ] &1 ); + +input_sync (dev);return ; }
drivers/input/joystick/adi.c +2 -0
@@ -249,6 +249,8 @@for (i =63 ; i < adi->buttons; i++)input_report_key (dev, *key++,adi_get_bits (adi,1 )); + +input_sync (dev);return 0 ; }
drivers/input/joystick/amijoy.c +2 -0
@@ -67,6 +67,8 @@input_report_abs (amijoy_dev + i,ABS_X , ((data >>1 ) &1 ) - ((data >>9 ) &1 )); data = ~(data ^ (data <<1 ));input_report_abs (amijoy_dev + i,ABS_Y , ((data >>1 ) &1 ) - ((data >>9 ) &1 )); + +input_sync (amijoy_dev + i); } }
drivers/input/joystick/analog.c +2 -0
@@ -215,6 +215,8 @@input_report_abs (dev, analog_hats[j++], ((buttons >> ((i <<2 ) +8 )) &1 ) - ((buttons >> ((i <<2 ) +6 )) &1 )); } + +input_sync (dev); }/*
drivers/input/joystick/cobra.c +2 -0
@@ -136,6 +136,8 @@for (j =0 ; cobra_btn[j]; j++)input_report_key (dev, cobra_btn[j], data[i] & (0x20 << j)); +input_sync (dev); + }mod_timer (&cobra->timer, jiffies +COBRA_REFRESH_TIME );
drivers/input/joystick/db9.c +2 -0
@@ -266,6 +266,8 @@break ; } +input_sync (dev); +mod_timer (&db9->timer, jiffies +DB9_REFRESH_TIME ); }
drivers/input/joystick/gamecon.c +11 -0
@@ -328,6 +328,8 @@for (j =0 ; j <10 ; j++)input_report_key (dev + i, gc_n64_btn[j], s & data[gc_n64_bytes[j]]); + +input_sync (dev + i); } } }
@@ -356,6 +358,8 @@if (s & gc->pads[GC_SNES ])for (j =0 ; j <8 ; j++)input_report_key (dev + i, gc_snes_btn[j], s & data[gc_snes_bytes[j]]); + +input_sync (dev + i); } }
@@ -379,6 +383,8 @@if (s & gc->pads[GC_MULTI2 ])input_report_key (dev + i,BTN_THUMB , s & data[5 ]); + +input_sync (dev + i); } }
@@ -398,6 +404,7 @@input_report_key (dev + i,BTN_THUMBL , ~data[0 ] &0x04 );input_report_key (dev + i,BTN_THUMBR , ~data[0 ] &0x02 ); +input_sync (dev + i);case GC_PSX_NEGCON :case GC_PSX_ANALOG :
@@ -414,6 +421,8 @@input_report_key (dev + i,BTN_START , ~data[0 ] &0x08 );input_report_key (dev + i,BTN_SELECT , ~data[0 ] &0x01 ); +input_sync (dev + i); +break ;case GC_PSX_NORMAL :
@@ -426,6 +435,8 @@input_report_key (dev + i,BTN_START , ~data[0 ] &0x08 );input_report_key (dev + i,BTN_SELECT , ~data[0 ] &0x01 ); + +input_sync (dev + i);break ; }
drivers/input/joystick/gf2k.c +2 -0
@@ -197,6 +197,8 @@for (i =0 ; i < gf2k_pads[gf2k->id]; i++)input_report_key (dev, gf2k_btn_pad[i], (t >> i) &1 ); + +input_sync (dev); }/*
drivers/input/joystick/grip.c +2 -0
@@ -276,6 +276,8 @@ } + +input_sync (dev); }mod_timer (&grip->timer, jiffies +GRIP_REFRESH_TIME );
drivers/input/joystick/grip_mp.c +4 -0
@@ -515,6 +515,10 @@input_report_abs (dev,ABS_X , grip->xaxes[slot]);input_report_abs (dev,ABS_Y , grip->yaxes[slot]); +/* Tell the receiver of the events to process them */ + +input_sync (dev); + grip->dirty[slot] =0 ; }
drivers/input/joystick/guillemot.c +2 -0
@@ -147,6 +147,8 @@input_report_key (dev, guillemot->type->btn[i], (data[2 + (i >>3 )] >> (i &7 )) &1 ); } +input_sync (dev); +mod_timer (&guillemot->timer, jiffies +GUILLEMOT_REFRESH_TIME ); }
drivers/input/joystick/iforce/iforce-packets.c +3 -0
@@ -214,10 +214,13 @@ } } +input_sync (dev); +break ;case 0x02 :/* status report */ input_report_key (dev,BTN_DEAD , data[0 ] &0x02 ); +input_sync (dev);/* Check if an effect was just started or stopped */ i = data[1 ] &0x7f ;
drivers/input/joystick/interact.c +2 -0
@@ -176,6 +176,8 @@ } } +input_sync (dev); +mod_timer (&interact->timer, jiffies +INTERACT_REFRESH_TIME ); }
drivers/input/joystick/magellan.c +2 -0
@@ -107,6 +107,8 @@for (i =0 ; i <9 ; i++)input_report_key (dev, magellan_buttons[i], (t >> i) &1 );break ; } + +input_sync (dev); }static void magellan_interrupt (struct serio *serio,unsigned char data,unsigned int flags)
drivers/input/joystick/sidewinder.c +10 -0
@@ -323,6 +323,8 @@input_report_key (dev,BTN_BASE4 , !GB (38 ,1 ));input_report_key (dev,BTN_BASE5 , !GB (37 ,1 )); +input_sync (dev); +return 0 ;case SW_ID_GP :
@@ -336,6 +338,8 @@for (j =0 ; j <10 ; j++)input_report_key (dev + i, sw_btn[SW_ID_GP ][j], !GB (i*15 +j+4 ,1 )); + +input_sync (dev + i); }return 0 ;
@@ -356,6 +360,8 @@for (j =0 ; j <9 ; j++)input_report_key (dev, sw_btn[SW_ID_PP ][j], !GB (j,1 )); +input_sync (dev); +return 0 ;case SW_ID_FSP :
@@ -377,6 +383,8 @@input_report_key (dev,BTN_MODE ,GB (38 ,1 ));input_report_key (dev,BTN_SELECT ,GB (39 ,1 )); +input_sync (dev); +return 0 ;case SW_ID_FFW :
@@ -389,6 +397,8 @@for (j =0 ; j <8 ; j++)input_report_key (dev, sw_btn[SW_ID_FFW ][j], !GB (j+22 ,1 )); + +input_sync (dev);return 0 ; }
drivers/input/joystick/spaceball.c +2 -0
@@ -137,6 +137,8 @@printk (KERN_ERR "spaceball: Bad command. [%s]\n" , spaceball->data +1 );break ; } + +input_sync (dev); }/*
drivers/input/joystick/spaceorb.c +2 -0
@@ -124,6 +124,8 @@printk ("]\n" );break ; } + +input_sync (dev); }static void spaceorb_interrupt (struct serio *serio,unsigned char data,unsigned int flags)
drivers/input/joystick/stinger.c +2 -0
@@ -85,6 +85,8 @@input_report_abs (dev,ABS_X , (data[1 ] &0x3F ) - ((data[0 ] &0x01 ) <<6 ));input_report_abs (dev,ABS_Y , ((data[0 ] &0x02 ) <<5 ) - (data[2 ] &0x3F )); +input_sync (dev); +return ; }
drivers/input/joystick/tmdc.c +2 -0
@@ -214,6 +214,8 @@ ((data[j][tmdc_byte_d[k]] >> (i + tmdc->btno[j][k])) & 1)); l += tmdc->btnc[j][k]; } + +input_sync (dev); } tmdc->bads += bad;
drivers/input/joystick/turbografx.c +2 -0
@@ -101,6 +101,8 @@input_report_key (dev,BTN_THUMB2 , (data2 &TGFX_THUMB2 ));input_report_key (dev,BTN_TOP , (data2 &TGFX_TOP ));input_report_key (dev,BTN_TOP2 , (data2 &TGFX_TOP2 )); + +input_sync (dev); }mod_timer (&tgfx->timer, jiffies +TGFX_REFRESH_TIME );
drivers/input/joystick/twidjoy.c +2 -0
@@ -127,6 +127,8 @@input_report_abs (dev,ABS_X , -abs_x);input_report_abs (dev,ABS_Y , +abs_y); + +input_sync (dev); }return ;
drivers/input/joystick/warrior.c +4 -3
@@ -76,18 +76,19 @@input_report_key (dev,BTN_THUMB , (data[3 ] >>1 ) &1 );input_report_key (dev,BTN_TOP , (data[3 ] >>2 ) &1 );input_report_key (dev,BTN_TOP2 , (data[3 ] >>3 ) &1 ); -return ; +break ;case 3 :/* XY-axis info->data */ input_report_abs (dev,ABS_X , ((data[0 ] &8 ) <<5 ) - (data[2 ] | ((data[0 ] &4 ) <<5 )));input_report_abs (dev,ABS_Y , (data[1 ] | ((data[0 ] &1 ) <<7 )) - ((data[0 ] &2 ) <<7 )); -return ; +break ;case 5 :/* Throttle, spinner, hat info->data */ input_report_abs (dev,ABS_THROTTLE , (data[1 ] | ((data[0 ] &1 ) <<7 )) - ((data[0 ] &2 ) <<7 ));input_report_abs (dev,ABS_HAT0X , (data[3 ] &2 ?1 :0 ) - (data[3 ] &1 ?1 :0 ));input_report_abs (dev,ABS_HAT0Y , (data[3 ] &8 ?1 :0 ) - (data[3 ] &4 ?1 :0 ));input_report_rel (dev,REL_DIAL , (data[2 ] | ((data[0 ] &4 ) <<5 )) - ((data[0 ] &8 ) <<5 )); -return ; +break ; } +input_sync (dev); }/*
drivers/input/keybdev.c +1 -2
@@ -132,11 +132,10 @@struct input_handle *handle;for (handle = keybdev_handler.handle; handle; handle = handle->hnext) { -input_event (handle->dev,EV_LED ,LED_SCROLLL , !!(led &0x01 ));input_event (handle->dev,EV_LED ,LED_NUML , !!(led &0x02 ));input_event (handle->dev,EV_LED ,LED_CAPSL , !!(led &0x04 )); - +input_sync (handle->dev); } }
drivers/input/keyboard/amikbd.c +2 -0
@@ -88,10 +88,12 @@if (scancode ==KEY_CAPS ) {/* CapsLock is a toggle switch key on Amiga */ input_report_key (&amikbd_dev, scancode,1 );input_report_key (&amikbd_dev, scancode,0 ); +input_sync (&amikbd_dev);return ; }input_report_key (&amikbd_dev, scancode, down); +input_sync (&amikbd_dev);return ; }
drivers/input/keyboard/atkbd.c +1 -0
@@ -195,6 +195,7 @@break ;default :input_report_key (&atkbd->dev, atkbd->keycode[code], !atkbd->release); +input_sync (&atkbd->dev); } atkbd->release =0 ;
drivers/input/keyboard/maple_keyb.c +2 -0
@@ -76,6 +76,8 @@ } } +input_sync (dev); +memcpy (kbd->old, kbd->new,8 ); }
drivers/input/keyboard/newtonkbd.c +2 -0
@@ -72,6 +72,8 @@else if (data ==0xe7 )/* end of init sequence */ printk (KERN_INFO "input: %s on %s\n" , nkbd_name, serio->phys); + +input_sync (&nkbd->dev); }void nkbd_connect (struct serio *serio,struct serio_dev *dev)
drivers/input/keyboard/ps2serkbd.c +1 -0
@@ -161,6 +161,7 @@break ;default :input_report_key (&ps2serkbd->dev, ps2serkbd->keycode[code], !ps2serkbd->release); +input_sync (&ps2serkbd->dev); } ps2serkbd->release =0 ;
drivers/input/keyboard/sunkbd.c +1 -0
@@ -121,6 +121,7 @@default :if (sunkbd->keycode[data &SUNKBD_KEY ]) {input_report_key (&sunkbd->dev, sunkbd->keycode[data &SUNKBD_KEY ], !(data &SUNKBD_RELEASE )); +input_sync (&sunkbd->dev); }else {printk (KERN_WARNING "sunkbd.c: Unknown key (scancode %#x) %s.\n" , data &SUNKBD_KEY , data &SUNKBD_RELEASE ?"released" :"pressed" );
drivers/input/keyboard/xtkbd.c +1 -0
@@ -75,6 +75,7 @@if (xtkbd->keycode[data &XTKBD_KEY ]) {input_report_key (&xtkbd->dev, xtkbd->keycode[data &XTKBD_KEY ], !(data &XTKBD_RELEASE )); +input_sync (&xtkbd->dev); }else {printk (KERN_WARNING "xtkbd.c: Unknown key (scancode %#x) %s.\n" , data &XTKBD_KEY , data &XTKBD_RELEASE ?"released" :"pressed" );
drivers/input/mouse/amimouse.c +2 -0
@@ -68,6 +68,8 @@input_report_key (&amimouse_dev,BTN_LEFT , ciaa.pra &0x40 );input_report_key (&amimouse_dev,BTN_MIDDLE , potgor &0x0100 );input_report_key (&amimouse_dev,BTN_RIGHT , potgor &0x0400 ); + +input_sync (&amimouse_dev); }static int amimouse_open (struct input_dev *dev)
drivers/input/mouse/inport.c +2 -0
@@ -139,6 +139,8 @@outb (INPORT_REG_MODE ,INPORT_CONTROL_PORT );outb (INPORT_MODE_IRQ |INPORT_MODE_BASE ,INPORT_DATA_PORT ); + +input_sync (&inport_dev); }#ifndef MODULE
drivers/input/mouse/logibm.c +2 -0
@@ -128,6 +128,8 @@input_report_key (&logibm_dev,BTN_RIGHT , buttons &1 );input_report_key (&logibm_dev,BTN_MIDDLE , buttons &2 );input_report_key (&logibm_dev,BTN_LEFT , buttons &4 ); +input_sync (&logibm_dev); +outb (LOGIBM_ENABLE_IRQ ,LOGIBM_CONTROL_PORT ); }
drivers/input/mouse/maplemouse.c +1 -0
@@ -40,6 +40,7 @@input_report_rel (dev,REL_X , relx);input_report_rel (dev,REL_Y , rely);input_report_rel (dev,REL_WHEEL , relz); +input_sync (dev); }
drivers/input/mouse/pc110pad.c +1 -2
@@ -78,6 +78,7 @@ pc110pad_data[1] | ((pc110pad_data[0] << 3) & 0x80) | ((pc110pad_data[0] << 1) & 0x100));input_report_abs (&pc110pad_dev,ABS_Y , pc110pad_data[2 ] | ((pc110pad_data[0 ] <<4 ) &0x80 )); +input_sync (&pc110pad_dev); pc110pad_count =0 ; }
@@ -90,8 +91,6 @@static int pc110pad_open (struct input_dev *dev) { -unsigned long flags; -if (pc110pad_used++)return 0 ;
drivers/input/mouse/psmouse.c +1 -0
@@ -167,6 +167,7 @@input_report_rel (dev,REL_X , packet[1 ] ? (int ) packet[1 ] - (int ) ((packet[0 ] <<4 ) &0x100 ) :0 );input_report_rel (dev,REL_Y , packet[2 ] ? (int ) ((packet[0 ] <<3 ) &0x100 ) - (int ) packet[2 ] :0 ); +input_sync (dev); }/*
drivers/input/mouse/rpcmouse.c +2 -0
@@ -63,6 +63,8 @@input_report_key (&rpcmouse_dev,BTN_LEFT , b &0x10 );input_report_key (&rpcmouse_dev,BTN_MIDDLE , b &0x20 );input_report_key (&rpcmouse_dev,BTN_RIGHT , b &0x40 ); + +input_sync (&rpcmouse_dev); }static int __init rpcmouse_init (void )
drivers/input/mouse/sermouse.c +4 -0
@@ -89,6 +89,8 @@break ; } +input_sync (dev); +if (++sermouse->count == (5 - ((sermouse->type ==SERIO_SUN ) <<1 ))) sermouse->count =0 ; }
@@ -187,6 +189,8 @@break ; } + +input_sync (dev); sermouse->count++; }
drivers/input/mousedev.c +13 -8
@@ -94,9 +94,10 @@struct mousedev *mousedevs[3 ] = { handle->private, &mousedev_mix,NULL };struct mousedev **mousedev = mousedevs;struct mousedev_list *list; -int index, size; +int index, size, wake;while (*mousedev) { + wake =0 ; list = (*mousedev)->list;while (list) {switch (type) {
@@ -158,16 +159,20 @@case 2 :return ; }break ; - } - - list->ready =1 ; - -kill_fasync (&list->fasync,SIGIO ,POLL_IN ); +case EV_SYN : +switch (code) { +case SYN_REPORT : + list->ready =1 ; +kill_fasync (&list->fasync,SIGIO ,POLL_IN ); + wake =1 ; +break ; + } + } list = list->next; } - -wake_up_interruptible (&((*mousedev)->wait)); +if (wake) +wake_up_interruptible (&((*mousedev)->wait)); mousedev++; } }
drivers/input/touchscreen/gunze.c +1 -0
@@ -74,6 +74,7 @@input_report_abs (dev,ABS_X ,simple_strtoul (gunze->data +1 ,NULL ,10 ) *4 );input_report_abs (dev,ABS_Y ,3072 -simple_strtoul (gunze->data +6 ,NULL ,10 ) *3 );input_report_key (dev,BTN_TOUCH , gunze->data[0 ] =='T' ); +input_sync (dev); }static void gunze_interrupt (struct serio *serio,unsigned char data,unsigned int flags)
drivers/input/touchscreen/h3600_ts_input.c +4 -0
@@ -109,6 +109,7 @@struct input_dev *dev = (struct input_dev *) dev_id;input_report_key (dev,KEY_ENTER , down); +input_sync (dev); }static void npower_button_handler (int irq,void *dev_id,struct pt_regs *regs)
@@ -122,6 +123,7 @@*/ input_report_key (dev,KEY_SUSPEND ,1 );input_report_key (dev,KEY_SUSPEND , down); +input_sync (dev); }#ifdef CONFIG_PM
@@ -267,6 +269,8 @@/* Send a non input event elsewhere */ break ; } + +input_sync (dev); }/*
drivers/macintosh/adbhid.c +6 -0
@@ -163,6 +163,8 @@else printk (KERN_INFO "Unhandled ADB key (scancode %#02x) %s.\n" , keycode, up_flag ?"released" :"pressed" ); + +input_sync (&adbhid[id]->input); } static void
@@ -259,6 +261,8 @@ ((data[2]&0x7f) < 64 ? (data[2]&0x7f) : (data[2]&0x7f)-128 ));input_report_rel (&adbhid[id]->input,REL_Y , ((data[1 ]&0x7f ) <64 ? (data[1 ]&0x7f ) : (data[1 ]&0x7f )-128 )); + +input_sync (&adbhid[id]->input); } static void
@@ -363,6 +367,8 @@ }break ; } + +input_sync (&adbhid[id]->input); }static struct adb_request led_request;
drivers/macintosh/mac_hid.c +1 -0
@@ -162,6 +162,7 @@input_report_key (&emumousebtn, keycode == mouse_button2_keycode ?BTN_MIDDLE :BTN_RIGHT , down); +input_sync (&emumousebtn);return 1 ; } mouse_last_keycode = down ? keycode :0 ;
drivers/usb/input/aiptek.c +2 -0
@@ -161,6 +161,8 @@input_report_key (dev,BTN_STYLUS2 , data[5 ] &0x10 ); } +input_sync (dev); + }struct aiptek_features aiptek_features[] = {
drivers/usb/input/hid-core.c +3 -0
@@ -903,6 +903,9 @@for (n =0 ; n < report->maxfield; n++)hid_input_field (hid, report->field[n], data); +if (hid->claimed &HID_CLAIMED_INPUT ) +hidinput_report_event (hid, report); +return 0 ; }
drivers/usb/input/hid-input.c +5 -0
@@ -428,6 +428,11 @@input_event (input, usage->type, usage->code,0 ); } +void hidinput_report_event (struct hid_device *hid,struct hid_report *report) +{ +input_sync (&hid->input); +} +static int hidinput_input_event (struct input_dev *dev,unsigned int type,unsigned int code,int value) {struct hid_device *hid = dev->private;
drivers/usb/input/hid.h +2 -0
@@ -416,11 +416,13 @@/* We ignore a few input applications that are not widely used */ #define IS_INPUT_APPLICATION (a) (((a >= 0x00010000) && (a <= 0x00010008)) || ( a == 0x00010080) || ( a == 0x000c0001))extern void hidinput_hid_event (struct hid_device *,struct hid_field *,struct hid_usage *,__s32 ); +extern void hidinput_report_event (struct hid_device *hid,struct hid_report *report);extern int hidinput_connect (struct hid_device *);extern void hidinput_disconnect (struct hid_device *);#else #define IS_INPUT_APPLICATION (a) (0)static inline void hidinput_hid_event (struct hid_device *hid,struct hid_field *field,struct hid_usage *usage,__s32 value) { } +static inline void hidinput_report_event (struct hid_device *hid,struct hid_report *report) { }static inline int hidinput_connect (struct hid_device *hid) {return -ENODEV ; }static inline void hidinput_disconnect (struct hid_device *hid) { }#endif
drivers/usb/input/powermate.c +1 -0
@@ -83,6 +83,7 @@/* handle updates to device state */ input_report_key (&pm->input,BTN_0 , pm->data[0 ] &0x01 );input_report_rel (&pm->input,REL_DIAL , pm->data[1 ]); +input_sync (&pm->input); }/* Decide if we need to issue a control message and do so. Must be called with pm->lock down */
drivers/usb/input/usbkbd.c +3 -1
@@ -104,6 +104,8 @@ } } +input_sync (&kbd->dev); +memcpy (kbd->old, kbd->new,8 ); }
@@ -236,7 +238,7 @@ kbd->dev.name = kbd->name; kbd->dev.phys = kbd->phys; - kbd->dev.id.bus =BUS_USB ; + kbd->dev.id.bustype =BUS_USB ; kbd->dev.id.vendor = dev->descriptor.idVendor; kbd->dev.id.product = dev->descriptor.idProduct; kbd->dev.id.version = dev->descriptor.bcdDevice;
drivers/usb/input/usbmouse.c +3 -1
@@ -72,6 +72,8 @@input_report_rel (dev,REL_X , data[1 ]);input_report_rel (dev,REL_Y , data[2 ]);input_report_rel (dev,REL_WHEEL , data[3 ]); + +input_sync (dev); }static int usb_mouse_open (struct input_dev *dev)
@@ -145,7 +147,7 @@ mouse->dev.name = mouse->name; mouse->dev.phys = mouse->phys; - mouse->dev.id.bus =BUS_USB ; + mouse->dev.id.bustype =BUS_USB ; mouse->dev.id.vendor = dev->descriptor.idVendor; mouse->dev.id.product = dev->descriptor.idProduct; mouse->dev.id.version = dev->descriptor.bcdDevice;
drivers/usb/input/wacom.c +5 -0
@@ -136,6 +136,7 @@ }input_event (dev,EV_MSC ,MSC_SERIAL ,0 ); +input_sync (dev); }static void wacom_graphire_irq (struct urb *urb)
@@ -189,6 +190,8 @@input_report_key (dev,BTN_STYLUS2 , data[1 ] &0x04 );input_event (dev,EV_MSC ,MSC_SERIAL , data[1 ] &0x01 ); + +input_sync (dev); }static void wacom_intuos_irq (struct urb *urb)
@@ -291,6 +294,8 @@ }input_event (dev,EV_MSC ,MSC_SERIAL , wacom->serial[idx]); + +input_sync (dev); }#define WACOM_INTUOS_TOOLS (BIT(BTN_TOOL_BRUSH) | BIT(BTN_TOOL_PENCIL) | BIT(BTN_TOOL_AIRBRUSH) | BIT(BTN_TOOL_LENS))
drivers/usb/input/xpad.c +2 -0
@@ -158,6 +158,8 @@/* "analog" buttons black, white */ input_report_key (dev,BTN_C , data[8 ]);input_report_key (dev,BTN_Z , data[9 ]); + +input_sync (dev); }static void xpad_irq_in (struct urb *urb)
include/linux/input.h +15 -5
@@ -57,10 +57,10 @@*/ struct input_devinfo { -uint16_t bustype; -uint16_t vendor; -uint16_t product; -uint16_t version; +__u16 bustype; +__u16 vendor; +__u16 product; +__u16 version; };#define EVIOCGVERSION _IOR('E', 0x01, int)/* get driver version */
@@ -89,7 +89,7 @@* Event types */ -#define EV_RST 0x00 +#define EV_SYN 0x00#define EV_KEY 0x01#define EV_REL 0x02#define EV_ABS 0x03
@@ -103,6 +103,13 @@#define EV_MAX 0x1f/* +* Synchronization events. +*/ + +#define SYN_REPORT 0 +#define SYN_CONFIG 1 + +/* * Keys and buttons */
@@ -769,6 +776,8 @@struct pm_dev *pm_dev;int state; +int sync; +int abs[ABS_MAX +1 ];int rep[REP_MAX +1 ];
@@ -883,6 +892,7 @@void input_event (struct input_dev *dev,unsigned int type,unsigned int code,int value); +#define input_sync (a) input_event(a, EV_SYN, SYN_REPORT, 0)#define input_report_key (a,b,c) input_event(a, EV_KEY, b, !!(c))#define input_report_rel (a,b,c) input_event(a, EV_REL, b, c)#define input_report_abs (a,b,c) input_event(a, EV_ABS, b, c)
===================================================================
This BitKeeper patch contains the following changesets:
+
## Wrapped with gzip_uu ##
begin 664 bkpatch14552 M'XL(`(OG/ST``]1=>7/C-I;_V_H4V$I5I]WQ@8,$@9[JKAS.9%R;3;K2R=9. M;;9<(G:'.L:BFK;"?/=]X&D1$HB)0+N=KESR!)%/1SOAW?Q/>+]-M"9Z^/ M/LS^E>OH9O0%^L=LD;\^RN_2<7I]DY\MH[NSZ^X_LML!M?/;V83?5[??1[> MGJ?3^3(?P??O5![=H\Z6[P^(F=L?25_F.O71[]\_\-O/W[SRVCTY@WZ[D9- MK_5[G:,W;T;Y+/N@QO'B:Y7?C&?3LSQ3T\5$Y^HLFDV*]:T%Q9C"OSX)&/9Y M03CV@B(B,2'*(SK&U!/<&]4=^WJK^]MTNICSI@O"A_[%(\N$#GS/]A>HZ# M<^HCPE[[_#457V'Z&F/40Q9]Y?OH%(^^11]W%-^-(O3MYK/YLNQRE"F_[W4 MB_P$J6F,]/U\G$9ICH#ZS2Q&LP3E>CQ.I]?H[B:%^=8?]#1?(4DFTV00K'^ MD$8:A1KZ=0T=O8;?Z0S=J05*)_.QGL#M.D:GJ.3DU>)A&KT\-DT!B>__^^K] M/W\Z0[_.EM&-7AC:V4-U(XJS%#[!=S<:)6FVR($VFJA;C98+;;J5YDA7:#) M#"Y+\XB<\<\F\UU-GZ_F?7NNXMD(2OWKT_IVBNHEN=+\Y&_XE\0GUO]*[! MR^C4\I_1""L\>MO'OZ(:PZ("\7G9T?/Q[#H-)V=1C13,",/"(P7Q?.H5B?2# M2&"1\(C'DK+'D*8^(3X'HI12;KJY'T4KBLM%>'Z3QF<W+31YF2%QSU$_,B MS5G"$I](K<*#'33DJDZVB+;ZYG,IK/H&_]^&\6J4K>YY@:%2V3B81&P6"=* M89O^;1)NNHA]C/G@+D8W*CO_U^QAD:?1[7DT"S.UU5?L%\07C!=*>CJFG/N> M,)?E0&9W$V_Z"SCRAD_I9G_5)(7W'1UF'(N"JB1BGM8>CDB8<&[;X4WJ;8R M:F9X;B1Z=W<O9M'2B!*5I[-I3;=\/845?YVIR01$U%E^W\ABHE@I(#)"$C! M0RXTUTG"@Y"P0/3VW+*=U1A8P:3P_<&SWEJVI>C:F&^*"\ZD1XM(L42!D%*8 M^#0,E8TT:)%M373)'&$QK6:ZCN[0S%KP(A))1+&.J(S_Q$UMH;%%ONNQ) M*GQ+&3N/",%S%>]*6<:8P$7N6)Q[#&A%"-T*(Y[B#>"@@OB[8=Q]]3"*VB@ MK#VU@F,2D$R#G(",XEY@CWJL1BDK^W<;I%OS6U2LD6WMUH%8_UP]=:9=#M M='I[-@5S8E=&JG2>Z]L5)4X\Z&M`:$$EQK@0*@P]E@1AR#2)X\,"K8]P"[%, MTL"2_2!FRC>[[.>$>*R(09'YF&'*E4H(/:PC]A)?=Y5@44JQ8=1N]4,X4UE\
M/E%@)5V9C]O]Q3"M-A"A1[698$4PVJ:"C_][70*L?/AR4".DT&B]CL##2 MZ?*^(K]A'X"T@LGU/"**A-%04(!MHK%6N%_2[J'96E(44.\HL/)E%AJ1G=SO MRBR06)06$G0OBWR#5<;++=<5[L-M'+<S$<#+DQ@!=1IO7T_'HY_6,'NK3 MTI,@:Z.(!2S!<8)9&/M#-4(__486$"$=T#O5=_ELVK:;"$A4#$JL*N&@%Y( MP-B))>&<\@C3Z/$-M,!D+.V:SL,1[A0Q$A00*R*XBE4OPP,V]-HEG5- M*K0RW/+>,L7BM$/74L)DX44@MUBDM08S+.EW('OML(9TTU=&AXX]C4.94=? M/09&+JA7K72L/*;#@$CKOK9(MZ26!%*.?5V"ZA#-1YW27.[_PE<30UP3P MRJD2VEK=;[email protected]!W+-:#R-O[7VH%(04@1AK'4%.L8;'09#/48>V@W:PLD M^'!Q4*G&;!YUZEU:@#E#@T)JOH+#-H@QZ.XL<1;T0MN";2LJNE2NPQ$BA@ M(2A\K*GB68:>\J/A\JM7O(-=KUNLJ$ZRR==RRT@HCP+E0-&$,C$3,$FIM M@;=HMV6L#%R=W^N$WG;TEON^7P@II(]#'04JIA&U%@MMVBT9QK@GAUG@M3HX MK0R/II<KM]$W;ICTXH3'@C,ML;CPXMK4RELT&X!%E2YZYPNTEC?I=-XTUNH MQ9<O)2D2A0-%XX"&@8JX[C?^L373@M-SSGAV-5_+,7B+L[^ATPHW25/% M(QF*D'LA<1*[+?IM%Y+QX6&Z1C).TFZQBQGS6H8C'("R.^]KU'$F^P0MN MN$VS.</I-->9BO*.-2<P\8O(QX)?9T0SQ>"62-CFWY;'[-@N$QKIJ(G]D$I M!ZAIYBO"O)!K\#,#BPGN#'W7S8\/C-1D8D9+V[5@H[K$8.YI+P5H)"33, MK9@)GUY6*7U$6Y)7*!.+-49O)]E^:XJ^N3^@587Z'')2PM0<!$&.KG=))N MF8N8#7',&XEXWPZ:@"'K40&=HX)C<'$U8[%F0IG8K92'H=E#MEGS/[email protected] MT%F/_4(#6#%"2.F1@N<Z)A*0V-U_80;PE5Z@\W9NL0^:MQI?QF>2D8#S4 M6H!G'T:)8LEA"W8C"-[33="M=$@@KJ$UG]W!H%7>$"-"SC/0>0+:>)/6NA0 MQAZ1,7\\!K?1[M9Z2(0KNKU3F59.NO2K9)R0((L50D!Q0G836$8,M\FV3 M@M7YRN?Q%&74H4)+?PX"40:CM@88"M(X=MTJU5\"PJXZ:J&L]'JN.,#(V M3T)N88XDI3&81B"UK+M\#;Y]BICGH/K-5]06+D==@(5X]@7F@::B[(U?0 M:S"]']]TV50A\-#WXUIO$S'QOO8T<4C"!A8$9P7I$1"2.A08?)]'6*-YM MH"4DL#_<;6QP=I?&[2=#=8=E84+,7I$D6&D1PW3'G@ZM'?)MZ@V008H[]#9- M9EFDZS^GJR?*.WTWS@@!D:$C%L,R##'H-C$TV#RPL<9J(#)PC8@HMFW?&).1 MP)]"1C'Q/2E8E``#M/74MTBW<V3Y-DOQ<5RVKD.S?,\'ZQ&KB*&PQN*Q8, M=7_[J+<"Y-SBZ:]14'<*KNRJ9DQA2HM0)#Y-0%A@6'EL@"W6J+P-NNWK23# MI7%C?\*[JT[+%@Q0Q@L_Y('TP(R*?3]4APVR7L(MX02WM8FFR]Z3#(,=B,O MP@!TL8B9`(L,5/)0?';3;CHJ&!\>4=J(H%Q-VD&4,@O(/&WP&"Z8AC7$D\B/ MN&*ALG9P=\FOG^I*;WAWUXB_[XHJDH(R"ET&,1OZ%$PUL'RYMM9J]]U113#U M?6;I)VX':%9>(G@TX#W$@E$C76/P<,&Q'=C/GL",%^!@>*"@_5#EAG&,K_+% MU29E@BF%>37BF?A!(10//,HB0;&6/AX:JQW04"OY0S#G)PY3-9Y==]F^DK$" MA!;XX^!)4DXCJH=&/'JHM_U=<%++Q+W^I\(FD^]3/:3N3>H[_)"Z)&SR8BAC MLLSRXSLY?MZA'#_ZJ5+\OHGCC:0[D_-6/4[_&9UF=^5_IZ>C=WOFW2$C[I)P MANCHJ-5RK#\<_VWT>\GCP?DUAN5/EP_T"9H"%07"LX(%W8$%.P0+0MI^62X MB-MC0O#?-E"J=*8MHR>"1?<F+G9@,V+<)GGL^E5!9\+(>'[R_*UOBO3)C1E M$AM>'H\NI8<[email protected]&SU%)@55F^10>/7VE2/X7.DQF.3+&HR6^&6V4*CNYL9 MRG2D8268'ZT21_,;E:,[_25<7<%I!#,^GRL<XVJUL^@06@GGNG%],L<;M(3 MD_<*WRBX/2V[O.K4348%*F%/C$?3._^O4R!T/KV$=CXR/RO[Y5II$IMA=</ M91;M"732#.MAMH3V3&MWI@W3P/^4N;O_1("4I5Z,8&C@)97AVGFF3?KM0L]5 MIF"\#]"XCI2A:\;V90SC6"S'95<5BM,D@2:ZJK1LPW)W)=8=&"Q?I2LIX-R M^E#6$VA>6/JD\'QHJ%R6P3.7UE5^5H^T[ANNR]H3P1Z1O??9UD#..SUML]#, M'4_;5LH9T"1YR6Z"[?G]R1+P.[5S^6#PH'9N#=:%V>"+(!_F-HT14-H0I:74 M>[G(LV64FR^OZNS^5_#^!+6N5_>C5]7?X]&?FY+;]/!M>0%0]-<6CKI"!(=+ M-1X=NK"5'QNABTIVX,(//$F=P>0])9BJ*,LPX5&.U<G88]1(CJ,NV0&6((<O M?^_\>A\@3':2,R"&9TU9Z*=-;4"!,,DJI\R*Z1][RT297@-109JQN5APQ [email protected])OLX7M<%.#/=JFK!FN];50N-8@E@MC\'.Z*JKQC(^7JT+LSGLF.]5P2- M)D%?H?0$.H8@3,0K"(8UD#8BF"L#,HRG;R2;LU?L\+"2;4,A']6"=A``) M*B#8"(&ZFLF5]5:55K:<WZJT6C'>-Y'HBO'DN3.^+H;QOIZM&[[email protected]!_;P MODSR=>6\1?*Q+=\WDH]7<M\7)K7$<%T\=Z:7:=+#F%X.U6FQ<S'>=Q^EK$J M]W)ENETUFBW?=ZK15KQG@OG$><6;F-X31@_*RKEAW%\/V4!#!S*6N]OP:#6 M^)?,%]V>P/H&0?;?+PU@;_^[PFO!$_W]^"->%3L[^4^N);9QLY8M<B#MD;J M1A[T2C$Q\]C#V4U]6J^D3-D>B-)RL$YZ24I[BZ3*B'?FND6NOC77-W+U5US' MA`7R\^!Z654PD.GE6)TT4[!:\39<;[*<73EOFX=MR_W=/.RU01H$PCT\]<2V MB4D9'P:!9L!.:S]P,%":1$)7%%AF.MJ"8#?3<0T"6%N5.RJ?.0:JG,QA&&C& MZX0!["#_VY4PKBBPK]>Q?L[54:^SA@)CJ\B$B[F*GQ8,IK9HX,.NUIB=+%:8 MA=ZP-6,'#,7:G.W[>2#W?"E[[-P#2&Q*2IV!:%OV:HW#W;+7M3DJ"?D\)%)5 MH#L0A,VW4(E+B)I7>3V*!Q8E.$YP6"C#&_]W#T(OI9Q$VJ@D$+%)3C=0(! MY?8@J*HR7%@42YBR_O-<I$5WTFYQ==G$26M*EN&,;X:K%MXW.FY:'N[$6?F MV^Z)8@V!CCU1FC1)7^#/XX%9N7O+0!RT1NQFFC(7-*Q+R5RA8%GJ9@N$G5*W ME3B@P@\\5S7@H5/VA$$*4Y0W#7KX3IX"(H4QO+5T!!F&EU:Q(>69GPR+:N MMM(@UU<O)=Y*GNS#3RMMZY,EX0^$RDZ^5IU1X1NGT%E=@)P@GTY0+);S,O') M9&G6NY>6>7KX4"S#/5_K(O1[X3Y&?"<P$,-ZDD=8=>&UPL+A+S6:X+Z-9 MK(_1GZ7O4MX#-UQ]]_-/?[_\H;P/9$R"##A.WY:Y7L>H>6\NGY3[Z9X@0^>D M2B<%&)4_K*'V^R;M7[Y_]_,OOV[3-A\1ID&V3BM?[Z^CMX@LDD2WOTU:K=P M082,5^:[8),Y;(FFZA_WA3C_D8C38I8E@#P,;.17#I@:7-@>SYJQ%Z5;+1 MY,Q6E%"DYBH$$.4/9_#MN1G?0N=789J_K.XX64T17.I<4NLM!VP7E>4.".7 MU<X."&O[6PBO?BC'((!Z)0^77"PW*QA[X):#]-E20%U@,J%<<%(Y8F1S2@Q MC",>Z].W?6*TM>FP)=-M]_P<R/7=/3_7^A9CC[G'@!@Z%9^&[U&^!.?Y86-3 MYWI1FJV>N_=OKE+BZS)8H++:[[G4U^7NIGM1TTR3"VQD8.!2O@)83,Y\K.]/ MT"+]X3E'0S#:.(*2^93)9<N""?(K[(A92,\6\*[6WSW"=FCHW&ZR$_?@K", M'UK"].CH-AV/KQ)5I>!6-U6?3M#[RQ\N?SY![W[^\<>KRY^.US^IN]G0:$1R M+93_,@,PD8I+$I32N!3'YG?'HYKU7)^58;HL^4\3\.Q?OGBY<M7JZD^/GU[ MIT!T;JVCW8U0AJ\DU]U9#JZE_MU9ULD?/*BSR1VL5_ZDOBSO70N[PW0K]/)W M8A<O*H+_F\;_UR27U).!M[)AM+LAM*Z]-@%2W8%T198VBF(7F>3&'F6C?X MI+DD5>GV03BM1^J&)V\WQ>.%GBQ+21+FTRVV=VW.9SOEMN!CK+E(G_XVKQ" M2W-#ZDPMAVP&2B0,S,,!.#:\CG\R!T7,GC06NY;.J@0I1JK"[\E-HY-J4[* M>I%HK-*)CM$+](_+BZOO?OSF\K^^OP!M]>ZW7XVJZ:Y5*0M3ZBJ4O05+9S?V MV!AV!,):$BS*S00.'7TK#!%3T&!!1%5((0\]X!X=4K#$#R<W3B5),$,D)&^ M!QMBBCYJ99)Q_Z@)H2Q,U6H$(QNG4_UQVT!_HK]Z@+<Z4\(.>W9'7%B4R6T? M<;%21)BN2B*)0VB6?<I*Y=T,]OZ2R-V!N@5D^5:^RN@M?(%?Q]=T,IMK/X< MK;X[_"'1DG,C47][6_OKWY[_VV?QFJV6;-&AM7.;W;8V-H.96VF@4=5.CP MGSDZJDWJAL"C'JL+0*OYYG=!?%$&5H_QR53=ACH][GQPX85IL.6:!B:].A M-22,&G.&Q),6U5;[(QV$1#U0UZ*'SLCD;M^3_T5E6S/@]_.LQ$.^(1QS3T M0F+O,0T>)4!7%GYN7OF*4#HU'\B/$3F0#IT=;4D'+Y9Y%J59YPMP8$A_"H_ M0Y?H=CJ[0]]F*OYR@:YG:7FJ&3*Q%331I3%DCJ38PE/G++F$F#@V87[.X/6H MZF4M-_ZV^@Q&2CS+UA_GV2P&NZ3U=;9(9U,01I*6T2KS^@68"L;LJ8).X&'A M>XR-IO-18&+B[V%V;K+9-/VCVA"D"KNMN*K7S>A*""P<;5ZPG!T1*HH^V40 MD$J%YLA,?)GZ)(3?ZDF+*^IXY?%5!I@Z0:O(>]/B"<+'AW*UR\VQS"KYM/MV M?23RO*#@&.*>_6&>5RUYM</8&O.GA_*UR^&ZB%+HGT'^^2OT:[4WBU[MRI*5 M1Q&V=F8IS_J+]*+<Y&52/[JQ2_)M;63IAO;?38?WT"344<\+CZ+':>J'4$' MIOHWW;2PYZT3_3NV5_30^/VA;T(S<F"/&!+D"0D2K"Z/#([TE#3N7^I0/+ M;K'[IZ*U9.L2VE=<V:5I;7:;-8!07;;X#Z6>I.@1WVOLMZ>>_EZM6'OP+RL MU7#=\C+E\-*AG4,=AK/>[;")1Q)O=K#PN;MT>-H9'DLQL&$@(W1NL6D=U;\
MBXI>O0V=V69N*U=@\X9]\,B=T6%Q`-3C:+>*"3T<N+MT3VIBF*.J!F(C=P\+ M5L_]MUB?MT*#>UC?/H+1@?_V9T1^A!9:541>_:#BN>N'ZC3+85!HC]@I"CB\
MJK#K,$,'%%B?M?CX!AIQ@+TZ[^&Y8Z\%'(8!%KC_4AQX!?38?*@=>J#Q"L M#Z5X?-KFP$L!HE=;88G50O5\1G#D-:L.N>QUN;UZXI#D##ZNP!!RC8'8KP M2.HMC4"QL\?PI""HCF\8!H+5:-T<!M:1O%)1'(">V?3T&87_\?1;K@O,*>? M!?>K\P:&<?_>W30,@@[>W^\W#;=/$Q_.>K=#SA]'O,D4$+1.(G_N=D!U'/OA M;.#68)UXCSL2%FN*O2[AYM%ZMJQ/K4[[>PSI5M$6KXMRGCO;JW,)![!]-52W M2'-'0FM%\#/Q[/K-)S8\WSUNQT][_G4*Q+I!Y'(N$1CR4=&@/H)-V$!:7$ M?LESAT?\3[R_*3U4K[TY5+>G_'@[+:@B=]7O^.V>!FW+=_N#JA]+OFWD$?I9 M6/K5D=H#^-\>KE.>8G>%61_CYQ$AN#R>U);MS2^WF<X8$[@(.%<LCCTFE&*$ M#@WW]!!OO'SN$6<O_TDKQ+CH3^KI'JO3N0C_7]VUK#8,\%[OR)0Z%GOQZ$? MT%M_(9'D%DI*JF$DH^OY-:5<:1XO2ZF.0>M(F8E[\J>F3&M]J&/U[N2=)_Q M5/%OD;M^INO9HMCYG;+2%JUKNNZ%;^?/!D&_7;#9$^UISF[_.#@DW'GD&&]J M*--)DR40LF6QH^UO8/V<97@N:CCPMZ('H,B!@1X7BQ*O[Q/NHC3M1UV=YY M+OAS7:>7!1\V\0;-/5K7R*+SQP:GQ>+>O5'*_?Y3]3E9J&7GTOQ_?/60E1 M&'SQ+#"RC-UCFO>$-\0OO,22A*NQ\\D\3@3NM%;5]XXPC+1WQ?6BVKQ%?Y M<,VH$9<%.%_)OYMH(!X02P]L7JQZ7'P[8(+S8KQP5*5:>4#<";*/S%.5** M=O>01"H.[',GI@QEB=:JC4V>I\&$G?6"VGC,JFF5B6NQ!S3I).9X"\>(-+HN M]51<*ZJ1N#W/.S+9.8\Y0G<.8[']$@S*IAA,MW>$7[>!LY]B!UC(H]9.\U@ MKH3]!5EP^:,L\=\OB(1,E@V3()_0C6+\/[7]?+]Y3OYX&_<:W%M[W#\VOI&& ,>7WW!8V2#C<=GP``
`
end
Signature · 2 lines
Vojtech Pavlik SuSE Labs
Hi!
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 http://linux-input.bkbits.net:8080/linux-input' should also work.
===================================================================
[email protected], 2002-07-25 14:02:02+02:00, [email protected]
Small cleanup in evdev.c, which copies the data directly from input struct to userspace.
evdev.c | 8 +------- 1 files changed, 1 insertion(+), 7 deletions(-)
drivers/input/evdev.c +1 -7
@@ -233,7 +233,6 @@struct evdev_list *list = file->private_data;struct evdev *evdev = list->evdev;struct input_dev *dev = evdev->handle.dev; -struct input_devinfo id;int retval, t, u;if (!evdev->exist)return -ENODEV ;
@@ -244,12 +243,7 @@return put_user (EV_VERSION , (int *) arg);case EVIOCGID : - id.bustype = dev->id.bustype; - id.vendor = dev->id.vendor; - id.product = dev->id.product; - id.version = dev->id.version; -return copy_to_user ((void *) arg, &id,sizeof (struct input_devinfo )); - +return copy_to_user ((void *) arg, &dev->id,sizeof (struct input_devinfo ));case EVIOCGREP :if ((retval =put_user (dev->rep[0 ], ((int *) arg) +0 )))return retval;
===================================================================
This BitKeeper patch contains the following changesets:
+
## Wrapped with gzip_uu ##
begin 664 bkpatch14675 M'XL(`,OH/ST``[64;6^;,!#'7^-/<5*E*5T3L!T#@2E5MW;:IDU:E*JO(]=< MBO@"Q1*C[\3!JU6]6T>P0+B_-QW/WO9Q_!58U5[+3ZFT&5DB/XJ&L3.V:3 MY=DJ-6ZC-JZZM?:YUM;NI;I;^_M7=]X6;EN#+'K,VE4"BU6=>PP=WQO,=LU MQL[\_8>K+V_GA$RG<)[*<H67:&Z)497K<R3^DR:-->E:RI9U@4:Z2I==/>N M':>4V]MGX9CZ0<<"*L).L80Q*1@FE(M)(,@^L;-'Z3^.$W*?,3_@D\YGW!?D MI@KA^4>S3TN],Q)3;<=(_*1P("R<,1I2\@W];Q#E1<%G(/>5HRR;-60E M8)M@ZZHA;-+,JJKT.L,:3(J02",AR2I4)M_"LM*%_7[7%JA-U2ACTX/&=KE> M2X4N^0RV:!&1V4,CR.@W+T*HI.3TA<*3*NMYN&/$VU?P@PC"3EU@Q0@[C"9+ M%BEQG2@IPFAY2/+G8O9=Y93Y41]3L!UK3[J_S-U?9'Z0P6<S%WPL0D8[.@D# M?\<C&_^,(XO]Z!=P#/\+CG,L=(O0E"5B@LD>K)ZE.ZF_PJC:[(9E8_:TZG\ MV04?!\#L)$((R"?N<_OF.$Z%IJG*?A-L%T8O>K@'@U9G";P^!EFMAO#*_G)T MFB5#J+-;U,O!?BOL,EK8Q:Q<ZN/C-P\GETI1W=1-,0VH"D,:C<EW>,B?!P% "````
`
end
Signature · 2 lines
Vojtech Pavlik SuSE Labs
[cset] Move ps2serkbd.c functionality into atkbd.c, kill ps2serkbd.c
On Thu, Jul 25, 2002 at 02:03:42PM +0200, Vojtech Pavlik wrote:
Hi!
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 http://linux-input.bkbits.net:8080/linux-input' should also work.
===================================================================
[email protected], 2002-07-25 14:23:58+02:00, [email protected]
Add support for AT keyboards connected over a PS/2 to Serial converter to atkbd.c - trivial. Remove ps2serkbd, because it's not needed anymore.
b/drivers/input/keyboard/Config.help | 12 - b/drivers/input/keyboard/Config.in | 1 b/drivers/input/keyboard/Makefile | 1 b/drivers/input/keyboard/atkbd.c | 19 +- drivers/input/keyboard/ps2serkbd.c | 299 ----------------------------------- 5 files changed, 14 insertions(+), 318 deletions(-)
drivers/input/keyboard/Config.help +2 -10
@@ -7,7 +7,8 @@ CONFIG_KEYBOARD_ATKBD Say Y here if you want to use the standard AT keyboard. Usually you'll need this, unless you have a different type keyboard (USB, - ADB or other). + ADB or other). This also works for AT keyboards connected over + a PS/2 to serial converter. If unsure, say Y.
@@ -24,15 +25,6 @@ This driver is also available as a module ( = code which can be inserted in and removed from the running kernel whenever you want). The module will be called sunkbd.o. If you want to compile it as a - module, say M here and read <file:Documentation/modules.txt>. - -CONFIG_KEYBOARD_PS2SERKBD - Say Y here if you want to use a PS/2 to Serial converter with a - keyboard attached to it. - - This driver is also available as a module ( = code which can be - inserted in and removed from the running kernel whenever you want). - The module will be called ps2serkbd.o. If you want to compile it as a module, say M here and read <file:Documentation/modules.txt>. CONFIG_KEYBOARD_XTKBD
drivers/input/keyboard/Config.in +0 -1
@@ -6,7 +6,6 @@ dep_tristate ' AT keyboard support' CONFIG_KEYBOARD_ATKBD $CONFIG_INPUT $CONFIG_INPUT_KEYBOARD $CONFIG_SERIO dep_tristate ' Sun Type 4 and Type 5 keyboard support' CONFIG_KEYBOARD_SUNKBD $CONFIG_INPUT $CONFIG_INPUT_KEYBOARD $CONFIG_SERIO -dep_tristate ' PS/2 to Serial converter support' CONFIG_KEYBOARD_PS2SERKBD $CONFIG_INPUT $CONFIG_INPUT_KEYBOARD $CONFIG_SERIO dep_tristate ' XT Keyboard support' CONFIG_KEYBOARD_XTKBD $CONFIG_INPUT $CONFIG_INPUT_KEYBOARD $CONFIG_SERIO dep_tristate ' Newton keyboard' CONFIG_KEYBOARD_NEWTON $CONFIG_INPUT $CONFIG_INPUT_KEYBOARD $CONFIG_SERIO
drivers/input/keyboard/Makefile +0 -1
@@ -6,7 +6,6 @@ obj-$(CONFIG_KEYBOARD_ATKBD) += atkbd.o obj-$(CONFIG_KEYBOARD_MAPLE) += maple_keyb.o -obj-$(CONFIG_KEYBOARD_PS2SERKBD) += ps2serkbd.o obj-$(CONFIG_KEYBOARD_SUNKBD) += sunkbd.o obj-$(CONFIG_KEYBOARD_XTKBD) += xtkbd.o obj-$(CONFIG_KEYBOARD_AMIGA) += amikbd.o
drivers/input/keyboard/atkbd.c +12 -7
@@ -129,6 +129,7 @@signed char ack;unsigned char emul;unsigned short id; +unsigned char write; };/*
@@ -146,7 +147,7 @@#endif /* Interface error. Request that the keyboard resend. */ -if (flags & (SERIO_FRAME |SERIO_PARITY )) { +if ((flags & (SERIO_FRAME |SERIO_PARITY )) && atkbd->write) {printk ("atkbd.c: frame/parity error: %02x\n" , flags);serio_write (serio,ATKBD_CMD_RESEND );return ;
@@ -265,7 +266,7 @@struct atkbd *atkbd = dev->private;char param[2 ]; -if (!atkbd->serio->write) +if (!atkbd->write)return -1 ;switch (type) {
@@ -449,15 +450,19 @@struct atkbd *atkbd;int i; -if ((serio->type &SERIO_TYPE ) !=SERIO_8042 ) -return ; +if ((serio->type &SERIO_TYPE ) !=SERIO_8042 && + (((serio->type &SERIO_TYPE ) !=SERIO_RS232 ) || (serio->type &SERIO_PROTO ) !=SERIO_PS2SER )) +return ;if (!(atkbd =kmalloc (sizeof (struct atkbd ),GFP_KERNEL )))return ;memset (atkbd,0 ,sizeof (struct atkbd )); -if (serio->write) { +if ((serio->type &SERIO_TYPE ) ==SERIO_8042 && serio->write) + atkbd->write =1 ; + +if (atkbd->write) { atkbd->dev.evbit[0 ] =BIT (EV_KEY ) |BIT (EV_LED ) |BIT (EV_REP ); atkbd->dev.ledbit[0 ] =BIT (LED_NUML ) |BIT (LED_CAPSL ) |BIT (LED_SCROLLL ); }else atkbd->dev.evbit[0 ] =BIT (EV_KEY ) |BIT (EV_REP );
@@ -475,7 +480,7 @@return ; } -if (serio->write) { +if (atkbd->write) {if (atkbd_probe (atkbd)) {serio_close (serio);
@@ -518,7 +523,7 @@printk (KERN_INFO "input: %s on %s\n" , atkbd->name, serio->phys); -if (serio->write) +if (atkbd->write)atkbd_initialize (atkbd); }
drivers/input/keyboard/ps2serkbd.c deleted +0 -299
299 lines not on this page · raw message
===================================================================
This BitKeeper patch contains the following changesets:
+
## Wrapped with gzip_uu ##
begin 664 bkpatch20801 M'XL(`/_M/ST``\U8;6_B1A#^C'_%G$Y*@ZZ8?;?-B>BXD+;H>@J"W(>3*E6+ MO007L)%M$J6U^ML[M@GA2-+PTIQ*HJRQAV=F9YY]9LA;^)*:I%6[B?_(C#^Q MWL(O<9JU:MEM.NO)YF]]&]M_T^\/XACO-^<Q'/37%DW1]-F&"V6F87/^SKS M)W!CDK15HS9?W\GN%J95&US\_.77SL"RVFTXG^CHV@Q-!NVVE<7)C9X%Z0>= M369Q9&>)CM*YR;3MQ_-\;9HS0AC^2.IP(E5.%1%.[M.4BVH"0@3KA+6*K/ M6^%OXSA,T@*-Y;@*S^H"M8500%[email protected]@\POO)#2(]1'^ MVTV<6SYT@@#2Y6(1)QF,XP0Z5SU=Z-8)T$*?AQ%QL],#'F&S3TATV&0<#0 M)*&>X<?1I]D^!#OZFPZ"FP?&IEX0T:V#P<_PH+%*&U<>G/\+(^'J9&@BS M'U($B.(,(F,"]*&CNWF<&-OZ!))QAUG]API:C3U?ED4TL<Z>RV@>8(1(H8I6 MS?LM-U=;6%6/<,J)*TA./9?2?#0*/,.("2A7GL./PRZ8P;B4B"V5MW^DYW$T M#J_M,-J.52K'D[FG#>$&$SNF2HT]YUCX=;B*>](Y.-R)F2VVQ8.7N74=3!2 MYHT-,2(0\G@'ZY"%\@C?/^3/>FK&X<QLQTN(0T7N&5?[RC7:%=)%0AR)O@Z6 M%V=V_V#7)VR;O#0G@A*5&S8RRA6^UAYC@@?/.O@89I^,69BD&9B9P</?M/&B ML>'@[VVLC3U0=)H+IB0M)?CE8A7:_-I<.MX!Y:CCG6<N)P[I8[S1RHN7U)Q [email protected]*^K;.HH17K+Z&1W):_J(G]'>IQ@-)V*0%J]?OLPZW8^C23.)B:I MVWU"5/0LS2&VSB9IB\U&01X:#-IV68>FHQM=9D#W@[,"J/#>;6KI!X+O\$I MX?)#.4604]^+4I7V[T6I,#J$4![\JWS<:^<!-=Y/U(]$7U>82_1237__XPH7 MDU?5?G8K\?UN7Z'"]Z/D_@7>9X([#AO;'96*B9QPI51974KW+R_%KN!\_]F^ MG.B_G><?A#8MJ%-IKM18969YC0PT."7*@MHS2\CK+^!.=P&T29N8]=A;A ME:VE7&KA&$Y/QS-]G<()GXO!KW+WW\:=#Y?0[5NWYGT+OZ6J_#R4GU=:1Q M5D+5X2_L'<HMP*JE!'OSC8W5%9)A#^L)R8&OW!4]*&Z<%=\NT6GEY>IK_Z(. M;]JKMRX1#!U:M=KI3O:#(>.L#GD.3UKW!Y=7EQOF_2'#BWH=\6'U2DRV3"+, MCU!EZRT6\6+[:V866ZVGVMMID-:-];_U6@3Y*I7#*5%;+TR:2%77M5<MC MD_+T'S!K'B)>\_&QSM8:X-"^9=/*#^E+4YV4/[7&1>[9;9;SYWFC?T4@V0Y DS6_IP&5.T<UO_<\2?&GZ;+>5N;0+ET+*U_``B&%^]1$@``
`
end
Signature · 2 lines
Vojtech Pavlik SuSE Labs
[cset] Fix mouse wheel direction in psmouse.c
Hi!
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 http://linux-input.bkbits.net:8080/linux-input' should also work.
===================================================================
[email protected], 2002-07-25 16:08:56+02:00, [email protected]
Because the Linux Input core follows the USB HID standard where it comes to directions of movement and rotation, a mouse wheel should be positive where it "rotates forward, away from the user". We had the opposite in psmouse.c. Fixed this.
===================================================================
psmouse.c | 8 ++++---- 1 files changed, 4 insertions(+), 4 deletions(-)
drivers/input/mouse/psmouse.c +4 -4
@@ -102,7 +102,7 @@case 1 :/* Mouse extra info */ input_report_rel (dev, packet[2 ] &0x80 ?REL_HWHEEL :REL_WHEEL , - (int ) (packet[2 ] &7 ) - (int ) (packet[2 ] &8 )); + (int ) (packet[2 ] &8 ) - (int ) (packet[2 ] &7 ));input_report_key (dev,BTN_SIDE , (packet[2 ] >>4 ) &1 );input_report_key (dev,BTN_EXTRA , (packet[2 ] >>5 ) &1 );
@@ -111,7 +111,7 @@case 3 :/* TouchPad extra info */ input_report_rel (dev, packet[2 ] &0x08 ?REL_HWHEEL :REL_WHEEL , - (int ) ((packet[2 ] >>4 ) &7 ) - (int ) ((packet[2 ] >>4 ) &8 )); + (int ) ((packet[2 ] >>4 ) &8 ) - (int ) ((packet[2 ] >>4 ) &7 )); packet[0 ] = packet[2 ] |0x08 ;break ;
@@ -135,14 +135,14 @@*/ if (psmouse->type ==PSMOUSE_IMPS || psmouse->type ==PSMOUSE_GENPS ) -input_report_rel (dev,REL_WHEEL , (signed char ) packet[3 ]); +input_report_rel (dev,REL_WHEEL , -(signed char ) packet[3 ]);/* * Scroll wheel and buttons on IntelliMouse Explorer */ if (psmouse->type ==PSMOUSE_IMEX ) { -input_report_rel (dev,REL_WHEEL , (int ) (packet[3 ] &7 ) - (int ) (packet[3 ] &8 )); +input_report_rel (dev,REL_WHEEL , (int ) (packet[3 ] &8 ) - (int ) (packet[3 ] &7 ));input_report_key (dev,BTN_SIDE , (packet[3 ] >>4 ) &1 );input_report_key (dev,BTN_EXTRA , (packet[3 ] >>5 ) &1 ); }
===================================================================
This BitKeeper patch contains the following changesets:
+
## Wrapped with gzip_uu ##
begin 664 bkpatch22758 M'XL(`(X&0#T``[65;4_;,!#'7]>?X@32U@J:.(GS0*<B!G10K=*J(L2+"2$W MN9",-(X2MX4I'WZ.6Q7&@#TPTDI6[^'G._M_Z3:<5UCV6@OQ36*8D&TX%97L MM>0RS=+K1!KS<&F$WY5](H2RFXF8H;F.-J<W9IH7<TF4?\QEF,"RZK7L@QG M8Y%W!?9:D\')^>CCA)!^'XX2GE_C&4KH]XD4Y8)G47799*)W)ESZL92FZ$ M8E9O0FN;4EM]7,MWJ.O5ED>97X=69%F<61A1FP4>(^O"#AZ5_YCCVZYEVXX; MU*[M^#8Y!LM@S=JF]0W;1<LKT>#GNOM4+M'*3R#A1T+NI0<PO]MXHB$<(@A MGU<(,D$8I?G\%H;-04,H2H189)E85MIY?G8(I\-CJ"3/(UY&L$Q0A:120=3F MJ*($1&F)H4Q%7H&(8286.,-<@LJ4DC>>':!*T>SI0)@!E4BYEFD(%.$0E2I M3!>X8<.63E/P6)1+M:O*7O([B$LQTU4I3KEEP5"PAM(8Q.%YJC\'(I*[V6$ M!GQ*;S%26EED,^@[L-SR?A>(Z3[EP\AE%.R_]R=U5&9-B)="=?499B;<M;R MH([ET(#9-0T\ZM53?SIU@\@)8F2NC?@JMI(>HX'KU$[+*8'XL6T9DC>L)=7 ML54OENO93/7B>'MZC/9^&2+G=T/$H,O>9(B4M(!GF5;?2M7W@V"H%UV!\3S+ M[@P8OE?B5MVF<:JT.)R-STQ[5P&:3G!O/G9B'-U8U^@6R[U5XEM_/+E_8-Z MCRVJCHX,5TNK>=II+CO0+GAX@_*K?0GO(.A%YZP^YW.!X6PF$;HY2'B0>S^ M/K#.(](3[C70"310+ZV6[O6JQ$*4S9*U(USLPF0PNKHX'0Q&N]!M5^EUKLXR M3'C9@376N=0LMNJ/N7_&^KE+YYGNG4WWFW^>,,'PIIK/^EZ`;CSU]\@/^0N@ %3.X&````
`
end
Signature · 2 lines
Vojtech Pavlik SuSE Labs
[cset] Add the EVIOCSABS ioctl for X people.
Hi!
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 http://linux-input.bkbits.net:8080/linux-input' should also work.
===================================================================
[email protected], 2002-07-25 16:36:05+02:00, [email protected]
Add EVIOCSABS() ioctl to change the abs* informative values on input devices. This is something the X peoople really wanted.
Rename input_devinfo to input_id, it's shorter and more to the point.
Remove superfluous printks in uinput.c
Clean up return values in evdev.c ioctl.
===================================================================
drivers/input/evdev.c | 53 ++++++++++++++++++++++++++++------------------- drivers/input/uinput.c | 12 ---------- include/linux/gameport.h | 2 - include/linux/input.h | 9 ++++--- include/linux/uinput.h | 2 - 5 files changed, 40 insertions(+), 38 deletions(-)
drivers/input/evdev.c +32 -21
@@ -233,7 +233,7 @@struct evdev_list *list = file->private_data;struct evdev *evdev = list->evdev;struct input_dev *dev = evdev->handle.dev; -int retval, t, u; +int t, u;if (!evdev->exist)return -ENODEV ;
@@ -243,20 +243,20 @@return put_user (EV_VERSION , (int *) arg);case EVIOCGID : -return copy_to_user ((void *) arg, &dev->id,sizeof (struct input_devinfo )); +return copy_to_user ((void *) arg, &dev->id,sizeof (struct input_id ));case EVIOCGREP : -if ((retval =put_user (dev->rep[0 ], ((int *) arg) +0 )))return retval; -if ((retval =put_user (dev->rep[1 ], ((int *) arg) +1 )))return retval; +if (put_user (dev->rep[0 ], ((int *) arg) +0 ))return -EFAULT ; +if (put_user (dev->rep[1 ], ((int *) arg) +1 ))return -EFAULT ;return 0 ;case EVIOCSREP : -if ((retval =get_user (dev->rep[0 ], ((int *) arg) +0 )))return retval; -if ((retval =get_user (dev->rep[1 ], ((int *) arg) +1 )))return retval; +if (get_user (dev->rep[0 ], ((int *) arg) +0 ))return -EFAULT ; +if (get_user (dev->rep[1 ], ((int *) arg) +1 ))return -EFAULT ;return 0 ;case EVIOCGKEYCODE : -if ((retval =get_user (t, ((int *) arg) +0 )))return retval; +if (get_user (t, ((int *) arg) +0 ))return -EFAULT ;if (t <0 || t > dev->keycodemax)return -EINVAL ;switch (dev->keycodesize) {case 1 : u = *(u8 *)(dev->keycode + t);break ;
@@ -264,13 +264,13 @@case 4 : u = *(u32 *)(dev->keycode + t *4 );break ;default :return -EINVAL ; } -if ((retval =put_user (u, ((int *) arg) +1 )))return retval; +if (put_user (u, ((int *) arg) +1 ))return -EFAULT ;return 0 ;case EVIOCSKEYCODE : -if ((retval =get_user (t, ((int *) arg) +0 )))return retval; +if (get_user (t, ((int *) arg) +0 ))return -EFAULT ;if (t <0 || t > dev->keycodemax)return -EINVAL ; -if ((retval =get_user (u, ((int *) arg) +1 )))return retval; +if (get_user (u, ((int *) arg) +1 ))return -EFAULT ;switch (dev->keycodesize) {case 1 : *(u8 *)(dev->keycode + t) = u;break ;case 2 : *(u16 *)(dev->keycode + t *2 ) = u;break ;
@@ -284,13 +284,11 @@struct ff_effect effect;int err; -if (copy_from_user ((void *)(&effect), (void *)arg,sizeof (effect))) { +if (copy_from_user ((void *)(&effect), (void *)arg,sizeof (effect)))return -EFAULT ; - } err = dev->upload_effect (dev, &effect); -if (put_user (effect.id, &(((struct ff_effect *)arg)->id))) { +if (put_user (effect.id, &(((struct ff_effect *)arg)->id)))return -EFAULT ; - }return err; }else return -ENOSYS ;
@@ -302,8 +300,8 @@else return -ENOSYS ;case EVIOCGEFFECTS : -if ((retval =put_user (dev->ff_effects_max, (int *) arg))) -return retval; +if (put_user (dev->ff_effects_max, (int *) arg)) +return -EFAULT ;return 0 ;default :
@@ -380,11 +378,24 @@int t =_IOC_NR (cmd) &ABS_MAX ; -if ((retval =put_user (dev->abs[t], ((int *) arg) +0 )))return retval; -if ((retval =put_user (dev->absmin[t], ((int *) arg) +1 )))return retval; -if ((retval =put_user (dev->absmax[t], ((int *) arg) +2 )))return retval; -if ((retval =put_user (dev->absfuzz[t], ((int *) arg) +3 )))return retval; -if ((retval =put_user (dev->absflat[t], ((int *) arg) +4 )))return retval; +if (put_user (dev->abs[t], ((int *) arg) +0 ))return -EFAULT ; +if (put_user (dev->absmin[t], ((int *) arg) +1 ))return -EFAULT ; +if (put_user (dev->absmax[t], ((int *) arg) +2 ))return -EFAULT ; +if (put_user (dev->absfuzz[t], ((int *) arg) +3 ))return -EFAULT ; +if (put_user (dev->absflat[t], ((int *) arg) +4 ))return -EFAULT ; + +return 0 ; + } + +if ((_IOC_NR (cmd) & ~ABS_MAX ) ==_IOC_NR (EVIOCSABS (0 ))) { + +int t =_IOC_NR (cmd) &ABS_MAX ; + +if (get_user (dev->abs[t], ((int *) arg) +0 ))return -EFAULT ; +if (get_user (dev->absmin[t], ((int *) arg) +1 ))return -EFAULT ; +if (get_user (dev->absmax[t], ((int *) arg) +2 ))return -EFAULT ; +if (get_user (dev->absfuzz[t], ((int *) arg) +3 ))return -EFAULT ; +if (get_user (dev->absflat[t], ((int *) arg) +4 ))return -EFAULT ;return 0 ; }
drivers/input/uinput.c +1 -11
@@ -357,7 +357,6 @@ .read = uinput_read, .write = uinput_write, .poll = uinput_poll, -// fasync: uinput_fasync, .ioctl = uinput_ioctl, };
@@ -369,16 +368,7 @@static int __init uinput_init (void ) { -int retval; - - retval =misc_register (&uinput_misc); - -if (!retval) { -printk (KERN_INFO "%s: User level driver support for input subsystem loaded\n" ,UINPUT_NAME ); -printk (KERN_INFO "%s: Aristeu Sergio Rozanski Filho <[email protected]>\n" ,UINPUT_NAME ); - } - -return retval; +return misc_register (&uinput_misc); } static void __exit uinput_exit(void)
include/linux/gameport.h +1 -1
@@ -39,7 +39,7 @@char *name;char *phys; -struct input_devinfo id; +struct input_id id;int io;int speed;
include/linux/input.h +5 -4
@@ -56,7 +56,7 @@* IOCTLs (0x00 - 0x7f) */ -struct input_devinfo { +struct input_id {__u16 bustype;__u16 vendor;__u16 product;
@@ -64,7 +64,7 @@ };#define EVIOCGVERSION _IOR('E', 0x01, int)/* get driver version */ -#define EVIOCGID _IOR('E', 0x02, struct input_devinfo)/* get device ID */ +#define EVIOCGID _IOR('E', 0x02, struct input_id)/* get device ID */ #define EVIOCGREP _IOR('E', 0x03, int[2])/* get repeat settings */ #define EVIOCSREP _IOW('E', 0x03, int[2])/* get repeat settings */ #define EVIOCGKEYCODE _IOR('E', 0x04, int[2])/* get keycode */
@@ -80,6 +80,7 @@#define EVIOCGBIT (ev,len) _IOC(_IOC_READ, 'E', 0x20 + ev, len)/* get event bits */ #define EVIOCGABS (abs) _IOR('E', 0x40 + abs, int[5])/* get abs value/limits */ +#define EVIOCSABS (abs) _IOW('E', 0xc0 + abs, int[5])/* set abs value/limits */ #define EVIOCSFF _IOC(_IOC_WRITE, 'E', 0x80, sizeof(struct ff_effect))/* send a force effect to a force feedback device */ #define EVIOCRMFF _IOW('E', 0x81, int)/* Erase a force effect */
@@ -754,7 +755,7 @@char *name;char *phys;char *uniq; -struct input_devinfo id; +struct input_id id;unsigned long evbit[NBITS (EV_MAX )];unsigned long keybit[NBITS (KEY_MAX )];
@@ -829,7 +830,7 @@unsigned long flags; -struct input_devinfo id; +struct input_id id;unsigned long evbit[NBITS (EV_MAX )];unsigned long keybit[NBITS (KEY_MAX )];
include/linux/uinput.h +1 -1
@@ -64,7 +64,7 @@#define UINPUT_MAX_NAME_SIZE 80struct uinput_user_dev {char name[UINPUT_MAX_NAME_SIZE ]; -struct input_devinfo id; +struct input_id id;int ff_effects_max;int absmax[ABS_MAX +1 ];int absmin[ABS_MAX +1 ];
===================================================================
This BitKeeper patch contains the following changesets:
+
## Wrapped with gzip_uu ##
begin 664 bkpatch23969 M'XL(`.8,0#T``\V8?6_;-A#&_[8^Q0$%4BN-;9)Z3Y&B69QUP;JU2-NM0%<8 MBD3%6FW)D"@G3;U]]AU)V7'\EMA=ACF!!9#R3\>[1X^.>@(?2EX<-L;YGX)' M?>,)_)27XKAKM)!>MD7[2JZ:D<W.'Z>YSC>Z>=#WJG/[EQ\Z:39J!(&SK\- M1=2',2_*PP9M6[,1\77$#QOGIZ\^O#X^-XRC(SCIA]DE?\<%'!T9(B_&X2N M7X:B/\BSMBC"K!QR$;:C?#B9G3IAA##\<ZAG$<>=4)?8WB2B,:6A37E,F.V[ MME$']G(A_$6.QQQJ$Q\Y#K-<Q^@";=NV#X1UB-=A#E#WT'(/B?.,L$-"8T6 MGCG0(L8/\.\NXL2(X#B.X?2WLS<G[XY_>-<T(<TC,<#K0*1@(/H<PHMR'](L MR8MA*-(QQY]A%!4O(<]U05B/DXC7K;A?3\M?]++)_HI]FE(GR$$<_ST4#^ MM.#A8/5KL),\+B-^<\"X=<@WH2A%>2$>B!-#Z5#Q%8C\O!"\@S&(8Y@4' M_"F>)?&C/,V$1@WS,8>R&O$B&51Y5<*HP+DO&%,&E2*V(SSQ9,!#'!AA-*(J MLNEZ\"0^QA#:D4Y$&XR?`4OG>,;;6SD9K2T_AD%"8KRXIWQI%@VJF'<&:59= M:[VW^_.E#&PZ<6V;^I/$8A<^*LI-..$A\=<)9Q-3:=-R"9L0Q_?<>\.+BU3> M=!K2J=,T%YZ-AXF+87H3'O@)#2+[(HY"VPN2M>%M8-Z&[email protected]];(W5W452 MBU*;HOH1Z#H3)V:!F]@QC3B/*5M[QVV&SD)SF&-O6]A+%/L(I;Q86WM"\#;% MF_7B(F%.$/C<IS8GZY.W&3N7/\LC[H;\W2W"]":YFS]W8F$2K4D<.@XE8>!% MH>LRA^\&O56>2_#6DEZ]4@GW^_9WB'*MA]\C2D:H$TBF396?4WO)SME]=FXQ M:#'Z^(8.Z-E0<B&D$>^CC]=&UYY:(#J@=OP[/MA&U]-WW1MH%5?J'UWL[>HJ M[6"'7?0NH,:9/C30H4$<0/4<)VP]H0Z-1J..*\I'7WLB[U781#2;XSR-8=^$ ML+@\@#T,HO5"/B;*](;G2;,4116)V>/#-!4V(98A^!L6D"33FM>I0\-$G M\ODFDT9C8:;\R(:4Z3TSK]\?C#Z_?/UP/H"@!=>BB;^AXG-MX+OEWQK,, MV"*>0*5='19QXF%1=)GK*8@Z+.:H>F@D'E40==@Y$L_2$&L%Y,&1^'HY?KT< M15%"3(I\."?%?;.YQY.$1\)$M!Y1TJP%6<^9IF3*!'=9H!<9T#GT+%7Z_+:4 M]%ZS.=5SDO3TA(*;4O(:&<A%=M$7I*(LXJY3^`Q0]H;A-4:*.:A38*H@EC)@ M^18XR)09\)?C5%0TE4\"928_#]3J:LHPS33H(<593PFO5U/8-I2DNKE1F$6* MM15E$(J5%'L%Y8_Y$A!%_4L/2G:SAX[>^_6\&0UC$_;@;S3WWB_''TU\1,)T M[K:/Q\2;\*UF*G>%V]-J1$V87GG90':M[!)EI\HN4W:I[!)EI\HN4[:IK&QO MUO5J]W<XW]<\KFUR[FL>;21[Q)]0&UL+U><$V[<Y%%J/T^346\8[3_JYG>-" M!Z#:&=4$+[0SZY*P2T=C,^GHZKNQ<'U(XU4JJ/<4VTI@JXWA^N_M+VACLM0 M4XS83#>Y=/OJ.]"R_X,65V_4Y3Y=[F(W5KA>YB[EU?V1^EZL[C>CJQL?]?TD MYDF:<1W@J[-NHX&^>]Y\>OKT,@U80>+ZC0;G7UAZG?H<!9%_8[QIG/%F'* MV=%\3(7\?8J,"/H.#A\@47QR/N,TK'IAUF_C\L?IJ*4W*[GJ%CU8:52N[ZE MM*P/:\6\>H<GU?P8&\W=H&ACENU1.F&H':WD'79KTL8>R\?4^RI^C:CIFRHI M9;4MWKCWFKW+VD'+N/56':.']26RO5-=:/W8&J9EU"OX95H*?.#MZ>OTY*BY MRL2J.1=[C!<TNT%GCR_'(KZNN_7_>WRM?>.IW$R]6MIH9]5W^-F<8ZV^PZ>O 9U:,^C[Z4U?"(!8Z;1`$U_@$GS:7VRQ<`````
`
end
Signature · 2 lines
Vojtech Pavlik SuSE Labs
Re: [cset] Add the EVIOCSABS ioctl for X people.
Quoted 7 lines · Vojtech Pavlik
Hi!
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 http://linux-input.bkbits.net:8080/linux-input' should also work.
Quoted 6 lines
===================================================================
[email protected], 2002-07-25 16:36:05+02:00, [email protected]
AddEVIOCSABS()ioctl to change the abs* informative values on input devices. This is something the X peoople really wanted.
Grr. I was just working on modifying this ioctl() to return something better than int[5], which is pretty ugly.
How about something along these lines (I have the rest of it - its just trivial changes to evdev.c)?
I could live with curr, min and max instead of *_value, but it would be nicer if it was a bit more descriptive.
Brad
include/linux/input.h Fri Jul 26 00:17:57 2002 renamed from include/linux/input.h Tue Jul 23 21:36:37 2002 +9 -2
@@ -63,6 +63,14 @@ uint16_t version; }; +struct input_absinfo { + int curr_value; + int min_value; + int max_value; + int fuzz; + int flat; +}; + #define EVIOCGVERSION _IOR('E', 0x01, int) /* get driver version */ #define EVIOCGID _IOR('E', 0x02, struct input_devinfo) /* get device ID */ #define EVIOCGREP _IOR('E', 0x03, int[2]) /* get repeat settings */
@@ -79,7 +87,7 @@ #define EVIOCGSND(len) _IOC(_IOC_READ, 'E', 0x1a, len) /* get all sounds status */ #define EVIOCGBIT(ev,len) _IOC(_IOC_READ, 'E', 0x20 + ev, len) /* get event bits */ -#define EVIOCGABS(abs) _IOR('E', 0x40 + abs, int[5]) /* get abs value/limits */ +#define EVIOCGABS(abs) _IOR('E', 0x40 + abs, struct input_absinfo) /* get abs value/limits */ --
http://conf.linux.org.au. 22-25Jan2003. Perth, Australia. Birds in Black.
Re: [cset] Add the EVIOCSABS ioctl for X people.
Quoted 10 lines · Brad Hards
Quoted 4 lines
[email protected], 2002-07-25 16:36:05+02:00, [email protected]
AddEVIOCSABS()ioctl to change the abs* informative values on input devices. This is something the X peoople really wanted.Grr. I was just working on modifying this
ioctl()to return something better than int[5], which is pretty ugly.How about something along these lines (I have the rest of it - its just trivial changes to
evdev.c)?
No problem. Send me a patch that does it for both the EVIOSGABS and EVIOCSABS and I'll take it. You can either just do it in evdev.c, or change every driver to use the struct.
Quoted 2 lines
I could live with curr, min and max instead of
*_value, but it would be nicer if it was a bit more descriptive.
You can make it current, minimum, and maximum, if you wish. I'm a minimalist when it comes to naming, and I don't really think "_value" is bringing much information here. All of them are values after all.
Signature · 2 lines
Vojtech Pavlik SuSE Labs
Re: [cset] Add the EVIOCSABS ioctl for X people.
Quoted 4 lines · Vojtech Pavlik
On Fri, Jul 26, 2002 at 12:47:20AM +1000, Brad Hards wrote:
No problem. Send me a patch that does it for both the EVIOSGABS and EVIOCSABS and I'll take it. You can either just do it inevdev.c, or change every driver to use the struct.
I am just doing the evdev.c (ie the ABI) at this stage. I may look at the internal representation later.
Patch against 2.5.29. Looks OK?
Quoted 6 lines
Quoted 2 lines
I could live with curr, min and max instead of
*_value, but it would be nicer if it was a bit more descriptive.You can make it current, minimum, and maximum, if you wish. I'm a minimalist when it comes to naming, and I don't really think "
_value" is bringing much information here. All of them are values after all.
"current" is a bad idea. I used curr_value.
Also, it is nice if you can retain the attributions (so I can get some ego satisfaction, and so people know who to blame). This is generally done by maintainers - any chance you can do this too?
Brad
Signature · 1 line
http://conf.linux.org.au. 22-25Jan2003. Perth, Australia. Birds in Black.
drivers/input/evdev.c +9 -15
@@ -233,6 +233,7 @@struct evdev_list *list = file->private_data;struct evdev *evdev = list->evdev;struct input_dev *dev = evdev->handle.dev; +struct input_absinfo abs;int t, u;if (!evdev->exist)return -ENODEV ;
@@ -378,26 +379,19 @@int t =_IOC_NR (cmd) &ABS_MAX ; -if (put_user (dev->abs[t], ((int *) arg) +0 ))return -EFAULT ; -if (put_user (dev->absmin[t], ((int *) arg) +1 ))return -EFAULT ; -if (put_user (dev->absmax[t], ((int *) arg) +2 ))return -EFAULT ; -if (put_user (dev->absfuzz[t], ((int *) arg) +3 ))return -EFAULT ; -if (put_user (dev->absflat[t], ((int *) arg) +4 ))return -EFAULT ; + abs.curr_value = dev->abs[t]; + abs.minimum = dev->absmin[t]; + abs.maximum = dev->absmax[t]; + abs.fuzz = dev->absfuzz[t]; + abs.flat = dev->absflat[t]; +return copy_to_user ((void *) arg, &abs,sizeof (struct input_absinfo )); -return 0 ; }if ((_IOC_NR (cmd) & ~ABS_MAX ) ==_IOC_NR (EVIOCSABS (0 ))) { -int t =_IOC_NR (cmd) &ABS_MAX ; - -if (get_user (dev->abs[t], ((int *) arg) +0 ))return -EFAULT ; -if (get_user (dev->absmin[t], ((int *) arg) +1 ))return -EFAULT ; -if (get_user (dev->absmax[t], ((int *) arg) +2 ))return -EFAULT ; -if (get_user (dev->absfuzz[t], ((int *) arg) +3 ))return -EFAULT ; -if (get_user (dev->absflat[t], ((int *) arg) +4 ))return -EFAULT ; - -return 0 ; +return copy_from_user (&abs, (void *) arg,sizeof (struct input_absinfo )); + } }return -EINVAL ;
include/linux/input.h +10 -2
@@ -63,6 +63,14 @@__u16 version; }; +struct input_absinfo { +int curr_value; +int minimum; +int maximum; +int fuzz; +int flat; +}; +#define EVIOCGVERSION _IOR('E', 0x01, int)/* get driver version */ #define EVIOCGID _IOR('E', 0x02, struct input_id)/* get device ID */ #define EVIOCGREP _IOR('E', 0x03, int[2])/* get repeat settings */
@@ -79,8 +87,8 @@#define EVIOCGSND (len) _IOC(_IOC_READ, 'E', 0x1a, len)/* get all sounds status */ #define EVIOCGBIT (ev,len) _IOC(_IOC_READ, 'E', 0x20 + ev, len)/* get event bits */ -#define EVIOCGABS (abs) _IOR('E', 0x40 + abs, int[5])/* get abs value/limits */ -#define EVIOCSABS (abs) _IOW('E', 0xc0 + abs, int[5])/* set abs value/limits */ +#define EVIOCGABS (abs) _IOR('E', 0x40 + abs, struct input_absinfo)/* get abs value/limits */ +#define EVIOCSABS (abs) _IOW('E', 0xc0 + abs, struct input_absinfo)/* set abs value/limits */ #define EVIOCSFF _IOC(_IOC_WRITE, 'E', 0x80, sizeof(struct ff_effect))/* send a force effect to a force feedback device */ #define EVIOCRMFF _IOW('E', 0x81, int)/* Erase a force effect */
Re: [cset] Add the EVIOCSABS ioctl for X people.
Quoted 8 lines · Brad Hards
Quoted 4 lines · Vojtech Pavlik
On Fri, Jul 26, 2002 at 12:47:20AM +1000, Brad Hards wrote:
No problem. Send me a patch that does it for both the EVIOSGABS and EVIOCSABS and I'll take it. You can either just do it inevdev.c, or change every driver to use the struct.I am just doing the
evdev.c(ie the ABI) at this stage. I may look at the internal representation later.
Patch against 2.5.29. Looks OK?
Yes.
Quoted 7 lines
Quoted 6 lines
Quoted 2 lines
I could live with curr, min and max instead of
*_value, but it would be nicer if it was a bit more descriptive.You can make it current, minimum, and maximum, if you wish. I'm a minimalist when it comes to naming, and I don't really think "
_value" is bringing much information here. All of them are values after all."current" is a bad idea. I used
curr_value.
How about just "value" then?
Quoted 3 lines
Also, it is nice if you can retain the attributions (so I can get some ego satisfaction, and so people know who to blame). This is generally done by maintainers - any chance you can do this too?
I'm stil fighting with BK to use something else than my e-mail address in the changesets. So far I've always put the author of the patch into the BK comment at least, but still haven't found how to change the cset author.
If you find out, please tell me. Or anybody else.
Thanks.
Signature · 2 lines
Vojtech Pavlik SuSE Labs
Re: [cset] Add the EVIOCSABS ioctl for X people.
Quoted 3 lines · Vojtech Pavlik
Quoted 1 line · Brad Hards
"current" is a bad idea. I used
curr_value.How about just "value" then?
If you want shorter, "curr" would be more understandable. As you pointed out, all the structure elements are values. Someone else might have a better name than "curr" though.
Quoted 4 lines
I'm stil fighting with BK to use something else than my e-mail address in the changesets. So far I've always put the author of the patch into the BK comment at least, but still haven't found how to change the cset author.
It depends on an environment variable (see BK hacking howto in the 2.5 tree).
Like you, I am still strugling with BK. Hence the conventional patches.
Quoted 3 lines
If you find out, please tell me. Or anybody else.
Thanks.
master.kernel.org:/home/torvalds/BK/tools apparently has some scripts - I don't have access.
Signature · 1 line
http://conf.linux.org.au. 22-25Jan2003. Perth, Australia. Birds in Black.
Re: [cset] Add the EVIOCSABS ioctl for X people.
Quoted 8 lines · Brad Hards
Quoted 4 lines · Vojtech Pavlik
Quoted 1 line · Brad Hards
"current" is a bad idea. I used
curr_value.How about just "value" then?
If you want shorter, "curr" would be more understandable. As you pointed out, all the structure elements are values. Someone else might have a better name than "curr" though.
I just want it simple.
Quoted 6 lines
Quoted 4 lines
I'm stil fighting with BK to use something else than my e-mail address in the changesets. So far I've always put the author of the patch into the BK comment at least, but still haven't found how to change the cset author.
It depends on an environment variable (see BK hacking howto in the 2.5 tree).
Cool, I've read this in the past, but didn't remember this one.
Quoted 8 lines
Like you, I am still strugling with BK. Hence the conventional patches.
Quoted 3 lines
If you find out, please tell me. Or anybody else.
Thanks.
master.kernel.org:/home/torvalds/BK/tools apparently has some scripts - I don't have access.
I don't either.
Signature · 2 lines
Vojtech Pavlik SuSE Labs
Re: [cset] Add the EVIOCSABS ioctl for X people.
In reply to Brad HardsQuoted 2 lines · Brad Hards
master.kernel.org:/home/torvalds/BK/tools apparently has some scripts - I don't have access.
http://gkernel.bkbits.net/BK-kernel-tools
Signature · 2 lines
Russell King ([email protected]) The developer of ARM Linux http://www.arm.linux.org.uk/personal/aboutme.html
Re: [cset] Add the EVIOCSABS ioctl for X people.
Quoted 5 lines · Russell King
Quoted 2 lines · Brad Hards
master.kernel.org:/home/torvalds/BK/tools apparently has some scripts - I don't have access.
404s for me - seems to need a :8080 in there.
http://gkernel.bkbits.net:8080/BK-kernel-tools/src?nav=index.html
Signature · 1 line
http://conf.linux.org.au. 22-25Jan2003. Perth, Australia. Birds in Black.
Re: [cset] Add the EVIOCSABS ioctl for X people.
In reply to Vojtech PavlikQuoted 1 line · Vojtech Pavlik
'bk pull http://linux-input.bkbits.net:8080/linux-input' should also
Make that
bk pull bk://linux-input.bkbits.net/linux-input
or
bk pull http://linux-input.bkbits.net/linux-input
the 8080 port is for BK/Web.
Cheers,
Signature · 2 lines
--- Larry McVoy lm at bitmover.com http://www.bitmover.com/lm
Re: [cset] Add the EVIOCSABS ioctl for X people.
Quoted 10 lines · Larry McVoy
Quoted 1 line · Vojtech Pavlik
'bk pull http://linux-input.bkbits.net:8080/linux-input' should also
Make that
bk pull bk://linux-input.bkbits.net/linux-input
or
bk pull http://linux-input.bkbits.net/linux-inputthe 8080 port is for BK/Web.
Thanks.
Signature · 2 lines
Vojtech Pavlik SuSE Labs