* [patches] Input update
@ 2004-06-07 11:50 Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 1/39] input: Fix a workaround for USB Legacy detected as MUX in i8042.c Vojtech Pavlik
0 siblings, 1 reply; 41+ messages in thread
From: Vojtech Pavlik @ 2004-06-07 11:50 UTC (permalink / raw)
To: torvalds, akpm, vojtech, linux-kernel
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,
--
Vojtech Pavlik
SuSE Labs, SuSE CR
^ permalink raw reply [flat|nested] 41+ messages in thread
* [PATCH 1/39] input: Fix a workaround for USB Legacy detected as MUX in i8042.c.
2004-06-07 11:50 [patches] Input update Vojtech Pavlik
@ 2004-06-07 11:55 ` Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 2/39] input: Profusion/ServerWorks chipset workaround in i8042.c for Ingo Molnar Vojtech Pavlik
0 siblings, 1 reply; 41+ messages in thread
From: Vojtech Pavlik @ 2004-06-07 11:55 UTC (permalink / raw)
To: torvalds, akpm, vojtech, linux-kernel
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
ChangeSet@1.1371.594.5, 2004-03-19 14:56:45+01:00, vojtech@suse.cz
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(-)
===================================================================
diff -Nru a/drivers/input/serio/i8042.c b/drivers/input/serio/i8042.c
--- a/drivers/input/serio/i8042.c 2004-06-07 13:13:49 +02:00
+++ b/drivers/input/serio/i8042.c 2004-06-07 13:13:49 +02:00
@@ -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",
^ permalink raw reply [flat|nested] 41+ messages in thread
* [PATCH 2/39] input: Profusion/ServerWorks chipset workaround in i8042.c for Ingo Molnar.
2004-06-07 11:55 ` [PATCH 1/39] input: Fix a workaround for USB Legacy detected as MUX in i8042.c Vojtech Pavlik
@ 2004-06-07 11:55 ` Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 3/39] input: Fix emulation of mouse reset (0xff) command Vojtech Pavlik
0 siblings, 1 reply; 41+ messages in thread
From: Vojtech Pavlik @ 2004-06-07 11:55 UTC (permalink / raw)
To: torvalds, akpm, vojtech, linux-kernel
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
ChangeSet@1.1371.628.2, 2004-03-26 16:27:05+01:00, vojtech@suse.cz
input: Profusion/ServerWorks chipset workaround in i8042.c for Ingo Molnar.
i8042.c | 11 ++++++++++-
1 files changed, 10 insertions(+), 1 deletion(-)
===================================================================
diff -Nru a/drivers/input/serio/i8042.c b/drivers/input/serio/i8042.c
--- a/drivers/input/serio/i8042.c 2004-06-07 13:13:43 +02:00
+++ b/drivers/input/serio/i8042.c 2004-06-07 13:13:43 +02:00
@@ -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;
^ permalink raw reply [flat|nested] 41+ messages in thread
* [PATCH 4/39] input: Synaptics driver cleanup
2004-06-07 11:55 ` [PATCH 3/39] input: Fix emulation of mouse reset (0xff) command Vojtech Pavlik
@ 2004-06-07 11:55 ` Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 5/39] input: Support Synaptics touchpads that have separate middle button Vojtech Pavlik
0 siblings, 1 reply; 41+ messages in thread
From: Vojtech Pavlik @ 2004-06-07 11:55 UTC (permalink / raw)
To: torvalds, akpm, vojtech, linux-kernel
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
ChangeSet@1.1371.753.11, 2004-04-23 02:28:25-05:00, dtor_core@ameritech.net
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(-)
===================================================================
diff -Nru a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c
--- a/drivers/input/mouse/synaptics.c 2004-06-07 13:13:32 +02:00
+++ b/drivers/input/mouse/synaptics.c 2004-06-07 13:13:32 +02:00
@@ -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);
}
diff -Nru a/drivers/input/mouse/synaptics.h b/drivers/input/mouse/synaptics.h
--- a/drivers/input/mouse/synaptics.h 2004-06-07 13:13:32 +02:00
+++ b/drivers/input/mouse/synaptics.h 2004-06-07 13:13:32 +02:00
@@ -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 {
^ permalink raw reply [flat|nested] 41+ messages in thread
* [PATCH 5/39] input: Support Synaptics touchpads that have separate middle button
2004-06-07 11:55 ` [PATCH 4/39] input: Synaptics driver cleanup Vojtech Pavlik
@ 2004-06-07 11:55 ` Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 6/39] input: Pass psmouse_extensions as a parameter Vojtech Pavlik
0 siblings, 1 reply; 41+ messages in thread
From: Vojtech Pavlik @ 2004-06-07 11:55 UTC (permalink / raw)
To: torvalds, akpm, vojtech, linux-kernel
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
ChangeSet@1.1371.753.12, 2004-04-23 02:32:22-05:00, dtor_core@ameritech.net
Input: support Synaptics touchpads that have separate middle button
synaptics.c | 11 +++++++++++
synaptics.h | 2 ++
2 files changed, 13 insertions(+)
===================================================================
diff -Nru a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c
--- a/drivers/input/mouse/synaptics.c 2004-06-07 13:13:27 +02:00
+++ b/drivers/input/mouse/synaptics.c 2004-06-07 13:13:27 +02:00
@@ -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);
diff -Nru a/drivers/input/mouse/synaptics.h b/drivers/input/mouse/synaptics.h
--- a/drivers/input/mouse/synaptics.h 2004-06-07 13:13:27 +02:00
+++ b/drivers/input/mouse/synaptics.h 2004-06-07 13:13:27 +02:00
@@ -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;
^ permalink raw reply [flat|nested] 41+ messages in thread
* [PATCH 3/39] input: Fix emulation of mouse reset (0xff) command.
2004-06-07 11:55 ` [PATCH 2/39] input: Profusion/ServerWorks chipset workaround in i8042.c for Ingo Molnar Vojtech Pavlik
@ 2004-06-07 11:55 ` Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 4/39] input: Synaptics driver cleanup Vojtech Pavlik
0 siblings, 1 reply; 41+ messages in thread
From: Vojtech Pavlik @ 2004-06-07 11:55 UTC (permalink / raw)
To: torvalds, akpm, vojtech, linux-kernel
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
ChangeSet@1.1371.691.1, 2004-04-05 17:39:48+02:00, vojtech@suse.cz
input: Fix emulation of mouse reset (0xff) command.
mousedev.c | 6 +++---
1 files changed, 3 insertions(+), 3 deletions(-)
===================================================================
diff -Nru a/drivers/input/mousedev.c b/drivers/input/mousedev.c
--- a/drivers/input/mousedev.c 2004-06-07 13:13:38 +02:00
+++ b/drivers/input/mousedev.c 2004-06-07 13:13:38 +02:00
@@ -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;
}
^ permalink raw reply [flat|nested] 41+ messages in thread
* [PATCH 9/39] input: Remove unneeded fields in atkbd structure, convert to bitfields
2004-06-07 11:55 ` [PATCH 8/39] input: Fix trailing whitespace " Vojtech Pavlik
@ 2004-06-07 11:55 ` Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 10/39] input: Do not process scancodes in atkbd until fully initialized Vojtech Pavlik
0 siblings, 1 reply; 41+ messages in thread
From: Vojtech Pavlik @ 2004-06-07 11:55 UTC (permalink / raw)
To: torvalds, akpm, vojtech, linux-kernel
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
ChangeSet@1.1371.753.16, 2004-04-23 02:40:08-05:00, dtor_core@ameritech.net
Input: remove unneeded fields in atkbd structure, convert to bitfields
atkbd.c | 22 +++++++++++-----------
1 files changed, 11 insertions(+), 11 deletions(-)
===================================================================
diff -Nru a/drivers/input/keyboard/atkbd.c b/drivers/input/keyboard/atkbd.c
--- a/drivers/input/keyboard/atkbd.c 2004-06-07 13:13:04 +02:00
+++ b/drivers/input/keyboard/atkbd.c 2004-06-07 13:13:04 +02:00
@@ -26,7 +26,6 @@
#include <linux/input.h>
#include <linux/serio.h>
#include <linux/workqueue.h>
-#include <linux/timer.h>
MODULE_AUTHOR("Vojtech Pavlik <vojtech@suse.cz>");
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;
};
^ permalink raw reply [flat|nested] 41+ messages in thread
* [PATCH 7/39] input: Soften ACK warning in atkbd
2004-06-07 11:55 ` [PATCH 6/39] input: Pass psmouse_extensions as a parameter Vojtech Pavlik
@ 2004-06-07 11:55 ` Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 8/39] input: Fix trailing whitespace " Vojtech Pavlik
0 siblings, 1 reply; 41+ messages in thread
From: Vojtech Pavlik @ 2004-06-07 11:55 UTC (permalink / raw)
To: torvalds, akpm, vojtech, linux-kernel
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
ChangeSet@1.1371.753.14, 2004-04-23 02:37:43-05:00, dtor_core@ameritech.net
Input: Change spurious ACK warning in atkbd to soften accusation
against XFree86
atkbd.c | 23 ++++++++++++++---------
1 files changed, 14 insertions(+), 9 deletions(-)
===================================================================
diff -Nru a/drivers/input/keyboard/atkbd.c b/drivers/input/keyboard/atkbd.c
--- a/drivers/input/keyboard/atkbd.c 2004-06-07 13:13:15 +02:00
+++ b/drivers/input/keyboard/atkbd.c 2004-06-07 13:13:15 +02:00
@@ -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;
^ permalink raw reply [flat|nested] 41+ messages in thread
* [PATCH 19/39] input: Trailing whitespace fixes
2004-06-07 11:55 ` [PATCH 18/39] input: Make serio open and close methods optional Vojtech Pavlik
@ 2004-06-07 11:55 ` Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 20/39] input: Create input_set_abs_params() Vojtech Pavlik
0 siblings, 1 reply; 41+ messages in thread
From: Vojtech Pavlik @ 2004-06-07 11:55 UTC (permalink / raw)
To: torvalds, akpm, vojtech, linux-kernel
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
ChangeSet@1.1371.753.26, 2004-04-23 02:50:49-05:00, dtor_core@ameritech.net
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(-)
===================================================================
diff -Nru a/drivers/input/input.c b/drivers/input/input.c
--- a/drivers/input/input.c 2004-06-07 13:12:08 +02:00
+++ b/drivers/input/input.c 2004-06-07 13:12:08 +02:00
@@ -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)))
diff -Nru a/drivers/input/misc/98spkr.c b/drivers/input/misc/98spkr.c
--- a/drivers/input/misc/98spkr.c 2004-06-07 13:12:08 +02:00
+++ b/drivers/input/misc/98spkr.c 2004-06-07 13:12:08 +02:00
@@ -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) {
diff -Nru a/drivers/input/misc/pcspkr.c b/drivers/input/misc/pcspkr.c
--- a/drivers/input/misc/pcspkr.c 2004-06-07 13:12:08 +02:00
+++ b/drivers/input/misc/pcspkr.c 2004-06-07 13:12:08 +02:00
@@ -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) {
diff -Nru a/drivers/input/misc/sparcspkr.c b/drivers/input/misc/sparcspkr.c
--- a/drivers/input/misc/sparcspkr.c 2004-06-07 13:12:08 +02:00
+++ b/drivers/input/misc/sparcspkr.c 2004-06-07 13:12:08 +02:00
@@ -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) {
diff -Nru a/drivers/input/misc/uinput.c b/drivers/input/misc/uinput.c
--- a/drivers/input/misc/uinput.c 2004-06-07 13:12:08 +02:00
+++ b/drivers/input/misc/uinput.c 2004-06-07 13:12:08 +02:00
@@ -18,7 +18,7 @@
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*
* Author: Aristeu Sergio Rozanski Filho <aris@cathedrallabs.org>
- *
+ *
* Changes/Revisions:
* 0.1 20/06/2002
* - first public version
@@ -68,7 +68,7 @@
static int uinput_dev_erase_effect(struct input_dev *dev, int effect_id)
{
return 0;
-}
+}
static int uinput_create_device(struct uinput_device *udev)
{
@@ -123,7 +123,7 @@
memset(newinput, 0, sizeof(struct input_dev));
newdev->dev = newinput;
-
+
file->private_data = newdev;
return 0;
@@ -137,16 +137,16 @@
{
unsigned int cnt;
int retval = 0;
-
+
for (cnt = 0; cnt < ABS_MAX; cnt++) {
- if (!test_bit(cnt, dev->absbit))
+ if (!test_bit(cnt, dev->absbit))
continue;
-
+
if (/*!dev->absmin[cnt] || !dev->absmax[cnt] || */
(dev->absmax[cnt] <= dev->absmin[cnt])) {
- printk(KERN_DEBUG
+ printk(KERN_DEBUG
"%s: invalid abs[%02x] min:%d max:%d\n",
- UINPUT_NAME, cnt,
+ UINPUT_NAME, cnt,
dev->absmin[cnt], dev->absmax[cnt]);
retval = -EINVAL;
break;
@@ -154,7 +154,7 @@
if ((dev->absflat[cnt] < dev->absmin[cnt]) ||
(dev->absflat[cnt] > dev->absmax[cnt])) {
- printk(KERN_DEBUG
+ printk(KERN_DEBUG
"%s: absflat[%02x] out of range: %d "
"(min:%d/max:%d)\n",
UINPUT_NAME, cnt, dev->absflat[cnt],
@@ -190,7 +190,7 @@
goto exit;
}
- if (NULL != dev->name)
+ if (NULL != dev->name)
kfree(dev->name);
size = strnlen(user_dev->name, UINPUT_MAX_NAME_SIZE) + 1;
@@ -229,7 +229,7 @@
static ssize_t uinput_write(struct file *file, const char *buffer, size_t count, loff_t *ppos)
{
struct uinput_device *udev = file->private_data;
-
+
if (test_bit(UIST_CREATED, &(udev->state))) {
struct input_event ev;
@@ -247,7 +247,7 @@
{
struct uinput_device *udev = file->private_data;
int retval = 0;
-
+
if (!test_bit(UIST_CREATED, &(udev->state)))
return -ENODEV;
@@ -255,16 +255,16 @@
return -EAGAIN;
retval = wait_event_interruptible(udev->waitq,
- (udev->head != udev->tail) ||
+ (udev->head != udev->tail) ||
!test_bit(UIST_CREATED, &(udev->state)));
-
+
if (retval)
return retval;
if (!test_bit(UIST_CREATED, &(udev->state)))
return -ENODEV;
- while ((udev->head != udev->tail) &&
+ while ((udev->head != udev->tail) &&
(retval + sizeof(struct input_event) <= count)) {
if (copy_to_user(buffer + retval, &(udev->buff[udev->tail]),
sizeof(struct input_event))) return -EFAULT;
@@ -284,7 +284,7 @@
if (udev->head != udev->tail)
return POLLIN | POLLRDNORM;
- return 0;
+ return 0;
}
static int uinput_burn_device(struct uinput_device *udev)
@@ -318,7 +318,7 @@
case UI_DEV_CREATE:
retval = uinput_create_device(udev);
break;
-
+
case UI_DEV_DESTROY:
retval = uinput_destroy_device(udev);
break;
@@ -330,7 +330,7 @@
}
set_bit(arg, udev->dev->evbit);
break;
-
+
case UI_SET_KEYBIT:
if (arg > KEY_MAX) {
retval = -EINVAL;
@@ -338,7 +338,7 @@
}
set_bit(arg, udev->dev->keybit);
break;
-
+
case UI_SET_RELBIT:
if (arg > REL_MAX) {
retval = -EINVAL;
@@ -346,7 +346,7 @@
}
set_bit(arg, udev->dev->relbit);
break;
-
+
case UI_SET_ABSBIT:
if (arg > ABS_MAX) {
retval = -EINVAL;
@@ -354,7 +354,7 @@
}
set_bit(arg, udev->dev->absbit);
break;
-
+
case UI_SET_MSCBIT:
if (arg > MSC_MAX) {
retval = -EINVAL;
@@ -362,7 +362,7 @@
}
set_bit(arg, udev->dev->mscbit);
break;
-
+
case UI_SET_LEDBIT:
if (arg > LED_MAX) {
retval = -EINVAL;
@@ -370,7 +370,7 @@
}
set_bit(arg, udev->dev->ledbit);
break;
-
+
case UI_SET_SNDBIT:
if (arg > SND_MAX) {
retval = -EINVAL;
@@ -378,7 +378,7 @@
}
set_bit(arg, udev->dev->sndbit);
break;
-
+
case UI_SET_FFBIT:
if (arg > FF_MAX) {
retval = -EINVAL;
@@ -386,7 +386,7 @@
}
set_bit(arg, udev->dev->ffbit);
break;
-
+
default:
retval = -EFAULT;
}
diff -Nru a/drivers/input/touchscreen/gunze.c b/drivers/input/touchscreen/gunze.c
--- a/drivers/input/touchscreen/gunze.c 2004-06-07 13:12:08 +02:00
+++ b/drivers/input/touchscreen/gunze.c 2004-06-07 13:12:08 +02:00
@@ -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);
diff -Nru a/drivers/input/touchscreen/h3600_ts_input.c b/drivers/input/touchscreen/h3600_ts_input.c
--- a/drivers/input/touchscreen/h3600_ts_input.c 2004-06-07 13:12:08 +02:00
+++ b/drivers/input/touchscreen/h3600_ts_input.c 2004-06-07 13:12:08 +02:00
@@ -1,11 +1,11 @@
/*
* $Id: h3600_ts_input.c,v 1.4 2002/01/23 06:39:37 jsimmons Exp $
*
- * Copyright (c) 2001 "Crazy" James Simmons jsimmons@transvirtual.com
+ * Copyright (c) 2001 "Crazy" James Simmons jsimmons@transvirtual.com
*
- * Sponsored by Transvirtual Technology.
- *
- * Derived from the code in h3600_ts.[ch] by Charles Flynn
+ * Sponsored by Transvirtual Technology.
+ *
+ * Derived from the code in h3600_ts.[ch] by Charles Flynn
*/
/*
@@ -75,7 +75,7 @@
#define MAX_ID 14
#define H3600_MAX_LENGTH 16
-#define H3600_KEY 0xf
+#define H3600_KEY 0xf
#define H3600_SCANCODE_RECORD 1 /* 1 -> record button */
#define H3600_SCANCODE_CALENDAR 2 /* 2 -> calendar */
@@ -118,13 +118,13 @@
int down = (GPLR & GPIO_BITSY_NPOWER_BUTTON) ? 0 : 1;
struct input_dev *dev = (struct input_dev *) dev_id;
- /*
- * This interrupt is only called when we release the key. So we have
+ /*
+ * This interrupt is only called when we release the key. So we have
* to fake a key press.
- */
+ */
input_regs(dev, regs);
input_report_key(dev, KEY_SUSPEND, 1);
- input_report_key(dev, KEY_SUSPEND, down);
+ input_report_key(dev, KEY_SUSPEND, down);
input_sync(dev);
}
@@ -144,18 +144,18 @@
unsigned char brightness = ((pwr==FLITE_PWR_OFF) ? 0:flite_brightness);
struct h3600_dev *ts = dev->private;
- /* Must be in this order */
+ /* Must be in this order */
ts->serio->write(ts->serio, 1);
ts->serio->write(ts->serio, pwr);
- ts->serio->write(ts->serio, brightness);
+ ts->serio->write(ts->serio, brightness);
return 0;
}
static int suspended = 0;
-static int h3600ts_pm_callback(struct pm_dev *pm_dev, pm_request_t req,
+static int h3600ts_pm_callback(struct pm_dev *pm_dev, pm_request_t req,
void *data)
{
- struct input_dev *dev = (struct input_dev *) data;
+ struct input_dev *dev = (struct input_dev *) data;
switch (req) {
case PM_SUSPEND: /* enter D1-D3 */
@@ -183,7 +183,7 @@
/*
* This function translates the native event packets to linux input event
* packets. Some packets coming from serial are not touchscreen related. In
- * this case we send them off to be processed elsewhere.
+ * this case we send them off to be processed elsewhere.
*/
static void h3600ts_process_packet(struct h3600_dev *ts, struct pt_regs *regs)
{
@@ -206,7 +206,7 @@
Note: This is true for non interrupt generated key events.
*/
case KEYBD_ID:
- down = (ts->buf[0] & 0x80) ? 0 : 1;
+ down = (ts->buf[0] & 0x80) ? 0 : 1;
switch (ts->buf[0] & 0x7f) {
case H3600_SCANCODE_RECORD:
@@ -218,7 +218,7 @@
case H3600_SCANCODE_CONTACTS:
key = KEY_PROG2;
break;
- case H3600_SCANCODE_Q:
+ case H3600_SCANCODE_Q:
key = KEY_Q;
break;
case H3600_SCANCODE_START:
@@ -237,9 +237,9 @@
key = KEY_DOWN;
break;
default:
- key = 0;
- }
- if (key)
+ key = 0;
+ }
+ if (key)
input_report_key(dev, key, down);
break;
/*
@@ -251,13 +251,13 @@
* byte 0 1 2 3
*/
case TOUCHS_ID:
- if (!touched) {
+ if (!touched) {
input_report_key(dev, BTN_TOUCH, 1);
touched = 1;
- }
+ }
if (ts->len) {
- unsigned short x, y;
+ unsigned short x, y;
x = ts->buf[0]; x <<= 8; x += ts->buf[1];
y = ts->buf[2]; y <<= 8; y += ts->buf[3];
@@ -267,7 +267,7 @@
} else {
input_report_key(dev, BTN_TOUCH, 0);
touched = 0;
- }
+ }
break;
default:
/* Send a non input event elsewhere */
@@ -280,7 +280,7 @@
/*
* h3600ts_event() handles events from the input module.
*/
-static int h3600ts_event(struct input_dev *dev, unsigned int type,
+static int h3600ts_event(struct input_dev *dev, unsigned int type,
unsigned int code, int value)
{
struct h3600_dev *ts = dev->private;
@@ -290,7 +290,7 @@
// ts->serio->write(ts->serio, SOME_CMD);
return 0;
}
- }
+ }
return -1;
}
@@ -323,12 +323,12 @@
struct h3600_dev *ts = serio->private;
/*
- * We have a new frame coming in.
+ * We have a new frame coming in.
*/
switch (state) {
case STATE_SOF:
if (data == CHAR_SOF)
- state = STATE_ID;
+ state = STATE_ID;
return;
case STATE_ID:
ts->event = (data & 0xf0) >> 4;
@@ -344,7 +344,7 @@
case STATE_DATA:
ts->chksum += data;
ts->buf[ts->idx]= data;
- if(++ts->idx == ts->len)
+ if(++ts->idx == ts->len)
state = STATE_EOF;
break;
case STATE_EOF:
@@ -382,7 +382,7 @@
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,
+ SA_SHIRQ | SA_INTERRUPT | SA_SAMPLE_RANDOM,
"h3600_action", &ts->dev)) {
printk(KERN_ERR "h3600ts.c: Could not allocate Action Button IRQ!\n");
kfree(ts);
@@ -390,7 +390,7 @@
}
if (request_irq(IRQ_GPIO_BITSY_NPOWER_BUTTON, npower_button_handler,
- SA_SHIRQ | SA_INTERRUPT | SA_SAMPLE_RANDOM,
+ SA_SHIRQ | SA_INTERRUPT | SA_SAMPLE_RANDOM,
"h3600_suspend", &ts->dev)) {
free_irq(IRQ_GPIO_BITSY_ACTION_BUTTON, &ts->dev);
printk(KERN_ERR "h3600ts.c: Could not allocate Power Button IRQ!\n");
@@ -400,7 +400,7 @@
/* 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.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;
@@ -442,7 +442,7 @@
//h3600_flite_control(1, 25); /* default brightness */
#ifdef CONFIG_PM
- ts->dev.pm_dev = pm_register(PM_ILLUMINATION_DEV, PM_SYS_LIGHT,
+ ts->dev.pm_dev = pm_register(PM_ILLUMINATION_DEV, PM_SYS_LIGHT,
h3600ts_pm_callback);
printk("registered pm callback\n");
#endif
@@ -458,7 +458,7 @@
static void h3600ts_disconnect(struct serio *serio)
{
struct h3600_dev *ts = serio->private;
-
+
free_irq(IRQ_GPIO_BITSY_ACTION_BUTTON, &ts->dev);
free_irq(IRQ_GPIO_BITSY_NPOWER_BUTTON, &ts->dev);
input_unregister_device(&ts->dev);
diff -Nru a/include/linux/input.h b/include/linux/input.h
--- a/include/linux/input.h 2004-06-07 13:12:08 +02:00
+++ b/include/linux/input.h 2004-06-07 13:12:08 +02:00
@@ -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 */
^ permalink raw reply [flat|nested] 41+ messages in thread
* [PATCH 20/39] input: Create input_set_abs_params()
2004-06-07 11:55 ` [PATCH 19/39] input: Trailing whitespace fixes Vojtech Pavlik
@ 2004-06-07 11:55 ` Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 21/39] input: Microtouch USB driver update Vojtech Pavlik
2004-06-07 13:07 ` [PATCH 20/39] input: Create input_set_abs_params() Jan-Benedict Glaw
0 siblings, 2 replies; 41+ messages in thread
From: Vojtech Pavlik @ 2004-06-07 11:55 UTC (permalink / raw)
To: torvalds, akpm, vojtech, linux-kernel
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
ChangeSet@1.1371.753.27, 2004-04-23 02:51:39-05:00, dtor_core@ameritech.net
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(-)
===================================================================
diff -Nru a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c
--- a/drivers/input/mouse/synaptics.c 2004-06-07 13:12:03 +02:00
+++ b/drivers/input/mouse/synaptics.c 2004-06-07 13:12:03 +02:00
@@ -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);
diff -Nru a/drivers/input/touchscreen/gunze.c b/drivers/input/touchscreen/gunze.c
--- a/drivers/input/touchscreen/gunze.c 2004-06-07 13:12:03 +02:00
+++ b/drivers/input/touchscreen/gunze.c 2004-06-07 13:12:03 +02:00
@@ -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;
diff -Nru a/drivers/input/touchscreen/h3600_ts_input.c b/drivers/input/touchscreen/h3600_ts_input.c
--- a/drivers/input/touchscreen/h3600_ts_input.c 2004-06-07 13:12:03 +02:00
+++ b/drivers/input/touchscreen/h3600_ts_input.c 2004-06-07 13:12:03 +02:00
@@ -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);
diff -Nru a/include/linux/input.h b/include/linux/input.h
--- a/include/linux/input.h 2004-06-07 13:12:03 +02:00
+++ b/include/linux/input.h 2004-06-07 13:12:03 +02:00
@@ -749,8 +749,6 @@
#define INPUT_KEYCODE(dev, scancode) ((dev->keycodesize == 1) ? ((u8*)dev->keycode)[scancode] : \
((dev->keycodesize == 2) ? ((u16*)dev->keycode)[scancode] : (((u32*)dev->keycode)[scancode])))
-#define init_input_dev(dev) do { INIT_LIST_HEAD(&((dev)->h_list)); INIT_LIST_HEAD(&((dev)->node)); } while (0)
-
#define SET_INPUT_KEYCODE(dev, scancode, val) \
({ unsigned __old; \
switch (dev->keycodesize) { \
@@ -915,6 +913,12 @@
#define to_handle(n) container_of(n,struct input_handle,d_node)
#define to_handle_h(n) container_of(n,struct input_handle,h_node)
+static inline void init_input_dev(struct input_dev *dev)
+{
+ INIT_LIST_HEAD(&dev->h_list);
+ INIT_LIST_HEAD(&dev->node);
+}
+
void input_register_device(struct input_dev *);
void input_unregister_device(struct input_dev *);
@@ -932,14 +936,51 @@
void input_event(struct input_dev *dev, unsigned int type, unsigned int code, int value);
-#define input_report_key(a,b,c) input_event(a, EV_KEY, b, !!(c))
-#define input_report_rel(a,b,c) input_event(a, EV_REL, b, c)
-#define input_report_abs(a,b,c) input_event(a, EV_ABS, b, c)
-#define input_report_ff(a,b,c) input_event(a, EV_FF, b, c)
-#define input_report_ff_status(a,b,c) input_event(a, EV_FF_STATUS, b, c)
+static inline void input_report_key(struct input_dev *dev, unsigned int code, int value)
+{
+ input_event(dev, EV_KEY, code, !!value);
+}
+
+static inline void input_report_rel(struct input_dev *dev, unsigned int code, int value)
+{
+ input_event(dev, EV_REL, code, value);
+}
+
+static inline void input_report_abs(struct input_dev *dev, unsigned int code, int value)
+{
+ input_event(dev, EV_ABS, code, value);
+}
+
+static inline void input_report_ff(struct input_dev *dev, unsigned int code, int value)
+{
+ input_event(dev, EV_FF, code, value);
+}
+
+static inline void input_report_ff_status(struct input_dev *dev, unsigned int code, int value)
+{
+ input_event(dev, EV_FF_STATUS, code, value);
+}
+
+static inline void input_regs(struct input_dev *dev, struct pt_regs *regs)
+{
+ dev->regs = regs;
+}
+
+static inline void input_sync(struct input_dev *dev)
+{
+ input_event(dev, EV_SYN, SYN_REPORT, 0);
+ dev->regs = NULL;
+}
+
+static inline void input_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;
-#define input_regs(a,b) do { (a)->regs = (b); } while (0)
-#define input_sync(a) do { input_event(a, EV_SYN, SYN_REPORT, 0); (a)->regs = NULL; } while (0)
+ dev->absbit[LONG(axis)] |= BIT(axis);
+}
extern struct class_simple *input_class;
^ permalink raw reply [flat|nested] 41+ messages in thread
* [PATCH 18/39] input: Make serio open and close methods optional
2004-06-07 11:55 ` [PATCH 17/39] input: Serio trailing whitespace fixes Vojtech Pavlik
@ 2004-06-07 11:55 ` Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 19/39] input: Trailing whitespace fixes Vojtech Pavlik
0 siblings, 1 reply; 41+ messages in thread
From: Vojtech Pavlik @ 2004-06-07 11:55 UTC (permalink / raw)
To: torvalds, akpm, vojtech, linux-kernel
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
ChangeSet@1.1371.753.25, 2004-04-23 02:50:09-05:00, dtor_core@ameritech.net
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(-)
===================================================================
diff -Nru a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c
--- a/drivers/input/mouse/synaptics.c 2004-06-07 13:12:14 +02:00
+++ b/drivers/input/mouse/synaptics.c 2004-06-07 13:12:14 +02:00
@@ -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;
diff -Nru a/drivers/input/serio/parkbd.c b/drivers/input/serio/parkbd.c
--- a/drivers/input/serio/parkbd.c 2004-06-07 13:12:14 +02:00
+++ b/drivers/input/serio/parkbd.c 2004-06-07 13:12:14 +02:00
@@ -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,
};
diff -Nru a/drivers/input/serio/q40kbd.c b/drivers/input/serio/q40kbd.c
--- a/drivers/input/serio/q40kbd.c 2004-06-07 13:12:14 +02:00
+++ b/drivers/input/serio/q40kbd.c 2004-06-07 13:12:14 +02:00
@@ -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,
diff -Nru a/drivers/input/serio/serio.c b/drivers/input/serio/serio.c
--- a/drivers/input/serio/serio.c 2004-06-07 13:12:14 +02:00
+++ b/drivers/input/serio/serio.c 2004-06-07 13:12:14 +02:00
@@ -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;
}
diff -Nru a/drivers/input/serio/serport.c b/drivers/input/serio/serport.c
--- a/drivers/input/serio/serport.c 2004-06-07 13:12:14 +02:00
+++ b/drivers/input/serio/serport.c 2004-06-07 13:12:14 +02:00
@@ -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);
^ permalink raw reply [flat|nested] 41+ messages in thread
* [PATCH 17/39] input: Serio trailing whitespace fixes
2004-06-07 11:55 ` [PATCH 16/39] input: Allow disabling legacy psaux device Vojtech Pavlik
@ 2004-06-07 11:55 ` Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 18/39] input: Make serio open and close methods optional Vojtech Pavlik
0 siblings, 1 reply; 41+ messages in thread
From: Vojtech Pavlik @ 2004-06-07 11:55 UTC (permalink / raw)
To: torvalds, akpm, vojtech, linux-kernel
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
ChangeSet@1.1371.753.24, 2004-04-23 02:48:40-05:00, dtor_core@ameritech.net
Input: serio trailing whitespace fixes
serio.c | 12 ++++++------
1 files changed, 6 insertions(+), 6 deletions(-)
===================================================================
diff -Nru a/drivers/input/serio/serio.c b/drivers/input/serio/serio.c
--- a/drivers/input/serio/serio.c 2004-06-07 13:12:19 +02:00
+++ b/drivers/input/serio/serio.c 2004-06-07 13:12:19 +02:00
@@ -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 <vojtech@ucw.cz>, 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));
^ permalink raw reply [flat|nested] 41+ messages in thread
* [PATCH 15/39] input: Do not modify device's properties when probing for protocol extensions
2004-06-07 11:55 ` [PATCH 14/39] input: Add psmouse_sliced_command Vojtech Pavlik
@ 2004-06-07 11:55 ` Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 16/39] input: Allow disabling legacy psaux device Vojtech Pavlik
0 siblings, 1 reply; 41+ messages in thread
From: Vojtech Pavlik @ 2004-06-07 11:55 UTC (permalink / raw)
To: torvalds, akpm, vojtech, linux-kernel
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
ChangeSet@1.1371.753.22, 2004-04-23 02:45:14-05:00, dtor_core@ameritech.net
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(-)
===================================================================
diff -Nru a/drivers/input/mouse/logips2pp.c b/drivers/input/mouse/logips2pp.c
--- a/drivers/input/mouse/logips2pp.c 2004-06-07 13:12:31 +02:00
+++ b/drivers/input/mouse/logips2pp.c 2004-06-07 13:12:31 +02:00
@@ -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;
}
diff -Nru a/drivers/input/mouse/logips2pp.h b/drivers/input/mouse/logips2pp.h
--- a/drivers/input/mouse/logips2pp.h 2004-06-07 13:12:31 +02:00
+++ b/drivers/input/mouse/logips2pp.h 2004-06-07 13:12:31 +02:00
@@ -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
diff -Nru a/drivers/input/mouse/psmouse-base.c b/drivers/input/mouse/psmouse-base.c
--- a/drivers/input/mouse/psmouse-base.c 2004-06-07 13:12:31 +02:00
+++ b/drivers/input/mouse/psmouse-base.c 2004-06-07 13:12:31 +02:00
@@ -410,22 +410,21 @@
* the mouse may have.
*/
-static int psmouse_extensions(struct psmouse *psmouse, unsigned int max_proto)
+static int psmouse_extensions(struct psmouse *psmouse,
+ unsigned int max_proto, int set_properties)
{
int synaptics_hardware = 0;
- psmouse->vendor = "Generic";
- psmouse->name = "Mouse";
- psmouse->model = 0;
- psmouse->protocol_handler = psmouse_process_byte;
-
/*
* Try Synaptics TouchPad
*/
if (max_proto > PSMOUSE_PS2 && synaptics_detect(psmouse)) {
synaptics_hardware = 1;
- psmouse->vendor = "Synaptics";
- psmouse->name = "TouchPad";
+
+ if (set_properties) {
+ psmouse->vendor = "Synaptics";
+ psmouse->name = "TouchPad";
+ }
if (max_proto > PSMOUSE_IMEX) {
if (synaptics_init(psmouse) == 0)
@@ -444,33 +443,44 @@
}
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);
- psmouse->vendor = "Genius";
- psmouse->name = "Wheel Mouse";
+ if (set_properties) {
+ set_bit(BTN_EXTRA, psmouse->dev.keybit);
+ set_bit(BTN_SIDE, psmouse->dev.keybit);
+ set_bit(REL_WHEEL, psmouse->dev.relbit);
+ psmouse->vendor = "Genius";
+ psmouse->name = "Wheel Mouse";
+ }
+
return PSMOUSE_GENPS;
}
if (max_proto > PSMOUSE_IMEX) {
- int type = ps2pp_detect(psmouse);
- if (type)
+ int type = ps2pp_init(psmouse, set_properties);
+ if (type > PSMOUSE_PS2)
return type;
}
if (max_proto >= PSMOUSE_IMPS && intellimouse_detect(psmouse)) {
- set_bit(REL_WHEEL, psmouse->dev.relbit);
+
+ if (set_properties) {
+ set_bit(REL_WHEEL, psmouse->dev.relbit);
+ if (!psmouse->name)
+ psmouse->name = "Wheel Mouse";
+ }
if (max_proto >= PSMOUSE_IMEX && im_explorer_detect(psmouse)) {
- set_bit(BTN_SIDE, psmouse->dev.keybit);
- set_bit(BTN_EXTRA, psmouse->dev.keybit);
- psmouse->name = "Explorer Mouse";
+ if (!set_properties) {
+ set_bit(BTN_SIDE, psmouse->dev.keybit);
+ set_bit(BTN_EXTRA, psmouse->dev.keybit);
+ if (!psmouse->name)
+ psmouse->name = "Explorer Mouse";
+ }
+
return PSMOUSE_IMEX;
}
- psmouse->name = "Wheel Mouse";
return PSMOUSE_IMPS;
}
@@ -520,12 +530,7 @@
if (psmouse_command(psmouse, NULL, PSMOUSE_CMD_RESET_DIS))
printk(KERN_WARNING "psmouse.c: Failed to reset mouse on %s\n", psmouse->serio->phys);
-/*
- * And here we try to determine if it has any extensions over the
- * basic PS/2 3-button mouse.
- */
-
- return psmouse->type = psmouse_extensions(psmouse, psmouse_max_proto);
+ return 0;
}
/*
@@ -663,7 +668,6 @@
psmouse->dev.evbit[0] = BIT(EV_KEY) | BIT(EV_REL);
psmouse->dev.keybit[LONG(BTN_MOUSE)] = BIT(BTN_LEFT) | BIT(BTN_MIDDLE) | BIT(BTN_RIGHT);
psmouse->dev.relbit[0] = BIT(REL_X) | BIT(REL_Y);
-
psmouse->state = PSMOUSE_CMD_MODE;
psmouse->serio = serio;
psmouse->dev.private = psmouse;
@@ -675,13 +679,21 @@
return;
}
- if (psmouse_probe(psmouse) <= 0) {
+ if (psmouse_probe(psmouse) < 0) {
serio_close(serio);
kfree(psmouse);
serio->private = NULL;
return;
}
+ psmouse->type = psmouse_extensions(psmouse, psmouse_max_proto, 1);
+ if (!psmouse->vendor)
+ psmouse->vendor = "Generic";
+ if (!psmouse->name)
+ psmouse->name = "Mouse";
+ if (!psmouse->protocol_handler)
+ psmouse->protocol_handler = psmouse_process_byte;
+
sprintf(psmouse->devname, "%s %s %s",
psmouse_protocols[psmouse->type], psmouse->vendor, psmouse->name);
sprintf(psmouse->phys, "%s/input0",
@@ -715,28 +727,24 @@
{
struct psmouse *psmouse = serio->private;
struct serio_dev *dev = serio->dev;
- int old_type;
if (!dev || !psmouse) {
printk(KERN_DEBUG "psmouse: reconnect request, but serio is disconnected, ignoring...\n");
return -1;
}
- old_type = psmouse->type;
-
psmouse->state = PSMOUSE_CMD_MODE;
- psmouse->type = psmouse->acking = 0;
- psmouse->cmdcnt = psmouse->pktcnt = psmouse->out_of_sync = 0;
+ psmouse->acking = psmouse->cmdcnt = psmouse->pktcnt = psmouse->out_of_sync = 0;
if (psmouse->reconnect) {
if (psmouse->reconnect(psmouse))
return -1;
- } else if (psmouse_probe(psmouse) != old_type)
+ } else if (psmouse_probe(psmouse) < 0 ||
+ psmouse->type != psmouse_extensions(psmouse, psmouse_max_proto, 0))
return -1;
/* ok, the device type (and capabilities) match the old one,
* we can continue using it, complete intialization
*/
- psmouse->type = old_type;
psmouse_initialize(psmouse);
if (psmouse->ptport) {
^ permalink raw reply [flat|nested] 41+ messages in thread
* [PATCH 12/39] input: Move reconnect after errors to generic code in psmouse
2004-06-07 11:55 ` [PATCH 11/39] input: Use reconnect instead of rescan in psmouse if possible Vojtech Pavlik
@ 2004-06-07 11:55 ` Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 13/39] input: Add protocol_handler to psmouse structure Vojtech Pavlik
0 siblings, 1 reply; 41+ messages in thread
From: Vojtech Pavlik @ 2004-06-07 11:55 UTC (permalink / raw)
To: torvalds, akpm, vojtech, linux-kernel
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
ChangeSet@1.1371.753.19, 2004-04-23 02:42:57-05:00, dtor_core@ameritech.net
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(-)
===================================================================
diff -Nru a/Documentation/kernel-parameters.txt b/Documentation/kernel-parameters.txt
--- a/Documentation/kernel-parameters.txt 2004-06-07 13:12:48 +02:00
+++ b/Documentation/kernel-parameters.txt 2004-06-07 13:12:48 +02:00
@@ -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=
diff -Nru a/drivers/input/mouse/psmouse-base.c b/drivers/input/mouse/psmouse-base.c
--- a/drivers/input/mouse/psmouse-base.c 2004-06-07 13:12:48 +02:00
+++ b/drivers/input/mouse/psmouse-base.c 2004-06-07 13:12:48 +02:00
@@ -43,9 +43,9 @@
module_param_named(smartscroll, psmouse_smartscroll, bool, 0);
MODULE_PARM_DESC(smartscroll, "Logitech Smartscroll autorepeat, 1 = enabled (default), 0 = disabled.");
-unsigned int psmouse_resetafter;
+static unsigned int psmouse_resetafter;
module_param_named(resetafter, psmouse_resetafter, uint, 0);
-MODULE_PARM_DESC(resetafter, "Reset Synaptics Touchpad after so many bad packets (0 = never).");
+MODULE_PARM_DESC(resetafter, "Reset device after so many bad packets (0 = never).");
__obsolete_setup("psmouse_noext");
__obsolete_setup("psmouse_resolution=");
@@ -56,15 +56,22 @@
static char *psmouse_protocols[] = { "None", "PS/2", "PS2++", "PS2T++", "GenPS/2", "ImPS/2", "ImExPS/2", "SynPS/2"};
/*
- * psmouse_process_packet() analyzes the PS/2 mouse packet contents and
- * reports relevant events to the input module.
+ * psmouse_process_byte() analyzes the PS/2 data stream and reports
+ * relevant events to the input module once full packet has arrived.
*/
-static void psmouse_process_packet(struct psmouse *psmouse, struct pt_regs *regs)
+static psmouse_ret_t psmouse_process_byte(struct psmouse *psmouse, struct pt_regs *regs)
{
struct input_dev *dev = &psmouse->dev;
unsigned char *packet = psmouse->packet;
+ if (psmouse->pktcnt < 3 + (psmouse->type >= PSMOUSE_GENPS))
+ return PSMOUSE_GOOD_DATA;
+
+/*
+ * Full packet accumulated, process it
+ */
+
input_regs(dev, regs);
/*
@@ -112,6 +119,8 @@
input_report_rel(dev, REL_Y, packet[2] ? (int) ((packet[0] << 3) & 0x100) - (int) packet[2] : 0);
input_sync(dev);
+
+ return PSMOUSE_FULL_PACKET;
}
/*
@@ -123,6 +132,7 @@
unsigned char data, unsigned int flags, struct pt_regs *regs)
{
struct psmouse *psmouse = serio->private;
+ psmouse_ret_t rc;
if (psmouse->state == PSMOUSE_IGNORE)
goto out;
@@ -193,19 +203,33 @@
}
}
- if (psmouse->type == PSMOUSE_SYNAPTICS) {
- /*
- * The synaptics driver has its own resync logic,
- * so it needs to receive all bytes one at a time.
- */
- synaptics_process_byte(psmouse, regs);
- goto out;
- }
+ rc = psmouse->type == PSMOUSE_SYNAPTICS ?
+ synaptics_process_byte(psmouse, regs) : psmouse_process_byte(psmouse, regs);
- if (psmouse->pktcnt == 3 + (psmouse->type >= PSMOUSE_GENPS)) {
- psmouse_process_packet(psmouse, regs);
- psmouse->pktcnt = 0;
- goto out;
+ switch (rc) {
+ case PSMOUSE_BAD_DATA:
+ printk(KERN_WARNING "psmouse.c: %s at %s lost sync at byte %d\n",
+ psmouse->name, psmouse->phys, psmouse->pktcnt);
+ psmouse->pktcnt = 0;
+
+ if (++psmouse->out_of_sync == psmouse_resetafter) {
+ psmouse->state = PSMOUSE_IGNORE;
+ printk(KERN_NOTICE "psmouse.c: issuing reconnect request\n");
+ serio_reconnect(psmouse->serio);
+ }
+ break;
+
+ case PSMOUSE_FULL_PACKET:
+ psmouse->pktcnt = 0;
+ if (psmouse->out_of_sync) {
+ psmouse->out_of_sync = 0;
+ printk(KERN_NOTICE "psmouse.c: %s at %s - driver resynched.\n",
+ psmouse->name, psmouse->phys);
+ }
+ break;
+
+ case PSMOUSE_GOOD_DATA:
+ break;
}
out:
return IRQ_HANDLED;
@@ -677,7 +701,8 @@
old_type = psmouse->type;
psmouse->state = PSMOUSE_CMD_MODE;
- psmouse->type = psmouse->acking = psmouse->cmdcnt = psmouse->pktcnt = 0;
+ psmouse->type = psmouse->acking = 0;
+ psmouse->cmdcnt = psmouse->pktcnt = psmouse->out_of_sync = 0;
if (psmouse->reconnect) {
if (psmouse->reconnect(psmouse))
return -1;
diff -Nru a/drivers/input/mouse/psmouse.h b/drivers/input/mouse/psmouse.h
--- a/drivers/input/mouse/psmouse.h 2004-06-07 13:12:48 +02:00
+++ b/drivers/input/mouse/psmouse.h 2004-06-07 13:12:48 +02:00
@@ -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 */
diff -Nru a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c
--- a/drivers/input/mouse/synaptics.c 2004-06-07 13:12:48 +02:00
+++ b/drivers/input/mouse/synaptics.c 2004-06-07 13:12:48 +02:00
@@ -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);
else
synaptics_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;
}
diff -Nru a/drivers/input/mouse/synaptics.h b/drivers/input/mouse/synaptics.h
--- a/drivers/input/mouse/synaptics.h 2004-06-07 13:12:48 +02:00
+++ b/drivers/input/mouse/synaptics.h 2004-06-07 13:12:48 +02:00
@@ -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 */
};
^ permalink raw reply [flat|nested] 41+ messages in thread
* [PATCH 14/39] input: Add psmouse_sliced_command
2004-06-07 11:55 ` [PATCH 13/39] input: Add protocol_handler to psmouse structure Vojtech Pavlik
@ 2004-06-07 11:55 ` Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 15/39] input: Do not modify device's properties when probing for protocol extensions Vojtech Pavlik
0 siblings, 1 reply; 41+ messages in thread
From: Vojtech Pavlik @ 2004-06-07 11:55 UTC (permalink / raw)
To: torvalds, akpm, vojtech, linux-kernel
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
ChangeSet@1.1371.753.21, 2004-04-23 02:44:24-05:00, dtor_core@ameritech.net
Input: add psmouse_sliced_command (passes extended commands encoded
with 0xE8 to the mouse) and use it in Synaptics and Logitech
drivers
logips2pp.c | 12 +-----------
psmouse-base.c | 24 ++++++++++++++++++++++++
psmouse.h | 1 +
synaptics.c | 28 +++-------------------------
4 files changed, 29 insertions(+), 36 deletions(-)
===================================================================
diff -Nru a/drivers/input/mouse/logips2pp.c b/drivers/input/mouse/logips2pp.c
--- a/drivers/input/mouse/logips2pp.c 2004-06-07 13:12:36 +02:00
+++ b/drivers/input/mouse/logips2pp.c 2004-06-07 13:12:36 +02:00
@@ -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;
diff -Nru a/drivers/input/mouse/psmouse-base.c b/drivers/input/mouse/psmouse-base.c
--- a/drivers/input/mouse/psmouse-base.c 2004-06-07 13:12:36 +02:00
+++ b/drivers/input/mouse/psmouse-base.c 2004-06-07 13:12:36 +02:00
@@ -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)
diff -Nru a/drivers/input/mouse/psmouse.h b/drivers/input/mouse/psmouse.h
--- a/drivers/input/mouse/psmouse.h 2004-06-07 13:12:36 +02:00
+++ b/drivers/input/mouse/psmouse.h 2004-06-07 13:12:36 +02:00
@@ -74,6 +74,7 @@
#define PSMOUSE_SYNAPTICS 7
int 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;
diff -Nru a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c
--- a/drivers/input/mouse/synaptics.c 2004-06-07 13:12:36 +02:00
+++ b/drivers/input/mouse/synaptics.c 2004-06-07 13:12:36 +02:00
@@ -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;
^ permalink raw reply [flat|nested] 41+ messages in thread
* [PATCH 6/39] input: Pass psmouse_extensions as a parameter
2004-06-07 11:55 ` [PATCH 5/39] input: Support Synaptics touchpads that have separate middle button Vojtech Pavlik
@ 2004-06-07 11:55 ` Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 7/39] input: Soften ACK warning in atkbd Vojtech Pavlik
0 siblings, 1 reply; 41+ messages in thread
From: Vojtech Pavlik @ 2004-06-07 11:55 UTC (permalink / raw)
To: torvalds, akpm, vojtech, linux-kernel
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
ChangeSet@1.1371.753.13, 2004-04-23 02:33:04-05:00, dtor_core@ameritech.net
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(-)
===================================================================
diff -Nru a/drivers/input/mouse/psmouse-base.c b/drivers/input/mouse/psmouse-base.c
--- a/drivers/input/mouse/psmouse-base.c 2004-06-07 13:13:21 +02:00
+++ b/drivers/input/mouse/psmouse-base.c 2004-06-07 13:13:21 +02:00
@@ -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);
}
/*
^ permalink raw reply [flat|nested] 41+ messages in thread
* [PATCH 16/39] input: Allow disabling legacy psaux device
2004-06-07 11:55 ` [PATCH 15/39] input: Do not modify device's properties when probing for protocol extensions Vojtech Pavlik
@ 2004-06-07 11:55 ` Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 17/39] input: Serio trailing whitespace fixes Vojtech Pavlik
0 siblings, 1 reply; 41+ messages in thread
From: Vojtech Pavlik @ 2004-06-07 11:55 UTC (permalink / raw)
To: torvalds, akpm, vojtech, linux-kernel
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
ChangeSet@1.1371.753.23, 2004-04-23 02:46:06-05:00, dtor_core@ameritech.net
Input: allow disabling legacy psaux device even for non-embedded systems
Kconfig | 9 ++++++++-
1 files changed, 8 insertions(+), 1 deletion(-)
===================================================================
diff -Nru a/drivers/input/Kconfig b/drivers/input/Kconfig
--- a/drivers/input/Kconfig 2004-06-07 13:12:25 +02:00
+++ b/drivers/input/Kconfig 2004-06-07 13:12:25 +02:00
@@ -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"
^ permalink raw reply [flat|nested] 41+ messages in thread
* [PATCH 13/39] input: Add protocol_handler to psmouse structure
2004-06-07 11:55 ` [PATCH 12/39] input: Move reconnect after errors to generic code in psmouse Vojtech Pavlik
@ 2004-06-07 11:55 ` Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 14/39] input: Add psmouse_sliced_command Vojtech Pavlik
0 siblings, 1 reply; 41+ messages in thread
From: Vojtech Pavlik @ 2004-06-07 11:55 UTC (permalink / raw)
To: torvalds, akpm, vojtech, linux-kernel
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
ChangeSet@1.1371.753.20, 2004-04-23 02:43:45-05:00, dtor_core@ameritech.net
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(-)
===================================================================
diff -Nru a/drivers/input/mouse/psmouse-base.c b/drivers/input/mouse/psmouse-base.c
--- a/drivers/input/mouse/psmouse-base.c 2004-06-07 13:12:42 +02:00
+++ b/drivers/input/mouse/psmouse-base.c 2004-06-07 13:12:42 +02:00
@@ -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
diff -Nru a/drivers/input/mouse/psmouse.h b/drivers/input/mouse/psmouse.h
--- a/drivers/input/mouse/psmouse.h 2004-06-07 13:12:42 +02:00
+++ b/drivers/input/mouse/psmouse.h 2004-06-07 13:12:42 +02:00
@@ -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);
};
diff -Nru a/drivers/input/mouse/synaptics.c b/drivers/input/mouse/synaptics.c
--- a/drivers/input/mouse/synaptics.c 2004-06-07 13:12:42 +02:00
+++ b/drivers/input/mouse/synaptics.c 2004-06-07 13:12:42 +02:00
@@ -312,146 +312,6 @@
}
/*****************************************************************************
- * 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);
- set_bit(ABS_TOOL_WIDTH, dev->absbit);
-
- set_bit(EV_KEY, dev->evbit);
- set_bit(BTN_TOUCH, dev->keybit);
- set_bit(BTN_TOOL_FINGER, dev->keybit);
- set_bit(BTN_TOOL_DOUBLETAP, dev->keybit);
- set_bit(BTN_TOOL_TRIPLETAP, dev->keybit);
-
- 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);
- }
-
- 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);
-}
-
-void synaptics_reset(struct psmouse *psmouse)
-{
- /* reset touchpad back to relative mode, gestures enabled */
- synaptics_mode_cmd(psmouse, 0);
-}
-
-static void synaptics_disconnect(struct psmouse *psmouse)
-{
- synaptics_reset(psmouse);
- kfree(psmouse->private);
-}
-
-static int synaptics_reconnect(struct psmouse *psmouse)
-{
- struct synaptics_data *priv = psmouse->private;
- struct synaptics_data old_priv = *priv;
-
- if (!synaptics_detect(psmouse))
- return -1;
-
- if (synaptics_query_hardware(psmouse)) {
- printk(KERN_ERR "Unable to query Synaptics hardware.\n");
- return -1;
- }
-
- 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;
-
- if (synaptics_set_mode(psmouse, 0)) {
- printk(KERN_ERR "Unable to initialize Synaptics hardware.\n");
- return -1;
- }
-
- return 0;
-}
-
-int synaptics_detect(struct psmouse *psmouse)
-{
- unsigned char param[4];
-
- param[0] = 0;
-
- psmouse_command(psmouse, param, PSMOUSE_CMD_SETRES);
- psmouse_command(psmouse, param, PSMOUSE_CMD_SETRES);
- psmouse_command(psmouse, param, PSMOUSE_CMD_SETRES);
- psmouse_command(psmouse, param, PSMOUSE_CMD_SETRES);
- psmouse_command(psmouse, param, PSMOUSE_CMD_GETINFO);
-
- return param[1] == 0x47;
-}
-
-int synaptics_init(struct psmouse *psmouse)
-{
- struct synaptics_data *priv;
-
- psmouse->private = priv = kmalloc(sizeof(struct synaptics_data), GFP_KERNEL);
- if (!priv)
- return -1;
- memset(priv, 0, sizeof(struct synaptics_data));
-
- if (synaptics_query_hardware(psmouse)) {
- printk(KERN_ERR "Unable to query Synaptics hardware.\n");
- goto init_fail;
- }
-
- if (synaptics_set_mode(psmouse, 0)) {
- printk(KERN_ERR "Unable to initialize Synaptics hardware.\n");
- goto init_fail;
- }
-
- priv->pkt_type = SYN_MODEL_NEWABS(priv->model_id) ? SYN_NEWABS : SYN_OLDABS;
-
- if (SYN_CAP_PASS_THROUGH(priv->capabilities))
- synaptics_pt_create(psmouse);
-
- print_ident(priv);
- set_input_params(&psmouse->dev, priv);
-
- psmouse->disconnect = synaptics_disconnect;
- psmouse->reconnect = synaptics_reconnect;
-
- return 0;
-
- init_fail:
- kfree(priv);
- return -1;
-}
-
-/*****************************************************************************
* Functions to interpret the absolute mode packets
****************************************************************************/
@@ -632,7 +492,7 @@
return SYN_NEWABS_STRICT;
}
-psmouse_ret_t synaptics_process_byte(struct psmouse *psmouse, struct pt_regs *regs)
+static 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;
@@ -654,3 +514,146 @@
return synaptics_validate_byte(psmouse->packet, psmouse->pktcnt - 1, priv->pkt_type) ?
PSMOUSE_GOOD_DATA : PSMOUSE_BAD_DATA;
}
+
+/*****************************************************************************
+ * 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);
+ set_bit(ABS_TOOL_WIDTH, dev->absbit);
+
+ set_bit(EV_KEY, dev->evbit);
+ set_bit(BTN_TOUCH, dev->keybit);
+ set_bit(BTN_TOOL_FINGER, dev->keybit);
+ set_bit(BTN_TOOL_DOUBLETAP, dev->keybit);
+ set_bit(BTN_TOOL_TRIPLETAP, dev->keybit);
+
+ 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);
+ }
+
+ 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);
+}
+
+void synaptics_reset(struct psmouse *psmouse)
+{
+ /* reset touchpad back to relative mode, gestures enabled */
+ synaptics_mode_cmd(psmouse, 0);
+}
+
+static void synaptics_disconnect(struct psmouse *psmouse)
+{
+ synaptics_reset(psmouse);
+ kfree(psmouse->private);
+}
+
+static int synaptics_reconnect(struct psmouse *psmouse)
+{
+ struct synaptics_data *priv = psmouse->private;
+ struct synaptics_data old_priv = *priv;
+
+ if (!synaptics_detect(psmouse))
+ return -1;
+
+ if (synaptics_query_hardware(psmouse)) {
+ printk(KERN_ERR "Unable to query Synaptics hardware.\n");
+ return -1;
+ }
+
+ 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;
+
+ if (synaptics_set_mode(psmouse, 0)) {
+ printk(KERN_ERR "Unable to initialize Synaptics hardware.\n");
+ return -1;
+ }
+
+ return 0;
+}
+
+int synaptics_detect(struct psmouse *psmouse)
+{
+ unsigned char param[4];
+
+ param[0] = 0;
+
+ psmouse_command(psmouse, param, PSMOUSE_CMD_SETRES);
+ psmouse_command(psmouse, param, PSMOUSE_CMD_SETRES);
+ psmouse_command(psmouse, param, PSMOUSE_CMD_SETRES);
+ psmouse_command(psmouse, param, PSMOUSE_CMD_SETRES);
+ psmouse_command(psmouse, param, PSMOUSE_CMD_GETINFO);
+
+ return param[1] == 0x47;
+}
+
+int synaptics_init(struct psmouse *psmouse)
+{
+ struct synaptics_data *priv;
+
+ psmouse->private = priv = kmalloc(sizeof(struct synaptics_data), GFP_KERNEL);
+ if (!priv)
+ return -1;
+ memset(priv, 0, sizeof(struct synaptics_data));
+
+ if (synaptics_query_hardware(psmouse)) {
+ printk(KERN_ERR "Unable to query Synaptics hardware.\n");
+ goto init_fail;
+ }
+
+ if (synaptics_set_mode(psmouse, 0)) {
+ printk(KERN_ERR "Unable to initialize Synaptics hardware.\n");
+ goto init_fail;
+ }
+
+ priv->pkt_type = SYN_MODEL_NEWABS(priv->model_id) ? SYN_NEWABS : SYN_OLDABS;
+
+ if (SYN_CAP_PASS_THROUGH(priv->capabilities))
+ synaptics_pt_create(psmouse);
+
+ print_ident(priv);
+ set_input_params(&psmouse->dev, priv);
+
+ psmouse->protocol_handler = synaptics_process_byte;
+ psmouse->disconnect = synaptics_disconnect;
+ psmouse->reconnect = synaptics_reconnect;
+
+ return 0;
+
+ init_fail:
+ kfree(priv);
+ return -1;
+}
+
+
diff -Nru a/drivers/input/mouse/synaptics.h b/drivers/input/mouse/synaptics.h
--- a/drivers/input/mouse/synaptics.h 2004-06-07 13:12:42 +02:00
+++ b/drivers/input/mouse/synaptics.h 2004-06-07 13:12:42 +02:00
@@ -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);
^ permalink raw reply [flat|nested] 41+ messages in thread
* [PATCH 10/39] input: Do not process scancodes in atkbd until fully initialized
2004-06-07 11:55 ` [PATCH 9/39] input: Remove unneeded fields in atkbd structure, convert to bitfields Vojtech Pavlik
@ 2004-06-07 11:55 ` Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 11/39] input: Use reconnect instead of rescan in psmouse if possible Vojtech Pavlik
0 siblings, 1 reply; 41+ messages in thread
From: Vojtech Pavlik @ 2004-06-07 11:55 UTC (permalink / raw)
To: torvalds, akpm, vojtech, linux-kernel
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
ChangeSet@1.1371.753.17, 2004-04-23 02:40:48-05:00, dtor_core@ameritech.net
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(+)
===================================================================
diff -Nru a/drivers/input/keyboard/atkbd.c b/drivers/input/keyboard/atkbd.c
--- a/drivers/input/keyboard/atkbd.c 2004-06-07 13:12:59 +02:00
+++ b/drivers/input/keyboard/atkbd.c 2004-06-07 13:12:59 +02:00
@@ -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);
^ permalink raw reply [flat|nested] 41+ messages in thread
* [PATCH 11/39] input: Use reconnect instead of rescan in psmouse if possible
2004-06-07 11:55 ` [PATCH 10/39] input: Do not process scancodes in atkbd until fully initialized Vojtech Pavlik
@ 2004-06-07 11:55 ` Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 12/39] input: Move reconnect after errors to generic code in psmouse Vojtech Pavlik
0 siblings, 1 reply; 41+ messages in thread
From: Vojtech Pavlik @ 2004-06-07 11:55 UTC (permalink / raw)
To: torvalds, akpm, vojtech, linux-kernel
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
ChangeSet@1.1371.753.18, 2004-04-23 02:41:59-05:00, dtor_core@ameritech.net
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(-)
===================================================================
diff -Nru a/drivers/input/mouse/psmouse-base.c b/drivers/input/mouse/psmouse-base.c
--- a/drivers/input/mouse/psmouse-base.c 2004-06-07 13:12:53 +02:00
+++ b/drivers/input/mouse/psmouse-base.c 2004-06-07 13:12:53 +02:00
@@ -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) {
^ permalink raw reply [flat|nested] 41+ messages in thread
* [PATCH 8/39] input: Fix trailing whitespace in atkbd
2004-06-07 11:55 ` [PATCH 7/39] input: Soften ACK warning in atkbd Vojtech Pavlik
@ 2004-06-07 11:55 ` Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 9/39] input: Remove unneeded fields in atkbd structure, convert to bitfields Vojtech Pavlik
0 siblings, 1 reply; 41+ messages in thread
From: Vojtech Pavlik @ 2004-06-07 11:55 UTC (permalink / raw)
To: torvalds, akpm, vojtech, linux-kernel
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
ChangeSet@1.1371.753.15, 2004-04-23 02:39:09-05:00, dtor_core@ameritech.net
Input: fix trailing whitespace in atkbd
atkbd.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
===================================================================
diff -Nru a/drivers/input/keyboard/atkbd.c b/drivers/input/keyboard/atkbd.c
--- a/drivers/input/keyboard/atkbd.c 2004-06-07 13:13:10 +02:00
+++ b/drivers/input/keyboard/atkbd.c 2004-06-07 13:13:10 +02:00
@@ -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))
^ permalink raw reply [flat|nested] 41+ messages in thread
* [PATCH 29/39] input: Trailing whitespace fixes in drivers/input/joystick
2004-06-07 11:55 ` [PATCH 28/39] input: Power - add MODULE_LICENSE Vojtech Pavlik
@ 2004-06-07 11:55 ` Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 30/39] input: Trailing whitespace fixes in drivers/input/gameport Vojtech Pavlik
0 siblings, 1 reply; 41+ messages in thread
From: Vojtech Pavlik @ 2004-06-07 11:55 UTC (permalink / raw)
To: torvalds, akpm, vojtech, linux-kernel
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
ChangeSet@1.1587.27.9, 2004-05-10 01:34:21-05:00, dtor_core@ameritech.net
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(-)
===================================================================
diff -Nru a/drivers/input/joystick/Kconfig b/drivers/input/joystick/Kconfig
--- a/drivers/input/joystick/Kconfig 2004-06-07 13:11:12 +02:00
+++ b/drivers/input/joystick/Kconfig 2004-06-07 13:11:12 +02:00
@@ -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.
diff -Nru a/drivers/input/joystick/a3d.c b/drivers/input/joystick/a3d.c
--- a/drivers/input/joystick/a3d.c 2004-06-07 13:11:12 +02:00
+++ b/drivers/input/joystick/a3d.c 2004-06-07 13:11:12 +02:00
@@ -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;
diff -Nru a/drivers/input/joystick/adi.c b/drivers/input/joystick/adi.c
--- a/drivers/input/joystick/adi.c 2004-06-07 13:11:12 +02:00
+++ b/drivers/input/joystick/adi.c 2004-06-07 13:11:12 +02:00
@@ -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 <vojtech@ucw.cz>, 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));
diff -Nru a/drivers/input/joystick/amijoy.c b/drivers/input/joystick/amijoy.c
--- a/drivers/input/joystick/amijoy.c 2004-06-07 13:11:12 +02:00
+++ b/drivers/input/joystick/amijoy.c 2004-06-07 13:11:12 +02:00
@@ -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)");
diff -Nru a/drivers/input/joystick/analog.c b/drivers/input/joystick/analog.c
--- a/drivers/input/joystick/analog.c 2004-06-07 13:11:12 +02:00
+++ b/drivers/input/joystick/analog.c 2004-06-07 13:11:12 +02:00
@@ -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 <vojtech@ucw.cz>, or by paper mail:
* Vojtech Pavlik, Simunkova 1594, Prague 8, 182 00 Czech Republic
@@ -237,7 +237,7 @@
loopout = (ANALOG_LOOP_TIME * port->loop) / 1000;
timeout = ANALOG_MAX_TIME * port->speed;
-
+
local_irq_save(flags);
gameport_trigger(gameport);
GET_TIME(now);
@@ -284,7 +284,7 @@
u = gameport_read(port->gameport);
- if (!chf) {
+ if (!chf) {
port->buttons = (~u >> 4) & 0xf;
return 0;
}
@@ -333,7 +333,7 @@
}
}
- for (i = 0; i < 2; i++)
+ for (i = 0; i < 2; i++)
if (port->analog[i].mask)
analog_decode(port->analog + i, port->axes, port->initial, port->buttons);
@@ -348,7 +348,7 @@
{
struct analog_port *port = dev->private;
if (!port->used++)
- mod_timer(&port->timer, jiffies + ANALOG_REFRESH_TIME);
+ mod_timer(&port->timer, jiffies + ANALOG_REFRESH_TIME);
return 0;
}
@@ -408,7 +408,7 @@
static void analog_name(struct analog *analog)
{
- sprintf(analog->name, "Analog %d-axis %d-button",
+ sprintf(analog->name, "Analog %d-axis %d-button",
hweight8(analog->mask & ANALOG_AXES_STD),
hweight8(analog->mask & ANALOG_BTNS_STD) + !!(analog->mask & ANALOG_BTNS_CHF) * 2 +
hweight16(analog->mask & ANALOG_BTNS_GAMEPAD) + !!(analog->mask & ANALOG_HBTN_CHF) * 4);
@@ -450,10 +450,10 @@
analog->dev.close = analog_close;
analog->dev.private = port;
analog->dev.evbit[0] = BIT(EV_KEY) | BIT(EV_ABS);
-
+
for (i = j = 0; i < 4; i++)
if (analog->mask & (1 << i)) {
-
+
t = analog_axes[j];
x = port->axes[i];
y = (port->axes[0] + port->axes[1]) >> 1;
@@ -481,8 +481,8 @@
j++;
}
- for (i = j = 0; i < 3; i++)
- if (analog->mask & analog_exts[i])
+ for (i = j = 0; i < 3; i++)
+ if (analog->mask & analog_exts[i])
for (x = 0; x < 2; x++) {
t = analog_hats[j++];
set_bit(t, analog->dev.absbit);
@@ -517,7 +517,7 @@
else
printk(" [%s timer, %d %sHz clock, %d ns res]\n", TIME_NAME,
port->speed > 10000 ? (port->speed + 800) / 1000 : port->speed,
- port->speed > 10000 ? "M" : "k",
+ port->speed > 10000 ? "M" : "k",
port->speed > 10000 ? (port->loop * 1000) / (port->speed / 1000)
: (port->loop * 1000000) / port->speed);
}
@@ -580,11 +580,11 @@
gameport_calibrate(port->gameport, port->axes, max);
}
-
- for (i = 0; i < 4; i++)
+
+ for (i = 0; i < 4; i++)
port->initial[i] = port->axes[i];
- return -!(analog[0].mask || analog[1].mask);
+ return -!(analog[0].mask || analog[1].mask);
}
static int analog_init_port(struct gameport *gameport, struct gameport_dev *dev, struct analog_port *port)
@@ -606,7 +606,7 @@
wait_ms(ANALOG_MAX_TIME);
port->mask = (gameport_read(gameport) ^ t) & t & 0xf;
port->fuzz = (port->speed * ANALOG_FUZZ_MAGIC) / port->loop / 1000 + ANALOG_FUZZ_BITS;
-
+
for (i = 0; i < ANALOG_INIT_RETRIES; i++) {
if (!analog_cooked_read(port)) break;
wait_ms(ANALOG_MAX_TIME);
@@ -617,11 +617,11 @@
wait_ms(ANALOG_MAX_TIME);
t = gameport_time(gameport, ANALOG_MAX_TIME * 1000);
gameport_trigger(gameport);
- while ((gameport_read(port->gameport) & port->mask) && (u < t)) u++;
+ while ((gameport_read(port->gameport) & port->mask) && (u < t)) u++;
udelay(ANALOG_SAITEK_DELAY);
t = gameport_time(gameport, ANALOG_SAITEK_TIME);
gameport_trigger(gameport);
- while ((gameport_read(port->gameport) & port->mask) && (v < t)) v++;
+ while ((gameport_read(port->gameport) & port->mask) && (v < t)) v++;
if (v < (u >> 1)) { /* FIXME - more than one port */
analog_options[0] |= /* FIXME - more than one port */
@@ -721,7 +721,7 @@
if (!strcmp(analog_types[j].name, js[i])) {
analog_options[i] = analog_types[j].value;
break;
- }
+ }
if (analog_types[j].name) continue;
analog_options[i] = simple_strtoul(js[i], &end, 0);
diff -Nru a/drivers/input/joystick/cobra.c b/drivers/input/joystick/cobra.c
--- a/drivers/input/joystick/cobra.c 2004-06-07 13:11:12 +02:00
+++ b/drivers/input/joystick/cobra.c 2004-06-07 13:11:12 +02:00
@@ -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 vojtech@ucw.cz\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);
diff -Nru a/drivers/input/joystick/db9.c b/drivers/input/joystick/db9.c
--- a/drivers/input/joystick/db9.c 2004-06-07 13:11:12 +02:00
+++ b/drivers/input/joystick/db9.c 2004-06-07 13:11:12 +02:00
@@ -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);
diff -Nru a/drivers/input/joystick/gamecon.c b/drivers/input/joystick/gamecon.c
--- a/drivers/input/joystick/gamecon.c 2004-06-07 13:11:12 +02:00
+++ b/drivers/input/joystick/gamecon.c 2004-06-07 13:11:12 +02:00
@@ -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);
}
}
diff -Nru a/drivers/input/joystick/gf2k.c b/drivers/input/joystick/gf2k.c
--- a/drivers/input/joystick/gf2k.c 2004-06-07 13:11:12 +02:00
+++ b/drivers/input/joystick/gf2k.c 2004-06-07 13:11:12 +02:00
@@ -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 <vojtech@ucw.cz>, 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;
diff -Nru a/drivers/input/joystick/grip.c b/drivers/input/joystick/grip.c
--- a/drivers/input/joystick/grip.c 2004-06-07 13:11:12 +02:00
+++ b/drivers/input/joystick/grip.c 2004-06-07 13:11:12 +02:00
@@ -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) {
diff -Nru a/drivers/input/joystick/grip_mp.c b/drivers/input/joystick/grip_mp.c
--- a/drivers/input/joystick/grip_mp.c 2004-06-07 13:11:12 +02:00
+++ b/drivers/input/joystick/grip_mp.c 2004-06-07 13:11:12 +02:00
@@ -69,7 +69,7 @@
#define IO_MODE_FAST 0x0200 /* Used 3 data bits per gameport read */
#define IO_SLOT_CHANGE 0x0800 /* Multiport physical slot status changed */
#define IO_DONE 0x1000 /* Multiport is done sending packets */
-#define IO_RETRY 0x4000 /* Try again later to get packet */
+#define IO_RETRY 0x4000 /* Try again later to get packet */
#define IO_RESET 0x8000 /* Force multiport to resend all packets */
/*
@@ -144,8 +144,8 @@
/*
* Gets a 28-bit packet from the multiport.
*
- * After getting a packet successfully, commands encoded by sendcode may
- * be sent to the multiport.
+ * After getting a packet successfully, commands encoded by sendcode may
+ * be sent to the multiport.
*
* The multiport clock value is reflected in gameport bit B4.
*
@@ -169,7 +169,7 @@
*packet = 0;
raw_data = gameport_read(gameport);
- if (raw_data & 1)
+ if (raw_data & 1)
return IO_RETRY;
for (i = 0; i < 64; i++) {
@@ -183,11 +183,11 @@
if (raw_data & 0x31)
return IO_RESET;
- gameport_trigger(gameport);
+ gameport_trigger(gameport);
if (!poll_until(0x10, 0, 308, gameport, &raw_data))
return IO_RESET;
- } else
+ } else
return IO_RETRY;
/* Determine packet transfer mode and prepare for packet construction. */
@@ -195,7 +195,7 @@
if (raw_data & 0x20) { /* 3 data bits/read */
portvals |= raw_data >> 4; /* Compare B4-B7 before & after trigger */
- if (portvals != 0xb)
+ if (portvals != 0xb)
return 0;
data_mask = 7;
bits_per_read = 3;
@@ -221,7 +221,7 @@
return IO_RESET;
}
- if (raw_data)
+ if (raw_data)
return IO_RESET;
/* If 3 bits/read used, drop from 30 bits to 28. */
@@ -231,7 +231,7 @@
pkt = (pkt >> 2) | 0xf0000000;
}
- if (bit_parity(pkt) == 1)
+ if (bit_parity(pkt) == 1)
return IO_RESET;
/* Acknowledge packet receipt */
@@ -251,10 +251,10 @@
/* Return if we just wanted the packet or multiport wants to send more */
- *packet = pkt;
+ *packet = pkt;
if ((sendflags == 0) || ((sendflags & IO_RETRY) && !(pkt & PACKET_MP_DONE)))
return IO_GOT_PACKET;
-
+
if (pkt & PACKET_MP_MORE)
return IO_GOT_PACKET | IO_RETRY;
@@ -277,7 +277,7 @@
if (!poll_until(0x30, 0, 193, gameport, &raw_data))
return IO_GOT_PACKET | IO_RESET;
- if (raw_data & 1)
+ if (raw_data & 1)
return IO_GOT_PACKET | IO_RESET;
if (sendcode & 1)
@@ -429,19 +429,19 @@
strange_code = joytype;
}
}
- return flags;
+ return flags;
}
/*
* Returns true if all multiport slot states appear valid.
*/
-
+
static int slots_valid(struct grip_mp *grip)
{
int flags, slot, invalid = 0, active = 0;
flags = get_and_decode_packet(grip, 0);
- if (!(flags & IO_GOT_PACKET))
+ if (!(flags & IO_GOT_PACKET))
return 0;
for (slot = 0; slot < 4; slot++) {
@@ -463,7 +463,7 @@
* Returns whether the multiport was placed into digital mode and
* able to communicate its state successfully.
*/
-
+
static int multiport_init(struct grip_mp *grip)
{
int dig_mode, initialized = 0, tries = 0;
@@ -481,7 +481,7 @@
dbg("multiport_init(): unable to achieve digital mode.\n");
return 0;
}
-
+
/* Get packets, store multiport state, and check state's validity */
for (tries = 0; tries < 4096; tries++) {
if ( slots_valid(grip) ) {
@@ -520,9 +520,9 @@
}
/*
- * Get the multiport state.
+ * Get the multiport state.
*/
-
+
static void get_and_report_mp_state(struct grip_mp *grip)
{
int i, npkts, flags;
@@ -538,7 +538,7 @@
break;
}
- for (i = 0; i < 4; i++)
+ for (i = 0; i < 4; i++)
if (grip->dirty[i])
report_slot(grip, i);
}
@@ -546,7 +546,7 @@
/*
* Called when a joystick device file is opened
*/
-
+
static int grip_open(struct input_dev *dev)
{
struct grip_mp *grip = dev->private;
@@ -607,7 +607,7 @@
/*
* Repeatedly polls the multiport and generates events.
*/
-
+
static void grip_timer(unsigned long private)
{
struct grip_mp *grip = (void*) private;
diff -Nru a/drivers/input/joystick/guillemot.c b/drivers/input/joystick/guillemot.c
--- a/drivers/input/joystick/guillemot.c 2004-06-07 13:11:12 +02:00
+++ b/drivers/input/joystick/guillemot.c 2004-06-07 13:11:12 +02:00
@@ -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);
diff -Nru a/drivers/input/joystick/iforce/Kconfig b/drivers/input/joystick/iforce/Kconfig
--- a/drivers/input/joystick/iforce/Kconfig 2004-06-07 13:11:12 +02:00
+++ b/drivers/input/joystick/iforce/Kconfig 2004-06-07 13:11:12 +02:00
@@ -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"
diff -Nru a/drivers/input/joystick/iforce/Makefile b/drivers/input/joystick/iforce/Makefile
--- a/drivers/input/joystick/iforce/Makefile 2004-06-07 13:11:12 +02:00
+++ b/drivers/input/joystick/iforce/Makefile 2004-06-07 13:11:12 +02:00
@@ -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
diff -Nru a/drivers/input/joystick/iforce/iforce-ff.c b/drivers/input/joystick/iforce/iforce-ff.c
--- a/drivers/input/joystick/iforce/iforce-ff.c 2004-06-07 13:11:12 +02:00
+++ b/drivers/input/joystick/iforce/iforce-ff.c 2004-06-07 13:11:12 +02:00
@@ -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);
diff -Nru a/drivers/input/joystick/iforce/iforce-main.c b/drivers/input/joystick/iforce/iforce-main.c
--- a/drivers/input/joystick/iforce/iforce-main.c 2004-06-07 13:11:12 +02:00
+++ b/drivers/input/joystick/iforce/iforce-main.c 2004-06-07 13:11:12 +02:00
@@ -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);
diff -Nru a/drivers/input/joystick/iforce/iforce-packets.c b/drivers/input/joystick/iforce/iforce-packets.c
--- a/drivers/input/joystick/iforce/iforce-packets.c 2004-06-07 13:11:12 +02:00
+++ b/drivers/input/joystick/iforce/iforce-packets.c 2004-06-07 13:11:12 +02:00
@@ -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)) {
diff -Nru a/drivers/input/joystick/iforce/iforce-serio.c b/drivers/input/joystick/iforce/iforce-serio.c
--- a/drivers/input/joystick/iforce/iforce-serio.c 2004-06-07 13:11:12 +02:00
+++ b/drivers/input/joystick/iforce/iforce-serio.c 2004-06-07 13:11:12 +02:00
@@ -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))
diff -Nru a/drivers/input/joystick/iforce/iforce.h b/drivers/input/joystick/iforce/iforce.h
--- a/drivers/input/joystick/iforce/iforce.h 2004-06-07 13:11:12 +02:00
+++ b/drivers/input/joystick/iforce/iforce.h 2004-06-07 13:11:12 +02:00
@@ -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;
diff -Nru a/drivers/input/joystick/interact.c b/drivers/input/joystick/interact.c
--- a/drivers/input/joystick/interact.c 2004-06-07 13:11:12 +02:00
+++ b/drivers/input/joystick/interact.c 2004-06-07 13:11:12 +02:00
@@ -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);
diff -Nru a/drivers/input/joystick/joydump.c b/drivers/input/joystick/joydump.c
--- a/drivers/input/joystick/joydump.c 2004-06-07 13:11:12 +02:00
+++ b/drivers/input/joystick/joydump.c 2004-06-07 13:11:12 +02:00
@@ -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 <vojtech@ucw.cz>, 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;
diff -Nru a/drivers/input/joystick/magellan.c b/drivers/input/joystick/magellan.c
--- a/drivers/input/joystick/magellan.c 2004-06-07 13:11:12 +02:00
+++ b/drivers/input/joystick/magellan.c 2004-06-07 13:11:12 +02:00
@@ -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 <vojtech@ucw.cz>, 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)) {
diff -Nru a/drivers/input/joystick/sidewinder.c b/drivers/input/joystick/sidewinder.c
--- a/drivers/input/joystick/sidewinder.c 2004-06-07 13:11:12 +02:00
+++ b/drivers/input/joystick/sidewinder.c 2004-06-07 13:11:12 +02:00
@@ -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 <vojtech@ucw.cz>, 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;
diff -Nru a/drivers/input/joystick/spaceball.c b/drivers/input/joystick/spaceball.c
--- a/drivers/input/joystick/spaceball.c 2004-06-07 13:11:12 +02:00
+++ b/drivers/input/joystick/spaceball.c 2004-06-07 13:11:12 +02:00
@@ -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 <vojtech@ucw.cz>, 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)) {
diff -Nru a/drivers/input/joystick/spaceorb.c b/drivers/input/joystick/spaceorb.c
--- a/drivers/input/joystick/spaceorb.c 2004-06-07 13:11:12 +02:00
+++ b/drivers/input/joystick/spaceorb.c 2004-06-07 13:11:12 +02:00
@@ -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 <vojtech@ucw.cz>, 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)) {
diff -Nru a/drivers/input/joystick/stinger.c b/drivers/input/joystick/stinger.c
--- a/drivers/input/joystick/stinger.c 2004-06-07 13:11:12 +02:00
+++ b/drivers/input/joystick/stinger.c 2004-06-07 13:11:12 +02:00
@@ -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;
}
diff -Nru a/drivers/input/joystick/tmdc.c b/drivers/input/joystick/tmdc.c
--- a/drivers/input/joystick/tmdc.c 2004-06-07 13:11:12 +02:00
+++ b/drivers/input/joystick/tmdc.c 2004-06-07 13:11:12 +02:00
@@ -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 <vojtech@ucw.cz>, 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);
diff -Nru a/drivers/input/joystick/turbografx.c b/drivers/input/joystick/turbografx.c
--- a/drivers/input/joystick/turbografx.c 2004-06-07 13:11:12 +02:00
+++ b/drivers/input/joystick/turbografx.c 2004-06-07 13:11:12 +02:00
@@ -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 <vojtech@ucw.cz>, 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))
diff -Nru a/drivers/input/joystick/twidjoy.c b/drivers/input/joystick/twidjoy.c
--- a/drivers/input/joystick/twidjoy.c 2004-06-07 13:11:12 +02:00
+++ b/drivers/input/joystick/twidjoy.c 2004-06-07 13:11:12 +02:00
@@ -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;
diff -Nru a/drivers/input/joystick/warrior.c b/drivers/input/joystick/warrior.c
--- a/drivers/input/joystick/warrior.c 2004-06-07 13:11:12 +02:00
+++ b/drivers/input/joystick/warrior.c 2004-06-07 13:11:12 +02:00
@@ -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 <vojtech@ucw.cz>, 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;
}
^ permalink raw reply [flat|nested] 41+ messages in thread
* [PATCH 33/39] input: Split i8042 interrupt handling into an IRQ handler and a tasklet [excluded later]
2004-06-07 11:55 ` [PATCH 32/39] input: Do not call synaptics_init unless we are ready to do full mouse setup Vojtech Pavlik
@ 2004-06-07 11:55 ` Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 34/39] input: i8042 - kill the timer only after removing interrupt handler Vojtech Pavlik
0 siblings, 1 reply; 41+ messages in thread
From: Vojtech Pavlik @ 2004-06-07 11:55 UTC (permalink / raw)
To: torvalds, akpm, vojtech, linux-kernel
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
ChangeSet@1.1587.27.13, 2004-05-10 01:39:35-05:00, dtor_core@ameritech.net
Input: split i8042 interrupt handling into an IRQ handler and a tasklet
i8042.c | 141 +++++++++++++++++++++++++++++++++++++++++-----------------------
1 files changed, 92 insertions(+), 49 deletions(-)
===================================================================
diff -Nru a/drivers/input/serio/i8042.c b/drivers/input/serio/i8042.c
--- a/drivers/input/serio/i8042.c 2004-06-07 13:10:49 +02:00
+++ b/drivers/input/serio/i8042.c 2004-06-07 13:10:49 +02:00
@@ -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();
}
^ permalink raw reply [flat|nested] 41+ messages in thread
* [PATCH 28/39] input: Power - add MODULE_LICENSE
2004-06-07 11:55 ` [PATCH 27/39] input: Trailing whitespace fixes in drivers/input/keyboard Vojtech Pavlik
@ 2004-06-07 11:55 ` Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 29/39] input: Trailing whitespace fixes in drivers/input/joystick Vojtech Pavlik
0 siblings, 1 reply; 41+ messages in thread
From: Vojtech Pavlik @ 2004-06-07 11:55 UTC (permalink / raw)
To: torvalds, akpm, vojtech, linux-kernel
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
ChangeSet@1.1587.27.8, 2004-05-10 01:32:39-05:00, dtor_core@ameritech.net
Input: power - add MODULE_LICENSE
power.c | 1 +
1 files changed, 1 insertion(+)
===================================================================
diff -Nru a/drivers/input/power.c b/drivers/input/power.c
--- a/drivers/input/power.c 2004-06-07 13:11:18 +02:00
+++ b/drivers/input/power.c 2004-06-07 13:11:18 +02:00
@@ -172,3 +172,4 @@
MODULE_AUTHOR("James Simmons <jsimmons@transvirtual.com>");
MODULE_DESCRIPTION("Input Power Management driver");
+MODULE_LICENSE("GPL");
^ permalink raw reply [flat|nested] 41+ messages in thread
* [PATCH 31/39] input: Trailing whitespace fixes in drivers/input
2004-06-07 11:55 ` [PATCH 30/39] input: Trailing whitespace fixes in drivers/input/gameport Vojtech Pavlik
@ 2004-06-07 11:55 ` Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 32/39] input: Do not call synaptics_init unless we are ready to do full mouse setup Vojtech Pavlik
0 siblings, 1 reply; 41+ messages in thread
From: Vojtech Pavlik @ 2004-06-07 11:55 UTC (permalink / raw)
To: torvalds, akpm, vojtech, linux-kernel
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
ChangeSet@1.1587.27.11, 2004-05-10 01:36:08-05:00, dtor_core@ameritech.net
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(-)
===================================================================
diff -Nru a/drivers/input/evbug.c b/drivers/input/evbug.c
--- a/drivers/input/evbug.c 2004-06-07 13:11:00 +02:00
+++ b/drivers/input/evbug.c 2004-06-07 13:11:00 +02:00
@@ -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 <vojtech@ucw.cz>, 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 <vojtech@ucw.cz>");
-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,
diff -Nru a/drivers/input/evdev.c b/drivers/input/evdev.c
--- a/drivers/input/evdev.c 2004-06-07 13:11:00 +02:00
+++ b/drivers/input/evdev.c 2004-06-07 13:11:00 +02:00
@@ -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);
diff -Nru a/drivers/input/joydev.c b/drivers/input/joydev.c
--- a/drivers/input/joydev.c 2004-06-07 13:11:00 +02:00
+++ b/drivers/input/joydev.c 2004-06-07 13:11:00 +02:00
@@ -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);
}
diff -Nru a/drivers/input/mousedev.c b/drivers/input/mousedev.c
--- a/drivers/input/mousedev.c 2004-06-07 13:11:00 +02:00
+++ b/drivers/input/mousedev.c 2004-06-07 13:11:00 +02:00
@@ -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,
diff -Nru a/drivers/input/power.c b/drivers/input/power.c
--- a/drivers/input/power.c 2004-06-07 13:11:00 +02:00
+++ b/drivers/input/power.c 2004-06-07 13:11:00 +02:00
@@ -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,
^ permalink raw reply [flat|nested] 41+ messages in thread
* [PATCH 22/39] input: Trailing whitespace fixes in drivers/input/serio
2004-06-07 11:55 ` [PATCH 21/39] input: Microtouch USB driver update Vojtech Pavlik
@ 2004-06-07 11:55 ` Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 23/39] input: kbd98io_interrupt should return irqreturn_t Vojtech Pavlik
0 siblings, 1 reply; 41+ messages in thread
From: Vojtech Pavlik @ 2004-06-07 11:55 UTC (permalink / raw)
To: torvalds, akpm, vojtech, linux-kernel
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
ChangeSet@1.1587.27.2, 2004-05-10 01:23:48-05:00, dtor_core@ameritech.net
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(-)
===================================================================
diff -Nru a/drivers/input/serio/98kbd-io.c b/drivers/input/serio/98kbd-io.c
--- a/drivers/input/serio/98kbd-io.c 2004-06-07 13:11:51 +02:00
+++ b/drivers/input/serio/98kbd-io.c 2004-06-07 13:11:51 +02:00
@@ -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 0x41
spinlock_t kbd98io_lock = SPIN_LOCK_UNLOCKED;
diff -Nru a/drivers/input/serio/ct82c710.c b/drivers/input/serio/ct82c710.c
--- a/drivers/input/serio/ct82c710.c 2004-06-07 13:11:51 +02:00
+++ b/drivers/input/serio/ct82c710.c 2004-06-07 13:11:51 +02:00
@@ -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 <vojtech@ucw.cz>, or by paper mail:
* Vojtech Pavlik, Simunkova 1594, Prague 8, 182 00 Czech Republic
diff -Nru a/drivers/input/serio/gscps2.c b/drivers/input/serio/gscps2.c
--- a/drivers/input/serio/gscps2.c 2004-06-07 13:11:51 +02:00
+++ b/drivers/input/serio/gscps2.c 2004-06-07 13:11:51 +02:00
@@ -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 */
};
diff -Nru a/drivers/input/serio/i8042.c b/drivers/input/serio/i8042.c
--- a/drivers/input/serio/i8042.c 2004-06-07 13:11:51 +02:00
+++ b/drivers/input/serio/i8042.c 2004-06-07 13:11:51 +02:00
@@ -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);
diff -Nru a/drivers/input/serio/parkbd.c b/drivers/input/serio/parkbd.c
--- a/drivers/input/serio/parkbd.c 2004-06-07 13:11:51 +02:00
+++ b/drivers/input/serio/parkbd.c 2004-06-07 13:11:51 +02:00
@@ -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 <vojtech@ucw.cz>, 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++;
diff -Nru a/drivers/input/serio/q40kbd.c b/drivers/input/serio/q40kbd.c
--- a/drivers/input/serio/q40kbd.c 2004-06-07 13:11:51 +02:00
+++ b/drivers/input/serio/q40kbd.c 2004-06-07 13:11:51 +02:00
@@ -4,7 +4,7 @@
* Copyright (c) 2000-2001 Vojtech Pavlik
*
* Based on the work of:
- * Richard Zidlicky <Richard.Zidlicky@stud.informatik.uni-erlangen.de>
+ * Richard Zidlicky <Richard.Zidlicky@stud.informatik.uni-erlangen.de>
*/
/*
diff -Nru a/drivers/input/serio/rpckbd.c b/drivers/input/serio/rpckbd.c
--- a/drivers/input/serio/rpckbd.c 2004-06-07 13:11:51 +02:00
+++ b/drivers/input/serio/rpckbd.c 2004-06-07 13:11:51 +02:00
@@ -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 =
^ permalink raw reply [flat|nested] 41+ messages in thread
* [PATCH 24/39] input: kbd98_interrupt should return irqreturn_t
2004-06-07 11:55 ` [PATCH 23/39] input: kbd98io_interrupt should return irqreturn_t Vojtech Pavlik
@ 2004-06-07 11:55 ` Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 25/39] input: Various fixes for H3600 touchscreen driver Vojtech Pavlik
0 siblings, 1 reply; 41+ messages in thread
From: Vojtech Pavlik @ 2004-06-07 11:55 UTC (permalink / raw)
To: torvalds, akpm, vojtech, linux-kernel
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
ChangeSet@1.1587.27.4, 2004-05-10 01:26:53-05:00, dtor_core@ameritech.net
Input: kbd98_interrupt should return irqreturn_t
98kbd.c | 26 +++++++++++++++-----------
1 files changed, 15 insertions(+), 11 deletions(-)
===================================================================
diff -Nru a/drivers/input/keyboard/98kbd.c b/drivers/input/keyboard/98kbd.c
--- a/drivers/input/keyboard/98kbd.c 2004-06-07 13:11:40 +02:00
+++ b/drivers/input/keyboard/98kbd.c 2004-06-07 13:11:40 +02:00
@@ -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;
}
/*
^ permalink raw reply [flat|nested] 41+ messages in thread
* [PATCH 32/39] input: Do not call synaptics_init unless we are ready to do full mouse setup
2004-06-07 11:55 ` [PATCH 31/39] input: Trailing whitespace fixes in drivers/input Vojtech Pavlik
@ 2004-06-07 11:55 ` Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 33/39] input: Split i8042 interrupt handling into an IRQ handler and a tasklet [excluded later] Vojtech Pavlik
0 siblings, 1 reply; 41+ messages in thread
From: Vojtech Pavlik @ 2004-06-07 11:55 UTC (permalink / raw)
To: torvalds, akpm, vojtech, linux-kernel
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
ChangeSet@1.1587.27.12, 2004-05-10 01:37:47-05:00, dtor_core@ameritech.net
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(-)
===================================================================
diff -Nru a/drivers/input/mouse/psmouse-base.c b/drivers/input/mouse/psmouse-base.c
--- a/drivers/input/mouse/psmouse-base.c 2004-06-07 13:10:55 +02:00
+++ b/drivers/input/mouse/psmouse-base.c 2004-06-07 13:10:55 +02:00
@@ -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).
^ permalink raw reply [flat|nested] 41+ messages in thread
* [PATCH 26/39] input: Twidjoy module fixes
2004-06-07 11:55 ` [PATCH 25/39] input: Various fixes for H3600 touchscreen driver Vojtech Pavlik
@ 2004-06-07 11:55 ` Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 27/39] input: Trailing whitespace fixes in drivers/input/keyboard Vojtech Pavlik
0 siblings, 1 reply; 41+ messages in thread
From: Vojtech Pavlik @ 2004-06-07 11:55 UTC (permalink / raw)
To: torvalds, akpm, vojtech, linux-kernel
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
ChangeSet@1.1587.27.6, 2004-05-10 01:30:08-05:00, dtor_core@ameritech.net
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(-)
===================================================================
diff -Nru a/drivers/input/joystick/twidjoy.c b/drivers/input/joystick/twidjoy.c
--- a/drivers/input/joystick/twidjoy.c 2004-06-07 13:11:29 +02:00
+++ b/drivers/input/joystick/twidjoy.c 2004-06-07 13:11:29 +02:00
@@ -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;
}
/*
^ permalink raw reply [flat|nested] 41+ messages in thread
* [PATCH 27/39] input: Trailing whitespace fixes in drivers/input/keyboard
2004-06-07 11:55 ` [PATCH 26/39] input: Twidjoy module fixes Vojtech Pavlik
@ 2004-06-07 11:55 ` Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 28/39] input: Power - add MODULE_LICENSE Vojtech Pavlik
0 siblings, 1 reply; 41+ messages in thread
From: Vojtech Pavlik @ 2004-06-07 11:55 UTC (permalink / raw)
To: torvalds, akpm, vojtech, linux-kernel
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
ChangeSet@1.1587.27.7, 2004-05-10 01:31:35-05:00, dtor_core@ameritech.net
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(-)
===================================================================
diff -Nru a/drivers/input/keyboard/98kbd.c b/drivers/input/keyboard/98kbd.c
--- a/drivers/input/keyboard/98kbd.c 2004-06-07 13:11:23 +02:00
+++ b/drivers/input/keyboard/98kbd.c 2004-06-07 13:11:23 +02:00
@@ -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);
diff -Nru a/drivers/input/keyboard/Kconfig b/drivers/input/keyboard/Kconfig
--- a/drivers/input/keyboard/Kconfig 2004-06-07 13:11:23 +02:00
+++ b/drivers/input/keyboard/Kconfig 2004-06-07 13:11:23 +02:00
@@ -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.
diff -Nru a/drivers/input/keyboard/maple_keyb.c b/drivers/input/keyboard/maple_keyb.c
--- a/drivers/input/keyboard/maple_keyb.c 2004-06-07 13:11:23 +02:00
+++ b/drivers/input/keyboard/maple_keyb.c 2004-06-07 13:11:23 +02:00
@@ -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);
diff -Nru a/drivers/input/keyboard/sunkbd.c b/drivers/input/keyboard/sunkbd.c
--- a/drivers/input/keyboard/sunkbd.c 2004-06-07 13:11:23 +02:00
+++ b/drivers/input/keyboard/sunkbd.c 2004-06-07 13:11:23 +02:00
@@ -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 <vojtech@ucw.cz>, 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;
diff -Nru a/drivers/input/keyboard/xtkbd.c b/drivers/input/keyboard/xtkbd.c
--- a/drivers/input/keyboard/xtkbd.c 2004-06-07 13:11:23 +02:00
+++ b/drivers/input/keyboard/xtkbd.c 2004-06-07 13:11:23 +02:00
@@ -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 <vojtech@ucw.cz>, 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;
^ permalink raw reply [flat|nested] 41+ messages in thread
* [PATCH 25/39] input: Various fixes for H3600 touchscreen driver
2004-06-07 11:55 ` [PATCH 24/39] input: kbd98_interrupt " Vojtech Pavlik
@ 2004-06-07 11:55 ` Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 26/39] input: Twidjoy module fixes Vojtech Pavlik
0 siblings, 1 reply; 41+ messages in thread
From: Vojtech Pavlik @ 2004-06-07 11:55 UTC (permalink / raw)
To: torvalds, akpm, vojtech, linux-kernel
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
ChangeSet@1.1587.27.5, 2004-05-10 01:29:33-05:00, dtor_core@ameritech.net
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(-)
===================================================================
diff -Nru a/drivers/input/touchscreen/h3600_ts_input.c b/drivers/input/touchscreen/h3600_ts_input.c
--- a/drivers/input/touchscreen/h3600_ts_input.c 2004-06-07 13:11:34 +02:00
+++ b/drivers/input/touchscreen/h3600_ts_input.c 2004-06-07 13:11:34 +02:00
@@ -45,6 +45,10 @@
#include <asm/arch/hardware.h>
#include <asm/arch/irqs.h>
+MODULE_AUTHOR("James Simmons <jsimmons@transvirtual.com>");
+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,
^ permalink raw reply [flat|nested] 41+ messages in thread
* [PATCH 23/39] input: kbd98io_interrupt should return irqreturn_t
2004-06-07 11:55 ` [PATCH 22/39] input: Trailing whitespace fixes in drivers/input/serio Vojtech Pavlik
@ 2004-06-07 11:55 ` Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 24/39] input: kbd98_interrupt " Vojtech Pavlik
0 siblings, 1 reply; 41+ messages in thread
From: Vojtech Pavlik @ 2004-06-07 11:55 UTC (permalink / raw)
To: torvalds, akpm, vojtech, linux-kernel
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
ChangeSet@1.1587.27.3, 2004-05-10 01:25:24-05:00, dtor_core@ameritech.net
Input: kbd98io_interrupt should return irqreturn_t
98kbd-io.c | 5 +++--
1 files changed, 3 insertions(+), 2 deletions(-)
===================================================================
diff -Nru a/drivers/input/serio/98kbd-io.c b/drivers/input/serio/98kbd-io.c
--- a/drivers/input/serio/98kbd-io.c 2004-06-07 13:11:46 +02:00
+++ b/drivers/input/serio/98kbd-io.c 2004-06-07 13:11:46 +02:00
@@ -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)
^ permalink raw reply [flat|nested] 41+ messages in thread
* [PATCH 21/39] input: Microtouch USB driver update
2004-06-07 11:55 ` [PATCH 20/39] input: Create input_set_abs_params() Vojtech Pavlik
@ 2004-06-07 11:55 ` Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 22/39] input: Trailing whitespace fixes in drivers/input/serio Vojtech Pavlik
2004-06-07 13:07 ` [PATCH 20/39] input: Create input_set_abs_params() Jan-Benedict Glaw
1 sibling, 1 reply; 41+ messages in thread
From: Vojtech Pavlik @ 2004-06-07 11:55 UTC (permalink / raw)
To: torvalds, akpm, vojtech, linux-kernel
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
ChangeSet@1.1587.11.28, 2004-04-30 18:14:24+02:00, tejohnson@yahoo.com
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(-)
===================================================================
diff -Nru a/Documentation/usb/mtouchusb.txt b/Documentation/usb/mtouchusb.txt
--- a/Documentation/usb/mtouchusb.txt 2004-06-07 13:11:57 +02:00
+++ b/Documentation/usb/mtouchusb.txt 2004-06-07 13:11:57 +02:00
@@ -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!
diff -Nru a/drivers/usb/input/mtouchusb.c b/drivers/usb/input/mtouchusb.c
--- a/drivers/usb/input/mtouchusb.c 2004-06-07 13:11:57 +02:00
+++ b/drivers/usb/input/mtouchusb.c 2004-06-07 13:11:57 +02:00
@@ -28,6 +28,12 @@
* Complete rewrite using Linux Input in 2.6.3
* Unfortunately no calibration support at this time
*
+ * 1.4 04/25/2004 (TEJ) tejohnson@yahoo.com
+ * 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
+ *
*****************************************************************************/
#include <linux/config.h>
@@ -45,25 +51,28 @@
#include <linux/init.h>
#include <linux/usb.h>
-#define MTOUCHUSB_MIN_XC 0xc8
-#define MTOUCHUSB_MAX_XC 0xff78
+#define MTOUCHUSB_MIN_XC 0x0
+#define MTOUCHUSB_MAX_XC 0x4000
#define MTOUCHUSB_XC_FUZZ 0x0
#define MTOUCHUSB_XC_FLAT 0x0
#define MTOUCHUSB_MIN_YC 0x0
-#define MTOUCHUSB_MAX_YC 0xff78
+#define MTOUCHUSB_MAX_YC 0x4000
#define MTOUCHUSB_YC_FUZZ 0x0
#define MTOUCHUSB_YC_FLAT 0x0
-#define MTOUCHUSB_ASYC_REPORT 1
-#define MTOUCHUSB_REPORT_SIZE_DATA 11
+
+#define MTOUCHUSB_ASYNC_REPORT 1
+#define MTOUCHUSB_RESET 7
+#define MTOUCHUSB_REPORT_DATA_SIZE 11
#define MTOUCHUSB_REQ_CTRLLR_ID 10
-#define MTOUCHUSB_GET_XC(data) (data[4]<<8 | data[3])
-#define MTOUCHUSB_GET_YC(data) (data[6]<<8 | data[5])
+#define MTOUCHUSB_GET_XC(data) (data[8]<<8 | data[7])
+#define MTOUCHUSB_GET_YC(data) (data[10]<<8 | data[9])
#define MTOUCHUSB_GET_TOUCHED(data) ((data[2] & 0x40) ? 1:0)
-#define DRIVER_VERSION "v0.1"
+#define DRIVER_VERSION "v1.4"
#define DRIVER_AUTHOR "Todd E. Johnson, tejohnson@yahoo.com"
-#define DRIVER_DESC "Microtouch USB HID Touchscreen Driver"
+#define DRIVER_DESC "3M USB Touchscreen Driver"
+#define DRIVER_LICENSE "GPL"
struct mtouch_usb {
unsigned char *data;
@@ -76,11 +85,9 @@
char phys[64];
};
-static __s32 vendor=-1, product=-1;
-
static struct usb_device_id mtouchusb_devices [] = {
- { USB_DEVICE(0x0596, 0x0001) }, /* 3M (Formerly MicroTouch) 14-206 */
- { } /* Terminating entry */
+ { USB_DEVICE(0x0596, 0x0001) },
+ { }
};
static void mtouchusb_irq(struct urb *urb, struct pt_regs *regs)
@@ -153,7 +160,7 @@
{
dbg("%s - called", __FUNCTION__);
- mtouch->data = usb_buffer_alloc(udev, MTOUCHUSB_REPORT_SIZE_DATA,
+ mtouch->data = usb_buffer_alloc(udev, MTOUCHUSB_REPORT_DATA_SIZE,
SLAB_ATOMIC, &mtouch->data_dma);
if (!mtouch->data)
@@ -167,7 +174,7 @@
dbg("%s - called", __FUNCTION__);
if (mtouch->data)
- usb_buffer_free(udev, MTOUCHUSB_REPORT_SIZE_DATA,
+ usb_buffer_free(udev, MTOUCHUSB_REPORT_DATA_SIZE,
mtouch->data, mtouch->data_dma);
}
@@ -180,41 +187,8 @@
char path[64];
char *buf;
int nRet;
- int ix;
- char valid_device = 0;
dbg("%s - called", __FUNCTION__);
- if (vendor != -1 && product != -1) {
- info("%s - User specified USB Touch -- Vend:Prod - %x:%x",
- __FUNCTION__, vendor, product);
- }
-
- for (ix = 0; ix < sizeof (mtouchusb_devices) /
- sizeof (struct usb_device_id); ix++) {
- if ((udev->descriptor.idVendor ==
- mtouchusb_devices [ix].idVendor) &&
- (udev->descriptor.idProduct ==
- mtouchusb_devices [ix].idProduct)) {
- valid_device = 1;
- break;
- }
- }
-
- if (udev->descriptor.idVendor == vendor &&
- udev->descriptor.idProduct == product) { /* User specified */
- valid_device = 1;
- }
-
- if (!valid_device) {
- err("%s - No valid device!", __FUNCTION__);
- return -EIO;
- }
-
- if (udev->descriptor.bNumConfigurations != 1) {
- err("%s - Only one device configuration is supported.",
- __FUNCTION__);
- return -EIO;
- }
dbg("%s - setting interface", __FUNCTION__);
interface = intf->cur_altsetting;
@@ -222,11 +196,6 @@
dbg("%s - setting endpoint", __FUNCTION__);
endpoint = &interface->endpoint[0].desc;
- if (interface->desc.bNumEndpoints != 1) {
- err("%s - Only one endpoint is supported.", __FUNCTION__);
- return -EIO;
- }
-
if (!(mtouch = kmalloc (sizeof (struct mtouch_usb), GFP_KERNEL))) {
err("%s - Out of memory.", __FUNCTION__);
return -ENOMEM;
@@ -266,8 +235,8 @@
mtouch->input.absmax[ABS_X] = MTOUCHUSB_MAX_XC;
mtouch->input.absfuzz[ABS_X] = MTOUCHUSB_XC_FUZZ;
mtouch->input.absflat[ABS_X] = MTOUCHUSB_XC_FLAT;
- mtouch->input.absmin[ABS_Y] = MTOUCHUSB_MAX_YC;
- mtouch->input.absmax[ABS_Y] = MTOUCHUSB_MIN_YC;
+ mtouch->input.absmin[ABS_Y] = MTOUCHUSB_MIN_YC;
+ mtouch->input.absmax[ABS_Y] = MTOUCHUSB_MAX_YC;
mtouch->input.absfuzz[ABS_Y] = MTOUCHUSB_YC_FUZZ;
mtouch->input.absflat[ABS_Y] = MTOUCHUSB_YC_FLAT;
@@ -290,15 +259,15 @@
kfree(buf);
nRet = usb_control_msg(mtouch->udev,
- usb_rcvctrlpipe(udev, 0x80),
- USB_REQ_GET_CONFIGURATION,
- USB_DIR_IN | USB_TYPE_STANDARD | USB_RECIP_DEVICE,
+ usb_rcvctrlpipe(udev, 0),
+ MTOUCHUSB_RESET,
+ USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
+ 1,
0,
- 0x81,
NULL,
0,
HZ * USB_CTRL_SET_TIMEOUT);
- dbg("%s - usb_control_msg - USB_REQ_GET_CONFIGURATION - bytes|err: %d",
+ dbg("%s - usb_control_msg - MTOUCHUSB_RESET - bytes|err: %d",
__FUNCTION__, nRet);
dbg("%s - usb_alloc_urb: mtouch->irq", __FUNCTION__);
@@ -315,7 +284,7 @@
mtouch->udev,
usb_rcvintpipe(mtouch->udev, 0x81),
mtouch->data,
- MTOUCHUSB_REPORT_SIZE_DATA,
+ MTOUCHUSB_REPORT_DATA_SIZE,
mtouchusb_irq,
mtouch,
endpoint->bInterval);
@@ -324,15 +293,15 @@
input_register_device(&mtouch->input);
nRet = usb_control_msg(mtouch->udev,
- usb_rcvctrlpipe(udev, 0x80),
- MTOUCHUSB_ASYC_REPORT,
+ usb_rcvctrlpipe(udev, 0),
+ MTOUCHUSB_ASYNC_REPORT,
USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE,
- MTOUCHUSB_ASYC_REPORT,
- MTOUCHUSB_ASYC_REPORT,
+ 1,
+ 1,
NULL,
0,
HZ * USB_CTRL_SET_TIMEOUT);
- dbg("%s - usb_control_msg - MTOUCHUSB_ASYC_REPORT - bytes|err: %d",
+ dbg("%s - usb_control_msg - MTOUCHUSB_ASYNC_REPORT - bytes|err: %d",
__FUNCTION__, nRet);
printk(KERN_INFO "input: %s on %s\n", mtouch->name, path);
@@ -383,9 +352,3 @@
MODULE_AUTHOR( DRIVER_AUTHOR );
MODULE_DESCRIPTION( DRIVER_DESC );
MODULE_LICENSE("GPL");
-MODULE_PARM(vendor, "i");
-MODULE_PARM_DESC(vendor, "User specified USB idVendor");
-MODULE_PARM(product, "i");
-MODULE_PARM_DESC(product, "User specified USB idProduct");
-
-
^ permalink raw reply [flat|nested] 41+ messages in thread
* [PATCH 34/39] input: i8042 - kill the timer only after removing interrupt handler
2004-06-07 11:55 ` [PATCH 33/39] input: Split i8042 interrupt handling into an IRQ handler and a tasklet [excluded later] Vojtech Pavlik
@ 2004-06-07 11:55 ` Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 35/39] input: Mousedev - better multiplex absolute and relative devices Vojtech Pavlik
0 siblings, 1 reply; 41+ messages in thread
From: Vojtech Pavlik @ 2004-06-07 11:55 UTC (permalink / raw)
To: torvalds, akpm, vojtech, linux-kernel
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
ChangeSet@1.1587.27.14, 2004-05-10 01:40:59-05:00, dtor_core@ameritech.net
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(-)
===================================================================
diff -Nru a/drivers/input/serio/i8042.c b/drivers/input/serio/i8042.c
--- a/drivers/input/serio/i8042.c 2004-06-07 13:10:43 +02:00
+++ b/drivers/input/serio/i8042.c 2004-06-07 13:10:43 +02:00
@@ -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();
^ permalink raw reply [flat|nested] 41+ messages in thread
* [PATCH 30/39] input: Trailing whitespace fixes in drivers/input/gameport
2004-06-07 11:55 ` [PATCH 29/39] input: Trailing whitespace fixes in drivers/input/joystick Vojtech Pavlik
@ 2004-06-07 11:55 ` Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 31/39] input: Trailing whitespace fixes in drivers/input Vojtech Pavlik
0 siblings, 1 reply; 41+ messages in thread
From: Vojtech Pavlik @ 2004-06-07 11:55 UTC (permalink / raw)
To: torvalds, akpm, vojtech, linux-kernel
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
ChangeSet@1.1587.27.10, 2004-05-10 01:34:55-05:00, dtor_core@ameritech.net
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(-)
===================================================================
diff -Nru a/drivers/input/gameport/cs461x.c b/drivers/input/gameport/cs461x.c
--- a/drivers/input/gameport/cs461x.c 2004-06-07 13:11:06 +02:00
+++ b/drivers/input/gameport/cs461x.c 2004-06-07 13:11:06 +02:00
@@ -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,
diff -Nru a/drivers/input/gameport/emu10k1-gp.c b/drivers/input/gameport/emu10k1-gp.c
--- a/drivers/input/gameport/emu10k1-gp.c 2004-06-07 13:11:06 +02:00
+++ b/drivers/input/gameport/emu10k1-gp.c 2004-06-07 13:11:06 +02:00
@@ -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 <vojtech@ucw.cz>, 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;
diff -Nru a/drivers/input/gameport/fm801-gp.c b/drivers/input/gameport/fm801-gp.c
--- a/drivers/input/gameport/fm801-gp.c 2004-06-07 13:11:06 +02:00
+++ b/drivers/input/gameport/fm801-gp.c 2004-06-07 13:11:06 +02:00
@@ -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);
diff -Nru a/drivers/input/gameport/gameport.c b/drivers/input/gameport/gameport.c
--- a/drivers/input/gameport/gameport.c 2004-06-07 13:11:06 +02:00
+++ b/drivers/input/gameport/gameport.c 2004-06-07 13:11:06 +02:00
@@ -168,7 +168,7 @@
return -1;
gameport->dev = dev;
-
+
return 0;
}
diff -Nru a/drivers/input/gameport/lightning.c b/drivers/input/gameport/lightning.c
--- a/drivers/input/gameport/lightning.c 2004-06-07 13:11:06 +02:00
+++ b/drivers/input/gameport/lightning.c 2004-06-07 13:11:06 +02:00
@@ -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 <vojtech@ucw.cz>, 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);
}
diff -Nru a/drivers/input/gameport/ns558.c b/drivers/input/gameport/ns558.c
--- a/drivers/input/gameport/ns558.c 2004-06-07 13:11:06 +02:00
+++ b/drivers/input/gameport/ns558.c 2004-06-07 13:11:06 +02:00
@@ -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 <vojtech@ucw.cz>, 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;
}
diff -Nru a/drivers/input/gameport/vortex.c b/drivers/input/gameport/vortex.c
--- a/drivers/input/gameport/vortex.c 2004-06-07 13:11:06 +02:00
+++ b/drivers/input/gameport/vortex.c 2004-06-07 13:11:06 +02:00
@@ -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);
^ permalink raw reply [flat|nested] 41+ messages in thread
* [PATCH 39/39] input: Exclude tasklet changes to i8042.c
2004-06-07 11:55 ` [PATCH 38/39] input: Fix oops in hiddev Vojtech Pavlik
@ 2004-06-07 11:55 ` Vojtech Pavlik
0 siblings, 0 replies; 41+ messages in thread
From: Vojtech Pavlik @ 2004-06-07 11:55 UTC (permalink / raw)
To: torvalds, akpm, vojtech, linux-kernel
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
ChangeSet@1.1846, 2004-06-07 12:56:10+02:00, vojtech@suse.cz
input: Exclude tasklet changes to i8042.c
Signed-off-by: Vojtech Pavlik <vojtech@suse.cz>
i8042.c | 141 ++++++++++++++++++++++------------------------------------------
1 files changed, 49 insertions(+), 92 deletions(-)
===================================================================
diff -Nru a/drivers/input/serio/i8042.c b/drivers/input/serio/i8042.c
--- a/drivers/input/serio/i8042.c 2004-06-07 13:10:15 +02:00
+++ b/drivers/input/serio/i8042.c 2004-06-07 13:10:15 +02:00
@@ -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();
}
^ permalink raw reply [flat|nested] 41+ messages in thread
* [PATCH 35/39] input: Mousedev - better multiplex absolute and relative devices
2004-06-07 11:55 ` [PATCH 34/39] input: i8042 - kill the timer only after removing interrupt handler Vojtech Pavlik
@ 2004-06-07 11:55 ` Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 36/39] input: Fix an oops at opentime of /dev/input/event devices Vojtech Pavlik
0 siblings, 1 reply; 41+ messages in thread
From: Vojtech Pavlik @ 2004-06-07 11:55 UTC (permalink / raw)
To: torvalds, akpm, vojtech, linux-kernel
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
ChangeSet@1.1587.27.15, 2004-05-10 01:44:03-05:00, dtor_core@ameritech.net
Input: mousedev - better multiplex absolute and relative devices;
cleanups
mousedev.c | 260 ++++++++++++++++++++++++++++++++++---------------------------
1 files changed, 146 insertions(+), 114 deletions(-)
===================================================================
diff -Nru a/drivers/input/mousedev.c b/drivers/input/mousedev.c
--- a/drivers/input/mousedev.c 2004-06-07 13:10:38 +02:00
+++ b/drivers/input/mousedev.c 2004-06-07 13:10:38 +02:00
@@ -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");
^ permalink raw reply [flat|nested] 41+ messages in thread
* [PATCH 36/39] input: Fix an oops at opentime of /dev/input/event devices
2004-06-07 11:55 ` [PATCH 35/39] input: Mousedev - better multiplex absolute and relative devices Vojtech Pavlik
@ 2004-06-07 11:55 ` Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 37/39] input: Check for IM Explorer mice even if IMPS check failed Vojtech Pavlik
0 siblings, 1 reply; 41+ messages in thread
From: Vojtech Pavlik @ 2004-06-07 11:55 UTC (permalink / raw)
To: torvalds, akpm, vojtech, linux-kernel
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
ChangeSet@1.1371.539.2, 2004-05-14 10:23:53+02:00, async@cc.gatech.edu
evdev.c:
input: Fix an oops at opentime of /dev/input/event devices
evdev.c | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
===================================================================
diff -Nru a/drivers/input/evdev.c b/drivers/input/evdev.c
--- a/drivers/input/evdev.c 2004-06-07 13:10:32 +02:00
+++ b/drivers/input/evdev.c 2004-06-07 13:10:32 +02:00
@@ -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;
^ permalink raw reply [flat|nested] 41+ messages in thread
* [PATCH 37/39] input: Check for IM Explorer mice even if IMPS check failed.
2004-06-07 11:55 ` [PATCH 36/39] input: Fix an oops at opentime of /dev/input/event devices Vojtech Pavlik
@ 2004-06-07 11:55 ` Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 38/39] input: Fix oops in hiddev Vojtech Pavlik
0 siblings, 1 reply; 41+ messages in thread
From: Vojtech Pavlik @ 2004-06-07 11:55 UTC (permalink / raw)
To: torvalds, akpm, vojtech, linux-kernel
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
ChangeSet@1.1612.1.17, 2004-05-14 11:18:46+02:00, vojtech@suse.cz
input: Check for IM Explorer mice even if IMPS check failed.
psmouse-base.c | 21 +++++++++++----------
1 files changed, 11 insertions(+), 10 deletions(-)
===================================================================
diff -Nru a/drivers/input/mouse/psmouse-base.c b/drivers/input/mouse/psmouse-base.c
--- a/drivers/input/mouse/psmouse-base.c 2004-06-07 13:10:27 +02:00
+++ b/drivers/input/mouse/psmouse-base.c 2004-06-07 13:10:27 +02:00
@@ -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;
^ permalink raw reply [flat|nested] 41+ messages in thread
* [PATCH 38/39] input: Fix oops in hiddev
2004-06-07 11:55 ` [PATCH 37/39] input: Check for IM Explorer mice even if IMPS check failed Vojtech Pavlik
@ 2004-06-07 11:55 ` Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 39/39] input: Exclude tasklet changes to i8042.c Vojtech Pavlik
0 siblings, 1 reply; 41+ messages in thread
From: Vojtech Pavlik @ 2004-06-07 11:55 UTC (permalink / raw)
To: torvalds, akpm, vojtech, linux-kernel
You can pull this changeset from:
bk://kernel.bkbits.net/vojtech/input-for-linus
===================================================================
ChangeSet@1.1612.1.19, 2004-05-17 13:02:06+02:00, tiwai@suse.de
input: Fix oops in hiddev
hiddev.c | 2 +-
1 files changed, 1 insertion(+), 1 deletion(-)
===================================================================
diff -Nru a/drivers/usb/input/hiddev.c b/drivers/usb/input/hiddev.c
--- a/drivers/usb/input/hiddev.c 2004-06-07 13:10:21 +02:00
+++ b/drivers/usb/input/hiddev.c 2004-06-07 13:10:21 +02:00
@@ -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);
}
^ permalink raw reply [flat|nested] 41+ messages in thread
* Re: [PATCH 20/39] input: Create input_set_abs_params()
2004-06-07 11:55 ` [PATCH 20/39] input: Create input_set_abs_params() Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 21/39] input: Microtouch USB driver update Vojtech Pavlik
@ 2004-06-07 13:07 ` Jan-Benedict Glaw
1 sibling, 0 replies; 41+ messages in thread
From: Jan-Benedict Glaw @ 2004-06-07 13:07 UTC (permalink / raw)
To: linux-kernel
[-- Attachment #1: Type: text/plain, Size: 1218 bytes --]
On Mon, 2004-06-07 13:55:53 +0200, Vojtech Pavlik <vojtech@suse.cz>
wrote in message <10866093531704@twilight.ucw.cz>:
> - make use of set_abs_params in touchscreen drivers
> @@ -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;
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
--
Jan-Benedict Glaw jbglaw@lug-owl.de . +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));
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 189 bytes --]
^ permalink raw reply [flat|nested] 41+ messages in thread
end of thread, other threads:[~2004-06-07 13:29 UTC | newest]
Thread overview: 41+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-06-07 11:50 [patches] Input update Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 1/39] input: Fix a workaround for USB Legacy detected as MUX in i8042.c Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 2/39] input: Profusion/ServerWorks chipset workaround in i8042.c for Ingo Molnar Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 3/39] input: Fix emulation of mouse reset (0xff) command Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 4/39] input: Synaptics driver cleanup Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 5/39] input: Support Synaptics touchpads that have separate middle button Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 6/39] input: Pass psmouse_extensions as a parameter Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 7/39] input: Soften ACK warning in atkbd Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 8/39] input: Fix trailing whitespace " Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 9/39] input: Remove unneeded fields in atkbd structure, convert to bitfields Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 10/39] input: Do not process scancodes in atkbd until fully initialized Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 11/39] input: Use reconnect instead of rescan in psmouse if possible Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 12/39] input: Move reconnect after errors to generic code in psmouse Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 13/39] input: Add protocol_handler to psmouse structure Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 14/39] input: Add psmouse_sliced_command Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 15/39] input: Do not modify device's properties when probing for protocol extensions Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 16/39] input: Allow disabling legacy psaux device Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 17/39] input: Serio trailing whitespace fixes Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 18/39] input: Make serio open and close methods optional Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 19/39] input: Trailing whitespace fixes Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 20/39] input: Create input_set_abs_params() Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 21/39] input: Microtouch USB driver update Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 22/39] input: Trailing whitespace fixes in drivers/input/serio Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 23/39] input: kbd98io_interrupt should return irqreturn_t Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 24/39] input: kbd98_interrupt " Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 25/39] input: Various fixes for H3600 touchscreen driver Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 26/39] input: Twidjoy module fixes Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 27/39] input: Trailing whitespace fixes in drivers/input/keyboard Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 28/39] input: Power - add MODULE_LICENSE Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 29/39] input: Trailing whitespace fixes in drivers/input/joystick Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 30/39] input: Trailing whitespace fixes in drivers/input/gameport Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 31/39] input: Trailing whitespace fixes in drivers/input Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 32/39] input: Do not call synaptics_init unless we are ready to do full mouse setup Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 33/39] input: Split i8042 interrupt handling into an IRQ handler and a tasklet [excluded later] Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 34/39] input: i8042 - kill the timer only after removing interrupt handler Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 35/39] input: Mousedev - better multiplex absolute and relative devices Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 36/39] input: Fix an oops at opentime of /dev/input/event devices Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 37/39] input: Check for IM Explorer mice even if IMPS check failed Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 38/39] input: Fix oops in hiddev Vojtech Pavlik
2004-06-07 11:55 ` [PATCH 39/39] input: Exclude tasklet changes to i8042.c Vojtech Pavlik
2004-06-07 13:07 ` [PATCH 20/39] input: Create input_set_abs_params() Jan-Benedict Glaw
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox