mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Kim Holviala <kim@holviala.com>
To: linux-kernel@vger.kernel.org
Subject: [PATCH] Targus Scroller mouse wheel support for kernel 2.6.5
Date: Thu, 8 Apr 2004 11:59:37 +0300	[thread overview]
Message-ID: <200404081159.37996.kim@holviala.com> (raw)


Targus mice boot in their own three-byte PS/2 protocol variant mode
and the support for that was missing. They can be switched to normal
ImPS/2, but a lot of laptops filter PS/2 traffic so external mice can't
be switched to other modes.

This patch adds support for such mice or more specifically, support
for the wheel. Since this protocol can't be detected, the parameter
psmouse.proto=targus must be specified in kernel parameters.

Flame away as this is my first post to LKML.


Kim




diff -ruN linux-2.6.5-orig/Documentation/kernel-parameters.txt linux-2.6.5-targus/Documentation/kernel-parameters.txt
--- linux-2.6.5-orig/Documentation/kernel-parameters.txt	2004-04-04 06:38:27.000000000 +0300
+++ linux-2.6.5-targus/Documentation/kernel-parameters.txt	2004-04-08 11:38:02.236991644 +0300
@@ -875,7 +875,7 @@
 			See Documentation/ramdisk.txt.
 
 	psmouse.proto=  [HW,MOUSE] Highest PS2 mouse protocol extension to
-			probe for (bare|imps|exps).
+			probe for (bare|imps|exps|targus).
 	psmouse.rate=	[HW,MOUSE] Set desired mouse report rate, in reports
 			per second.
 	psmouse.resetafter=
diff -ruN linux-2.6.5-orig/drivers/input/mouse/Kconfig linux-2.6.5-targus/drivers/input/mouse/Kconfig
--- linux-2.6.5-orig/drivers/input/mouse/Kconfig	2004-04-04 06:37:45.000000000 +0300
+++ linux-2.6.5-targus/drivers/input/mouse/Kconfig	2004-04-08 11:29:01.490187080 +0300
@@ -33,6 +33,9 @@
 	  If you do not want install specialized drivers but want tapping
 	  working please use option psmouse.proto=imps.
 
+	  If you have a Targus Scroller mouse and the scroll wheel moves the
+	  cursor instead of scrolling, use option psmouse.proto=targus.
+
 	  If unsure, say Y.
 
 	  To compile this driver as a module, choose M here: the
diff -ruN linux-2.6.5-orig/drivers/input/mouse/psmouse-base.c linux-2.6.5-targus/drivers/input/mouse/psmouse-base.c
--- linux-2.6.5-orig/drivers/input/mouse/psmouse-base.c	2004-04-04 06:36:27.000000000 +0300
+++ linux-2.6.5-targus/drivers/input/mouse/psmouse-base.c	2004-04-08 11:37:45.104063584 +0300
@@ -10,6 +10,13 @@
  * the Free Software Foundation.
  */
 
+/*
+ * 2004/04/08 -- Kim Holviala - Added support for the Targus Scroller mouse
+ * and it's own three-byte PS/2 protocol variant. Requires proto=targus
+ * since it's impossible to detect.
+ */
+
+
 #include <linux/delay.h>
 #include <linux/module.h>
 #include <linux/moduleparam.h>
@@ -29,7 +36,7 @@
 static char *psmouse_proto;
 static unsigned int psmouse_max_proto = -1U;
 module_param_named(proto, psmouse_proto, charp, 0);
-MODULE_PARM_DESC(proto, "Highest protocol extension to probe (bare, imps, exps). Useful for KVM switches.");
+MODULE_PARM_DESC(proto, "Highest protocol extension to probe (bare, imps, exps, targus). Useful for KVM switches.");
 
 int psmouse_resolution = 200;
 module_param_named(resolution, psmouse_resolution, uint, 0);
@@ -53,7 +60,7 @@
 __obsolete_setup("psmouse_resetafter=");
 __obsolete_setup("psmouse_rate=");
 
-static char *psmouse_protocols[] = { "None", "PS/2", "PS2++", "PS2T++", "GenPS/2", "ImPS/2", "ImExPS/2", "SynPS/2"};
+static char *psmouse_protocols[] = { "None", "PS/2", "TgsPS/2", "PS2++", "PS2T++", "GenPS/2", "ImPS/2", "ImExPS/2", "SynPS/2"};
 
 /*
  * psmouse_process_packet() analyzes the PS/2 mouse packet contents and
@@ -101,6 +108,15 @@
 	}
 
 /*
+ * Scroll wheel on Targus Scroller
+ */
+
+	if (psmouse->type == PSMOUSE_TARGUS && ((packet[2] >> 2) & 0x20) != (packet[0] & 0x20)) {
+		input_report_rel(dev, REL_WHEEL, -(signed char) packet[2]);
+		packet[2] = 0;
+	}
+
+/*
  * Generic PS/2 Mouse
  */
 
@@ -428,6 +444,19 @@
 	}
 
 /*
+ * Targus Scroller mice have their own protocol for the scroll wheel
+ * which works even when ImPS/2 mode can't be set. Unfortunately this
+ * is impossible to detect, so we'll just trust the proto setting.
+ */
+	if (psmouse_max_proto == PSMOUSE_TARGUS) {
+		psmouse->vendor = "Targus";
+		psmouse->name = "Scroller Mouse";
+		set_bit(REL_WHEEL, psmouse->dev.relbit);
+
+		return PSMOUSE_TARGUS;
+	}
+
+/*
  * Okay, all failed, we have a standard mouse here. The number of the buttons
  * is still a question, though. We assume 3.
  */
@@ -722,6 +751,8 @@
 			psmouse_max_proto = PSMOUSE_IMPS;
 		else if (!strcmp(psmouse_proto, "exps"))
 			psmouse_max_proto = PSMOUSE_IMEX;
+		else if (!strcmp(psmouse_proto, "targus"))
+			psmouse_max_proto = PSMOUSE_TARGUS;
 		else
 			printk(KERN_ERR "psmouse: unknown protocol type '%s'\n", psmouse_proto);
 	}
diff -ruN linux-2.6.5-orig/drivers/input/mouse/psmouse.h linux-2.6.5-targus/drivers/input/mouse/psmouse.h
--- linux-2.6.5-orig/drivers/input/mouse/psmouse.h	2004-04-04 06:38:13.000000000 +0300
+++ linux-2.6.5-targus/drivers/input/mouse/psmouse.h	2004-04-08 11:29:01.492186839 +0300
@@ -57,12 +57,13 @@
 };
 
 #define PSMOUSE_PS2		1
-#define PSMOUSE_PS2PP		2
-#define PSMOUSE_PS2TPP		3
-#define PSMOUSE_GENPS		4
-#define PSMOUSE_IMPS		5
-#define PSMOUSE_IMEX		6
-#define PSMOUSE_SYNAPTICS 	7
+#define PSMOUSE_TARGUS		2
+#define PSMOUSE_PS2PP		3
+#define PSMOUSE_PS2TPP		4
+#define PSMOUSE_GENPS		5
+#define PSMOUSE_IMPS		6
+#define PSMOUSE_IMEX		7
+#define PSMOUSE_SYNAPTICS 	8
 
 int psmouse_command(struct psmouse *psmouse, unsigned char *param, int command);
 int psmouse_reset(struct psmouse *psmouse);

                 reply	other threads:[~2004-04-08  8:59 UTC|newest]

Thread overview: [no followups] expand[flat|nested]  mbox.gz  Atom feed

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=200404081159.37996.kim@holviala.com \
    --to=kim@holviala.com \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®