All of lore.kernel.org
 help / color / mirror / Atom feed
From: Soeren Sonnenburg <sonne@debian.org>
To: Linux Kernel <linux-kernel@vger.kernel.org>
Subject: [PATCH] mouse button #1 emulation for mac_hid
Date: Sat, 31 Oct 2009 11:57:58 +0100	[thread overview]
Message-ID: <1256986678.18934.13.camel@no> (raw)

[-- Attachment #1: Type: text/plain, Size: 605 bytes --]

Dear all,

I am not sure what the future of mac_hid is (the source says will be
removed, but since 9 years). In case it stays in kernel the attached
patch adds support for mouse button 1 emulation. If this driver stays in
the kernel I would also suggest to rename it - it is not mac specific (I
am using this on a netbook).

Rationale? Broken touchpads, within linux unsupported (multi-)touch pads
where click and hold + moving the mouse does not work.

Soeren
-- 
For the one fact about the future of which we can be certain is that it
will be utterly fantastic. -- Arthur C. Clarke, 1962

[-- Attachment #2: mac_hid_lmb.diff --]
[-- Type: text/x-patch, Size: 3294 bytes --]

diff --git a/drivers/macintosh/mac_hid.c b/drivers/macintosh/mac_hid.c
index cc9f275..3aac90f 100644
--- a/drivers/macintosh/mac_hid.c
+++ b/drivers/macintosh/mac_hid.c
@@ -19,6 +19,7 @@
 static struct input_dev *emumousebtn;
 static int emumousebtn_input_register(void);
 static int mouse_emulate_buttons;
+static int mouse_button1_keycode = KEY_RIGHTSHIFT;	/* right shift key */
 static int mouse_button2_keycode = KEY_RIGHTCTRL;	/* right control key */
 static int mouse_button3_keycode = KEY_RIGHTALT;	/* right option key */
 static int mouse_last_keycode;
@@ -35,6 +36,14 @@ static ctl_table mac_hid_files[] = {
 		.proc_handler	= &proc_dointvec,
 	},
 	{
+		.ctl_name	= DEV_MAC_HID_MOUSE_BUTTON1_KEYCODE,
+		.procname	= "mouse_button1_keycode",
+		.data		= &mouse_button1_keycode,
+		.maxlen		= sizeof(int),
+		.mode		= 0644,
+		.proc_handler	= &proc_dointvec,
+	},
+	{
 		.ctl_name	= DEV_MAC_HID_MOUSE_BUTTON2_KEYCODE,
 		.procname	= "mouse_button2_keycode",
 		.data		= &mouse_button2_keycode,
@@ -83,16 +92,24 @@ static struct ctl_table_header *mac_hid_sysctl_header;
 
 int mac_hid_mouse_emulate_buttons(int caller, unsigned int keycode, int down)
 {
+	unsigned int reportcode;
+
 	switch (caller) {
 	case 1:
 		/* Called from keyboard.c */
 		if (mouse_emulate_buttons
-		    && (keycode == mouse_button2_keycode
-			|| keycode == mouse_button3_keycode)) {
+		    && (keycode == mouse_button1_keycode ||
+				keycode == mouse_button2_keycode ||
+				keycode == mouse_button3_keycode)) {
 			if (mouse_emulate_buttons == 1) {
-				input_report_key(emumousebtn,
-						 keycode == mouse_button2_keycode ? BTN_MIDDLE : BTN_RIGHT,
-						 down);
+				if (keycode==mouse_button1_keycode)
+					reportcode=BTN_LEFT;
+				else if (keycode==mouse_button2_keycode)
+					reportcode=BTN_MIDDLE;
+				else
+					reportcode=BTN_RIGHT;
+
+				input_report_key(emumousebtn, reportcode, down);
 				input_sync(emumousebtn);
 				return 1;
 			}
diff --git a/include/linux/sysctl.h b/include/linux/sysctl.h
index 1e4743e..d38f5a0 100644
--- a/include/linux/sysctl.h
+++ b/include/linux/sysctl.h
@@ -913,9 +913,10 @@ enum {
 	DEV_MAC_HID_KEYBOARD_SENDS_LINUX_KEYCODES=1,
 	DEV_MAC_HID_KEYBOARD_LOCK_KEYCODES=2,
 	DEV_MAC_HID_MOUSE_BUTTON_EMULATION=3,
-	DEV_MAC_HID_MOUSE_BUTTON2_KEYCODE=4,
-	DEV_MAC_HID_MOUSE_BUTTON3_KEYCODE=5,
-	DEV_MAC_HID_ADB_MOUSE_SENDS_KEYCODES=6
+	DEV_MAC_HID_MOUSE_BUTTON1_KEYCODE=4,
+	DEV_MAC_HID_MOUSE_BUTTON2_KEYCODE=5,
+	DEV_MAC_HID_MOUSE_BUTTON3_KEYCODE=6,
+	DEV_MAC_HID_ADB_MOUSE_SENDS_KEYCODES=7
 };
 
 /* /proc/sys/dev/scsi */
diff --git a/kernel/sysctl_check.c b/kernel/sysctl_check.c
index b6e7aae..60fa7fe 100644
--- a/kernel/sysctl_check.c
+++ b/kernel/sysctl_check.c
@@ -816,6 +816,7 @@ static const struct trans_ctl_table trans_mac_hid_files[] = {
 	/* DEV_MAC_HID_KEYBOARD_SENDS_LINUX_KEYCODES unused */
 	/* DEV_MAC_HID_KEYBOARD_LOCK_KEYCODES unused */
 	{ DEV_MAC_HID_MOUSE_BUTTON_EMULATION,	"mouse_button_emulation" },
+	{ DEV_MAC_HID_MOUSE_BUTTON1_KEYCODE,	"mouse_button1_keycode" },
 	{ DEV_MAC_HID_MOUSE_BUTTON2_KEYCODE,	"mouse_button2_keycode" },
 	{ DEV_MAC_HID_MOUSE_BUTTON3_KEYCODE,	"mouse_button3_keycode" },
 	/* DEV_MAC_HID_ADB_MOUSE_SENDS_KEYCODES unused */

             reply	other threads:[~2009-10-31 11:04 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2009-10-31 10:57 Soeren Sonnenburg [this message]
  -- strict thread matches above, loose matches on Subject: below --
2009-11-09 10:28 [PATCH] mouse button 1 emulation for mac_hid Soeren Sonnenburg
2009-11-14  5:42 ` Dmitry Torokhov
2009-11-14 10:31   ` Soeren Sonnenburg
2009-11-16 12:59   ` Jiri Kosina
2009-11-16 17:05     ` Dmitry Torokhov
2009-11-16 17:11       ` Soeren Sonnenburg

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=1256986678.18934.13.camel@no \
    --to=sonne@debian.org \
    --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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.