Input update
Subsystems (4)
PATCH 1/1 Input update
Hi!
These patches fix various bugs, and update a few input drivers. They've all been in Andrew's tree for a while. My current input tree has a bunch more changes, but I'd like them to get some more testing first.
Please apply the patches or pull from
bk://kernel.bkbits.net/vojtech/input-for-linus
Thanks,
Signature · 2 lines
Vojtech Pavlik SuSE Labs, SuSE CR
PATCH 1/39 input: Fix a workaround for USB Legacy detected as MUX in i8042.c.
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
[email protected], 2004-03-19 14:56:45+01:00, [email protected]
input: Chips passing MUX detection incorrectly due to USB Legacy support
report MUX version 10.12, not 12.10. Fixed.
i8042.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-)
===================================================================
drivers/input/serio/i8042.c +2 -2
@@ -532,8 +532,8 @@return -1 ;/* Workaround for broken chips which seem to support MUX, but in reality don't. */ -/* They all report version 12.10 */ -if (mux_version ==0xCA ) +/* They all report version 10.12 */ +if (mux_version ==0xAC )return -1 ; printk(KERN_INFO "i8042.c: Detected active multiplexing controller, rev %d.%d.\n",
PATCH 2/39 input: Profusion/ServerWorks chipset workaround in i8042.c for Ingo Molnar.
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
[email protected], 2004-03-26 16:27:05+01:00, [email protected]
input: Profusion/ServerWorks chipset workaround in i8042.c for Ingo Molnar.
i8042.c | 11 ++++++++++- 1 files changed, 10 insertions(+), 1 deletion(-)
===================================================================
drivers/input/serio/i8042.c +10 -1
@@ -474,8 +474,17 @@if (i8042_command (¶m,I8042_CMD_AUX_LOOP ) || param !=0xa9 )return -1 ; param =0xa4 ; -if (i8042_command (¶m,I8042_CMD_AUX_LOOP ) || param ==0x5b ) +if (i8042_command (¶m,I8042_CMD_AUX_LOOP ) || param ==0x5b ) { + +/* +* Do another loop test with the 0x5a value. Doing anything else upsets +* Profusion/ServerWorks OSB4 chipsets. +*/ + + param =0x5a ; +i8042_command (¶m,I8042_CMD_AUX_LOOP );return -1 ; + }if (mux_version) *mux_version = ~param;
PATCH 3/39 input: Fix emulation of mouse reset (0xff) command.
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
[email protected], 2004-04-05 17:39:48+02:00, [email protected]
input: Fix emulation of mouse reset (0xff) command.
mousedev.c | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-)
===================================================================
drivers/input/mousedev.c +3 -3
@@ -391,9 +391,9 @@ list->impsseq =0 ; list->imexseq =0 ; list->mode =0 ; - list->ps2[0 ] =0xaa ; - list->ps2[1 ] =0x00 ; - list->bufsiz =2 ; + list->ps2[1 ] =0xaa ; + list->ps2[2 ] =0x00 ; + list->bufsiz =3 ;break ; }
PATCH 4/39 input: Synaptics driver cleanup
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
[email protected], 2004-04-23 02:28:25-05:00, [email protected]
Input: synaptics driver cleanup
- pack all button data in 2 bytes instead of 48
- adjust the way we extract button data
- query extended capabilities if SYN_EXT_CAP_REQUESTS >= 1 (was == 1) according to Synaptics' addendum to the interfacing guide
- do not announce or report BTN_BACK/BTN_FORWARD unless touchpad has SYN_CAP_FOUR_BUTTON in its capability flags
synaptics.c | 137 +++++++++++++++++++++++++----------------------------------- synaptics.h | 19 ++------ 2 files changed, 65 insertions(+), 91 deletions(-)
===================================================================
drivers/input/mouse/synaptics.c +59 -78
@@ -118,17 +118,31 @@if (synaptics_send_cmd (psmouse,SYN_QUE_CAPABILITIES , cap))return -1 ; - priv->capabilities = (cap[0 ]<<16 ) | (cap[1 ]<<8 ) | cap[2 ]; + priv->capabilities = (cap[0 ] <<16 ) | (cap[1 ] <<8 ) | cap[2 ]; priv->ext_cap =0 ;if (!SYN_CAP_VALID (priv->capabilities))return -1 ; -if (SYN_EXT_CAP_REQUESTS (priv->capabilities)) { +/* +* Unless capExtended is set the rest of the flags should be ignored +*/ +if (!SYN_CAP_EXTENDED (priv->capabilities)) + priv->capabilities =0 ; + +if (SYN_EXT_CAP_REQUESTS (priv->capabilities) >=1 ) {if (synaptics_send_cmd (psmouse,SYN_QUE_EXT_CAPAB , cap)) {printk (KERN_ERR "Synaptics claims to have extended capabilities," " but I'm not able to read them." ); - }else - priv->ext_cap = (cap[0 ]<<16 ) | (cap[1 ]<<8 ) | cap[2 ]; + }else { + priv->ext_cap = (cap[0 ] <<16 ) | (cap[1 ] <<8 ) | cap[2 ]; + +/* +* if nExtBtn is greater than 8 it should be considered +* invalid and treated as 0 +*/ +if (SYN_CAP_MULTI_BUTTON_NO (priv->ext_cap) >8 ) + priv->ext_cap &=0xff0fff ; + } }return 0 ; }
@@ -167,11 +181,10 @@if (SYN_CAP_EXTENDED (priv->capabilities)) {printk (KERN_INFO " Touchpad has extended capability bits\n" ); -if (SYN_CAP_MULTI_BUTTON_NO (priv->ext_cap) && -SYN_CAP_MULTI_BUTTON_NO (priv->ext_cap) <=8 ) +if (SYN_CAP_MULTI_BUTTON_NO (priv->ext_cap))printk (KERN_INFO " -> %d multi-buttons, i.e. besides standard buttons\n" , (int )(SYN_CAP_MULTI_BUTTON_NO (priv->ext_cap))); -else if (SYN_CAP_FOUR_BUTTON (priv->capabilities)) +if (SYN_CAP_FOUR_BUTTON (priv->capabilities))printk (KERN_INFO " -> four buttons\n" );if (SYN_CAP_MULTIFINGER (priv->capabilities))printk (KERN_INFO " -> multifinger detection\n" );
@@ -312,6 +325,8 @@static void set_input_params (struct input_dev *dev,struct synaptics_data *priv) { +int i; +set_bit (EV_ABS , dev->evbit);set_abs_params (dev,ABS_X ,XMIN_NOMINAL ,XMAX_NOMINAL ,0 ,0 );set_abs_params (dev,ABS_Y ,YMIN_NOMINAL ,YMAX_NOMINAL ,0 ,0 );
@@ -326,32 +341,15 @@set_bit (BTN_LEFT , dev->keybit);set_bit (BTN_RIGHT , dev->keybit); -set_bit (BTN_FORWARD , dev->keybit); -set_bit (BTN_BACK , dev->keybit); -if (SYN_CAP_MULTI_BUTTON_NO (priv->ext_cap)) { -switch (SYN_CAP_MULTI_BUTTON_NO (priv->ext_cap) & ~0x01 ) { -default : -/* -* if nExtBtn is greater than 8 it should be considered -* invalid and treated as 0 -*/ -break ; -case 8 : -set_bit (BTN_7 , dev->keybit); -set_bit (BTN_6 , dev->keybit); -case 6 : -set_bit (BTN_5 , dev->keybit); -set_bit (BTN_4 , dev->keybit); -case 4 : -set_bit (BTN_3 , dev->keybit); -set_bit (BTN_2 , dev->keybit); -case 2 : -set_bit (BTN_1 , dev->keybit); -set_bit (BTN_0 , dev->keybit); -break ; - } + +if (SYN_CAP_FOUR_BUTTON (priv->capabilities)) { +set_bit (BTN_FORWARD , dev->keybit); +set_bit (BTN_BACK , dev->keybit); } +for (i =0 ; i <SYN_CAP_MULTI_BUTTON_NO (priv->ext_cap); i++) +set_bit (BTN_0 + i, dev->keybit); +clear_bit (EV_REL , dev->evbit);clear_bit (REL_X , dev->relbit);clear_bit (REL_Y , dev->relbit);
@@ -385,8 +383,8 @@if (old_priv.identity != priv->identity || old_priv.model_id != priv->model_id || old_priv.capabilities != priv->capabilities || - old_priv.ext_cap != priv->ext_cap) -return -1 ; + old_priv.ext_cap != priv->ext_cap) +return -1 ;if (synaptics_set_mode (psmouse,0 )) {printk (KERN_ERR "Unable to initialize Synaptics hardware.\n" );
@@ -432,8 +430,8 @@ priv->pkt_type =SYN_MODEL_NEWABS (priv->model_id) ?SYN_NEWABS :SYN_OLDABS ; -if (SYN_CAP_EXTENDED (priv->capabilities) &&SYN_CAP_PASS_THROUGH (priv->capabilities)) -synaptics_pt_create (psmouse); +if (SYN_CAP_PASS_THROUGH (priv->capabilities)) +synaptics_pt_create (psmouse);print_ident (priv);set_input_params (&psmouse->dev, priv);
@@ -471,17 +469,14 @@ hw->left = (buf[0 ] &0x01 ) ?1 :0 ; hw->right = (buf[0 ] &0x02 ) ?1 :0 ; -if (SYN_CAP_EXTENDED (priv->capabilities) && - (SYN_CAP_FOUR_BUTTON (priv->capabilities))) { - hw->up = ((buf[3 ] &0x01 )) ?1 :0 ; -if (hw->left) - hw->up = !hw->up; - hw->down = ((buf[3 ] &0x02 )) ?1 :0 ; -if (hw->right) - hw->down = !hw->down; + +if (SYN_CAP_FOUR_BUTTON (priv->capabilities)) { + hw->up = ((buf[0 ] ^ buf[3 ]) &0x01 ) ?1 :0 ; + hw->down = ((buf[0 ] ^ buf[3 ]) &0x02 ) ?1 :0 ; } +if (SYN_CAP_MULTI_BUTTON_NO (priv->ext_cap) && - ((buf[3 ] &2 ) ? !hw->right : hw->right)) { + ((buf[0 ] ^ buf[3 ]) &0x02 )) {switch (SYN_CAP_MULTI_BUTTON_NO (priv->ext_cap) & ~0x01 ) {default :/*
@@ -490,17 +485,17 @@*/ break ;case 8 : - hw->b7 = ((buf[5 ] &0x08 )) ?1 :0 ; - hw->b6 = ((buf[4 ] &0x08 )) ?1 :0 ; + hw->ext_buttons |= ((buf[5 ] &0x08 )) ?0x80 :0 ; + hw->ext_buttons |= ((buf[4 ] &0x08 )) ?0x40 :0 ;case 6 : - hw->b5 = ((buf[5 ] &0x04 )) ?1 :0 ; - hw->b4 = ((buf[4 ] &0x04 )) ?1 :0 ; + hw->ext_buttons |= ((buf[5 ] &0x04 )) ?0x20 :0 ; + hw->ext_buttons |= ((buf[4 ] &0x04 )) ?0x10 :0 ;case 4 : - hw->b3 = ((buf[5 ] &0x02 )) ?1 :0 ; - hw->b2 = ((buf[4 ] &0x02 )) ?1 :0 ; + hw->ext_buttons |= ((buf[5 ] &0x02 )) ?0x08 :0 ; + hw->ext_buttons |= ((buf[4 ] &0x02 )) ?0x04 :0 ;case 2 : - hw->b1 = ((buf[5 ] &0x01 )) ?1 :0 ; - hw->b0 = ((buf[4 ] &0x01 )) ?1 :0 ; + hw->ext_buttons |= ((buf[5 ] &0x01 )) ?0x02 :0 ; + hw->ext_buttons |= ((buf[4 ] &0x01 )) ?0x01 :0 ; } } }else {
@@ -525,6 +520,7 @@struct synaptics_hw_state hw;int num_fingers;int finger_width; +int i;synaptics_parse_hw_state (psmouse->packet, priv, &hw);
@@ -570,32 +566,17 @@input_report_key (dev,BTN_TOOL_DOUBLETAP , num_fingers ==2 );input_report_key (dev,BTN_TOOL_TRIPLETAP , num_fingers ==3 ); -input_report_key (dev,BTN_LEFT , hw.left); -input_report_key (dev,BTN_RIGHT , hw.right); -input_report_key (dev,BTN_FORWARD , hw.up); -input_report_key (dev,BTN_BACK , hw.down); -if (SYN_CAP_MULTI_BUTTON_NO (priv->ext_cap)) -switch (SYN_CAP_MULTI_BUTTON_NO (priv->ext_cap) & ~0x01 ) { -default : -/* -* if nExtBtn is greater than 8 it should be considered -* invalid and treated as 0 -*/ -break ; -case 8 : -input_report_key (dev,BTN_7 , hw.b7); -input_report_key (dev,BTN_6 , hw.b6); -case 6 : -input_report_key (dev,BTN_5 , hw.b5); -input_report_key (dev,BTN_4 , hw.b4); -case 4 : -input_report_key (dev,BTN_3 , hw.b3); -input_report_key (dev,BTN_2 , hw.b2); -case 2 : -input_report_key (dev,BTN_1 , hw.b1); -input_report_key (dev,BTN_0 , hw.b0); -break ; - } +input_report_key (dev,BTN_LEFT , hw.left); +input_report_key (dev,BTN_RIGHT , hw.right); + +if (SYN_CAP_FOUR_BUTTON (priv->capabilities)) { +input_report_key (dev,BTN_FORWARD , hw.up); +input_report_key (dev,BTN_BACK , hw.down); + } + +for (i =0 ; i <SYN_CAP_MULTI_BUTTON_NO (priv->ext_cap); i++) +input_report_key (dev,BTN_0 + i, hw.ext_buttons & (1 << i)); +input_sync (dev); }
drivers/input/mouse/synaptics.h +6 -13
@@ -50,7 +50,7 @@#define SYN_CAP_MULTIFINGER (c) ((c) & (1 << 1))#define SYN_CAP_PALMDETECT (c) ((c) & (1 << 0))#define SYN_CAP_VALID (c) ((((c) & 0x00ff00) >> 8) == 0x47) -#define SYN_EXT_CAP_REQUESTS (c) ((((c) & 0x700000) >> 20) == 1) +#define SYN_EXT_CAP_REQUESTS (c) (((c) & 0x700000) >> 20)#define SYN_CAP_MULTI_BUTTON_NO (ec) (((ec) & 0x00f000) >> 12)/* synaptics modes query bits */
@@ -86,18 +86,11 @@int y;int z;int w; -int left; -int right; -int up; -int down; -int b0; -int b1; -int b2; -int b3; -int b4; -int b5; -int b6; -int b7; + unsigned int left:1; + unsigned int right:1; + unsigned int up:1; + unsigned int down:1; +unsigned char ext_buttons; };struct synaptics_data {
PATCH 5/39 input: Support Synaptics touchpads that have separate middle button
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
[email protected], 2004-04-23 02:32:22-05:00, [email protected]
Input: support Synaptics touchpads that have separate middle button
synaptics.c | 11 +++++++++++ synaptics.h | 2 ++ 2 files changed, 13 insertions(+)
===================================================================
drivers/input/mouse/synaptics.c +11 -0
@@ -184,6 +184,8 @@if (SYN_CAP_MULTI_BUTTON_NO (priv->ext_cap))printk (KERN_INFO " -> %d multi-buttons, i.e. besides standard buttons\n" , (int )(SYN_CAP_MULTI_BUTTON_NO (priv->ext_cap))); +if (SYN_CAP_MIDDLE_BUTTON (priv->capabilities)) +printk (KERN_INFO " -> middle button\n" );if (SYN_CAP_FOUR_BUTTON (priv->capabilities))printk (KERN_INFO " -> four buttons\n" );if (SYN_CAP_MULTIFINGER (priv->capabilities))
@@ -342,6 +344,9 @@set_bit (BTN_LEFT , dev->keybit);set_bit (BTN_RIGHT , dev->keybit); +if (SYN_CAP_MIDDLE_BUTTON (priv->capabilities)) +set_bit (BTN_MIDDLE , dev->keybit); +if (SYN_CAP_FOUR_BUTTON (priv->capabilities)) {set_bit (BTN_FORWARD , dev->keybit);set_bit (BTN_BACK , dev->keybit);
@@ -470,6 +475,9 @@ hw->left = (buf[0 ] &0x01 ) ?1 :0 ; hw->right = (buf[0 ] &0x02 ) ?1 :0 ; +if (SYN_CAP_MIDDLE_BUTTON (priv->capabilities)) + hw->middle = ((buf[0 ] ^ buf[3 ]) &0x01 ) ?1 :0 ; +if (SYN_CAP_FOUR_BUTTON (priv->capabilities)) { hw->up = ((buf[0 ] ^ buf[3 ]) &0x01 ) ?1 :0 ; hw->down = ((buf[0 ] ^ buf[3 ]) &0x02 ) ?1 :0 ;
@@ -568,6 +576,9 @@input_report_key (dev,BTN_LEFT , hw.left);input_report_key (dev,BTN_RIGHT , hw.right); + +if (SYN_CAP_MIDDLE_BUTTON (priv->capabilities)) +input_report_key (dev,BTN_MIDDLE , hw.middle);if (SYN_CAP_FOUR_BUTTON (priv->capabilities)) {input_report_key (dev,BTN_FORWARD , hw.up);
drivers/input/mouse/synaptics.h +2 -0
@@ -44,6 +44,7 @@/* synaptics capability bits */ #define SYN_CAP_EXTENDED (c) ((c) & (1 << 23)) +#define SYN_CAP_MIDDLE_BUTTON (c) ((c) & (1 << 18))#define SYN_CAP_PASS_THROUGH (c) ((c) & (1 << 7))#define SYN_CAP_SLEEP (c) ((c) & (1 << 4))#define SYN_CAP_FOUR_BUTTON (c) ((c) & (1 << 3))
@@ -88,6 +89,7 @@int w; unsigned int left:1; unsigned int right:1; + unsigned int middle:1; unsigned int up:1; unsigned int down:1;unsigned char ext_buttons;
PATCH 6/39 input: Pass psmouse_extensions as a parameter
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
[email protected], 2004-04-23 02:33:04-05:00, [email protected]
Input: pass maximum allowed protocol to psmouse_extensions instead of
accessing psmouse_max_proto directly allowing to avoid changing the global parameter when synaptics initialization fails
psmouse-base.c | 19 +++++++++---------- 1 files changed, 9 insertions(+), 10 deletions(-)
===================================================================
drivers/input/mouse/psmouse-base.c +9 -10
@@ -363,7 +363,7 @@* the mouse may have. */ -static int psmouse_extensions (struct psmouse *psmouse) +static int psmouse_extensions (struct psmouse *psmouse,unsigned int max_proto) {int synaptics_hardware =0 ;
@@ -374,12 +374,12 @@/* * Try Synaptics TouchPad */ -if (psmouse_max_proto >PSMOUSE_PS2 &&synaptics_detect (psmouse)) { +if (max_proto >PSMOUSE_PS2 &&synaptics_detect (psmouse)) { synaptics_hardware =1 ; psmouse->vendor ="Synaptics" ; psmouse->name ="TouchPad" ; -if (psmouse_max_proto >PSMOUSE_IMEX ) { +if (max_proto >PSMOUSE_IMEX ) {if (synaptics_init (psmouse) ==0 )return PSMOUSE_SYNAPTICS ;/*
@@ -387,7 +387,7 @@* Unfortunately Logitech/Genius probes confuse some firmware versions so * we'll have to skip them. */ - psmouse_max_proto =PSMOUSE_IMEX ; + max_proto =PSMOUSE_IMEX ; }/* * Make sure that touchpad is in relative mode, gestures (taps) are enabled
@@ -395,7 +395,7 @@synaptics_reset (psmouse); } -if (psmouse_max_proto >PSMOUSE_IMEX &&genius_detect (psmouse)) { +if (max_proto >PSMOUSE_IMEX &&genius_detect (psmouse)) {set_bit (BTN_EXTRA , psmouse->dev.keybit);set_bit (BTN_SIDE , psmouse->dev.keybit);set_bit (REL_WHEEL , psmouse->dev.relbit);
@@ -405,17 +405,16 @@return PSMOUSE_GENPS ; } -if (psmouse_max_proto >PSMOUSE_IMEX ) { +if (max_proto >PSMOUSE_IMEX ) {int type =ps2pp_detect (psmouse);if (type)return type; } -if (psmouse_max_proto >=PSMOUSE_IMPS &&intellimouse_detect (psmouse)) { +if (max_proto >=PSMOUSE_IMPS &&intellimouse_detect (psmouse)) {set_bit (REL_WHEEL , psmouse->dev.relbit); -if (psmouse_max_proto >=PSMOUSE_IMEX && -im_explorer_detect (psmouse)) { +if (max_proto >=PSMOUSE_IMEX &&im_explorer_detect (psmouse)) {set_bit (BTN_SIDE , psmouse->dev.keybit);set_bit (BTN_EXTRA , psmouse->dev.keybit);
@@ -478,7 +477,7 @@* basic PS/2 3-button mouse. */ -return psmouse->type =psmouse_extensions (psmouse); +return psmouse->type =psmouse_extensions (psmouse, psmouse_max_proto); }/*
PATCH 7/39 input: Soften ACK warning in atkbd
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
[email protected], 2004-04-23 02:37:43-05:00, [email protected]
Input: Change spurious ACK warning in atkbd to soften accusation
against XFree86
atkbd.c | 23 ++++++++++++++--------- 1 files changed, 14 insertions(+), 9 deletions(-)
===================================================================
drivers/input/keyboard/atkbd.c +14 -9
@@ -300,15 +300,20 @@case ATKBD_KEY_NULL :break ;case ATKBD_KEY_UNKNOWN : -printk (KERN_WARNING "atkbd.c: Unknown key %s (%s set %d, code %#x on %s).\n" , - atkbd->release ?"released" :"pressed" , - atkbd->translated ?"translated" :"raw" , - atkbd->set, code, serio->phys); -if (atkbd->translated && atkbd->set ==2 && code ==0x7a ) -printk (KERN_WARNING "atkbd.c: This is an XFree86 bug. It shouldn't access" -" hardware directly.\n" ); -else -printk (KERN_WARNING "atkbd.c: Use 'setkeycodes %s%02x <keycode>' to make it known.\n" , code &0x80 ?"e0" :"" , code &0x7f ); +if (data ==ATKBD_RET_ACK || data ==ATKBD_RET_NAK ) { +printk (KERN_WARNING "atkbd.c: Spurious %s on %s. Some program, " +"like XFree86, might be trying access hardware directly.\n" , + data ==ATKBD_RET_ACK ?"ACK" :"NAK" , serio->phys); + }else { +printk (KERN_WARNING "atkbd.c: Unknown key %s " +"(%s set %d, code %#x on %s).\n" , + atkbd->release ?"released" :"pressed" , + atkbd->translated ?"translated" :"raw" , + atkbd->set, code, serio->phys); +printk (KERN_WARNING "atkbd.c: Use 'setkeycodes %s%02x <keycode>' " +"to make it known.\n" , + code &0x80 ?"e0" :"" , code &0x7f ); + }break ;case ATKBD_SCR_1 : scroll =1 - atkbd->release *2 ;
PATCH 8/39 input: Fix trailing whitespace in atkbd
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
[email protected], 2004-04-23 02:39:09-05:00, [email protected]
Input: fix trailing whitespace in atkbd
atkbd.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-)
===================================================================
drivers/input/keyboard/atkbd.c +2 -2
@@ -814,12 +814,12 @@ param[0 ] = (test_bit (LED_SCROLLL , atkbd->dev.led) ?1 :0 ) | (test_bit (LED_NUML , atkbd->dev.led) ?2 :0 ) | (test_bit (LED_CAPSL , atkbd->dev.led) ?4 :0 ); - +if (atkbd_probe (atkbd))return -1 ;if (atkbd->set !=atkbd_set_3 (atkbd))return -1 ; - +atkbd_enable (atkbd);if (atkbd_command (atkbd, param,ATKBD_CMD_SETLEDS ))
PATCH 9/39 input: Remove unneeded fields in atkbd structure, convert to bitfields
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
[email protected], 2004-04-23 02:40:08-05:00, [email protected]
Input: remove unneeded fields in atkbd structure, convert to bitfields
atkbd.c | 22 +++++++++++----------- 1 files changed, 11 insertions(+), 11 deletions(-)
===================================================================
drivers/input/keyboard/atkbd.c +11 -11
@@ -26,7 +26,6 @@#include <linux/input.h> #include <linux/serio.h> #include <linux/workqueue.h> -#include <linux/timer.h> MODULE_AUTHOR ("Vojtech Pavlik <[email protected]>" );MODULE_DESCRIPTION ("AT and PS/2 keyboard driver" );
@@ -173,22 +172,23 @@unsigned char keycode[512 ];struct input_dev dev;struct serio *serio; -struct timer_list timer; +char name[64 ];char phys[32 ]; +unsigned short id; +unsigned char set; + unsigned int translated:1; + unsigned int extra:1; + unsigned int write:1; +unsigned char cmdbuf[4 ];unsigned char cmdcnt; -unsigned char set; -unsigned char extra; -unsigned char release; -int lastkey;volatile signed char ack;unsigned char emul; -unsigned short id; -unsigned char write; -unsigned char translated; -unsigned char resend; -unsigned char bat_xl; + unsigned int resend:1; + unsigned int release:1; + unsigned int bat_xl:1; +unsigned int last;unsigned long time; };
PATCH 10/39 input: Do not process scancodes in atkbd until fully initialized
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
[email protected], 2004-04-23 02:40:48-05:00, [email protected]
Input: Do not generate events from atkbd until keyboard is completely
initialized. It should suppress messages about suprious NAKs when controller's timeout is longer than one in atkbd
atkbd.c | 6 ++++++ 1 files changed, 6 insertions(+)
===================================================================
drivers/input/keyboard/atkbd.c +6 -0
@@ -188,6 +188,7 @@ unsigned int resend:1; unsigned int release:1; unsigned int bat_xl:1; + unsigned int enabled:1;unsigned int last;unsigned long time;
@@ -248,6 +249,9 @@ goto out; } +if (!atkbd->enabled) + goto out; +if (atkbd->translated) { if (atkbd->emul ||
@@ -749,6 +753,8 @@ atkbd->set =2 ; atkbd->id =0xab00 ; } + + atkbd->enabled =1 ;if (atkbd->extra) { atkbd->dev.ledbit[0 ] |=BIT (LED_COMPOSE ) |BIT (LED_SUSPEND ) |BIT (LED_SLEEP ) |BIT (LED_MUTE ) |BIT (LED_MISC );
PATCH 11/39 input: Use reconnect instead of rescan in psmouse if possible
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
[email protected], 2004-04-23 02:41:59-05:00, [email protected]
Input: when getting a new device announce (0xAA 0x00) in psmouse
try reconnecting instead of rescanning to preserve (if possible) the same input device.
psmouse-base.c | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-)
===================================================================
drivers/input/mouse/psmouse-base.c +1 -1
@@ -180,7 +180,7 @@if (psmouse->pktcnt ==2 ) {if (psmouse->packet[1 ] ==PSMOUSE_RET_ID ) { psmouse->state =PSMOUSE_IGNORE ; -serio_rescan (serio); +serio_reconnect (serio); goto out; }if (psmouse->type ==PSMOUSE_SYNAPTICS ) {
PATCH 12/39 input: Move reconnect after errors to generic code in psmouse
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
[email protected], 2004-04-23 02:42:57-05:00, [email protected]
Input: move "reconnect after so many errors" handling from synaptics driver
to psmouse so it can be used by other PS/2 protcol drivers (but so far only synaptics knows how to validate incoming data)
Documentation/kernel-parameters.txt | 4 +- drivers/input/mouse/psmouse-base.c | 61 +++++++++++++++++++++++++----------- drivers/input/mouse/psmouse.h | 9 ++++- drivers/input/mouse/synaptics.c | 24 ++++---------- drivers/input/mouse/synaptics.h | 3 - 5 files changed, 62 insertions(+), 39 deletions(-)
===================================================================
Documentation/kernel-parameters.txt +2 -2
@@ -879,8 +879,8 @@ psmouse.rate= [HW,MOUSE] Set desired mouse report rate, in reports per second. psmouse.resetafter= - [HW,MOUSE] Try to reset Synaptics Touchpad after so many - bad packets (0 = never). + [HW,MOUSE] Try to reset the device after so many bad packets + (0 = never). psmouse.resolution= [HW,MOUSE] Set desired mouse resolution, in dpi. psmouse.smartscroll=
drivers/input/mouse/psmouse-base.c +43 -18
105 lines not on this page · raw message
drivers/input/mouse/psmouse.h +8 -1
@@ -22,6 +22,13 @@#define PSMOUSE_ACTIVATED 1#define PSMOUSE_IGNORE 2 +/* psmouse protocol handler return codes */ +typedef enum { +PSMOUSE_BAD_DATA , +PSMOUSE_GOOD_DATA , +PSMOUSE_FULL_PACKET +}psmouse_ret_t ; +struct psmouse ;struct psmouse_ptport {
@@ -45,6 +52,7 @@unsigned char type;unsigned char model;unsigned long last; +unsigned long out_of_sync;unsigned char state;char acking;volatile char ack;
@@ -69,6 +77,5 @@extern int psmouse_smartscroll;extern unsigned int psmouse_rate; -extern unsigned int psmouse_resetafter;#endif /* _PSMOUSE_H */
drivers/input/mouse/synaptics.c +8 -16
@@ -599,6 +599,9 @@static unsigned char oldabs_mask[] = {0xC0 ,0x60 ,0x00 ,0xC0 ,0x60 };static unsigned char oldabs_rslt[] = {0xC0 ,0x00 ,0x00 ,0x80 ,0x00 }; +if (idx <0 || idx >4 ) +return 0 ; +switch (pkt_type) {case SYN_NEWABS :case SYN_NEWABS_RELAXED :
@@ -629,7 +632,7 @@return SYN_NEWABS_STRICT ; } -void synaptics_process_byte (struct psmouse *psmouse,struct pt_regs *regs) +psmouse_ret_t synaptics_process_byte (struct psmouse *psmouse,struct pt_regs *regs) {struct input_dev *dev = &psmouse->dev;struct synaptics_data *priv = psmouse->private;
@@ -637,11 +640,6 @@input_regs (dev, regs);if (psmouse->pktcnt >=6 ) {/* Full packet received */ -if (priv->out_of_sync) { - priv->out_of_sync =0 ; -printk (KERN_NOTICE "Synaptics driver resynced.\n" ); - } -if (unlikely (priv->pkt_type ==SYN_NEWABS )) priv->pkt_type =synaptics_detect_pkt_type (psmouse);
@@ -649,16 +647,10 @@synaptics_pass_pt_packet (&psmouse->ptport->serio, psmouse->packet); elsesynaptics_process_packet (psmouse ); - psmouse->pktcnt =0 ; - }else if (psmouse->pktcnt && - !synaptics_validate_byte (psmouse->packet, psmouse->pktcnt -1 , priv->pkt_type)) { -printk (KERN_WARNING "Synaptics driver lost sync at byte %d\n" , psmouse->pktcnt); - psmouse->pktcnt =0 ; -if (++priv->out_of_sync == psmouse_resetafter) { - psmouse->state =PSMOUSE_IGNORE ; -printk (KERN_NOTICE "synaptics: issuing reconnect request\n" ); -serio_reconnect (psmouse->serio); - } +return PSMOUSE_FULL_PACKET ; } + +return synaptics_validate_byte (psmouse->packet, psmouse->pktcnt -1 , priv->pkt_type) ? +PSMOUSE_GOOD_DATA :PSMOUSE_BAD_DATA ; }
drivers/input/mouse/synaptics.h +1 -2
@@ -9,7 +9,7 @@#ifndef _SYNAPTICS_H#define _SYNAPTICS_H -extern void synaptics_process_byte (struct psmouse *psmouse,struct pt_regs *regs); +extern psmouse_ret_t synaptics_process_byte (struct psmouse *psmouse,struct pt_regs *regs);extern int synaptics_detect (struct psmouse *psmouse);extern int synaptics_init (struct psmouse *psmouse);extern void synaptics_reset (struct psmouse *psmouse);
@@ -103,7 +103,6 @@unsigned long int identity;/* Identification */ /* Data for normal processing */ -unsigned int out_of_sync;/* # of packets out of sync */ int old_w;/* Previous w value */ unsigned char pkt_type;/* packet type - old, new, etc */ };
PATCH 13/39 input: Add protocol_handler to psmouse structure
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
[email protected], 2004-04-23 02:43:45-05:00, [email protected]
Input: add protocol_handler to psmouse structure to ease adding
new protocols to psmouse module
psmouse-base.c | 4 psmouse.h | 1 synaptics.c | 285 ++++++++++++++++++++++++++++----------------------------- synaptics.h | 1 4 files changed, 147 insertions(+), 144 deletions(-)
===================================================================
drivers/input/mouse/psmouse-base.c +2 -2
@@ -203,8 +203,7 @@ } } - rc = psmouse->type ==PSMOUSE_SYNAPTICS ? -synaptics_process_byte (psmouse, regs) :psmouse_process_byte (psmouse, regs); + rc = psmouse->protocol_handler (psmouse, regs);switch (rc) {case PSMOUSE_BAD_DATA :
@@ -394,6 +393,7 @@ psmouse->vendor ="Generic" ; psmouse->name ="Mouse" ; psmouse->model =0 ; + psmouse->protocol_handler = psmouse_process_byte;/* * Try Synaptics TouchPad
drivers/input/mouse/psmouse.h +1 -0
@@ -60,6 +60,7 @@char devname[64 ];char phys[32 ]; +psmouse_ret_t (*protocol_handler)(struct psmouse *psmouse,struct pt_regs *regs);int (*reconnect)(struct psmouse *psmouse);void (*disconnect)(struct psmouse *psmouse); };
drivers/input/mouse/synaptics.c +144 -141
300 lines not on this page · raw message
drivers/input/mouse/synaptics.h +0 -1
@@ -9,7 +9,6 @@#ifndef _SYNAPTICS_H#define _SYNAPTICS_H -extern psmouse_ret_t synaptics_process_byte (struct psmouse *psmouse,struct pt_regs *regs);extern int synaptics_detect (struct psmouse *psmouse);extern int synaptics_init (struct psmouse *psmouse);extern void synaptics_reset (struct psmouse *psmouse);
PATCH 14/39 input: Add psmouse_sliced_command
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
[email protected], 2004-04-23 02:44:24-05:00, [email protected]
Input: add psmouse_sliced_command (passes extended commands encoded
with 0xE8 to the mouse) and use it in Synaptics and Logitech
driverslogips2pp.c | 12 +----------- psmouse-base.c | 24 ++++++++++++++++++++++++ psmouse.h | 1 + synaptics.c | 28 +++------------------------- 4 files changed, 29 insertions(+), 36 deletions(-)
===================================================================
drivers/input/mouse/logips2pp.c +1 -11
@@ -63,7 +63,6 @@ packet[0 ] &=0x0f ; packet[1 ] =0 ; packet[2 ] =0 ; - } }
@@ -76,17 +75,8 @@static int ps2pp_cmd (struct psmouse *psmouse,unsigned char *param,unsigned char command) { -unsigned char d; -int i; - -if (psmouse_command (psmouse,NULL ,PSMOUSE_CMD_SETSCALE11 )) +if (psmouse_sliced_command (psmouse, command))return -1 ; - -for (i =6 ; i >=0 ; i -=2 ) { - d = (command >> i) &3 ; -if (psmouse_command (psmouse, &d,PSMOUSE_CMD_SETRES )) -return -1 ; - }if (psmouse_command (psmouse, param,PSMOUSE_CMD_POLL ))return -1 ;
drivers/input/mouse/psmouse-base.c +24 -0
@@ -312,6 +312,30 @@/* +* psmouse_sliced_command() sends an extended PS/2 command to the mouse +* using sliced syntax, understood by advanced devices, such as Logitech +* or Synaptics touchpads. The command is encoded as: +* 0xE6 0xE8 rr 0xE8 ss 0xE8 tt 0xE8 uu where (rr*64)+(ss*16)+(tt*4)+uu +* is the command. +*/ +int psmouse_sliced_command (struct psmouse *psmouse,unsigned char command) +{ +int i; + +if (psmouse_command (psmouse,NULL ,PSMOUSE_CMD_SETSCALE11 )) +return -1 ; + +for (i =6 ; i >=0 ; i -=2 ) { +unsigned char d = (command >> i) &3 ; +if (psmouse_command (psmouse, &d,PSMOUSE_CMD_SETRES )) +return -1 ; + } + +return 0 ; +} + + +/* * psmouse_reset() resets the mouse into power-on state. */ int psmouse_reset (struct psmouse *psmouse)
drivers/input/mouse/psmouse.h +1 -0
@@ -74,6 +74,7 @@#define PSMOUSE_SYNAPTICS 7int psmouse_command (struct psmouse *psmouse,unsigned char *param,int command); +int psmouse_sliced_command (struct psmouse *psmouse,unsigned char command);int psmouse_reset (struct psmouse *psmouse);extern int psmouse_smartscroll;
drivers/input/mouse/synaptics.c +3 -25
@@ -44,33 +44,11 @@****************************************************************************/ /* -* Use the Synaptics extended ps/2 syntax to write a special command byte. -* special command: 0xE8 rr 0xE8 ss 0xE8 tt 0xE8 uu where (rr*64)+(ss*16)+(tt*4)+uu -* is the command. A 0xF3 or 0xE9 must follow (see synaptics_send_cmd -* and synaptics_mode_cmd) -*/ -static int synaptics_special_cmd (struct psmouse *psmouse,unsigned char command) -{ -int i; - -if (psmouse_command (psmouse,NULL ,PSMOUSE_CMD_SETSCALE11 )) -return -1 ; - -for (i =6 ; i >=0 ; i -=2 ) { -unsigned char d = (command >> i) &3 ; -if (psmouse_command (psmouse, &d,PSMOUSE_CMD_SETRES )) -return -1 ; - } - -return 0 ; -} - -/* * Send a command to the synpatics touchpad by special commands */ static int synaptics_send_cmd (struct psmouse *psmouse,unsigned char c,unsigned char *param) { -if (synaptics_special_cmd (psmouse, c)) +if (psmouse_sliced_command (psmouse, c))return -1 ;if (psmouse_command (psmouse, param,PSMOUSE_CMD_GETINFO ))return -1 ;
@@ -84,7 +62,7 @@ {unsigned char param[1 ]; -if (synaptics_special_cmd (psmouse, mode)) +if (psmouse_sliced_command (psmouse, mode))return -1 ; param[0 ] =SYN_PS_SET_MODE2 ;if (psmouse_command (psmouse, param,PSMOUSE_CMD_SETRATE ))
@@ -248,7 +226,7 @@struct psmouse *parent = port->driver;char rate_param =SYN_PS_CLIENT_CMD ;/* indicates that we want pass-through port */ -if (synaptics_special_cmd (parent, c)) +if (psmouse_sliced_command (parent, c))return -1 ;if (psmouse_command (parent, &rate_param,PSMOUSE_CMD_SETRATE ))return -1 ;
PATCH 15/39 input: Do not modify device's properties when probing for protocol extensions
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
[email protected], 2004-04-23 02:45:14-05:00, [email protected]
Input: do not modify device's properties when probing for protocol
extensions on reconnect as it may interfere with reconnect process
logips2pp.c | 168 ++++++++++++++++++++++++++++++--------------------------- logips2pp.h | 5 + psmouse-base.c | 78 ++++++++++++++------------ 3 files changed, 137 insertions(+), 114 deletions(-)
===================================================================
drivers/input/mouse/logips2pp.c +91 -77
@@ -89,7 +89,7 @@* enabled if we do nothing to it. Of course I put this in because I want it * disabled :P * 1 - enabled (if previously disabled, also default) -* 0/2 - disabled +* 0/2 - disabled */ static void ps2pp_set_smartscroll (struct psmouse *psmouse)
@@ -103,14 +103,11 @@psmouse_command (psmouse, param,PSMOUSE_CMD_SETRES );psmouse_command (psmouse, param,PSMOUSE_CMD_SETRES ); -if (psmouse_smartscroll ==1 ) - param[0 ] =1 ; -else -if (psmouse_smartscroll >2 ) -return ; - -/* else leave param[0] == 0 to disable */ -psmouse_command (psmouse, param,PSMOUSE_CMD_SETRES ); +if (psmouse_smartscroll <2 ) { +/* 0 - disabled, 1 - enabled */ + param[0 ] = psmouse_smartscroll; +psmouse_command (psmouse, param,PSMOUSE_CMD_SETRES ); + } }/*
@@ -128,111 +125,128 @@psmouse_command (psmouse, ¶m,PSMOUSE_CMD_SETRES ); } + +static int is_model_in_list (unsigned char model,int *model_list) +{ +int i; + +for (i =0 ; model_list[i] !=-1 ; i++) +if (model == model_list[i]) +return 1 ; +return 0 ; +} +/* -* Detect the exact model and features of a PS2++ or PS2T++ Logitech mouse or -* touchpad. +* Set up input device's properties based on the detected mouse model. */ -static int ps2pp_detect_model (struct psmouse *psmouse,unsigned char *param) +static void ps2pp_set_properties (struct psmouse *psmouse,unsigned char protocol, +unsigned char model,unsigned char buttons) { -int i;static int logitech_4btn[] = {12 ,40 ,41 ,42 ,43 ,52 ,73 ,80 ,-1 };static int logitech_wheel[] = {52 ,53 ,75 ,76 ,80 ,81 ,83 ,88 ,112 ,-1 }; -static int logitech_ps2pp[] = {12 ,13 ,40 ,41 ,42 ,43 ,50 ,51 ,52 ,53 ,73 ,75 , -76 ,80 ,81 ,83 ,88 ,96 ,97 ,112 ,-1 };static int logitech_mx[] = {61 ,112 ,-1 }; psmouse->vendor ="Logitech" ; - psmouse->model = ((param[0 ] >>4 ) &0x07 ) | ((param[0 ] <<3 ) &0x78 ); + psmouse->model = model; -if (param[1 ] <3 ) +if (buttons <3 )clear_bit (BTN_MIDDLE , psmouse->dev.keybit); -if (param[1 ] <2 ) +if (buttons <2 )clear_bit (BTN_RIGHT , psmouse->dev.keybit); - psmouse->type =PSMOUSE_PS2 ; +if (protocol ==PSMOUSE_PS2PP ) { -for (i =0 ; logitech_ps2pp[i] !=-1 ; i++) -if (logitech_ps2pp[i] == psmouse->model) - psmouse->type =PSMOUSE_PS2PP ; - -if (psmouse->type ==PSMOUSE_PS2PP ) { - -for (i =0 ; logitech_4btn[i] !=-1 ; i++) -if (logitech_4btn[i] == psmouse->model) -set_bit (BTN_SIDE , psmouse->dev.keybit); - -for (i =0 ; logitech_wheel[i] !=-1 ; i++) -if (logitech_wheel[i] == psmouse->model) { -set_bit (REL_WHEEL , psmouse->dev.relbit); - psmouse->name ="Wheel Mouse" ; - } +if (is_model_in_list (model, logitech_4btn)) +set_bit (BTN_SIDE , psmouse->dev.keybit); + +if (is_model_in_list (model, logitech_wheel)) { +set_bit (REL_WHEEL , psmouse->dev.relbit); + psmouse->name ="Wheel Mouse" ; + } + +if (is_model_in_list (model, logitech_mx)) { +set_bit (BTN_SIDE , psmouse->dev.keybit); +set_bit (BTN_EXTRA , psmouse->dev.keybit); +set_bit (BTN_BACK , psmouse->dev.keybit); +set_bit (BTN_FORWARD , psmouse->dev.keybit); +set_bit (BTN_TASK , psmouse->dev.keybit); + psmouse->name ="MX Mouse" ; + } + } + +if (protocol ==PSMOUSE_PS2TPP ) { +set_bit (REL_WHEEL , psmouse->dev.relbit); +set_bit (REL_HWHEEL , psmouse->dev.relbit); + psmouse->name ="TouchPad 3" ; + } +} -for (i =0 ; logitech_mx[i] !=-1 ; i++) -if (logitech_mx[i] == psmouse->model) { -set_bit (BTN_SIDE , psmouse->dev.keybit); -set_bit (BTN_EXTRA , psmouse->dev.keybit); -set_bit (BTN_BACK , psmouse->dev.keybit); -set_bit (BTN_FORWARD , psmouse->dev.keybit); -set_bit (BTN_TASK , psmouse->dev.keybit); - psmouse->name ="MX Mouse" ; - }/* -* Do Logitech PS2++ / PS2T++ magic init. +* Logitech magic init. Detect whether the mouse is a Logitech one +* and its exact model and try turning on extended protocol for ones +* that support it. */ -if (psmouse->model ==97 ) {/* TouchPad 3 */ +int ps2pp_init (struct psmouse *psmouse,int set_properties) +{ +static int logitech_ps2pp[] = {12 ,13 ,40 ,41 ,42 ,43 ,50 ,51 ,52 ,53 ,73 ,75 , +76 ,80 ,81 ,83 ,88 ,96 ,97 ,112 ,-1 }; +unsigned char param[4 ]; +unsigned char protocol =PSMOUSE_PS2 ; +unsigned char model, buttons; -set_bit (REL_WHEEL , psmouse->dev.relbit); -set_bit (REL_HWHEEL , psmouse->dev.relbit); + param[0 ] =0 ; +psmouse_command (psmouse, param,PSMOUSE_CMD_SETRES ); +psmouse_command (psmouse,NULL ,PSMOUSE_CMD_SETSCALE11 ); +psmouse_command (psmouse,NULL ,PSMOUSE_CMD_SETSCALE11 ); +psmouse_command (psmouse,NULL ,PSMOUSE_CMD_SETSCALE11 ); + param[1 ] =0 ; +psmouse_command (psmouse, param,PSMOUSE_CMD_GETINFO ); - param[0 ] =0x11 ; param[1 ] =0x04 ; param[2 ] =0x68 ;/* Unprotect RAM */ +if (param[1 ] !=0 ) { + model = ((param[0 ] >>4 ) &0x07 ) | ((param[0 ] <<3 ) &0x78 ); + buttons = param[1 ]; +/* +* Do Logitech PS2++ / PS2T++ magic init. +*/ +if (model ==97 ) {/* Touch Pad 3 */ + +/* Unprotect RAM */ + param[0 ] =0x11 ; param[1 ] =0x04 ; param[2 ] =0x68 ;psmouse_command (psmouse, param,0x30d1 ); - param[0 ] =0x11 ; param[1 ] =0x05 ; param[2 ] =0x0b ;/* Enable features */ +/* Enable features */ + param[0 ] =0x11 ; param[1 ] =0x05 ; param[2 ] =0x0b ;psmouse_command (psmouse, param,0x30d1 ); - param[0 ] =0x11 ; param[1 ] =0x09 ; param[2 ] =0xc3 ;/* Enable PS2++ */ +/* Enable PS2++ */ + param[0 ] =0x11 ; param[1 ] =0x09 ; param[2 ] =0xc3 ;psmouse_command (psmouse, param,0x30d1 ); param[0 ] =0 ;if (!psmouse_command (psmouse, param,0x13d1 ) && - param[0 ] ==0x06 && param[1 ] ==0x00 && param[2 ] ==0x14 ) { - psmouse->name ="TouchPad 3" ; -return PSMOUSE_PS2TPP ; + param[0 ] ==0x06 && param[1 ] ==0x00 && param[2 ] ==0x14 ) { + protocol =PSMOUSE_PS2TPP ; } - }else { + }else if (is_model_in_list (model, logitech_ps2pp)) { param[0 ] = param[1 ] = param[2 ] =0 ;ps2pp_cmd (psmouse, param,0x39 );/* Magic knock */ ps2pp_cmd (psmouse, param,0xDB ); -if ((param[0 ] &0x78 ) ==0x48 && (param[1 ] &0xf3 ) ==0xc2 && - (param[2 ] &3 ) == ((param[1 ] >>2 ) &3 )) { -ps2pp_set_smartscroll (psmouse); -return PSMOUSE_PS2PP ; +if ((param[0 ] &0x78 ) ==0x48 && + (param[1 ] &0xf3 ) ==0xc2 && + (param[2 ] &0x03 ) == ((param[1 ] >>2 ) &3 )) { +ps2pp_set_smartscroll (psmouse); + protocol =PSMOUSE_PS2PP ; } } - } - -return 0 ; -} -/* -* Logitech magic init. -*/ -int ps2pp_detect (struct psmouse *psmouse) -{ -unsigned char param[4 ]; - - param[0 ] =0 ; -psmouse_command (psmouse, param,PSMOUSE_CMD_SETRES ); -psmouse_command (psmouse,NULL ,PSMOUSE_CMD_SETSCALE11 ); -psmouse_command (psmouse,NULL ,PSMOUSE_CMD_SETSCALE11 ); -psmouse_command (psmouse,NULL ,PSMOUSE_CMD_SETSCALE11 ); - param[1 ] =0 ; -psmouse_command (psmouse, param,PSMOUSE_CMD_GETINFO ); +if (set_properties) +ps2pp_set_properties (psmouse, protocol, model, buttons); + } -return param[1 ] !=0 ?ps2pp_detect_model (psmouse, param) :0 ; +return protocol; }
drivers/input/mouse/logips2pp.h +3 -2
@@ -10,8 +10,9 @@#ifndef _LOGIPS2PP_H#define _LOGIPS2PP_H -struct psmouse ; +void ps2pp_process_packet (struct psmouse *psmouse);void ps2pp_set_800dpi (struct psmouse *psmouse); -int ps2pp_detect (struct psmouse *psmouse); +int ps2pp_init (struct psmouse *psmouse,int set_properties); +#endif
drivers/input/mouse/psmouse-base.c +43 -35
158 lines not on this page · raw message
PATCH 16/39 input: Allow disabling legacy psaux device
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
[email protected], 2004-04-23 02:46:06-05:00, [email protected]
Input: allow disabling legacy psaux device even for non-embedded systems
Kconfig | 9 ++++++++- 1 files changed, 8 insertions(+), 1 deletion(-)
===================================================================
drivers/input/Kconfig +8 -1
@@ -41,9 +41,16 @@ module will be called mousedev. config INPUT_MOUSEDEV_PSAUX - bool "Provide legacy /dev/psaux device" if EMBEDDED + bool "Provide legacy /dev/psaux device" default y depends on INPUT_MOUSEDEV + ---help--- + Say Y here if you want your mouse also be accessible as char device + 10:1 - /dev/psaux. The data available through /dev/psaux is exactly + the same as the data from /dev/input/mice. + + If unsure, say Y. + config INPUT_MOUSEDEV_SCREEN_X int "Horizontal screen resolution"
PATCH 17/39 input: Serio trailing whitespace fixes
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
[email protected], 2004-04-23 02:48:40-05:00, [email protected]
Input: serio trailing whitespace fixes
serio.c | 12 ++++++------ 1 files changed, 6 insertions(+), 6 deletions(-)
===================================================================
drivers/input/serio/serio.c +6 -6
@@ -11,18 +11,18 @@/* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by -* the Free Software Foundation; either version 2 of the License, or +* the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. -* +* * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. -* +* * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* +* * Should you need to contact me, the author, you can do so either by * e-mail - mail your message to <[email protected]>, or by paper mail: * Vojtech Pavlik, Simunkova 1594, Prague 8, 182 00 Czech Republic
@@ -108,7 +108,7 @@struct serio_event *event;list_for_each_safe (node, next, &serio_event_list) { - event = container_of(node, struct serio_event, node); + event = container_of(node, struct serio_event, node);down (&serio_sem);if (event->serio ==NULL )
@@ -152,7 +152,7 @@do {serio_handle_events (); -wait_event_interruptible (serio_wait, !list_empty (&serio_event_list)); +wait_event_interruptible (serio_wait, !list_empty (&serio_event_list));if (current->flags &PF_FREEZE )refrigerator (PF_FREEZE ); }while (!signal_pending (current));
PATCH 18/39 input: Make serio open and close methods optional
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
[email protected], 2004-04-23 02:50:09-05:00, [email protected]
Input: make serio open and close methods optional
mouse/synaptics.c | 11 ----------- serio/parkbd.c | 11 ----------- serio/q40kbd.c | 11 ----------- serio/serio.c | 5 +++-- serio/serport.c | 10 ++-------- 5 files changed, 5 insertions(+), 43 deletions(-)
===================================================================
drivers/input/mouse/synaptics.c +0 -11
@@ -212,15 +212,6 @@/***************************************************************************** * Synaptics pass-through PS/2 port support ****************************************************************************/ -static int synaptics_pt_open (struct serio *port) -{ -return 0 ; -} - -static void synaptics_pt_close (struct serio *port) -{ -} -static int synaptics_pt_write (struct serio *port,unsigned char c) {struct psmouse *parent = port->driver;
@@ -282,8 +273,6 @@ port->serio.name ="Synaptics pass-through" ; port->serio.phys ="synaptics-pt/serio0" ; port->serio.write = synaptics_pt_write; - port->serio.open = synaptics_pt_open; - port->serio.close = synaptics_pt_close; port->serio.driver = psmouse; port->activate = synaptics_pt_activate;
drivers/input/serio/parkbd.c +0 -11
@@ -86,20 +86,9 @@return 0 ; } -static int parkbd_open (struct serio *port) -{ -return 0 ; -} - -static void parkbd_close (struct serio *port) -{ -} -static struct serio parkbd_port = { .write = parkbd_write, - .open = parkbd_open, - .close = parkbd_close, .name = parkbd_name, .phys = parkbd_phys, };
drivers/input/serio/q40kbd.c +0 -11
@@ -47,23 +47,12 @@MODULE_DESCRIPTION ("Q40 PS/2 keyboard controller driver" );MODULE_LICENSE ("GPL" ); - -static int q40kbd_open (struct serio *port) -{ -return 0 ; -} -static void q40kbd_close (struct serio *port) -{ -} -static struct serio q40kbd_port = { .type =SERIO_8042 , .name ="Q40 kbd port" , .phys ="Q40" , .write =NULL , - .open = q40kbd_open, - .close = q40kbd_close, }; static irqreturn_t q40kbd_interrupt(int irq, void *dev_id,
drivers/input/serio/serio.c +3 -2
@@ -293,7 +293,7 @@int serio_open (struct serio *serio,struct serio_dev *dev) { serio->dev = dev; -if (serio->open (serio)) { +if (serio->open && serio->open (serio)) { serio->dev =NULL ;return -1 ; }
@@ -303,7 +303,8 @@/* called from serio_dev->connect/disconnect methods under serio_sem */ void serio_close (struct serio *serio) { - serio->close (serio); +if (serio->close) + serio->close (serio); serio->dev =NULL ; }
drivers/input/serio/serport.c +2 -8
@@ -48,11 +48,6 @@return -(serport->tty->driver->write (serport->tty,0 , &data,1 ) !=1 ); } -static int serport_serio_open (struct serio *serio) -{ -return 0 ; -} -static void serport_serio_close (struct serio *serio) {struct serport *serport = serio->driver;
@@ -87,7 +82,6 @@ serport->serio.type =SERIO_RS232 ; serport->serio.write = serport_serio_write; - serport->serio.open = serport_serio_open; serport->serio.close = serport_serio_close; serport->serio.driver = serport;
@@ -135,7 +129,7 @@ }/* -* serport_ldisc_read() just waits indefinitely if everything goes well. +* serport_ldisc_read() just waits indefinitely if everything goes well. * However, when the serio driver closes the serio port, it finishes, * returning 0 characters. */
@@ -165,7 +159,7 @@static int serport_ldisc_ioctl (struct tty_struct * tty,struct file * file,unsigned int cmd,unsigned long arg) {struct serport *serport = (struct serport *) tty->disc_data; - +if (cmd ==SPIOCSTYPE )return get_user (serport->serio.type, (unsigned long *) arg);
PATCH 19/39 input: Trailing whitespace fixes
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
[email protected], 2004-04-23 02:50:49-05:00, [email protected]
Input: trailing whitespace fixes
drivers/input/input.c | 40 ++++++++--------- drivers/input/misc/98spkr.c | 4 - drivers/input/misc/pcspkr.c | 4 - drivers/input/misc/sparcspkr.c | 8 +-- drivers/input/misc/uinput.c | 50 ++++++++++----------- drivers/input/touchscreen/gunze.c | 2 drivers/input/touchscreen/h3600_ts_input.c | 66 ++++++++++++++--------------- include/linux/input.h | 2 8 files changed, 88 insertions(+), 88 deletions(-)
===================================================================
drivers/input/input.c +20 -20
@@ -106,7 +106,7 @@ }break ; - +case EV_ABS :if (code >ABS_MAX || !test_bit (code, dev->absbit))
@@ -144,27 +144,27 @@if (code >MSC_MAX || !test_bit (code, dev->mscbit))return ; -if (dev->event) dev->event (dev, type, code, value); - +if (dev->event) dev->event (dev, type, code, value); +break ;case EV_LED : - +if (code >LED_MAX || !test_bit (code, dev->ledbit) || !!test_bit (code, dev->led) == value)return ;change_bit (code, dev->led); -if (dev->event) dev->event (dev, type, code, value); - +if (dev->event) dev->event (dev, type, code, value); +break ;case EV_SND : - +if (code >SND_MAX || !test_bit (code, dev->sndbit))return ; -if (dev->event) dev->event (dev, type, code, value); - +if (dev->event) dev->event (dev, type, code, value); +break ;case EV_REP :
@@ -181,7 +181,7 @@break ; } -if (type !=EV_SYN ) +if (type !=EV_SYN ) dev->sync =0 ;if (dev->grab)
@@ -282,11 +282,11 @@if (id->flags &INPUT_DEVICE_ID_MATCH_VENDOR )if (id->id.vendor != dev->id.vendor)continue ; - +if (id->flags &INPUT_DEVICE_ID_MATCH_PRODUCT )if (id->id.product != dev->id.product)continue ; - +if (id->flags &INPUT_DEVICE_ID_MATCH_VERSION )if (id->id.version != dev->id.version)continue ;
@@ -351,11 +351,11 @@ }if (in_interrupt ()) {printk (KERN_ERR "input.c: calling hotplug from interrupt\n" ); -return ; +return ; }if (!current->fs->root) {printk (KERN_WARNING "input.c: calling hotplug without valid filesystem\n" ); -return ; +return ; }if (!(envp = (char **)kmalloc (20 *sizeof (char *),GFP_KERNEL ))) {printk (KERN_ERR "input.c: not enough memory allocating hotplug environment\n" );
@@ -381,17 +381,17 @@ envp[i++] = scratch; scratch +=sprintf (scratch,"PRODUCT=%x/%x/%x/%x" , - dev->id.bustype, dev->id.vendor, dev->id.product, dev->id.version) +1 ; - + dev->id.bustype, dev->id.vendor, dev->id.product, dev->id.version) +1 ; +if (dev->name) { envp[i++] = scratch; - scratch +=sprintf (scratch,"NAME=%s" , dev->name) +1 ; + scratch +=sprintf (scratch,"NAME=%s" , dev->name) +1 ; }if (dev->phys) { envp[i++] = scratch; - scratch +=sprintf (scratch,"PHYS=%s" , dev->phys) +1 ; - } + scratch +=sprintf (scratch,"PHYS=%s" , dev->phys) +1 ; + }SPRINTF_BIT_A (evbit,"EV=" ,EV_MAX );SPRINTF_BIT_A2 (keybit,"KEY=" ,KEY_MAX ,EV_KEY );
@@ -506,7 +506,7 @@ input_table[handler->minor >>5 ] = handler;list_add_tail (&handler->node, &input_handler_list); - +list_for_each_entry (dev, &input_dev_list, node)if (!handler->blacklist || !input_match_device (handler->blacklist, dev))if ((id =input_match_device (handler->id_table, dev)))
drivers/input/misc/98spkr.c +2 -2
@@ -41,11 +41,11 @@case SND_BELL :if (value) value =1000 ;case SND_TONE :break ;default :return -1 ; - } + }if (value >20 && value <32767 ) count =CLOCK_TICK_RATE / value; - +spin_lock_irqsave (&i8253_beep_lock, flags);if (count) {
drivers/input/misc/pcspkr.c +2 -2
@@ -40,11 +40,11 @@case SND_BELL :if (value) value =1000 ;case SND_TONE :break ;default :return -1 ; - } + }if (value >20 && value <32767 ) count =CLOCK_TICK_RATE / value; - +spin_lock_irqsave (&i8253_beep_lock, flags);if (count) {
drivers/input/misc/sparcspkr.c +4 -4
@@ -53,11 +53,11 @@case SND_BELL :if (value) value =1000 ;case SND_TONE :break ;default :return -1 ; - } + }if (value >20 && value <32767 ) count =1193182 / value; - +spin_lock_irqsave (&beep_lock, flags);/* EBUS speaker only has on/off state, the frequency does not
@@ -108,11 +108,11 @@case SND_BELL :if (value) value =1000 ;case SND_TONE :break ;default :return -1 ; - } + }if (value >20 && value <32767 ) count =1193182 / value; - +spin_lock_irqsave (&beep_lock, flags);if (count) {
drivers/input/misc/uinput.c +25 -25
176 lines not on this page · raw message
drivers/input/touchscreen/gunze.c +1 -1
@@ -124,7 +124,7 @@memset (gunze,0 ,sizeof (struct gunze ));init_input_dev (&gunze->dev); - gunze->dev.evbit[0 ] =BIT (EV_KEY ) |BIT (EV_ABS ); + gunze->dev.evbit[0 ] =BIT (EV_KEY ) |BIT (EV_ABS ); gunze->dev.absbit[0 ] =BIT (ABS_X ) |BIT (ABS_Y ); gunze->dev.keybit[LONG (BTN_TOUCH )] =BIT (BTN_TOUCH );
drivers/input/touchscreen/h3600_ts_input.c +33 -33
200 lines not on this page · raw message
include/linux/input.h +1 -1
@@ -655,7 +655,7 @@struct ff_envelope envelope;/* Only used if waveform == FF_CUSTOM */ -__u32 custom_len;/* Number of samples */ +__u32 custom_len;/* Number of samples */ __s16 *custom_data;/* Buffer of samples */ /* Note: the data pointed by custom_data is copied by the driver. You can * therefore dispose of the memory after the upload/update */
PATCH 20/39 input: Create input_set_abs_params()
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
[email protected], 2004-04-23 02:51:39-05:00, [email protected]
Input: - move set_abs_params from synaptics driver to input and
rename to input_set_abs_params
- convert input_report_* macros into inline functions
- make use of set_abs_params in touchscreen drivers
drivers/input/mouse/synaptics.c | 17 +------- drivers/input/touchscreen/gunze.c | 6 -- drivers/input/touchscreen/h3600_ts_input.c | 14 ++---- include/linux/input.h | 59 ++++++++++++++++++++++++----- 4 files changed, 61 insertions(+), 35 deletions(-)
===================================================================
drivers/input/mouse/synaptics.c +3 -14
@@ -485,25 +485,14 @@/***************************************************************************** * Driver initialization/cleanup functions ****************************************************************************/ - -static inline void set_abs_params (struct input_dev *dev,int axis,int min,int max,int fuzz,int flat) -{ - dev->absmin[axis] = min; - dev->absmax[axis] = max; - dev->absfuzz[axis] = fuzz; - dev->absflat[axis] = flat; - -set_bit (axis, dev->absbit); -} -static void set_input_params (struct input_dev *dev,struct synaptics_data *priv) {int i;set_bit (EV_ABS , dev->evbit); -set_abs_params (dev,ABS_X ,XMIN_NOMINAL ,XMAX_NOMINAL ,0 ,0 ); -set_abs_params (dev,ABS_Y ,YMIN_NOMINAL ,YMAX_NOMINAL ,0 ,0 ); -set_abs_params (dev,ABS_PRESSURE ,0 ,255 ,0 ,0 ); +input_set_abs_params (dev,ABS_X ,XMIN_NOMINAL ,XMAX_NOMINAL ,0 ,0 ); +input_set_abs_params (dev,ABS_Y ,YMIN_NOMINAL ,YMAX_NOMINAL ,0 ,0 ); +input_set_abs_params (dev,ABS_PRESSURE ,0 ,255 ,0 ,0 );set_bit (ABS_TOOL_WIDTH , dev->absbit);set_bit (EV_KEY , dev->evbit);
drivers/input/touchscreen/gunze.c +2 -4
@@ -125,11 +125,9 @@init_input_dev (&gunze->dev); gunze->dev.evbit[0 ] =BIT (EV_KEY ) |BIT (EV_ABS ); - gunze->dev.absbit[0 ] =BIT (ABS_X ) |BIT (ABS_Y ); gunze->dev.keybit[LONG (BTN_TOUCH )] =BIT (BTN_TOUCH ); - - gunze->dev.absmin[ABS_X ] =96 ; gunze->dev.absmin[ABS_Y ] =72 ; - gunze->dev.absmax[ABS_X ] =4000 ; gunze->dev.absmax[ABS_Y ] =3000 ; +input_set_abs_params (&gunze->dev,ABS_X ,96 ,4000 ,0 ,0 ); +input_set_abs_params (&gunze->dev,ABS_Y ,72 ,3000 ,0 ,0 ); gunze->serio = serio; serio->private = gunze;
drivers/input/touchscreen/h3600_ts_input.c +6 -8
@@ -397,17 +397,12 @@kfree (ts);return ; } +/* Now we have things going we setup our input device */ ts->dev.evbit[0 ] =BIT (EV_KEY ) |BIT (EV_ABS ) |BIT (EV_LED ) |BIT (EV_PWR ); - ts->dev.absbit[0 ] =BIT (ABS_X ) |BIT (ABS_Y ); ts->dev.ledbit[0 ] =BIT (LED_SLEEP ); - - ts->dev.absmin[ABS_X ] =60 ; ts->dev.absmin[ABS_Y ] =35 ; - ts->dev.absmax[ABS_X ] =985 ; ts->dev.absmax[ABS_Y ] =1024 ; - ts->dev.absfuzz[ABS_X ] =0 ; ts->dev.absfuzz[ABS_Y ] =0 ; - - ts->serio = serio; - serio->private = ts; +input_set_abs_params (&ts->dev,ABS_X ,60 ,985 ,0 ,0 ); +input_set_abs_params (&ts->dev,ABS_Y ,35 ,1024 ,0 ,0 );set_bit (KEY_RECORD , ts->dev.keybit);set_bit (KEY_Q , ts->dev.keybit);
@@ -421,6 +416,9 @@set_bit (KEY_ENTER , ts->dev.keybit); ts->dev.keybit[LONG (BTN_TOUCH )] |=BIT (BTN_TOUCH ); ts->dev.keybit[LONG (KEY_SUSPEND )] |=BIT (KEY_SUSPEND ); + + ts->serio = serio; + serio->private = ts;sprintf (ts->phys,"%s/input0" , serio->phys);
include/linux/input.h +50 -9
78 lines not on this page · raw message
PATCH 21/39 input: Microtouch USB driver update
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
[email protected], 2004-04-30 18:14:24+02:00, [email protected]
input: Microtouch USB driver update
Changed reset from standard USB dev reset to vendor reset Changed data sent to host from compensated to raw coordinates Eliminated vendor/product module params
Performed multiple successfull tests with an EXII-5010UC
Documentation/usb/mtouchusb.txt | 91 +++++++++++++++------------------- drivers/usb/input/mtouchusb.c | 107 +++++++++++++--------------------------- 2 files changed, 77 insertions(+), 121 deletions(-)
===================================================================
Documentation/usb/mtouchusb.txt +42 -51
@@ -1,26 +1,38 @@ CHANGES -- Created based off of scanner & INSTALL from the original touchscreen +- 0.3 - Created based off of scanner & INSTALL from the original touchscreen driver on freshmeat (http://freshmeat.net/projects/3mtouchscreendriver) - Amended for linux-2.4.18, then 2.4.19 -- Complete rewrite using Linux Input in 2.6.3 +- 0.5 - Complete rewrite using Linux Input in 2.6.3 Unfortunately no calibration support at this time +- 1.4 - Multiple changes to support the EXII 5000UC and house cleaning + Changed reset from standard USB dev reset to vendor reset + Changed data sent to host from compensated to raw coordinates + Eliminated vendor/product module params + Performed multiple successfull tests with an EXII-5010UC -DRIVER NOTES: +SUPPORTED HARDWARE: + + All controllers have the Vendor: 0x0596 & Product: 0x0001 -Installation is simple, you only need to add Linux Input, Linux USB, and the -driver to the kernel. The driver can also be optionally built as a module. -If you have another MicroTouch device that you wish to experiment with -or try using this driver with, but the Vendor and Product ID's are not -coded in, don't despair. If the driver was compiled as a module, you can -pass options to the driver. Simply try: + Controller Description Part Number + ------------------------------------------------------ - /sbin/modprobe mtouchusb vendor=0x#### product=0x**** + USB Capacitive - Pearl Case 14-205 (Discontinued) + USB Capacitive - Black Case 14-124 (Discontinued) + USB Capacitive - No Case 14-206 (Discontinued) + + USB Capacitive - Pearl Case EXII-5010UC + USB Capacitive - Black Case EXII-5030UC + USB Capacitive - No Case EXII-5050UC + +DRIVER NOTES: -If it works, send me the iVendor & iProduct (or a patch) and I will add... +Installation is simple, you only need to add Linux Input, Linux USB, and the +driver to the kernel. The driver can also be optionally built as a module. This driver appears to be one of possible 2 Linux USB Input Touchscreen drivers. Although 3M produces a binary only driver available for
@@ -28,53 +40,28 @@ touchscreen for embedded apps using QTEmbedded, DirectFB, etc. So I feel the logical choice is to use Linux Imput. -A little info about the MicroTouch USB controller (14-206): - -Y is inverted, and the device has a total possible resolution of 0 - 65535. - -Y is inverted by the driver by: +Currently there is no way to calibrate the device via this driver. Even if +the device could be calibrated, the driver pulls to raw coordinate data from +the controller. This means calibration must be performed within the +userspace. + +The controller screen resolution is now 0 to 16384 for both X and Y reporting +the raw touch data. This is the same for the old and new capacitive USB +controllers. + +Perhaps at some point an abstract function will be placed into evdev so +generic functions like calibrations, resets, and vendor information can be +requested from the userspace (And the drivers would handle the vendor specific +tasks). - input.absmin[ABS_Y] = MTOUCHUSB_MAX_YC; - input.absmax[ABS_Y] = MTOUCHUSB_MIN_YC; - -absmin & absmax are also used to scale the data, sine it is rather high -resolution. - - ---------------touch screen area----------------- - I MicroTouch (xmax,ymax) @I - I X I - I ########visible monitor area############## I - I #@ (xmin,ymin) # I - I # # I - I # # I - I # # I - I # # I - I # # I - I Y # # I - I # # I - I # # I - I # # I - I # # I - I # # I - I # (xmax,ymax) @# I - I ########################################## I - I I - I@ MicroTouch (xmin,ymin) I - ------------------------------------------------- - -Currently there is no way to calibrate the device via this driver. Perhaps -at some point an abstract function will be placed into evdev so generic -functions like calibrations, resets, and vendor information can be requested -(And the drivers would handle the vendor specific tasks). - -ADDITIONAL INFORMATION/UPDATES: +ADDITIONAL INFORMATION/UPDATES/X CONFIGURATION EXAMPLE: http://groomlakelabs.com/grandamp/code/microtouch/ TODO: Implement a control urb again to handle requests to and from the device -such as calibration, etc. +such as calibration, etc once/if it becomes available. DISCLAMER:
@@ -83,3 +70,7 @@ http://www.3m.com/3MTouchSystems/downloads/ +THANKS: + +A huge thank you to 3M Touch Systems for the EXII-5010UC controllers for +testing!
drivers/usb/input/mtouchusb.c +35 -72
197 lines not on this page · raw message
PATCH 22/39 input: Trailing whitespace fixes in drivers/input/serio
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
[email protected], 2004-05-10 01:23:48-05:00, [email protected]
Input: trailing whitespace fixes in drivers/input/serio
98kbd-io.c | 4 ++-- ct82c710.c | 8 ++++---- gscps2.c | 22 +++++++++++----------- i8042.c | 26 +++++++++++++------------- parkbd.c | 12 ++++++------ q40kbd.c | 2 +- rpckbd.c | 2 +- 7 files changed, 38 insertions(+), 38 deletions(-)
===================================================================
drivers/input/serio/98kbd-io.c +2 -2
@@ -42,8 +42,8 @@* Register numbers. */ -#define KBD98_COMMAND_REG 0x43 -#define KBD98_STATUS_REG 0x43 +#define KBD98_COMMAND_REG 0x43 +#define KBD98_STATUS_REG 0x43#define KBD98_DATA_REG 0x41spinlock_t kbd98io_lock =SPIN_LOCK_UNLOCKED ;
drivers/input/serio/ct82c710.c +4 -4
@@ -11,18 +11,18 @@/* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by -* the Free Software Foundation; either version 2 of the License, or +* the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. -* +* * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. -* +* * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* +* * Should you need to contact me, the author, you can do so either by * e-mail - mail your message to <[email protected]>, or by paper mail: * Vojtech Pavlik, Simunkova 1594, Prague 8, 182 00 Czech Republic
drivers/input/serio/gscps2.c +11 -11
@@ -16,7 +16,7 @@* This file is subject to the terms and conditions of the GNU General Public * License. See the file "COPYING" in the main directory of this archive * for more details. -* +* * TODO: * - Dino testing (did HP ever shipped a machine on which this port * was usable/enabled ?)
@@ -44,7 +44,7 @@#define PFX "gscps2.c: " -/* +/* * Driver constants */
@@ -222,7 +222,7 @@/** * gscps2_interrupt() - Interruption service routine * -* This function reads received PS/2 bytes and processes them on +* This function reads received PS/2 bytes and processes them on * all interfaces. * The problematic part here is, that the keyboard and mouse PS/2 port * share the same interrupt and it's not possible to send data if any
@@ -240,9 +240,9 @@unsigned long flags;spin_lock_irqsave (&ps2port->lock, flags); -while ( (ps2port->buffer[ps2port->append].str = +while ( (ps2port->buffer[ps2port->append].str =gscps2_readb_status (ps2port->addr)) &GSC_STAT_RBNE ) { - ps2port->buffer[ps2port->append].data = + ps2port->buffer[ps2port->append].data =gscps2_readb_input (ps2port->addr); ps2port->append = ((ps2port->append+1 ) &BUFFER_SIZE ); }
@@ -349,7 +349,7 @@if (!dev->irq)return -ENODEV ; - +/* Offset for DINO PS/2. Works with LASI even */ if (dev->id.sversion ==0x96 ) hpa +=GSC_DINO_OFFSET ;
@@ -368,7 +368,7 @@gscps2_reset (ps2port); ps2port->id =readb (ps2port->addr+GSC_ID ) &0x0f ;snprintf (ps2port->name,sizeof (ps2port->name)-1 ,"%s %s" , - gscps2_serio_port.name, + gscps2_serio_port.name, (ps2port->id ==GSC_ID_KEYBOARD ) ?"keyboard" :"mouse" );memcpy (&ps2port->port, &gscps2_serio_port,sizeof (gscps2_serio_port));
@@ -401,9 +401,9 @@ ps2port->port.phys);serio_register_port (&ps2port->port); - +return 0 ; - + fail:free_irq (dev->irq, ps2port);
@@ -430,7 +430,7 @@list_del (&ps2port->node);iounmap (ps2port->addr);#if 0 -release_mem_region (dev->hpa,GSC_STATUS +4 ); +release_mem_region (dev->hpa,GSC_STATUS +4 );#endif dev_set_drvdata (&dev->dev,NULL );kfree (ps2port);
@@ -441,7 +441,7 @@static struct parisc_device_id gscps2_device_tbl[] = { {HPHW_FIO ,HVERSION_REV_ANY_ID ,HVERSION_ANY_ID ,0x00084 },/* LASI PS/2 */ #ifdef DINO_TESTED - {HPHW_FIO ,HVERSION_REV_ANY_ID ,HVERSION_ANY_ID ,0x00096 },/* DINO PS/2 */ + {HPHW_FIO ,HVERSION_REV_ANY_ID ,HVERSION_ANY_ID ,0x00096 },/* DINO PS/2 */ #endif {0 , }/* 0 terminated list */ };
drivers/input/serio/i8042.c +13 -13
@@ -150,7 +150,7 @@*/ static int i8042_command (unsigned char *param,int command) -{ +{unsigned long flags;int retval =0 , i =0 ;
@@ -161,7 +161,7 @@dbg ("%02x -> i8042 (command)" , command &0xff );i8042_write_command (command &0xff ); } - +if (!retval)for (i =0 ; i < ((command >>12 ) &0xf ); i++) {if ((retval =i8042_wait_write ()))break ;
@@ -172,7 +172,7 @@if (!retval)for (i =0 ; i < ((command >>8 ) &0xf ); i++) {if ((retval =i8042_wait_read ()))break ; -if (i8042_read_status () &I8042_STR_AUXDATA ) +if (i8042_read_status () &I8042_STR_AUXDATA ) param[i] = ~i8042_read_data ();else param[i] =i8042_read_data ();
@@ -415,17 +415,17 @@ }else dfl =0 ;dbg ("%02x <- i8042 (interrupt, aux%d, %d%s%s)" , - data, (str >>6 ), irq, + data, (str >>6 ), irq, dfl &SERIO_PARITY ?", bad parity" :"" , dfl &SERIO_TIMEOUT ?", timeout" :"" );serio_interrupt (i8042_mux_port + ((str >>6 ) &3 ), data, dfl, regs); - + goto irq_ret; }dbg ("%02x <- i8042 (interrupt, %s, %d%s%s)" , - data, (str &I8042_STR_AUXDATA ) ?"aux" :"kbd" , irq, + data, (str &I8042_STR_AUXDATA ) ?"aux" :"kbd" , irq, dfl &SERIO_PARITY ?", bad parity" :"" , dfl &SERIO_TIMEOUT ?", timeout" :"" );
@@ -539,7 +539,7 @@if (i8042_enable_mux_mode (values, &mux_version))return -1 ; - +/* Workaround for broken chips which seem to support MUX, but in reality don't. */ /* They all report version 10.12 */ if (mux_version ==0xAC )
@@ -607,7 +607,7 @@/* * Bit assignment test - filters out PS/2 i8042's in AT mode */ - +if (i8042_command (¶m,I8042_CMD_AUX_DISABLE ))return -1 ;if (i8042_command (¶m,I8042_CMD_CTL_RCTR ) || (~param &I8042_CTR_AUXDIS )) {
@@ -618,7 +618,7 @@if (i8042_command (¶m,I8042_CMD_AUX_ENABLE ))return -1 ;if (i8042_command (¶m,I8042_CMD_CTL_RCTR ) || (param &I8042_CTR_AUXDIS )) -return -1 ; +return -1 ;/* * Disable the interface.
@@ -648,7 +648,7 @@if (i8042_command (&i8042_ctr,I8042_CMD_CTL_WCTR )) {printk (KERN_WARNING "i8042.c: Can't write CTR while registering.\n" ); values->exists =0 ; -return -1 ; +return -1 ; } printk(KERN_INFO "serio: i8042 %s port at %#lx,%#lx irq %d\n",
@@ -877,7 +877,7 @@static int i8042_notify_sys (struct notifier_block *this,unsigned long code,void *unused) { -if (code==SYS_DOWN || code==SYS_HALT ) +if (code ==SYS_DOWN || code ==SYS_HALT )i8042_controller_cleanup ();return NOTIFY_DONE ; }
@@ -1009,13 +1009,13 @@del_timer_sync (&i8042_timer);i8042_controller_cleanup (); - +if (i8042_kbd_values.exists)serio_unregister_port (&i8042_kbd_port);if (i8042_aux_values.exists)serio_unregister_port (&i8042_aux_port); - +for (i =0 ; i <4 ; i++)if (i8042_mux_values[i].exists)serio_unregister_port (i8042_mux_port + i);
drivers/input/serio/parkbd.c +6 -6
@@ -11,18 +11,18 @@/* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by -* the Free Software Foundation; either version 2 of the License, or +* the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. -* +* * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. -* +* * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* +* * Should you need to contact me, the author, you can do so either by * e-mail - mail your message to <[email protected]>, or by paper mail: * Vojtech Pavlik, Simunkova 1594, Prague 8, 182 00 Czech Republic
@@ -104,7 +104,7 @@ parkbd_writing =0 ;parkbd_writelines (3 );return ; - } + }parkbd_writelines (((parkbd_buffer >> parkbd_counter++) &1 ) |2 );
@@ -120,7 +120,7 @@if ((parkbd_counter == parkbd_mode +10 ) ||time_after (jiffies, parkbd_last +HZ /100 )) { parkbd_counter =0 ; parkbd_buffer =0 ; - } + } parkbd_buffer |= (parkbd_readlines () >>1 ) << parkbd_counter++;
drivers/input/serio/q40kbd.c +1 -1
@@ -4,7 +4,7 @@* Copyright (c) 2000-2001 Vojtech Pavlik * * Based on the work of: -* Richard Zidlicky <[email protected]> +* Richard Zidlicky <[email protected]> */ /*
drivers/input/serio/rpckbd.c +1 -1
@@ -98,7 +98,7 @@static void rpckbd_close (struct serio *port) {free_irq (IRQ_KEYBOARDRX , port); -free_irq (IRQ_KEYBOARDTX , port); +free_irq (IRQ_KEYBOARDTX , port); } static struct serio rpckbd_port =
PATCH 23/39 input: kbd98io_interrupt should return irqreturn_t
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
[email protected], 2004-05-10 01:25:24-05:00, [email protected]
Input: kbd98io_interrupt should return irqreturn_t
98kbd-io.c | 5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-)
===================================================================
drivers/input/serio/98kbd-io.c +3 -2
@@ -51,7 +51,7 @@static struct serio kbd98_port;extern struct pt_regs *kbd_pt_regs; -static void kbd98io_interrupt (int irq,void *dev_id,struct pt_regs *regs); +static irqreturn_t kbd98io_interrupt (int irq,void *dev_id,struct pt_regs *regs);/* * kbd98_flush() flushes all data that may be in the keyboard buffers
@@ -143,7 +143,7 @@* to the upper layers. */ -static void kbd98io_interrupt (int irq,void *dev_id,struct pt_regs *regs) +static irqreturn_t kbd98io_interrupt (int irq,void *dev_id,struct pt_regs *regs) {unsigned long flags;unsigned char data;
@@ -154,6 +154,7 @@spin_unlock_irqrestore (&kbd98io_lock, flags);serio_interrupt (&kbd98_port, data,0 , regs); +return IRQ_HANDLED ; }int __init kbd98io_init (void )
PATCH 24/39 input: kbd98_interrupt should return irqreturn_t
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
[email protected], 2004-05-10 01:26:53-05:00, [email protected]
Input: kbd98_interrupt should return irqreturn_t
98kbd.c | 26 +++++++++++++++----------- 1 files changed, 15 insertions(+), 11 deletions(-)
===================================================================
drivers/input/keyboard/98kbd.c +15 -11
@@ -109,8 +109,8 @@struct jis_kbd_conv jis[16 ]; }; -void kbd98_interrupt (struct serio *serio,unsigned char data, -unsigned int flags,struct pt_regs *regs) +irqreturn_t kbd98_interrupt (struct serio *serio,unsigned char data, +unsigned int flags,struct pt_regs *regs) {struct kbd98 *kbd98 = serio->private;unsigned char scancode, keycode;
@@ -119,15 +119,15 @@switch (data) {case KBD98_RET_ACK : kbd98->ack =1 ; -return ; + goto out;case KBD98_RET_NAK : kbd98->ack =-1 ; -return ; + goto out; }if (kbd98->cmdcnt) { kbd98->cmdbuf[--kbd98->cmdcnt] = data; -return ; + goto out; } scancode = data &KBD98_KEY ;
@@ -164,7 +164,7 @@ keycode = kbd98->jis[i].emul[kbd98->shift].keycode;if (keycode ==KBD98_KEY_NULL ) -return ; +break ;if (press) { kbd98->emul.scancode = scancode;
@@ -187,27 +187,31 @@ }input_sync (&kbd98->dev); -return ; +break ;case KEY_CAPSLOCK :input_report_key (&kbd98->dev, keycode,1 );input_sync (&kbd98->dev);input_report_key (&kbd98->dev, keycode,0 );input_sync (&kbd98->dev); -return ; +break ;case KBD98_KEY_NULL : -return ; +break ;case 0 :printk (KERN_WARNING "kbd98.c: Unknown key (scancode %#x) %s.\n" , data &KBD98_KEY , data &KBD98_RELEASE ?"released" :"pressed" ); -return ; +break ;default :input_report_key (&kbd98->dev, keycode, press);input_sync (&kbd98->dev); - } +break ; + } + +out: +return IRQ_HANDLED ; }/*
PATCH 25/39 input: Various fixes for H3600 touchscreen driver
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
[email protected], 2004-05-10 01:29:33-05:00, [email protected]
Input: various fixes for H3600 touchscreen driver
- h3600ts_interrupt, npower_button_handler and action_button_handler should return irqreturn_t
- fix missing argument in h3600ts_process_packet call
- add MODULE_AUTHOR, MODULE_DESCRIPTION and MODULE_LICENSE
- small formatting changes
h3600_ts_input.c | 32 +++++++++++++++++++++----------- 1 files changed, 21 insertions(+), 11 deletions(-)
===================================================================
drivers/input/touchscreen/h3600_ts_input.c +21 -11
@@ -45,6 +45,10 @@#include <asm/arch/hardware.h> #include <asm/arch/irqs.h> +MODULE_AUTHOR ("James Simmons <[email protected]>" ); +MODULE_DESCRIPTION ("H3600 touchscreen driver" ); +MODULE_LICENSE ("GPL" ); +/* * Definitions & global arrays. */
@@ -103,7 +107,7 @@char phys[32 ]; }; -static void action_button_handler (int irq,void *dev_id,struct pt_regs *regs) +static irqreturn_t action_button_handler (int irq,void *dev_id,struct pt_regs *regs) {int down = (GPLR &GPIO_BITSY_ACTION_BUTTON ) ?0 :1 ;struct input_dev *dev = (struct input_dev *) dev_id;
@@ -111,9 +115,11 @@input_regs (dev, regs);input_report_key (dev,KEY_ENTER , down);input_sync (dev); + +return IRQ_HANDLED ; } -static void npower_button_handler (int irq,void *dev_id,struct pt_regs *regs) +static irqreturn_t npower_button_handler (int irq,void *dev_id,struct pt_regs *regs) {int down = (GPLR &GPIO_BITSY_NPOWER_BUTTON ) ?0 :1 ;struct input_dev *dev = (struct input_dev *) dev_id;
@@ -126,6 +132,8 @@input_report_key (dev,KEY_SUSPEND ,1 );input_report_key (dev,KEY_SUSPEND , down);input_sync (dev); + +return IRQ_HANDLED ; }#ifdef CONFIG_PM
@@ -141,7 +149,7 @@* h3600_flite_power: enables or disables power to frontlight, using last bright */ unsigned int h3600_flite_power (struct input_dev *dev,enum flite_pwr pwr) { -unsigned char brightness = ((pwr==FLITE_PWR_OFF ) ?0 :flite_brightness); +unsigned char brightness = (pwr ==FLITE_PWR_OFF ) ?0 : flite_brightness;struct h3600_dev *ts = dev->private;/* Must be in this order */
@@ -317,8 +325,8 @@#define STATE_DATA 2/* state where we decode data */ #define STATE_EOF 3/* state where we decode checksum or EOF */ -static void h3600ts_interrupt (struct serio *serio,unsigned char data, -unsigned int flags) +static irqreturn_t h3600ts_interrupt (struct serio *serio,unsigned char data, +unsigned int flags,struct pt_regs *regs) {struct h3600_dev *ts = serio->private;
@@ -329,7 +337,7 @@case STATE_SOF :if (data ==CHAR_SOF ) state =STATE_ID ; -return ; +break ;case STATE_ID : ts->event = (data &0xf0 ) >>4 ; ts->len = (data &0xf );
@@ -339,7 +347,7 @@break ; } ts->chksum = data; - state=(ts->len >0 ) ?STATE_DATA :STATE_EOF ; + state = (ts->len >0 ) ?STATE_DATA :STATE_EOF ;break ;case STATE_DATA : ts->chksum += data;
@@ -349,13 +357,15 @@break ;case STATE_EOF : state =STATE_SOF ; -if (data ==CHAR_EOF || data == ts->chksum ) -h3600ts_process_packet (ts); +if (data ==CHAR_EOF || data == ts->chksum) +h3600ts_process_packet (ts, regs);break ;default :printk ("Error3\n" );break ; } + +return IRQ_HANDLED ; }/*
@@ -378,8 +388,8 @@init_input_dev (&ts->dev);/* Device specific stuff */ -set_GPIO_IRQ_edge (GPIO_BITSY_ACTION_BUTTON ,GPIO_BOTH_EDGES ); -set_GPIO_IRQ_edge (GPIO_BITSY_NPOWER_BUTTON ,GPIO_RISING_EDGE ); +set_GPIO_IRQ_edge (GPIO_BITSY_ACTION_BUTTON ,GPIO_BOTH_EDGES ); +set_GPIO_IRQ_edge (GPIO_BITSY_NPOWER_BUTTON ,GPIO_RISING_EDGE ); if (request_irq(IRQ_GPIO_BITSY_ACTION_BUTTON, action_button_handler, SA_SHIRQ | SA_INTERRUPT | SA_SAMPLE_RANDOM,
PATCH 26/39 input: Twidjoy module fixes
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
[email protected], 2004-05-10 01:30:08-05:00, [email protected]
Input: twidjoy module
- twidjoy_interrupt should return irqreturn_t
- add MODULE_DESCRIPTION and MODULE_LICENSE
twidjoy.c | 9 ++++++--- 1 files changed, 6 insertions(+), 3 deletions(-)
===================================================================
drivers/input/joystick/twidjoy.c +6 -3
@@ -58,6 +58,9 @@#include <linux/serio.h> #include <linux/init.h> +MODULE_DESCRIPTION ("Handykey Twiddler keyboard as a joystick driver" ); +MODULE_LICENSE ("GPL" ); +/* * Constants. */
@@ -142,7 +145,7 @@* packet processing routine. */ -static void twidjoy_interrupt(struct serio *serio, unsigned char data, unsigned int flags, struc pt_regs *regs) +static irqreturn_t twidjoy_interrupt (struct serio *serio,unsigned char data,unsigned int flags,struct pt_regs *regs) {struct twidjoy *twidjoy = serio->private;
@@ -153,7 +156,7 @@if ((data &0x80 ) ==0 ) twidjoy->idx =0 ;/* this byte starts a new packet */ else if (twidjoy->idx ==0 ) -return ;/* wrong MSB -- ignore this byte */ +return IRQ_HANDLED ;/* wrong MSB -- ignore this byte */ if (twidjoy->idx <TWIDJOY_MAX_LENGTH ) twidjoy->data[twidjoy->idx++] = data;
@@ -163,7 +166,7 @@ twidjoy->idx =0 ; } -return ; +return IRQ_HANDLED ; }/*
PATCH 27/39 input: Trailing whitespace fixes in drivers/input/keyboard
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
[email protected], 2004-05-10 01:31:35-05:00, [email protected]
Input: trailing whitespace fixes in drivers/input/keyboard
98kbd.c | 16 ++++++++-------- Kconfig | 6 +++--- maple_keyb.c | 2 +- sunkbd.c | 16 ++++++++-------- xtkbd.c | 12 ++++++------ 5 files changed, 26 insertions(+), 26 deletions(-)
===================================================================
drivers/input/keyboard/98kbd.c +8 -8
@@ -12,18 +12,18 @@/* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by -* the Free Software Foundation; either version 2 of the License, or +* the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. -* +* * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. -* +* * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* +* */ #include <linux/delay.h>
@@ -43,7 +43,7 @@#define KBD98_KEY 0x7f#define KBD98_RELEASE 0x80 -static unsigned char kbd98_keycode[256 ] = { +static unsigned char kbd98_keycode[256 ] = {1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,10 ,11 ,12 ,13 ,43 ,14 ,15 ,16 ,17 ,18 ,19 ,20 ,21 ,22 ,23 ,24 ,25 ,41 ,26 ,28 ,30 ,31 ,32 ,33 ,34 ,35 ,36 ,37 ,38 ,39 ,40 ,27 ,44 ,45 ,46 ,47 ,48 ,49 ,50 ,
@@ -247,7 +247,7 @@int i; kbd98->cmdcnt = receive; - +if (command &0xff )if (kbd98_sendbyte (kbd98, command &0xff ))return (kbd98->cmdcnt =0 ) -1 ;
@@ -262,7 +262,7 @@for (i =0 ; i < receive; i++) param[i] = kbd98->cmdbuf[(receive -1 ) - i]; -if (kbd98->cmdcnt) +if (kbd98->cmdcnt)return (kbd98->cmdcnt =0 ) -1 ;return 0 ;
@@ -322,7 +322,7 @@memset (kbd98,0 ,sizeof (struct kbd98 )); kbd98->emul.scancode =KBD98_KEY_UNKNOWN ; - + kbd98->dev.evbit[0 ] =BIT (EV_KEY ) |BIT (EV_LED ) |BIT (EV_REP ); kbd98->dev.ledbit[0 ] =BIT (LED_NUML ) |BIT (LED_CAPSL ) |BIT (LED_KANA );
drivers/input/keyboard/Kconfig +3 -3
@@ -62,7 +62,7 @@ Say Y here if you want to use the old IBM PC/XT keyboard (or compatible) on your system. This is only possible with a parallel port keyboard adapter, you cannot connect it to the - keyboard port on a PC that runs Linux. + keyboard port on a PC that runs Linux. To compile this driver as a module, choose M here: the module will be called xtkbd.
@@ -92,7 +92,7 @@ depends on AMIGA && INPUT && INPUT_KEYBOARD help Say Y here if you are running Linux on any AMIGA and have a keyboard - attached. + attached. To compile this driver as a module, choose M here: the module will be called amikbd.
@@ -103,7 +103,7 @@ select SERIO help Say Y here if you want to use the NEC PC-9801/PC-9821 keyboard (or - compatible) on your system. + compatible) on your system. To compile this driver as a module, choose M here: the module will be called 98kbd.
drivers/input/keyboard/maple_keyb.c +1 -1
@@ -139,7 +139,7 @@ kbd->dev.name = dev->product_name; kbd->dev.id.bustype =BUS_MAPLE ; - +input_register_device (&kbd->dev);maple_getcond_callback (dev, dc_kbd_callback,1 ,MAPLE_FUNC_KEYBOARD );
drivers/input/keyboard/sunkbd.c +8 -8
@@ -11,18 +11,18 @@/* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by -* the Free Software Foundation; either version 2 of the License, or +* the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. -* +* * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. -* +* * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* +* * Should you need to contact me, the author, you can do so either by * e-mail - mail your message to <[email protected]>, or by paper mail: * Vojtech Pavlik, Simunkova 1594, Prague 8, 182 00 Czech Republic
@@ -148,7 +148,7 @@case EV_LED : sunkbd->serio->write (sunkbd->serio,SUNKBD_CMD_SETLED ); - sunkbd->serio->write (sunkbd->serio, + sunkbd->serio->write (sunkbd->serio, (!!test_bit (LED_CAPSL , dev->led) <<3 ) | (!!test_bit (LED_SCROLLL , dev->led) <<2 ) | (!!test_bit (LED_COMPOSE , dev->led) <<1 ) | !!test_bit (LED_NUML , dev->led));return 0 ;
@@ -160,7 +160,7 @@case SND_CLICK : sunkbd->serio->write (sunkbd->serio,SUNKBD_CMD_NOCLICK - value);return 0 ; - +case SND_BELL : sunkbd->serio->write (sunkbd->serio,SUNKBD_CMD_BELLOFF - value);return 0 ;
@@ -210,7 +210,7 @@wait_event_interruptible_timeout (sunkbd->wait, sunkbd->reset >=0 ,HZ ); sunkbd->serio->write (sunkbd->serio,SUNKBD_CMD_SETLED ); - sunkbd->serio->write (sunkbd->serio, + sunkbd->serio->write (sunkbd->serio, (!!test_bit (LED_CAPSL , sunkbd->dev.led) <<3 ) | (!!test_bit (LED_SCROLLL , sunkbd->dev.led) <<2 ) | (!!test_bit (LED_COMPOSE , sunkbd->dev.led) <<1 ) | !!test_bit (LED_NUML , sunkbd->dev.led)); sunkbd->serio->write (sunkbd->serio,SUNKBD_CMD_NOCLICK - !!test_bit (SND_CLICK , sunkbd->dev.snd));
@@ -231,7 +231,7 @@if ((serio->type &SERIO_PROTO ) && (serio->type &SERIO_PROTO ) !=SERIO_SUNKBD )return ; - +if (!(sunkbd =kmalloc (sizeof (struct sunkbd ),GFP_KERNEL )))return ;
drivers/input/keyboard/xtkbd.c +6 -6
@@ -11,18 +11,18 @@/* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by -* the Free Software Foundation; either version 2 of the License, or +* the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. -* +* * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. -* +* * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* +* * Should you need to contact me, the author, you can do so either by * e-mail - mail your message to <[email protected]>, or by paper mail: * Vojtech Pavlik, Simunkova 1594, Prague 8, 182 00 Czech Republic
@@ -43,7 +43,7 @@#define XTKBD_KEY 0x7f#define XTKBD_RELEASE 0x80 -static unsigned char xtkbd_keycode[256 ] = { +static unsigned char xtkbd_keycode[256 ] = {0 ,1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,10 ,11 ,12 ,13 ,14 ,15 ,16 ,17 ,18 ,19 ,20 ,21 ,22 ,23 ,24 ,25 ,26 ,27 ,28 ,29 ,30 ,31 ,32 ,33 ,34 ,35 ,36 ,37 ,38 ,39 ,40 ,41 ,42 ,43 ,44 ,45 ,46 ,47 ,
@@ -98,7 +98,7 @@return ;memset (xtkbd,0 ,sizeof (struct xtkbd )); - + xtkbd->dev.evbit[0 ] =BIT (EV_KEY ) |BIT (EV_REP ); xtkbd->serio = serio;
PATCH 28/39 input: Power - add MODULE_LICENSE
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
[email protected], 2004-05-10 01:32:39-05:00, [email protected]
Input: power - add MODULE_LICENSE
power.c | 1 + 1 files changed, 1 insertion(+)
===================================================================
drivers/input/power.c +1 -0
@@ -172,3 +172,4 @@MODULE_AUTHOR ("James Simmons <[email protected]>" );MODULE_DESCRIPTION ("Input Power Management driver" ); +MODULE_LICENSE ("GPL" );
PATCH 29/39 input: Trailing whitespace fixes in drivers/input/joystick
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
[email protected], 2004-05-10 01:34:21-05:00, [email protected]
Input: trailing whitespace fixes in drivers/input/joystick
Kconfig | 16 ++++++++-------- a3d.c | 14 +++++++------- adi.c | 30 +++++++++++++++--------------- amijoy.c | 2 +- analog.c | 42 +++++++++++++++++++++--------------------- cobra.c | 10 +++++----- db9.c | 24 ++++++++++++------------ gamecon.c | 32 ++++++++++++++++---------------- gf2k.c | 12 ++++++------ grip.c | 6 +++--- grip_mp.c | 44 ++++++++++++++++++++++---------------------- guillemot.c | 8 ++++---- iforce/Kconfig | 2 +- iforce/Makefile | 6 +++--- iforce/iforce-ff.c | 4 ++-- iforce/iforce-main.c | 4 ++-- iforce/iforce-packets.c | 4 ++-- iforce/iforce-serio.c | 2 +- iforce/iforce.h | 2 +- interact.c | 8 ++++---- joydump.c | 10 +++++----- magellan.c | 12 ++++++------ sidewinder.c | 20 ++++++++++---------- spaceball.c | 20 ++++++++++---------- spaceorb.c | 18 +++++++++--------- stinger.c | 6 +++--- tmdc.c | 24 ++++++++++++------------ turbografx.c | 20 ++++++++++---------- twidjoy.c | 6 +++--- warrior.c | 32 ++++++++++++++++---------------- 30 files changed, 220 insertions(+), 220 deletions(-)
===================================================================
drivers/input/joystick/Kconfig +8 -8
@@ -22,7 +22,7 @@ supports many extensions, including joysticks with throttle control, with rudders, additional hats and buttons compatible with CH Flightstick Pro, ThrustMaster FCS, 6 and 8 button gamepads, or - Saitek Cyborg joysticks. + Saitek Cyborg joysticks. Please read the file <file:Documentation/input/joystick.txt> which contains more information.
@@ -35,7 +35,7 @@ depends on INPUT && INPUT_JOYSTICK && GAMEPORT help Say Y here if you have an FPGaming or MadCatz controller using the - A3D protocol over the PC gameport. + A3D protocol over the PC gameport. To compile this driver as a module, choose M here: the module will be called a3d.
@@ -45,7 +45,7 @@ depends on INPUT && INPUT_JOYSTICK && GAMEPORT help Say Y here if you have a Logitech controller using the ADI - protocol over the PC gameport. + protocol over the PC gameport. To compile this driver as a module, choose M here: the module will be called adi.
@@ -74,7 +74,7 @@ depends on INPUT && INPUT_JOYSTICK && GAMEPORT help Say Y here if you have a Gravis controller using the GrIP protocol - over the PC gameport. + over the PC gameport. To compile this driver as a module, choose M here: the module will be called grip.
@@ -94,7 +94,7 @@ depends on INPUT && INPUT_JOYSTICK && GAMEPORT help Say Y here if you have a Guillemot joystick using a digital - protocol over the PC gameport. + protocol over the PC gameport. To compile this driver as a module, choose M here: the module will be called guillemot.
@@ -124,7 +124,7 @@ depends on INPUT && INPUT_JOYSTICK && GAMEPORT help Say Y here if you have a ThrustMaster controller using the - DirectConnect (BSP) protocol over the PC gameport. + DirectConnect (BSP) protocol over the PC gameport. To compile this driver as a module, choose M here: the module will be called tmdc.
@@ -137,7 +137,7 @@ select SERIO help Say Y here if you have a Logitech WingMan Warrior joystick connected - to your computer's serial port. + to your computer's serial port. To compile this driver as a module, choose M here: the module will be called warrior.
@@ -253,7 +253,7 @@ help Say Y here if you want to dump data from your joystick into the system log for debugging purposes. Say N if you are making a production - configuration or aren't sure. + configuration or aren't sure. To compile this driver as a module, choose M here: the module will be called joydump.
drivers/input/joystick/a3d.c +7 -7
@@ -39,8 +39,8 @@MODULE_DESCRIPTION ("FP-Gaming Assasin 3D joystick driver" );MODULE_LICENSE ("GPL" ); -#define A3D_MAX_START 400/* 400 us */ -#define A3D_MAX_STROBE 60/* 40 us */ +#define A3D_MAX_START 400/* 400 us */ +#define A3D_MAX_STROBE 60/* 40 us */ #define A3D_DELAY_READ 3/* 3 ms */ #define A3D_MAX_LENGTH 40/* 40*3 bits */ #define A3D_REFRESH_TIME HZ/50/* 20 ms */
@@ -125,7 +125,7 @@input_report_rel (dev,REL_X , ((data[5 ] <<6 ) | (data[6 ] <<3 ) | data[7 ]) - ((data[5 ] &4 ) <<7 ));input_report_rel (dev,REL_Y , ((data[8 ] <<6 ) | (data[9 ] <<3 ) | data[10 ]) - ((data[8 ] &4 ) <<7 )); - +input_report_key (dev,BTN_RIGHT , data[2 ] &1 );input_report_key (dev,BTN_LEFT , data[3 ] &2 );input_report_key (dev,BTN_MIDDLE , data[3 ] &4 );
@@ -201,7 +201,7 @@int i;for (i =0 ; i <4 ; i++) axes[i] = (a3d->axes[i] <254 ) ? a3d->axes[i] :-1 ; - *buttons = a3d->buttons; + *buttons = a3d->buttons;return 0 ; }
@@ -216,7 +216,7 @@if (mode !=GAMEPORT_MODE_COOKED )return -1 ;if (!a3d->used++) -mod_timer (&a3d->timer, jiffies +A3D_REFRESH_TIME ); +mod_timer (&a3d->timer, jiffies +A3D_REFRESH_TIME );return 0 ; }
@@ -239,7 +239,7 @@ {struct a3d *a3d = dev->private;if (!a3d->used++) -mod_timer (&a3d->timer, jiffies +A3D_REFRESH_TIME ); +mod_timer (&a3d->timer, jiffies +A3D_REFRESH_TIME );return 0 ; }
@@ -340,7 +340,7 @@ a3d->adc.open = a3d_adc_open; a3d->adc.close = a3d_adc_close; a3d->adc.cooked_read = a3d_adc_cooked_read; - a3d->adc.fuzz =1 ; + a3d->adc.fuzz =1 ; a3d->adc.name = a3d_names[a3d->mode]; a3d->adc.phys = a3d->adcphys;
drivers/input/joystick/adi.c +15 -15
@@ -11,18 +11,18 @@/* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by -* the Free Software Foundation; either version 2 of the License, or +* the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. -* +* * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. -* +* * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* +* * Should you need to contact me, the author, you can do so either by * e-mail - mail your message to <[email protected]>, or by paper mail: * Vojtech Pavlik, Simunkova 1594, Prague 8, 182 00 Czech Republic
@@ -72,8 +72,8 @@*/ static char *adi_names[] = {"WingMan Extreme Digital" ,"ThunderPad Digital" ,"SideCar" ,"CyberMan 2" , -"WingMan Interceptor" ,"WingMan Formula" ,"WingMan GamePad" , -"WingMan Extreme Digital 3D" ,"WingMan GamePad Extreme" , +"WingMan Interceptor" ,"WingMan Formula" ,"WingMan GamePad" , +"WingMan Extreme Digital 3D" ,"WingMan GamePad Extreme" ,"WingMan GamePad USB" ,"Unknown Device %#x" };static char adi_wmgpe_abs[] = {ABS_X ,ABS_Y ,ABS_HAT0X ,ABS_HAT0Y };
@@ -178,7 +178,7 @@/* * adi_move_bits() detects a possible 2-stream mode, and moves -* the bits accordingly. +* the bits accordingly. */ static void adi_move_bits (struct adi_port *port,int length)
@@ -208,7 +208,7 @@int i;if ((adi->idx += count) > adi->ret)return 0 ;for (i =0 ; i < count; i++) - bits |= ((adi->data[adi->idx - i] >>5 ) &1 ) << i; + bits |= ((adi->data[adi->idx - i] >>5 ) &1 ) << i;return bits; }
@@ -224,12 +224,12 @@int i, t;if (adi->ret < adi->length || adi->id != (adi_get_bits (adi,4 ) | (adi_get_bits (adi,4 ) <<4 ))) -return -1 ; +return -1 ; -for (i =0 ; i < adi->axes10; i++) +for (i =0 ; i < adi->axes10; i++)input_report_abs (dev, *abs++,adi_get_bits (adi,10 )); -for (i =0 ; i < adi->axes8; i++) +for (i =0 ; i < adi->axes8; i++)input_report_abs (dev, *abs++,adi_get_bits (adi,8 ));for (i =0 ; i < adi->buttons && i <63 ; i++) {
@@ -249,7 +249,7 @@for (i =63 ; i < adi->buttons; i++)input_report_key (dev, *key++,adi_get_bits (adi,1 )); - +input_sync (dev);return 0 ;
@@ -294,7 +294,7 @@ {struct adi_port *port = dev->private;if (!port->used++) -mod_timer (&port->timer, jiffies +ADI_REFRESH_TIME ); +mod_timer (&port->timer, jiffies +ADI_REFRESH_TIME );return 0 ; }
@@ -334,7 +334,7 @@return ;if (adi->ret < (t =adi_get_bits (adi,10 ))) { -printk (KERN_WARNING "adi: Short ID packet: reported: %d != read: %d\n" , t, adi->ret); +printk (KERN_WARNING "adi: Short ID packet: reported: %d != read: %d\n" , t, adi->ret);return ; }
@@ -498,7 +498,7 @@adi_init_digital (gameport);adi_read_packet (port); - +if (port->adi[0 ].ret >=ADI_MIN_LEN_LENGTH )adi_move_bits (port,adi_get_bits (port->adi,10 ));
drivers/input/joystick/amijoy.c +1 -1
@@ -46,7 +46,7 @@MODULE_LICENSE ("GPL" );static int amijoy[2 ] = {0 ,1 }; -static int amijoy_nargs; +static int amijoy_nargs;module_param_array_named (map, amijoy, uint, amijoy_nargs,0 );MODULE_PARM_DESC (map,"Map of attached joysticks in form of <a>,<b> (default is 0,1)" );
drivers/input/joystick/analog.c +21 -21
135 lines not on this page · raw message
drivers/input/joystick/cobra.c +5 -5
@@ -72,7 +72,7 @@ r[i] = buf[i] =0 ; t[i] =COBRA_MAX_STROBE ; } - +local_irq_save (flags); u =gameport_read (gameport);
@@ -140,14 +140,14 @@ } -mod_timer (&cobra->timer, jiffies +COBRA_REFRESH_TIME ); +mod_timer (&cobra->timer, jiffies +COBRA_REFRESH_TIME ); }static int cobra_open (struct input_dev *dev) {struct cobra *cobra = dev->private;if (!cobra->used++) -mod_timer (&cobra->timer, jiffies +COBRA_REFRESH_TIME ); +mod_timer (&cobra->timer, jiffies +COBRA_REFRESH_TIME );return 0 ; }
@@ -180,7 +180,7 @@ cobra->exists =cobra_read_packet (gameport, data); -for (i =0 ; i <2 ; i++) +for (i =0 ; i <2 ; i++)if ((cobra->exists >> i) & data[i] &1 ) {printk (KERN_WARNING "cobra.c: Device %d on %s has the Ext bit set. ID is: %d" " Contact [email protected]\n" , i, gameport->phys, (data[i] >>2 ) &7 );
@@ -205,7 +205,7 @@ cobra->dev[i].id.vendor =GAMEPORT_ID_VENDOR_CREATIVE ; cobra->dev[i].id.product =0x0008 ; cobra->dev[i].id.version =0x0100 ; - + cobra->dev[i].evbit[0 ] =BIT (EV_KEY ) |BIT (EV_ABS ); cobra->dev[i].absbit[0 ] =BIT (ABS_X ) |BIT (ABS_Y );
drivers/input/joystick/db9.c +12 -12
@@ -14,14 +14,14 @@/* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by -* the Free Software Foundation; either version 2 of the License, or +* the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. -* +* * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. -* +* * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
@@ -95,7 +95,7 @@struct db9 {struct input_dev dev[DB9_MAX_DEVICES ];struct timer_list timer; -struct pardevice *pd; +struct pardevice *pd;int mode;int used;char phys[2 ][32 ];
@@ -188,7 +188,7 @@ }/* -* db9_saturn_read_packet() reads whole saturn packet at connector +* db9_saturn_read_packet() reads whole saturn packet at connector * and returns device identifier code. */ static unsigned char db9_saturn_read_packet (struct parport *port,unsigned char *data,int type,int powered)
@@ -481,16 +481,16 @@input_report_abs (dev,ABS_X , (data &DB9_RIGHT ?0 :1 ) - (data &DB9_LEFT ?0 :1 ));input_report_abs (dev,ABS_Y , (data &DB9_DOWN ?0 :1 ) - (data &DB9_UP ?0 :1 )); -parport_write_control (port,0x0a ); +parport_write_control (port,0x0a ); -for (i =0 ; i <7 ; i++) { +for (i =0 ; i <7 ; i++) { data =parport_read_data (port); -parport_write_control (port,0x02 ); -parport_write_control (port,0x0a ); +parport_write_control (port,0x02 ); +parport_write_control (port,0x0a );input_report_key (dev, db9_cd32_btn[i], ~data &DB9_FIRE2 ); } -parport_write_control (port,0x00 ); +parport_write_control (port,0x00 );break ; }
@@ -600,7 +600,7 @@ db9->dev[i].evbit[0 ] =BIT (EV_KEY ) |BIT (EV_ABS );for (j =0 ; j < db9_buttons[db9->mode]; j++) -set_bit (db9_btn[db9->mode][j], db9->dev[i].keybit); +set_bit (db9_btn[db9->mode][j], db9->dev[i].keybit);for (j =0 ; j < db9_num_axis[db9->mode]; j++) {set_bit (db9_abs[j], db9->dev[i].absbit);if (j <2 ) {
@@ -635,7 +635,7 @@ {int i, j; -for (i =0 ; i <3 ; i++) +for (i =0 ; i <3 ; i++)if (db9_base[i]) {for (j =0 ; j <min (db9_max_pads[db9_base[i]->mode],DB9_MAX_DEVICES ); j++)input_unregister_device (db9_base[i]->dev + j);
drivers/input/joystick/gamecon.c +16 -16
@@ -15,14 +15,14 @@/* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by -* the Free Software Foundation; either version 2 of the License, or +* the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. -* +* * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. -* +* * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
@@ -70,13 +70,13 @@#define GC_NES4 3#define GC_MULTI 4#define GC_MULTI2 5 -#define GC_N64 6 +#define GC_N64 6#define GC_PSX 7#define GC_MAX 7#define GC_REFRESH_TIME HZ/100 - +struct gc {struct pardevice *pd;struct input_dev dev[5 ];
@@ -104,7 +104,7 @@#define GC_N64_DELAY 133/* delay between transmit request, and response ready (us) */ #define GC_N64_REQUEST 0x1dd1111111ULL/* the request data command (encoded for 000000011) */ #define GC_N64_DWS 3/* delay between write segments (required for sound playback because of ISA DMA) */ -/* GC_N64_DWS > 24 is known to fail */ +/* GC_N64_DWS > 24 is known to fail */ #define GC_N64_POWER_W 0xe2/* power during write (transmit request) */ #define GC_N64_POWER_R 0xfd/* power during read */ #define GC_N64_OUT 0x1d/* output bits to the 4 pads */
@@ -113,8 +113,8 @@/* than 123 us */ #define GC_N64_CLOCK 0x02/* clock bits for read */ -/* -* gc_n64_read_packet() reads an N64 packet. +/* +* gc_n64_read_packet() reads an N64 packet. * Each pad uses one bit per byte. So all pads connected to this port are read in parallel. */
@@ -224,7 +224,7 @@* http://www.dim.com/~mackys/psxmemcard/ps-eng2.txt * http://www.gamesx.com/controldata/psxcont/psxcont.htm * ftp://milano.usal.es/pablo/ -* +* */ #define GC_PSX_DELAY 25/* 25 usec */
@@ -331,13 +331,13 @@ s = gc_status_bit[i];if (s & gc->pads[GC_N64 ] & ~(data[8 ] | data[9 ])) { - +signed char axes[2 ]; axes[0 ] = axes[1 ] =0 ;for (j =0 ; j <8 ; j++) { -if (data[23 - j] & s) axes[0 ] |=1 << j; -if (data[31 - j] & s) axes[1 ] |=1 << j; +if (data[23 - j] & s) axes[0 ] |=1 << j; +if (data[31 - j] & s) axes[1 ] |=1 << j; }input_report_abs (dev + i,ABS_X , axes[0 ]);
@@ -588,7 +588,7 @@break ;case GC_PSX : - + psx =gc_psx_read_packet (gc, data);switch (psx) {
@@ -629,7 +629,7 @@ }sprintf (gc->phys[i],"%s/input%d" , gc->pd->port->name, i); - + gc->dev[i].name = gc_names[config[i +1 ]]; gc->dev[i].phys = gc->phys[i]; gc->dev[i].id.bustype =BUS_PARPORT ;
@@ -646,7 +646,7 @@return NULL ; } -for (i =0 ; i <5 ; i++) +for (i =0 ; i <5 ; i++)if (gc->pads[0 ] & gc_status_bit[i]) {input_register_device (gc->dev + i);printk (KERN_INFO "input: %s on %s\n" , gc->dev[i].name, gc->pd->port->name);
@@ -675,7 +675,7 @@if (gc_base[i]) {for (j =0 ; j <5 ; j++)if (gc_base[i]->pads[0 ] & gc_status_bit[j]) -input_unregister_device (gc_base[i]->dev + j); +input_unregister_device (gc_base[i]->dev + j);parport_unregister_device (gc_base[i]->pd); } }
drivers/input/joystick/gf2k.c +6 -6
@@ -11,18 +11,18 @@/* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by -* the Free Software Foundation; either version 2 of the License, or +* the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. -* +* * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. -* +* * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* +* * Should you need to contact me, the author, you can do so either by * e-mail - mail your message to <[email protected]>, or by paper mail: * Vojtech Pavlik, Simunkova 1594, Prague 8, 182 00 Czech Republic
@@ -223,7 +223,7 @@ {struct gf2k *gf2k = dev->private;if (!gf2k->used++) -mod_timer (&gf2k->timer, jiffies +GF2K_REFRESH ); +mod_timer (&gf2k->timer, jiffies +GF2K_REFRESH );return 0 ; }
@@ -324,7 +324,7 @@for (i =0 ; i < gf2k_axes[gf2k->id]; i++) { gf2k->dev.absmax[gf2k_abs[i]] = (i <2 ) ? gf2k->dev.abs[gf2k_abs[i]] *2 -32 : - gf2k->dev.abs[gf2k_abs[0 ]] + gf2k->dev.abs[gf2k_abs[1 ]] -32 ; + gf2k->dev.abs[gf2k_abs[0 ]] + gf2k->dev.abs[gf2k_abs[1 ]] -32 ; gf2k->dev.absmin[gf2k_abs[i]] =32 ; gf2k->dev.absfuzz[gf2k_abs[i]] =8 ; gf2k->dev.absflat[gf2k_abs[i]] = (i <2 ) ?24 :0 ;
drivers/input/joystick/grip.c +3 -3
@@ -48,8 +48,8 @@#define GRIP_STROBE_GPP 200/* 200 us */ #define GRIP_LENGTH_XT 4#define GRIP_STROBE_XT 64/* 64 us */ -#define GRIP_MAX_CHUNKS_XT 10 -#define GRIP_MAX_BITS_XT 30 +#define GRIP_MAX_CHUNKS_XT 10 +#define GRIP_MAX_BITS_XT 30#define GRIP_REFRESH_TIME HZ/50/* 20 ms */
@@ -153,7 +153,7 @@ buf = (buf <<1 ) | (u >>1 ); t = strobe; i++; - }else + }else if ((((u ^ v) & (v ^ w)) >>1 ) & ~(u | v | w) &1 ) {if (i ==20 ) {
drivers/input/joystick/grip_mp.c +22 -22
156 lines not on this page · raw message
drivers/input/joystick/guillemot.c +4 -4
@@ -45,7 +45,7 @@#define GUILLEMOT_MAX_LENGTH 17/* 17 bytes */ #define GUILLEMOT_REFRESH_TIME HZ/50/* 20 ms */ -static short guillemot_abs_pad[] = +static short guillemot_abs_pad[] = {ABS_X ,ABS_Y ,ABS_THROTTLE ,ABS_RUDDER ,-1 }; static short guillemot_btn_pad[] =
@@ -160,7 +160,7 @@ {struct guillemot *guillemot = dev->private;if (!guillemot->used++) -mod_timer (&guillemot->timer, jiffies +GUILLEMOT_REFRESH_TIME ); +mod_timer (&guillemot->timer, jiffies +GUILLEMOT_REFRESH_TIME );return 0 ; }
@@ -211,7 +211,7 @@if (!guillemot_type[i].name) {printk (KERN_WARNING "guillemot.c: Unknown joystick on %s. [ %02x%02x:%04x, ver %d.%02d ]\n" , gameport->phys, data[12 ], data[13 ], data[11 ], data[14 ], data[15 ]); - goto fail2; + goto fail2; }sprintf (guillemot->phys,"%s/input0" , gameport->phys);
@@ -237,7 +237,7 @@ guillemot->dev.absmax[t] =255 ; } -if (guillemot->type->hat) +if (guillemot->type->hat)for (i =0 ; i <2 ; i++) { t =ABS_HAT0X + i;set_bit (t, guillemot->dev.absbit);
drivers/input/joystick/iforce/Kconfig +1 -1
@@ -17,7 +17,7 @@ depends on JOYSTICK_IFORCE && (JOYSTICK_IFORCE=m || USB=y) && USB help Say Y here if you have an I-Force joystick or steering wheel - connected to your USB port. + connected to your USB port. config JOYSTICK_IFORCE_232 bool "I-Force Serial joysticks and wheels"
drivers/input/joystick/iforce/Makefile +3 -3
@@ -7,14 +7,14 @@ # Goal definition iforce-objs := iforce-ff.o iforce-main.o iforce-packets.o -obj-$(CONFIG_JOYSTICK_IFORCE) += iforce.o +obj-$(CONFIG_JOYSTICK_IFORCE) += iforce.o ifeq ($(CONFIG_JOYSTICK_IFORCE_232),y) - iforce-objs += iforce-serio.o + iforce-objs += iforce-serio.o endif ifeq ($(CONFIG_JOYSTICK_IFORCE_USB),y) - iforce-objs += iforce-usb.o + iforce-objs += iforce-usb.o endif EXTRA_CFLAGS = -Werror-implicit-function-declaration
drivers/input/joystick/iforce/iforce-ff.c +2 -2
@@ -195,7 +195,7 @@ }/* -* Analyse the changes in an effect, and tell if we need to send an condition +* Analyse the changes in an effect, and tell if we need to send an condition * parameter packet */ static int need_condition_modifier (struct iforce * iforce,struct ff_effect * new)
@@ -372,7 +372,7 @@int core_err =0 ;if (!is_update ||need_period_modifier (iforce, effect)) { - param1_err =make_period_modifier (iforce, mod1_chunk, + param1_err =make_period_modifier (iforce, mod1_chunk, is_update, effect->u.periodic.magnitude, effect->u.periodic.offset, effect->u.periodic.period, effect->u.periodic.phase);
drivers/input/joystick/iforce/iforce-main.c +2 -2
@@ -166,7 +166,7 @@else {/* We want to update an effect */ if (!CHECK_OWNERSHIP (effect->id, iforce))return -EACCES ; - +/* Parameter type cannot be updated */ if (effect->type != iforce->core_effects[effect->id].effect.type)return -EINVAL ;
@@ -273,7 +273,7 @@if (test_bit (FF_CORE_IS_USED , iforce->core_effects[i].flags) && current->pid == iforce->core_effects[i].owner) { - +/* Stop effect */ input_report_ff (dev, i,0 );
drivers/input/joystick/iforce/iforce-packets.c +2 -2
@@ -56,7 +56,7 @@int empty;int head, tail;unsigned long flags; - +/* * Update head and tail of xmit buffer */
@@ -108,7 +108,7 @@break ;#endif #ifdef CONFIG_JOYSTICK_IFORCE_USB -case IFORCE_USB : +case IFORCE_USB :if (iforce->usbdev && empty && !test_and_set_bit (IFORCE_XMIT_RUNNING , iforce->xmit_flags)) {
drivers/input/joystick/iforce/iforce-serio.c +1 -1
@@ -62,7 +62,7 @@ cs ^= iforce->xmit.buf[iforce->xmit.tail];XMIT_INC (iforce->xmit.tail,1 ); } - +serio_write (iforce->serio, cs);if (test_and_clear_bit (IFORCE_XMIT_AGAIN , iforce->xmit_flags))
drivers/input/joystick/iforce/iforce.h +1 -1
@@ -141,7 +141,7 @@struct circ_buf xmit;unsigned char xmit_data[XMIT_SIZE ];long xmit_flags[1 ]; - +/* Force Feedback */ wait_queue_head_t wait;struct resource device_memory;
drivers/input/joystick/interact.c +4 -4
@@ -63,7 +63,7 @@char phys[32 ]; }; -static short interact_abs_hhfx[] = +static short interact_abs_hhfx[] = {ABS_RX ,ABS_RY ,ABS_X ,ABS_Y ,ABS_HAT0X ,ABS_HAT0Y ,-1 };static short interact_abs_pp8d[] = {ABS_X ,ABS_Y ,-1 };
@@ -166,7 +166,7 @@case INTERACT_TYPE_PP8D :for (i =0 ; i <2 ; i++) -input_report_abs (dev, interact_abs_pp8d[i], +input_report_abs (dev, interact_abs_pp8d[i], ((data[0 ] >> ((i <<1 ) +20 )) &1 ) - ((data[0 ] >> ((i <<1 ) +21 )) &1 ));for (i =0 ; i <8 ; i++)
@@ -190,7 +190,7 @@ {struct interact *interact = dev->private;if (!interact->used++) -mod_timer (&interact->timer, jiffies +INTERACT_REFRESH_TIME ); +mod_timer (&interact->timer, jiffies +INTERACT_REFRESH_TIME );return 0 ; }
@@ -242,7 +242,7 @@if (!interact_type[i].length) {printk (KERN_WARNING "interact.c: Unknown joystick on %s. [len %d d0 %08x d1 %08x i2 %08x]\n" , gameport->phys, i, data[0 ], data[1 ], data[2 ]); - goto fail2; + goto fail2; }sprintf (interact->phys,"%s/input0" , gameport->phys);
drivers/input/joystick/joydump.c +5 -5
@@ -12,18 +12,18 @@/* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by -* the Free Software Foundation; either version 2 of the License, or +* the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. -* +* * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. -* +* * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* +* * Should you need to contact me, the author, you can do so either by * e-mail - mail your message to <[email protected]>, or by paper mail: * Vojtech Pavlik, Simunkova 1594, Prague 8, 182 00 Czech Republic
@@ -63,7 +63,7 @@printk (KERN_INFO "joydump: | Raw mode not available - trying cooked. |\n" );if (gameport_open (gameport, dev,GAMEPORT_MODE_COOKED )) { - +printk (KERN_INFO "joydump: | Cooked not available either. Failing. |\n" );printk (KERN_INFO "joydump: `-------------------- END -------------------'\n" );return ;
drivers/input/joystick/magellan.c +6 -6
@@ -11,18 +11,18 @@/* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by -* the Free Software Foundation; either version 2 of the License, or +* the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. -* +* * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. -* +* * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* +* * Should you need to contact me, the author, you can do so either by * e-mail - mail your message to <[email protected]>, or by paper mail: * Vojtech Pavlik, Simunkova 1594, Prague 8, 182 00 Czech Republic
@@ -159,7 +159,7 @@memset (magellan,0 ,sizeof (struct magellan )); - magellan->dev.evbit[0 ] =BIT (EV_KEY ) |BIT (EV_ABS ); + magellan->dev.evbit[0 ] =BIT (EV_KEY ) |BIT (EV_ABS );for (i =0 ; i <9 ; i++)set_bit (magellan_buttons[i], magellan->dev.keybit);
@@ -181,7 +181,7 @@ magellan->dev.id.vendor =SERIO_MAGELLAN ; magellan->dev.id.product =0x0001 ; magellan->dev.id.version =0x0100 ; - + serio->private = magellan;if (serio_open (serio, dev)) {
drivers/input/joystick/sidewinder.c +10 -10
@@ -11,18 +11,18 @@/* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by -* the Free Software Foundation; either version 2 of the License, or +* the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. -* +* * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. -* +* * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* +* * Should you need to contact me, the author, you can do so either by * e-mail - mail your message to <[email protected]>, or by paper mail: * Vojtech Pavlik, Simunkova 1594, Prague 8, 182 00 Czech Republic
@@ -176,19 +176,19 @@ buf[i] = v >>5 ;/* Store it */ i++;/* Advance index */ bitout = strobe;/* Extend timeout for next bit */ - } + }if (kick && (~v & u &0x01 )) {/* Falling edge on axis 0 */ sched = kick;/* Schedule second trigger */ kick =0 ;/* Don't schedule next time on falling edge */ pending =1 ;/* Mark schedule */ - } + }if (pending && sched <0 && (i > -SW_END )) {/* Second trigger time */ gameport_trigger (gameport);/* Trigger */ bitout = start;/* Long bit timeout */ pending =0 ;/* Unmark schedule */ - timeout =0 ;/* Switch from global to bit timeouts */ + timeout =0 ;/* Switch from global to bit timeouts */ } }
@@ -482,14 +482,14 @@sw_read_packet (sw->gameport, buf,SW_LENGTH , i);/* Read ID packet, this initializes the stick */ sw->fail =SW_FAIL ; - +return -1 ; }static void sw_timer (unsigned long private) {struct sw *sw = (void *) private; - + sw->reads++;if (sw_read (sw)) sw->bads++;mod_timer (&sw->timer, jiffies +SW_REFRESH );
@@ -653,7 +653,7 @@case 60 : sw->number++;case 45 :/* Ambiguous packet length */ -if (j <=40 ) {/* ID length less or eq 40 -> FSP */ +if (j <=40 ) {/* ID length less or eq 40 -> FSP */ case 43 : sw->type =SW_ID_FSP ;break ;
drivers/input/joystick/spaceball.c +10 -10
@@ -15,18 +15,18 @@/* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by -* the Free Software Foundation; either version 2 of the License, or +* the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. -* +* * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. -* +* * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* +* * Should you need to contact me, the author, you can do so either by * e-mail - mail your message to <[email protected]>, or by paper mail: * Vojtech Pavlik, Simunkova 1594, Prague 8, 182 00 Czech Republic
@@ -59,8 +59,8 @@static int spaceball_axes[] = {ABS_X ,ABS_Z ,ABS_Y ,ABS_RX ,ABS_RZ ,ABS_RY };static char *spaceball_names[] = { -"?" ,"SpaceTec SpaceBall 1003" ,"SpaceTec SpaceBall 2003" ,"SpaceTec SpaceBall 2003B" , -"SpaceTec SpaceBall 2003C" ,"SpaceTec SpaceBall 3003" ,"SpaceTec SpaceBall SpaceController" , +"?" ,"SpaceTec SpaceBall 1003" ,"SpaceTec SpaceBall 2003" ,"SpaceTec SpaceBall 2003B" , +"SpaceTec SpaceBall 2003C" ,"SpaceTec SpaceBall 3003" ,"SpaceTec SpaceBall SpaceController" ,"SpaceTec SpaceBall 3003C" ,"SpaceTec SpaceBall 4000FLX" ,"SpaceTec SpaceBall 4000FLX Lefty" };/*
@@ -96,7 +96,7 @@case 'D' :/* Ball data */ if (spaceball->idx !=15 )return ;for (i =0 ; i <6 ; i++) -input_report_abs (dev, spaceball_axes[i], +input_report_abs (dev, spaceball_axes[i], (__s16)((data[2 * i +3 ] <<8 ) | data[2 * i +2 ]));break ;
@@ -216,7 +216,7 @@return ;memset (spaceball,0 ,sizeof (struct spaceball )); - spaceball->dev.evbit[0 ] =BIT (EV_KEY ) |BIT (EV_ABS ); + spaceball->dev.evbit[0 ] =BIT (EV_KEY ) |BIT (EV_ABS );switch (id) {case SPACEBALL_4000FLX :
@@ -224,7 +224,7 @@ spaceball->dev.keybit[LONG (BTN_0 )] |=BIT (BTN_9 ); spaceball->dev.keybit[LONG (BTN_A )] |=BIT (BTN_A ) |BIT (BTN_B ) |BIT (BTN_C ) |BIT (BTN_MODE );default : - spaceball->dev.keybit[LONG (BTN_0 )] |=BIT (BTN_2 ) |BIT (BTN_3 ) |BIT (BTN_4 ) + spaceball->dev.keybit[LONG (BTN_0 )] |=BIT (BTN_2 ) |BIT (BTN_3 ) |BIT (BTN_4 ) |BIT (BTN_5 ) |BIT (BTN_6 ) |BIT (BTN_7 ) |BIT (BTN_8 );case SPACEBALL_3003C : spaceball->dev.keybit[LONG (BTN_0 )] |=BIT (BTN_1 ) |BIT (BTN_8 );
@@ -251,7 +251,7 @@ spaceball->dev.id.vendor =SERIO_SPACEBALL ; spaceball->dev.id.product = id; spaceball->dev.id.version =0x0100 ; - + serio->private = spaceball;if (serio_open (serio, dev)) {
drivers/input/joystick/spaceorb.c +9 -9
@@ -2,7 +2,7 @@* $Id: spaceorb.c,v 1.15 2002/01/22 20:29:19 vojtech Exp $ * * Copyright (c) 1999-2001 Vojtech Pavlik -* +* * Based on the work of: * David Thompson */
@@ -14,18 +14,18 @@/* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by -* the Free Software Foundation; either version 2 of the License, or +* the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. -* +* * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. -* +* * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* +* * Should you need to contact me, the author, you can do so either by * e-mail - mail your message to <[email protected]>, or by paper mail: * Vojtech Pavlik, Simunkova 1594, Prague 8, 182 00 Czech Republic
@@ -67,7 +67,7 @@static unsigned char spaceorb_xor[] ="SpaceWare" ;static unsigned char *spaceorb_errors[] = {"EEPROM storing 0 failed" ,"Receive queue overflow" ,"Transmit queue timeout" , -"Bad packet" ,"Power brown-out" ,"EEPROM checksum error" ,"Hardware fault" }; +"Bad packet" ,"Power brown-out" ,"EEPROM checksum error" ,"Hardware fault" };/* * spaceorb_process_packet() decodes packets the driver receives from the
@@ -99,7 +99,7 @@case 'D' :/* Ball + button data */ if (spaceorb->idx !=12 )return ; -for (i =0 ; i <9 ; i++) spaceorb->data[i+2 ] ^= spaceorb_xor[i]; +for (i =0 ; i <9 ; i++) spaceorb->data[i+2 ] ^= spaceorb_xor[i]; axes[0 ] = ( data[2 ] <<3 ) | (data[3 ] >>4 ); axes[1 ] = ((data[3 ] &0x0f ) <<6 ) | (data[4 ] >>1 ); axes[2 ] = ((data[4 ] &0x01 ) <<9 ) | (data[5 ] <<2 ) | (data[4 ] >>5 );
@@ -174,7 +174,7 @@return ;memset (spaceorb,0 ,sizeof (struct spaceorb )); - spaceorb->dev.evbit[0 ] =BIT (EV_KEY ) |BIT (EV_ABS ); + spaceorb->dev.evbit[0 ] =BIT (EV_KEY ) |BIT (EV_ABS );for (i =0 ; i <6 ; i++)set_bit (spaceorb_buttons[i], spaceorb->dev.keybit);
@@ -198,7 +198,7 @@ spaceorb->dev.id.vendor =SERIO_SPACEORB ; spaceorb->dev.id.product =0x0001 ; spaceorb->dev.id.version =0x0100 ; - + serio->private = spaceorb;if (serio_open (serio, dev)) {
drivers/input/joystick/stinger.c +3 -3
@@ -147,7 +147,7 @@memset (stinger,0 ,sizeof (struct stinger )); - stinger->dev.evbit[0 ] =BIT (EV_KEY ) |BIT (EV_ABS ); + stinger->dev.evbit[0 ] =BIT (EV_KEY ) |BIT (EV_ABS ); stinger->dev.keybit[LONG (BTN_A )] =BIT (BTN_A ) |BIT (BTN_B ) |BIT (BTN_C ) |BIT (BTN_X ) | \BIT (BTN_Y ) |BIT (BTN_Z ) |BIT (BTN_TL ) |BIT (BTN_TR ) | \BIT (BTN_START ) |BIT (BTN_SELECT );
@@ -164,8 +164,8 @@ stinger->dev.id.version =0x0100 ;for (i =0 ; i <2 ; i++) { - stinger->dev.absmax[ABS_X +i] =64 ; - stinger->dev.absmin[ABS_X +i] =-64 ; + stinger->dev.absmax[ABS_X +i] =64 ; + stinger->dev.absmin[ABS_X +i] =-64 ; stinger->dev.absflat[ABS_X +i] =4 ; }
drivers/input/joystick/tmdc.c +12 -12
@@ -4,7 +4,7 @@* Copyright (c) 1998-2001 Vojtech Pavlik * * Based on the work of: -* Trystan Larey-Williams +* Trystan Larey-Williams */ /*
@@ -14,18 +14,18 @@/* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by -* the Free Software Foundation; either version 2 of the License, or +* the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. -* +* * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. -* +* * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* +* * Should you need to contact me, the author, you can do so either by * e-mail - mail your message to <[email protected]>, or by paper mail: * Vojtech Pavlik, Simunkova 1594, Prague 8, 182 00 Czech Republic
@@ -58,7 +58,7 @@#define TMDC_BYTE_REV 11#define TMDC_BYTE_DEF 12 -#define TMDC_ABS 7 +#define TMDC_ABS 7#define TMDC_ABS_HAT 4#define TMDC_BTN 16
@@ -104,7 +104,7 @@unsigned char btno[2 ][4 ];int used;int reads; -int bads; +int bads;unsigned char exists; };
@@ -127,7 +127,7 @@local_irq_save (flags);gameport_trigger (gameport); - + w =gameport_read (gameport) >>4 ; do {
@@ -148,7 +148,7 @@ } data[k][i[k]] |= (~v &1 ) << (j[k]++ -1 );/* Data bit */ } - t[k]--; + t[k]--; } }while (t[0 ] >0 || t[1 ] >0 );
@@ -175,7 +175,7 @@ bad =1 ; else - for (j = 0; j < 2; j++) + for (j = 0; j < 2; j++)if (r & (1 << j) & tmdc->exists) {if (data[j][TMDC_BYTE_ID ] != tmdc->mode[j]) {
@@ -227,7 +227,7 @@ {struct tmdc *tmdc = dev->private;if (!tmdc->used++) -mod_timer (&tmdc->timer, jiffies +TMDC_REFRESH_TIME ); +mod_timer (&tmdc->timer, jiffies +TMDC_REFRESH_TIME );return 0 ; }
@@ -356,7 +356,7 @@struct tmdc *tmdc = gameport->private;int i;for (i =0 ; i <2 ; i++) -if (tmdc->exists & (1 << i)) +if (tmdc->exists & (1 << i))input_unregister_device (tmdc->dev + i);gameport_close (gameport);kfree (tmdc);
drivers/input/joystick/turbografx.c +10 -10
@@ -14,18 +14,18 @@/* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by -* the Free Software Foundation; either version 2 of the License, or +* the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. -* +* * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. -* +* * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* +* * Should you need to contact me, the author, you can do so either by * e-mail - mail your message to <[email protected]>, or by paper mail: * Vojtech Pavlik, Simunkova 1594, Prague 8, 182 00 Czech Republic
@@ -65,7 +65,7 @@#define TGFX_TRIGGER 0x08#define TGFX_UP 0x10 -#define TGFX_DOWN 0x20 +#define TGFX_DOWN 0x20#define TGFX_LEFT 0x40#define TGFX_RIGHT 0x80
@@ -126,7 +126,7 @@if (!tgfx->used++) {parport_claim (tgfx->pd);parport_write_control (tgfx->pd->port,0x04 ); -mod_timer (&tgfx->timer, jiffies +TGFX_REFRESH_TIME ); +mod_timer (&tgfx->timer, jiffies +TGFX_REFRESH_TIME ); }return 0 ; }
@@ -173,7 +173,7 @@memset (tgfx,0 ,sizeof (struct tgfx )); tgfx->pd =parport_register_device (pp,"turbografx" ,NULL ,NULL ,NULL ,PARPORT_DEV_EXCL ,NULL ); - +parport_put_port (pp);if (!tgfx->pd) {
@@ -210,7 +210,7 @@ tgfx->dev[i].absbit[0 ] =BIT (ABS_X ) |BIT (ABS_Y );for (j =0 ; j < config[i+1 ]; j++) -set_bit (tgfx_buttons[j], tgfx->dev[i].keybit); +set_bit (tgfx_buttons[j], tgfx->dev[i].keybit); tgfx->dev[i].absmin[ABS_X ] =-1 ; tgfx->dev[i].absmax[ABS_X ] =1 ; tgfx->dev[i].absmin[ABS_Y ] =-1 ; tgfx->dev[i].absmax[ABS_Y ] =1 ;
@@ -225,7 +225,7 @@kfree (tgfx);return NULL ; } - +return tgfx; }
@@ -245,7 +245,7 @@ {int i, j; -for (i =0 ; i <3 ; i++) +for (i =0 ; i <3 ; i++)if (tgfx_base[i]) {for (j =0 ; j <7 ; j++)if (tgfx_base[i]->sticks & (1 << j))
drivers/input/joystick/twidjoy.c +3 -3
@@ -211,7 +211,7 @@ twidjoy->dev.id.product =0x0001 ; twidjoy->dev.id.version =0x0100 ; - twidjoy->dev.evbit[0 ] =BIT (EV_KEY ) |BIT (EV_ABS ); + twidjoy->dev.evbit[0 ] =BIT (EV_KEY ) |BIT (EV_ABS );for (bp = twidjoy_buttons; bp->bitmask; bp++) {for (i =0 ; i < bp->bitmask; i++)
@@ -221,8 +221,8 @@ twidjoy->dev.absbit[0 ] =BIT (ABS_X ) |BIT (ABS_Y );for (i =0 ; i <2 ; i++) { - twidjoy->dev.absmax[ABS_X +i] =50 ; - twidjoy->dev.absmin[ABS_X +i] =-50 ; + twidjoy->dev.absmax[ABS_X +i] =50 ; + twidjoy->dev.absmin[ABS_X +i] =-50 ;/* TODO: arndt 20010708: Are these values appropriate? */ twidjoy->dev.absfuzz[ABS_X +i] =4 ;
drivers/input/joystick/warrior.c +16 -16
@@ -11,18 +11,18 @@/* * This program is free warftware; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by -* the Free Software Foundation; either version 2 of the License, or +* the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. -* +* * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. -* +* * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* +* * Should you need to contact me, the author, you can do so either by * e-mail - mail your message to <[email protected]>, or by paper mail: * Vojtech Pavlik, Simunkova 1594, Prague 8, 182 00 Czech Republic
@@ -44,7 +44,7 @@*/ #define WARRIOR_MAX_LENGTH 16 -static char warrior_lengths[] = {0 ,4 ,12 ,3 ,4 ,4 ,0 ,0 }; +static char warrior_lengths[] = {0 ,4 ,12 ,3 ,4 ,4 ,0 ,0 };static char *warrior_name ="Logitech WingMan Warrior" ;/*
@@ -114,7 +114,7 @@ warrior->data[warrior->idx++] = data;if (warrior->idx == warrior->len) { -if (warrior->idx)warrior_process_packet (warrior, regs); +if (warrior->idx)warrior_process_packet (warrior, regs); warrior->idx =0 ; warrior->len =0 ; }
@@ -152,7 +152,7 @@memset (warrior,0 ,sizeof (struct warrior )); - warrior->dev.evbit[0 ] =BIT (EV_KEY ) |BIT (EV_REL ) |BIT (EV_ABS ); + warrior->dev.evbit[0 ] =BIT (EV_KEY ) |BIT (EV_REL ) |BIT (EV_ABS ); warrior->dev.keybit[LONG (BTN_TRIGGER )] =BIT (BTN_TRIGGER ) |BIT (BTN_THUMB ) |BIT (BTN_TOP ) |BIT (BTN_TOP2 ); warrior->dev.relbit[0 ] =BIT (REL_DIAL ); warrior->dev.absbit[0 ] =BIT (ABS_X ) |BIT (ABS_Y ) |BIT (ABS_THROTTLE ) |BIT (ABS_HAT0X ) |BIT (ABS_HAT0Y );
@@ -168,24 +168,24 @@ warrior->dev.id.version =0x0100 ;for (i =0 ; i <2 ; i++) { - warrior->dev.absmax[ABS_X +i] =-64 ; - warrior->dev.absmin[ABS_X +i] =64 ; - warrior->dev.absflat[ABS_X +i] =8 ; + warrior->dev.absmax[ABS_X +i] =-64 ; + warrior->dev.absmin[ABS_X +i] =64 ; + warrior->dev.absflat[ABS_X +i] =8 ; } - warrior->dev.absmax[ABS_THROTTLE ] =-112 ; - warrior->dev.absmin[ABS_THROTTLE ] =112 ; + warrior->dev.absmax[ABS_THROTTLE ] =-112 ; + warrior->dev.absmin[ABS_THROTTLE ] =112 ;for (i =0 ; i <2 ; i++) { - warrior->dev.absmax[ABS_HAT0X +i] =-1 ; - warrior->dev.absmin[ABS_HAT0X +i] =1 ; + warrior->dev.absmax[ABS_HAT0X +i] =-1 ; + warrior->dev.absmin[ABS_HAT0X +i] =1 ; } warrior->dev.private = warrior; - + serio->private = warrior; -if (serio_open (serio, dev)) { +if (serio_open (serio, dev)) {kfree (warrior);return ; }
PATCH 30/39 input: Trailing whitespace fixes in drivers/input/gameport
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
[email protected], 2004-05-10 01:34:55-05:00, [email protected]
Input: trailing whitespace fixes in drivers/input/gameport
cs461x.c | 30 +++++++++++++++--------------- emu10k1-gp.c | 12 ++++++------ fm801-gp.c | 2 +- gameport.c | 2 +- lightning.c | 16 ++++++++-------- ns558.c | 14 +++++++------- vortex.c | 6 +++--- 7 files changed, 41 insertions(+), 41 deletions(-)
===================================================================
drivers/input/gameport/cs461x.c +15 -15
@@ -1,8 +1,8 @@/* -The all defines and part of code (such as cs461x_*) are -contributed from ALSA 0.5.8 sources. +The all defines and part of code (such as cs461x_*) are +contributed from ALSA 0.5.8 sources. See http://www.alsa-project.org/ for sources -+ Tested on Linux 686 2.4.0-test9, ALSA 0.5.8a and CS4610 */
@@ -89,8 +89,8 @@#define JSIO_BXOE 0x00000040#define JSIO_BYOE 0x00000080 -/* -The card initialization code is obfuscated; the module cs461x +/* +The card initialization code is obfuscated; the module cs461x need to be loaded after ALSA modules initialized and something played on the CS 4610 chip (see sources for details of CS4610 initialization code from ALSA)
@@ -112,7 +112,7 @@#define BA1_DWORD_SIZE (13 * 1024 + 512)#define BA1_MEMORY_COUNT 3 -/* +/* Only one CS461x card is still suppoted; the code requires redesign to avoid this limitatuion. */
@@ -163,7 +163,7 @@if (port){gameport_unregister_port (port);kfree (port); - } + }if (ba0)iounmap (ba0);#ifdef CS461X_FULL_MAP if (ba1.name.data0)iounmap (ba1.name.data0);
@@ -187,13 +187,13 @@static int cs461x_gameport_cooked_read (struct gameport *gameport,int *axes,int *buttons) {unsigned js1, js2, jst; - + js1 =cs461x_peekBA0 (BA0_JSC1 ); js2 =cs461x_peekBA0 (BA0_JSC2 ); jst =cs461x_peekBA0 (BA0_JSPT ); - - *buttons = (~jst >>4 ) &0x0F ; - + + *buttons = (~jst >>4 ) &0x0F ; + axes[0 ] = ((js1 &JSC1_Y1V_MASK ) >>JSC1_Y1V_SHIFT ) &0xFFFF ; axes[1 ] = ((js1 &JSC1_X1V_MASK ) >>JSC1_X1V_SHIFT ) &0xFFFF ; axes[2 ] = ((js2 &JSC2_Y2V_MASK ) >>JSC2_Y2V_SHIFT ) &0xFFFF ;
@@ -228,7 +228,7 @@ {int rc;struct gameport * port; - + rc =pci_enable_device (pdev);if (rc) { printk(KERN_ERR "cs461x: Cannot enable PCI gameport (bus %d, devfn %d) error=%d\n",
@@ -240,7 +240,7 @@#ifdef CS461X_FULL_MAP ba1_addr =pci_resource_start (pdev,1 );#endif - if (ba0_addr == 0 || ba0_addr == ~0 + if (ba0_addr == 0 || ba0_addr == ~0 #ifdef CS461X_FULL_MAP || ba1_addr == 0 || ba1_addr == ~0 #endif
@@ -281,7 +281,7 @@memset (port,0 ,sizeof (struct gameport ));pci_set_drvdata (pdev, port); - + port->open = cs461x_gameport_open; port->trigger = cs461x_gameport_trigger; port->read = cs461x_gameport_read;
@@ -310,7 +310,7 @@ {cs461x_free (pdev); } - +static struct pci_driver cs461x_pci_driver = { .name ="CS461x Gameport" , .id_table = cs461x_pci_tbl,
drivers/input/gameport/emu10k1-gp.c +6 -6
@@ -11,18 +11,18 @@/* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by -* the Free Software Foundation; either version 2 of the License, or +* the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. -* +* * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. -* +* * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* +* * Should you need to contact me, the author, you can do so either by * e-mail - mail your message to <[email protected]>, or by paper mail: * Vojtech Pavlik, Simunkova 1594, Prague 8, 182 00 Czech Republic
@@ -48,7 +48,7 @@int size;char phys[32 ]; }; - +static struct pci_device_id emu_tbl[] = { {0x1102 ,0x7002 ,PCI_ANY_ID ,PCI_ANY_ID },/* SB Live gameport */ {0x1102 ,0x7003 ,PCI_ANY_ID ,PCI_ANY_ID },/* Audigy gameport */
@@ -61,7 +61,7 @@ {int ioport, iolen;struct emu *emu; - +if (pci_enable_device (pdev))return -EBUSY ;
drivers/input/gameport/fm801-gp.c +1 -1
@@ -111,7 +111,7 @@pci_set_drvdata (pci, gp); -outb (0x60 , gp->gameport.io +0x0d );/* enable joystick 1 and 2 */ +outb (0x60 , gp->gameport.io +0x0d );/* enable joystick 1 and 2 */ gameport_register_port (&gp->gameport);
drivers/input/gameport/gameport.c +1 -1
@@ -168,7 +168,7 @@return -1 ; gameport->dev = dev; - +return 0 ; }
drivers/input/gameport/lightning.c +8 -8
@@ -11,18 +11,18 @@/* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by -* the Free Software Foundation; either version 2 of the License, or +* the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. -* +* * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. -* +* * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* +* * Should you need to contact me, the author, you can do so either by * e-mail - mail your message to <[email protected]>, or by paper mail: * Vojtech Pavlik, Simunkova 1594, Prague 8, 182 00 Czech Republic
@@ -106,7 +106,7 @@ result =0 ; -fail:outb (L4_SELECT_ANALOG ,L4_PORT ); +fail:outb (L4_SELECT_ANALOG ,L4_PORT );return result; }
@@ -126,7 +126,7 @@static int l4_getcal (int port,int *cal) {int i, result =-1 ; - +outb (L4_SELECT_ANALOG ,L4_PORT );outb (L4_SELECT_DIGITAL + (port >>2 ),L4_PORT );
@@ -208,7 +208,7 @@return 0 ; } - +static int __init l4_init (void ) {int cal[4 ] = {255 ,255 ,255 ,255 };
@@ -266,7 +266,7 @@if (rev >0x28 )/* on 2.9+ the setcal command works correctly */ l4_setcal (l4->port, cal); - +gameport_register_port (gameport); }
drivers/input/gameport/ns558.c +7 -7
@@ -12,18 +12,18 @@/* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by -* the Free Software Foundation; either version 2 of the License, or +* the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. -* +* * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. -* +* * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* +* * Should you need to contact me, the author, you can do so either by * e-mail - mail your message to <[email protected]>, or by paper mail: * Vojtech Pavlik, Simunkova 1594, Prague 8, 182 00 Czech Republic
@@ -58,7 +58,7 @@char phys[32 ];char name[32 ]; }; - +static LIST_HEAD (ns558_list);/*
@@ -115,7 +115,7 @@ i =0 ; goto out; } -/* +/* * And now find the number of mirrors of the port. */
@@ -291,7 +291,7 @@release_region (port->gameport.io & ~(port->size -1 ), port->size);kfree (port);break ; - +default :break ; }
drivers/input/gameport/vortex.c +3 -3
@@ -82,7 +82,7 @@ axes[i] =readw (vortex->io +VORTEX_AXD + i *sizeof (u32));if (axes[i] ==0x1fff ) axes[i] =-1 ; } - +return 0 ; }
@@ -121,7 +121,7 @@ vortex->gameport.driver = vortex; vortex->gameport.fuzz =64 ; - + vortex->gameport.read = vortex_read; vortex->gameport.trigger = vortex_trigger; vortex->gameport.cooked_read = vortex_cooked_read;
@@ -144,7 +144,7 @@ vortex->io = vortex->base + id->driver_data;gameport_register_port (&vortex->gameport); - +printk (KERN_INFO "gameport at pci%s speed %d kHz\n" ,pci_name (dev), vortex->gameport.speed);
PATCH 31/39 input: Trailing whitespace fixes in drivers/input
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
[email protected], 2004-05-10 01:36:08-05:00, [email protected]
Input: trailing whitespace fixes in drivers/input
evbug.c | 14 +++++++------- evdev.c | 4 ++-- joydev.c | 16 ++++++++-------- mousedev.c | 20 ++++++++++---------- power.c | 26 +++++++++++++------------- 5 files changed, 40 insertions(+), 40 deletions(-)
===================================================================
drivers/input/evbug.c +7 -7
@@ -11,18 +11,18 @@/* * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by -* the Free Software Foundation; either version 2 of the License, or +* the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. -* +* * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. -* +* * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -* +* * Should you need to contact me, the author, you can do so either by * e-mail - mail your message to <[email protected]>, or by paper mail: * Vojtech Pavlik, Simunkova 1594, Prague 8, 182 00 Czech Republic
@@ -35,7 +35,7 @@#include <linux/device.h> MODULE_AUTHOR ("Vojtech Pavlik <[email protected]>" ); -MODULE_DESCRIPTION ("Input driver event debug module" ); +MODULE_DESCRIPTION ("Input driver event debug module" );MODULE_LICENSE ("GPL" );static char evbug_name[] ="evbug" ;
@@ -67,7 +67,7 @@static void evbug_disconnect (struct input_handle *handle) {printk (KERN_DEBUG "evbug.c: Disconnected device: %s\n" , handle->dev->phys); - +input_close_device (handle);kfree (handle);
@@ -79,7 +79,7 @@ };MODULE_DEVICE_TABLE (input, evbug_ids); - +static struct input_handler evbug_handler = { .event = evbug_event, .connect = evbug_connect,
drivers/input/evdev.c +2 -2
@@ -220,7 +220,7 @@case EVIOCGID :return copy_to_user ((void *) arg, &dev->id,sizeof (struct input_id )) ? -EFAULT :0 ; - +case EVIOCGKEYCODE :if (get_user (t, ((int *) arg) +0 ))return -EFAULT ;if (t <0 || t > dev->keycodemax || !dev->keycodesize)return -EINVAL ;
@@ -428,7 +428,7 @@devfs_mk_cdev (MKDEV (INPUT_MAJOR ,EVDEV_MINOR_BASE + minor),S_IFCHR |S_IRUGO |S_IWUSR ,"input/event%d" , minor); -class_simple_device_add (input_class, +class_simple_device_add (input_class,MKDEV (INPUT_MAJOR ,EVDEV_MINOR_BASE + minor), dev->dev,"event%d" , minor);
drivers/input/joydev.c +8 -8
@@ -1,12 +1,12 @@/* * Joystick device driver for the input driver suite. * -* Copyright (c) 1999-2002 Vojtech Pavlik -* Copyright (c) 1999 Colin Van Dyke +* Copyright (c) 1999-2002 Vojtech Pavlik +* Copyright (c) 1999 Colin Van Dyke * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by -* the Free Software Foundation; either version 2 of the License, or +* the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. */
@@ -34,7 +34,7 @@MODULE_LICENSE ("GPL" );#define JOYDEV_MINOR_BASE 0 -#define JOYDEV_MINORS 16 +#define JOYDEV_MINORS 16#define JOYDEV_BUFFER_SIZE 64#define MSECS (t) (1000 * ((t) / HZ) + 1000 * ((t) % HZ) / HZ)
@@ -115,7 +115,7 @@default :return ; - } + } event.time =MSECS (jiffies);
@@ -449,10 +449,10 @@ } joydev_table[minor] = joydev; - +devfs_mk_cdev (MKDEV (INPUT_MAJOR ,JOYDEV_MINOR_BASE + minor),S_IFCHR |S_IRUGO |S_IWUSR ,"input/js%d" , minor); -class_simple_device_add (input_class, +class_simple_device_add (input_class,MKDEV (INPUT_MAJOR ,JOYDEV_MINOR_BASE + minor), dev->dev,"js%d" , minor);
@@ -466,7 +466,7 @@ joydev->exist =0 ;if (joydev->open) -input_close_device (handle); +input_close_device (handle);else joydev_free (joydev); }
drivers/input/mousedev.c +10 -10
@@ -177,7 +177,7 @@case BTN_SIDE :if (list->mode ==2 ) { index =3 ;break ; }case BTN_2 :case BTN_STYLUS2 : -case BTN_MIDDLE : index =2 ;break ; +case BTN_MIDDLE : index =2 ;break ;default :return ; }switch (value) {
@@ -267,7 +267,7 @@mousedev_free (list->mousedev); } } - +kfree (list);return 0 ; }
@@ -301,11 +301,11 @@if (list->mousedev->minor ==MOUSEDEV_MIX ) {list_for_each_entry (handle, &mousedev_handler.h_list, h_node) { mousedev = handle->private; -if (!mousedev->open && mousedev->exist) +if (!mousedev->open && mousedev->exist)input_open_device (handle); } - }else -if (!mousedev_mix.open && list->mousedev->exist) + }else +if (!mousedev_mix.open && list->mousedev->exist)input_open_device (&list->mousedev->handle); }
@@ -327,7 +327,7 @@ list->ps2[off +3 ] = (list->ps2[off +3 ] &0x0f ) | ((list->buttons &0x18 ) <<1 ); list->bufsiz++; } - +if (list->mode ==1 ) { list->ps2[off +3 ] = (list->dz >127 ?127 : (list->dz <-127 ?-127 : list->dz)); list->dz -= list->ps2[off +3 ];
@@ -403,7 +403,7 @@kill_fasync (&list->fasync,SIGIO ,POLL_IN );wake_up_interruptible (&list->mousedev->wait); - +return count; }
@@ -431,7 +431,7 @@if (copy_to_user (buffer, list->ps2 + list->bufsiz - list->buffer - count, count))return -EFAULT ; -return count; +return count; }/* No kernel lock - fine */
@@ -487,7 +487,7 @@devfs_mk_cdev (MKDEV (INPUT_MAJOR ,MOUSEDEV_MINOR_BASE + minor),S_IFCHR |S_IRUGO |S_IWUSR ,"input/mouse%d" , minor); -class_simple_device_add (input_class, +class_simple_device_add (input_class,MKDEV (INPUT_MAJOR ,MOUSEDEV_MINOR_BASE + minor), dev->dev,"mouse%d" , minor);
@@ -538,7 +538,7 @@ };MODULE_DEVICE_TABLE (input, mousedev_ids); - +static struct input_handler mousedev_handler = { .event = mousedev_event, .connect = mousedev_connect,
drivers/input/power.c +13 -13
@@ -1,7 +1,7 @@/* * $Id: power.c,v 1.10 2001/09/25 09:17:15 vojtech Exp $ * -* Copyright (c) 2001 "Crazy" James Simmons +* Copyright (c) 2001 "Crazy" James Simmons * * Input driver Power Management. *
@@ -51,7 +51,7 @@ static DECLARE_WORK(suspend_button_task, suspend_button_task_handler, NULL); -static void power_event (struct input_handle *handle,unsigned int type, +static void power_event (struct input_handle *handle,unsigned int type,unsigned int code,int down) {struct input_dev *dev = handle->dev;
@@ -73,7 +73,7 @@case KEY_POWER :/* Hum power down the machine. */ break ; -default : +default :return ; } }else {
@@ -83,9 +83,9 @@/* This is risky. See pm.h for details. */ if (dev->state !=PM_RESUME ) dev->state =PM_RESUME ; -else - dev->state =PM_SUSPEND ; -pm_send (dev->pm_dev, dev->state, dev); +else + dev->state =PM_SUSPEND ; +pm_send (dev->pm_dev, dev->state, dev);break ;case KEY_POWER :/* Turn the input device off completely ? */
@@ -97,14 +97,14 @@return ; } -static struct input_handle *power_connect (struct input_handler *handler, -struct input_dev *dev, +static struct input_handle *power_connect (struct input_handler *handler, +struct input_dev *dev,struct input_device_id *id) {struct input_handle *handle;if (!test_bit (EV_KEY , dev->evbit) || !test_bit (EV_PWR , dev->evbit)) -return NULL ; +return NULL ;if (!test_bit (KEY_SUSPEND , dev->keybit) || (!test_bit (KEY_POWER , dev->keybit)))return NULL ;
@@ -133,21 +133,21 @@ .flags = INPUT_DEVICE_ID_MATCH_EVBIT | INPUT_DEVICE_ID_MATCH_KEYBIT, .evbit = { BIT(EV_KEY) }, .keybit = { [LONG(KEY_SUSPEND)] = BIT(KEY_SUSPEND) } - }, + }, { .flags = INPUT_DEVICE_ID_MATCH_EVBIT | INPUT_DEVICE_ID_MATCH_KEYBIT, .evbit = { BIT(EV_KEY) }, .keybit = { [LONG(KEY_POWER)] = BIT(KEY_POWER) } - }, + }, { .flags = INPUT_DEVICE_ID_MATCH_EVBIT, .evbit = { BIT(EV_PWR) }, - }, + }, { }, /* Terminating entry */ };MODULE_DEVICE_TABLE (input, power_ids); - +static struct input_handler power_handler = { .event = power_event, .connect = power_connect,
PATCH 32/39 input: Do not call synaptics_init unless we are ready to do full mouse setup
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
[email protected], 2004-05-10 01:37:47-05:00, [email protected]
Input: do not call synaptics_init unless we are ready to do full
mouse setup
psmouse-base.c | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-)
===================================================================
drivers/input/mouse/psmouse-base.c +1 -1
@@ -427,7 +427,7 @@ }if (max_proto >PSMOUSE_IMEX ) { -if (synaptics_init (psmouse) ==0 ) +if (!set_properties ||synaptics_init (psmouse) ==0 )return PSMOUSE_SYNAPTICS ;/* * Some Synaptics touchpads can emulate extended protocols (like IMPS/2).
PATCH 33/39 input: Split i8042 interrupt handling into an IRQ handler and a tasklet [excluded later]
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
[email protected], 2004-05-10 01:39:35-05:00, [email protected]
Input: split i8042 interrupt handling into an IRQ handler and a tasklet
i8042.c | 141 +++++++++++++++++++++++++++++++++++++++++----------------------- 1 files changed, 92 insertions(+), 49 deletions(-)
===================================================================
drivers/input/serio/i8042.c +92 -49
@@ -2,6 +2,7 @@* i8042 keyboard and mouse controller driver for Linux * * Copyright (c) 1999-2002 Vojtech Pavlik +* Copyright (c) 2004 Dmitry Torokhov */ /*
@@ -74,6 +75,14 @@unsigned char *phys; }; +#define I8042_QUEUE_LEN 64 +struct { +unsigned char str[I8042_QUEUE_LEN ]; +unsigned char data[I8042_QUEUE_LEN ]; +unsigned int read_pos; +unsigned int write_pos; +} i8042_buf; +static struct serio i8042_kbd_port;static struct serio i8042_aux_port;static unsigned char i8042_initial_ctr;
@@ -82,7 +91,7 @@static unsigned char i8042_mux_present;static unsigned char i8042_sysdev_initialized;static struct pm_dev *i8042_pm_dev; -struct timer_list i8042_timer; +static struct timer_list i8042_timer;/* * Shared IRQ's require a device pointer, but this driver doesn't support
@@ -374,77 +383,109 @@static char i8042_mux_phys[4 ][32 ];/* -* i8042_interrupt() is the most important function in this driver - -* it handles the interrupts from the i8042, and sends incoming bytes -* to the upper layers. +* i8042_handle_data() is the most important function in this driver - +* it processes data received by i8042_interrupt and sends it to the +* upper layers. */ -static irqreturn_t i8042_interrupt (int irq,void *dev_id,struct pt_regs *regs) +static void i8042_handle_data (unsigned long notused) { -unsigned long flags;unsigned char str, data =0 ;unsigned int dfl; -int ret; -mod_timer (&i8042_timer, jiffies +I8042_POLL_PERIOD ); +/* +* No locking it required on i8042_buf as the tasklet is guaranteed +* to be serialized and if write_pos changes while comparing it with +* read_pos another run will be scheduled by i8042_interrupt. +*/ +while (i8042_buf.read_pos != i8042_buf.write_pos) { -spin_lock_irqsave (&i8042_lock, flags); - str =i8042_read_status (); -if (str &I8042_STR_OBF ) - data =i8042_read_data (); -spin_unlock_irqrestore (&i8042_lock, flags); + str = i8042_buf.str[i8042_buf.read_pos]; + data = i8042_buf.data[i8042_buf.read_pos]; -if (~str &I8042_STR_OBF ) { -if (irq)dbg ("Interrupt %d, without any data" , irq); - ret =0 ; - goto out; + i8042_buf.read_pos++; + i8042_buf.read_pos %=I8042_QUEUE_LEN ; + + dfl = ((str &I8042_STR_PARITY ) ?SERIO_PARITY :0 ) | + ((str &I8042_STR_TIMEOUT ) ?SERIO_TIMEOUT :0 ); + +if (i8042_mux_values[0 ].exists && (str &I8042_STR_AUXDATA )) { + +if (str &I8042_STR_MUXERR ) { +switch (data) { +case 0xfd : +case 0xfe : dfl =SERIO_TIMEOUT ;break ; +case 0xff : dfl =SERIO_PARITY ;break ; + } + data =0xfe ; + }else dfl =0 ; + +dbg ("%02x <- i8042 (interrupt, aux%d, %d%s%s)" , + data, (str >>6 ), irq, + dfl &SERIO_PARITY ?", bad parity" :"" , + dfl &SERIO_TIMEOUT ?", timeout" :"" ); + +serio_interrupt (i8042_mux_port + ((str >>6 ) &3 ), data, dfl,NULL ); + }else { + +dbg ("%02x <- i8042 (interrupt, %s, %d%s%s)" , + data, (str &I8042_STR_AUXDATA ) ?"aux" :"kbd" , irq, + dfl &SERIO_PARITY ?", bad parity" :"" , + dfl &SERIO_TIMEOUT ?", timeout" :"" ); + +if (i8042_aux_values.exists && (str &I8042_STR_AUXDATA )) +serio_interrupt (&i8042_aux_port, data, dfl,NULL ); +else if (i8042_kbd_values.exists) +serio_interrupt (&i8042_kbd_port, data, dfl,NULL ); + } } +} + +DECLARE_TASKLET (i8042_tasklet, i8042_handle_data,0 ); + +/* +* i8042_interrupt() handles the interrupts from i8042 and schedules +* i8042_handle_data to process and pass received bytes to the upper +* layers. +*/ - dfl = ((str &I8042_STR_PARITY ) ?SERIO_PARITY :0 ) | - ((str &I8042_STR_TIMEOUT ) ?SERIO_TIMEOUT :0 ); +static irqreturn_t i8042_interrupt (int irq,void *dev_id,struct pt_regs *regs) +{ +unsigned long flags; +unsigned char str; +unsigned int n_bytes =0 ; -if (i8042_mux_values[0 ].exists && (str &I8042_STR_AUXDATA )) { +mod_timer (&i8042_timer, jiffies +I8042_POLL_PERIOD ); -if (str &I8042_STR_MUXERR ) { -switch (data) { -case 0xfd : -case 0xfe : dfl =SERIO_TIMEOUT ;break ; -case 0xff : dfl =SERIO_PARITY ;break ; - } - data =0xfe ; - }else dfl =0 ; +spin_lock_irqsave (&i8042_lock, flags); -dbg ("%02x <- i8042 (interrupt, aux%d, %d%s%s)" , - data, (str >>6 ), irq, - dfl &SERIO_PARITY ?", bad parity" :"" , - dfl &SERIO_TIMEOUT ?", timeout" :"" ); +while ((str =i8042_read_status ()) &I8042_STR_OBF ) { -serio_interrupt (i8042_mux_port + ((str >>6 ) &3 ), data, dfl, regs); + n_bytes++; - goto irq_ret; - } + i8042_buf.str[i8042_buf.write_pos] = str; + i8042_buf.data[i8042_buf.write_pos] =i8042_read_data (); -dbg ("%02x <- i8042 (interrupt, %s, %d%s%s)" , - data, (str &I8042_STR_AUXDATA ) ?"aux" :"kbd" , irq, - dfl &SERIO_PARITY ?", bad parity" :"" , - dfl &SERIO_TIMEOUT ?", timeout" :"" ); + i8042_buf.write_pos++; + i8042_buf.write_pos %=I8042_QUEUE_LEN ; -if (i8042_aux_values.exists && (str &I8042_STR_AUXDATA )) { -serio_interrupt (&i8042_aux_port, data, dfl, regs); - goto irq_ret; +if (unlikely (i8042_buf.write_pos == i8042_buf.read_pos)) +printk (KERN_WARNING "i8042.c: ring buffer full\n" ); } -if (!i8042_kbd_values.exists) - goto irq_ret; +spin_unlock_irqrestore (&i8042_lock, flags); -serio_interrupt (&i8042_kbd_port, data, dfl, regs); +if (unlikely (n_bytes ==0 )) { +if (irq)dbg ("Interrupt %d, without any data" , irq); +return IRQ_NONE ; + } -irq_ret: - ret =1 ; -out: -return IRQ_RETVAL (ret); +tasklet_schedule (&i8042_tasklet); + +return IRQ_HANDLED ; } +/* * i8042_enable_mux_mode checks whether the controller has an active * multiplexor and puts the chip into Multiplexed (as opposed to
@@ -1019,6 +1060,8 @@for (i =0 ; i <4 ; i++)if (i8042_mux_values[i].exists)serio_unregister_port (i8042_mux_port + i); + +tasklet_kill (&i8042_tasklet);i8042_platform_exit (); }
PATCH 34/39 input: i8042 - kill the timer only after removing interrupt handler
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
[email protected], 2004-05-10 01:40:59-05:00, [email protected]
Patch from Sau Dan Lee
Input: i8042 - kill the timer only after removing interrupt handler,
otherwise there is a chance that interrupt handler will install the timer again and it will trigger after module is unloaded.
i8042.c | 3 +-- 1 files changed, 1 insertion(+), 2 deletions(-)
===================================================================
drivers/input/serio/i8042.c +1 -2
@@ -1047,8 +1047,6 @@sysdev_class_unregister (&kbc_sysclass); } -del_timer_sync (&i8042_timer); -i8042_controller_cleanup ();if (i8042_kbd_values.exists)
@@ -1061,6 +1059,7 @@if (i8042_mux_values[i].exists)serio_unregister_port (i8042_mux_port + i); +del_timer_sync (&i8042_timer);tasklet_kill (&i8042_tasklet);i8042_platform_exit ();
PATCH 35/39 input: Mousedev - better multiplex absolute and relative devices
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
[email protected], 2004-05-10 01:44:03-05:00, [email protected]
Input: mousedev - better multiplex absolute and relative devices;
cleanups
mousedev.c | 260 ++++++++++++++++++++++++++++++++++--------------------------- 1 files changed, 146 insertions(+), 114 deletions(-)
===================================================================
drivers/input/mousedev.c +146 -114
@@ -2,6 +2,7 @@* Input driver to ExplorerPS/2 device driver module. * * Copyright (c) 1999-2002 Vojtech Pavlik +* Copyright (c) 2004 Dmitry Torokhov * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as published by
@@ -47,15 +48,24 @@module_param (yres, uint,0 );MODULE_PARM_DESC (yres,"Vertical screen resolution" ); +struct mousedev_motion { +int dx, dy, dz; +}; +struct mousedev {int exist;int open;int minor; -int misc;char name[16 ];wait_queue_head_t wait;struct list_head list;struct input_handle handle; + +struct mousedev_motion packet; +unsigned long buttons; +unsigned int pkt_count; +int old_x[4 ], old_y[4 ]; +unsigned int touch; };struct mousedev_list {
@@ -63,13 +73,10 @@struct mousedev *mousedev;struct list_head node;int dx, dy, dz; -int old_x[4 ], old_y[4 ];unsigned long buttons;signed char ps2[6 ];unsigned char ready, buffer, bufsiz;unsigned char mode, imexseq, impsseq; -unsigned int pkt_count; -unsigned char touch; };#define MOUSEDEV_SEQ_LEN 6
@@ -82,135 +89,157 @@static struct mousedev *mousedev_table[MOUSEDEV_MINORS ];static struct mousedev mousedev_mix; -#define fx (i) (list->old_x[(list->pkt_count - (i)) & 03]) -#define fy (i) (list->old_y[(list->pkt_count - (i)) & 03]) +#define fx (i) (mousedev->old_x[(mousedev->pkt_count - (i)) & 03]) +#define fy (i) (mousedev->old_y[(mousedev->pkt_count - (i)) & 03]) -static void mousedev_abs_event (struct input_handle *handle,struct mousedev_list *list,unsigned int code,int value) +static void mousedev_touchpad_event (struct mousedev *mousedev,unsigned int code,int value) { -int size; -int touchpad; +if (mousedev->touch) { +switch (code) { +case ABS_X : +fx (0 ) = value; +if (mousedev->pkt_count >=2 ) + mousedev->packet.dx = ((fx (0 ) -fx (1 )) /2 + (fx (1 ) -fx (2 )) /2 ) /8 ; +break ; -/* Ignore joysticks */ -if (test_bit (BTN_TRIGGER , handle->dev->keybit)) -return ; +case ABS_Y : +fy (0 ) = value; +if (mousedev->pkt_count >=2 ) + mousedev->packet.dy = -((fy (0 ) -fy (1 )) /2 + (fy (1 ) -fy (2 )) /2 ) /8 ; +break ; + } + } +} - touchpad =test_bit (BTN_TOOL_FINGER , handle->dev->keybit); +static void mousedev_abs_event (struct input_dev *dev,struct mousedev *mousedev,unsigned int code,int value) +{ +int size;switch (code) {case ABS_X : -if (touchpad) { -if (list->touch) { -fx (0 ) = value; -if (list->pkt_count >=2 ) - list->dx = ((fx (0 ) -fx (1 )) /2 + (fx (1 ) -fx (2 )) /2 ) /8 ; - } - }else { - size = handle->dev->absmax[ABS_X ] - handle->dev->absmin[ABS_X ]; -if (size ==0 ) size = xres; - list->dx += (value * xres - list->old_x[0 ]) / size; - list->old_x[0 ] += list->dx * size; - } + size = dev->absmax[ABS_X ] - dev->absmin[ABS_X ]; +if (size ==0 ) size = xres; + mousedev->packet.dx = (value * xres - mousedev->old_x[0 ]) / size; + mousedev->old_x[0 ] = mousedev->packet.dx * size;break ; +case ABS_Y : -if (touchpad) { -if (list->touch) { -fy (0 ) = value; -if (list->pkt_count >=2 ) - list->dy = -((fy (0 ) -fy (1 )) /2 + (fy (1 ) -fy (2 )) /2 ) /8 ; - } - }else { - size = handle->dev->absmax[ABS_Y ] - handle->dev->absmin[ABS_Y ]; -if (size ==0 ) size = yres; - list->dy -= (value * yres - list->old_y[0 ]) / size; - list->old_y[0 ] -= list->dy * size; - } + size = dev->absmax[ABS_Y ] - dev->absmin[ABS_Y ]; +if (size ==0 ) size = yres; + mousedev->packet.dy = (value * yres - mousedev->old_y[0 ]) / size; + mousedev->old_y[0 ] = mousedev->packet.dy * size;break ; } } -static void mousedev_event (struct input_handle *handle,unsigned int type,unsigned int code,int value) +static void mousedev_rel_event (struct mousedev *mousedev,unsigned int code,int value) +{ +switch (code) { +case REL_X : mousedev->packet.dx += value;break ; +case REL_Y : mousedev->packet.dy -= value;break ; +case REL_WHEEL : mousedev->packet.dz -= value;break ; + } +} + +static void mousedev_key_event (struct mousedev *mousedev,unsigned int code,int value) +{ +int index; + +switch (code) { +case BTN_TOUCH : +case BTN_0 : +case BTN_FORWARD : +case BTN_LEFT : index =0 ;break ; +case BTN_STYLUS : +case BTN_1 : +case BTN_RIGHT : index =1 ;break ; +case BTN_2 : +case BTN_STYLUS2 : +case BTN_MIDDLE : index =2 ;break ; +case BTN_3 : +case BTN_BACK : +case BTN_SIDE : index =3 ;break ; +case BTN_4 : +case BTN_EXTRA : index =4 ;break ; +default :return ; + } + +if (value) { +set_bit (index, &mousedev->buttons); +set_bit (index, &mousedev_mix.buttons); + }else { +clear_bit (index, &mousedev->buttons); +clear_bit (index, &mousedev_mix.buttons); + } +} + +static void mousedev_notify_readers (struct mousedev *mousedev,struct mousedev_motion *packet) { -struct mousedev *mousedevs[3 ] = { handle->private, &mousedev_mix,NULL }; -struct mousedev **mousedev = mousedevs;struct mousedev_list *list; -int index, wake; -while (*mousedev) { +list_for_each_entry (list, &mousedev->list, node) { + list->dx += packet->dx; + list->dy += packet->dy; + list->dz += packet->dz; + list->buttons = mousedev->buttons; + list->ready =1 ; +kill_fasync (&list->fasync,SIGIO ,POLL_IN ); + } + +wake_up_interruptible (&mousedev->wait); +} + +static void mousedev_event (struct input_handle *handle,unsigned int type,unsigned int code,int value) +{ +struct mousedev *mousedev = handle->private; + +switch (type) { +case EV_ABS : +/* Ignore joysticks */ +if (test_bit (BTN_TRIGGER , handle->dev->keybit)) +return ; + +if (test_bit (BTN_TOOL_FINGER , handle->dev->keybit)) +mousedev_touchpad_event (mousedev, code, value); +else +mousedev_abs_event (handle->dev, mousedev, code, value); - wake =0 ; +break ; + +case EV_REL : +mousedev_rel_event (mousedev, code, value); +break ; -list_for_each_entry (list, &(*mousedev)->list, node) -switch (type) { -case EV_ABS : -mousedev_abs_event (handle, list, code, value); -break ; - -case EV_REL : -switch (code) { -case REL_X : list->dx += value;break ; -case REL_Y : list->dy -= value;break ; -case REL_WHEEL :if (list->mode) list->dz -= value;break ; - } -break ; - -case EV_KEY : -if (code ==BTN_TOUCH &&test_bit (BTN_TOOL_FINGER , handle->dev->keybit)) { -/* Handle touchpad data */ - list->touch = value; -if (!list->touch) - list->pkt_count =0 ; -break ; - } - -switch (code) { -case BTN_TOUCH : -case BTN_0 : -case BTN_FORWARD : -case BTN_LEFT : index =0 ;break ; -case BTN_4 : -case BTN_EXTRA :if (list->mode ==2 ) { index =4 ;break ; } -case BTN_STYLUS : -case BTN_1 : -case BTN_RIGHT : index =1 ;break ; -case BTN_3 : -case BTN_BACK : -case BTN_SIDE :if (list->mode ==2 ) { index =3 ;break ; } -case BTN_2 : -case BTN_STYLUS2 : -case BTN_MIDDLE : index =2 ;break ; -default :return ; - } -switch (value) { -case 0 :clear_bit (index, &list->buttons);break ; -case 1 :set_bit (index, &list->buttons);break ; -case 2 :return ; - } -break ; - -case EV_SYN : -switch (code) { -case SYN_REPORT : -if (list->touch) { - list->pkt_count++; -/* Input system eats duplicate events, -* but we need all of them to do correct -* averaging so apply present one forward -*/ -fx (0 ) =fx (1 ); -fy (0 ) =fy (1 ); - } - - list->ready =1 ; -kill_fasync (&list->fasync,SIGIO ,POLL_IN ); - wake =1 ; -break ; - } +case EV_KEY : +if (value !=2 ) { +if (code ==BTN_TOUCH &&test_bit (BTN_TOOL_FINGER , handle->dev->keybit)) { +/* Handle touchpad data */ + mousedev->touch = value; +if (!mousedev->touch) + mousedev->pkt_count =0 ; + } +else +mousedev_key_event (mousedev, code, value); } +break ; + +case EV_SYN : +if (code ==SYN_REPORT ) { +if (mousedev->touch) { + mousedev->pkt_count++; +/* Input system eats duplicate events, but we need all of them +* to do correct averaging so apply present one forward +*/ +fx (0 ) =fx (1 ); +fy (0 ) =fy (1 ); + } -if (wake) -wake_up_interruptible (&((*mousedev)->wait)); +mousedev_notify_readers (mousedev, &mousedev->packet); +mousedev_notify_readers (&mousedev_mix, &mousedev->packet); - mousedev++; +memset (&mousedev->packet,0 ,sizeof (struct mousedev_motion )); + } +break ; } }
@@ -326,6 +355,8 @@ list->dz -= list->ps2[off +3 ]; list->ps2[off +3 ] = (list->ps2[off +3 ] &0x0f ) | ((list->buttons &0x18 ) <<1 ); list->bufsiz++; + }else { + list->ps2[off] |= ((list->buttons &0x10 ) >>3 ) | ((list->buttons &0x08 ) >>1 ); }if (list->mode ==1 ) {
@@ -553,6 +584,7 @@static struct miscdevice psaux_mouse = {PSMOUSE_MINOR ,"psaux" , &mousedev_fops }; +static int psaux_registered;#endif static int __init mousedev_init (void )
@@ -572,7 +604,7 @@ NULL, "mice");#ifdef CONFIG_INPUT_MOUSEDEV_PSAUX -if (!(mousedev_mix.misc = !misc_register (&psaux_mouse))) +if (!(psaux_registered = !misc_register (&psaux_mouse)))printk (KERN_WARNING "mice: could not misc_register the device\n" );#endif
@@ -584,7 +616,7 @@ static void __exit mousedev_exit(void) {#ifdef CONFIG_INPUT_MOUSEDEV_PSAUX -if (mousedev_mix.misc) +if (psaux_registered)misc_deregister (&psaux_mouse);#endif devfs_remove ("input/mice" );
PATCH 36/39 input: Fix an oops at opentime of /dev/input/event devices
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
[email protected], 2004-05-14 10:23:53+02:00, [email protected]
evdev.c:
input: Fix an oops at opentime of /dev/input/event devices
evdev.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-)
===================================================================
drivers/input/evdev.c +2 -2
@@ -126,7 +126,7 @@int i =iminor (inode) -EVDEV_MINOR_BASE ;int accept_err; -if (i >=EVDEV_MINORS || !evdev_table[i]) +if (i >=EVDEV_MINORS || !evdev_table[i] || !evdev_table[i]->exist)return -ENODEV ;if ((accept_err =input_accept_process (&(evdev_table[i]->handle), file)))
@@ -175,7 +175,7 @@return -EAGAIN ; retval =wait_event_interruptible (list->evdev->wait, - list->head != list->tail && list->evdev->exist); + list->head != list->tail || (!list->evdev->exist));if (retval)return retval;
PATCH 37/39 input: Check for IM Explorer mice even if IMPS check failed.
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
[email protected], 2004-05-14 11:18:46+02:00, [email protected]
input: Check for IM Explorer mice even if IMPS check failed.
psmouse-base.c | 21 +++++++++++---------- 1 files changed, 11 insertions(+), 10 deletions(-)
===================================================================
drivers/input/mouse/psmouse-base.c +11 -10
@@ -461,24 +461,25 @@return type; } -if (max_proto >=PSMOUSE_IMPS &&intellimouse_detect (psmouse)) { +if (max_proto >=PSMOUSE_IMEX &&im_explorer_detect (psmouse)) {if (set_properties) {set_bit (REL_WHEEL , psmouse->dev.relbit); +set_bit (BTN_SIDE , psmouse->dev.keybit); +set_bit (BTN_EXTRA , psmouse->dev.keybit);if (!psmouse->name) - psmouse->name ="Wheel Mouse" ; + psmouse->name ="Explorer Mouse" ; } -if (max_proto >=PSMOUSE_IMEX &&im_explorer_detect (psmouse)) { +return PSMOUSE_IMEX ; + } -if (!set_properties) { -set_bit (BTN_SIDE , psmouse->dev.keybit); -set_bit (BTN_EXTRA , psmouse->dev.keybit); -if (!psmouse->name) - psmouse->name ="Explorer Mouse" ; - } +if (max_proto >=PSMOUSE_IMPS &&intellimouse_detect (psmouse)) { -return PSMOUSE_IMEX ; +if (set_properties) { +set_bit (REL_WHEEL , psmouse->dev.relbit); +if (!psmouse->name) + psmouse->name ="Wheel Mouse" ; }return PSMOUSE_IMPS ;
PATCH 38/39 input: Fix oops in hiddev
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
[email protected], 2004-05-17 13:02:06+02:00, [email protected]
input: Fix oops in hiddev
hiddev.c | 2 +- 1 files changed, 1 insertion(+), 1 deletion(-)
===================================================================
drivers/usb/input/hiddev.c +1 -1
@@ -232,7 +232,7 @@static struct usb_class_driver hiddev_class;static void hiddev_cleanup (struct hiddev *hiddev) { - hiddev_table[hiddev->hid->minor] =NULL ; + hiddev_table[hiddev->hid->minor -HIDDEV_MINOR_BASE ] =NULL ;usb_deregister_dev (hiddev->hid->intf, &hiddev_class);kfree (hiddev); }
PATCH 39/39 input: Exclude tasklet changes to i8042.c
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
[email protected], 2004-06-07 12:56:10+02:00, [email protected]
input: Exclude tasklet changes to i8042.c
i8042.c | 141 ++++++++++++++++++++++------------------------------------------ 1 files changed, 49 insertions(+), 92 deletions(-)
===================================================================
drivers/input/serio/i8042.c +49 -92
@@ -2,7 +2,6 @@* i8042 keyboard and mouse controller driver for Linux * * Copyright (c) 1999-2002 Vojtech Pavlik -* Copyright (c) 2004 Dmitry Torokhov */ /*
@@ -75,14 +74,6 @@unsigned char *phys; }; -#define I8042_QUEUE_LEN 64 -struct { -unsigned char str[I8042_QUEUE_LEN ]; -unsigned char data[I8042_QUEUE_LEN ]; -unsigned int read_pos; -unsigned int write_pos; -} i8042_buf; -static struct serio i8042_kbd_port;static struct serio i8042_aux_port;static unsigned char i8042_initial_ctr;
@@ -91,7 +82,7 @@static unsigned char i8042_mux_present;static unsigned char i8042_sysdev_initialized;static struct pm_dev *i8042_pm_dev; -static struct timer_list i8042_timer; +struct timer_list i8042_timer;/* * Shared IRQ's require a device pointer, but this driver doesn't support
@@ -383,108 +374,76 @@static char i8042_mux_phys[4 ][32 ];/* -* i8042_handle_data() is the most important function in this driver - -* it processes data received by i8042_interrupt and sends it to the -* upper layers. +* i8042_interrupt() is the most important function in this driver - +* it handles the interrupts from the i8042, and sends incoming bytes +* to the upper layers. */ -static void i8042_handle_data (unsigned long notused) +static irqreturn_t i8042_interrupt (int irq,void *dev_id,struct pt_regs *regs) { +unsigned long flags;unsigned char str, data =0 ;unsigned int dfl; +int ret; -/* -* No locking it required on i8042_buf as the tasklet is guaranteed -* to be serialized and if write_pos changes while comparing it with -* read_pos another run will be scheduled by i8042_interrupt. -*/ -while (i8042_buf.read_pos != i8042_buf.write_pos) { - - str = i8042_buf.str[i8042_buf.read_pos]; - data = i8042_buf.data[i8042_buf.read_pos]; +mod_timer (&i8042_timer, jiffies +I8042_POLL_PERIOD ); - i8042_buf.read_pos++; - i8042_buf.read_pos %=I8042_QUEUE_LEN ; +spin_lock_irqsave (&i8042_lock, flags); + str =i8042_read_status (); +if (str &I8042_STR_OBF ) + data =i8042_read_data (); +spin_unlock_irqrestore (&i8042_lock, flags); - dfl = ((str &I8042_STR_PARITY ) ?SERIO_PARITY :0 ) | - ((str &I8042_STR_TIMEOUT ) ?SERIO_TIMEOUT :0 ); - -if (i8042_mux_values[0 ].exists && (str &I8042_STR_AUXDATA )) { - -if (str &I8042_STR_MUXERR ) { -switch (data) { -case 0xfd : -case 0xfe : dfl =SERIO_TIMEOUT ;break ; -case 0xff : dfl =SERIO_PARITY ;break ; - } - data =0xfe ; - }else dfl =0 ; - -dbg ("%02x <- i8042 (interrupt, aux%d, %d%s%s)" , - data, (str >>6 ), irq, - dfl &SERIO_PARITY ?", bad parity" :"" , - dfl &SERIO_TIMEOUT ?", timeout" :"" ); - -serio_interrupt (i8042_mux_port + ((str >>6 ) &3 ), data, dfl,NULL ); - }else { - -dbg ("%02x <- i8042 (interrupt, %s, %d%s%s)" , - data, (str &I8042_STR_AUXDATA ) ?"aux" :"kbd" , irq, - dfl &SERIO_PARITY ?", bad parity" :"" , - dfl &SERIO_TIMEOUT ?", timeout" :"" ); - -if (i8042_aux_values.exists && (str &I8042_STR_AUXDATA )) -serio_interrupt (&i8042_aux_port, data, dfl,NULL ); -else if (i8042_kbd_values.exists) -serio_interrupt (&i8042_kbd_port, data, dfl,NULL ); - } +if (~str &I8042_STR_OBF ) { +if (irq)dbg ("Interrupt %d, without any data" , irq); + ret =0 ; + goto out; } -} - -DECLARE_TASKLET (i8042_tasklet, i8042_handle_data,0 ); - -/* -* i8042_interrupt() handles the interrupts from i8042 and schedules -* i8042_handle_data to process and pass received bytes to the upper -* layers. -*/ - -static irqreturn_t i8042_interrupt (int irq,void *dev_id,struct pt_regs *regs) -{ -unsigned long flags; -unsigned char str; -unsigned int n_bytes =0 ; -mod_timer (&i8042_timer, jiffies +I8042_POLL_PERIOD ); + dfl = ((str &I8042_STR_PARITY ) ?SERIO_PARITY :0 ) | + ((str &I8042_STR_TIMEOUT ) ?SERIO_TIMEOUT :0 ); -spin_lock_irqsave (&i8042_lock, flags); +if (i8042_mux_values[0 ].exists && (str &I8042_STR_AUXDATA )) { -while ((str =i8042_read_status ()) &I8042_STR_OBF ) { - - n_bytes++; +if (str &I8042_STR_MUXERR ) { +switch (data) { +case 0xfd : +case 0xfe : dfl =SERIO_TIMEOUT ;break ; +case 0xff : dfl =SERIO_PARITY ;break ; + } + data =0xfe ; + }else dfl =0 ; - i8042_buf.str[i8042_buf.write_pos] = str; - i8042_buf.data[i8042_buf.write_pos] =i8042_read_data (); +dbg ("%02x <- i8042 (interrupt, aux%d, %d%s%s)" , + data, (str >>6 ), irq, + dfl &SERIO_PARITY ?", bad parity" :"" , + dfl &SERIO_TIMEOUT ?", timeout" :"" ); - i8042_buf.write_pos++; - i8042_buf.write_pos %=I8042_QUEUE_LEN ; +serio_interrupt (i8042_mux_port + ((str >>6 ) &3 ), data, dfl, regs); -if (unlikely (i8042_buf.write_pos == i8042_buf.read_pos)) -printk (KERN_WARNING "i8042.c: ring buffer full\n" ); + goto irq_ret; } -spin_unlock_irqrestore (&i8042_lock, flags); +dbg ("%02x <- i8042 (interrupt, %s, %d%s%s)" , + data, (str &I8042_STR_AUXDATA ) ?"aux" :"kbd" , irq, + dfl &SERIO_PARITY ?", bad parity" :"" , + dfl &SERIO_TIMEOUT ?", timeout" :"" ); -if (unlikely (n_bytes ==0 )) { -if (irq)dbg ("Interrupt %d, without any data" , irq); -return IRQ_NONE ; +if (i8042_aux_values.exists && (str &I8042_STR_AUXDATA )) { +serio_interrupt (&i8042_aux_port, data, dfl, regs); + goto irq_ret; } -tasklet_schedule (&i8042_tasklet); +if (!i8042_kbd_values.exists) + goto irq_ret; -return IRQ_HANDLED ; -} +serio_interrupt (&i8042_kbd_port, data, dfl, regs); +irq_ret: + ret =1 ; +out: +return IRQ_RETVAL (ret); +}/* * i8042_enable_mux_mode checks whether the controller has an active
@@ -1058,9 +1017,7 @@for (i =0 ; i <4 ; i++)if (i8042_mux_values[i].exists)serio_unregister_port (i8042_mux_port + i); -del_timer_sync (&i8042_timer); -tasklet_kill (&i8042_tasklet);i8042_platform_exit (); }
Re: [PATCH 20/39] input: Create input_set_abs_params()
In reply to Vojtech PavlikOn Mon, 2004-06-07 13:55:53 +0200, Vojtech Pavlik <[email protected]> wrote in message <[email protected]>:
Quoted 6 lines
- make use of
set_abs_paramsin touchscreen driversdrivers/input/touchscreen/gunze.c +0
-0@@ -125,11 +125,9 @@init_input_dev (&gunze->dev); gunze->dev.evbit[0 ] =BIT (EV_KEY ) |BIT (EV_ABS );
drivers/input/touchscreen/gunze.c line 133
Quoted 10 lines
drivers/input/touchscreen/gunze.c +2
-4- gunze->dev.absbit[0 ] =BIT (ABS_X ) |BIT (ABS_Y ); gunze->dev.keybit[LONG (BTN_TOUCH )] =BIT (BTN_TOUCH ); - - gunze->dev.absmin[ABS_X ] =96 ; gunze->dev.absmin[ABS_Y ] =72 ; - gunze->dev.absmax[ABS_X ] =4000 ; gunze->dev.absmax[ABS_Y ] =3000 ; +input_set_abs_params (&gunze->dev,ABS_X ,96 ,4000 ,0 ,0 ); +input_set_abs_params (&gunze->dev,ABS_Y ,72 ,3000 ,0 ,0 ); gunze->serio = serio; serio->private = gunze;
I guess ./drivers/input/mouse/vsxxxaa.c could use a patch like this, too. It can also drive a graphic tablet. I'll prepare a patch this night...
MfG, JBG
Signature · 4 lines
Jan-Benedict Glaw [email protected] . +49-172-7608481 "Eine Freie Meinung in einem Freien Kopf | Gegen Zensur | Gegen Krieg fuer einen Freien Staat voll Freier Bürger" | im Internet! | im Irak! ret = do_actions((curr | FREE_SPEECH) & ~(NEW_COPYRIGHT_LAW | DRM | TCPA));