From: Soeren Sonnenburg <sonne@debian.org>
To: Linux Kernel <linux-kernel@vger.kernel.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>,
Adrian Bunk <bunk@stusta.de>,
Dmitry Torokhov <dmitry.torokhov@gmail.com>,
olh@suse.de, Jiri Slaby <jirislaby@gmail.com>
Subject: [PATCH] mouse button 1 emulation for mac_hid
Date: Mon, 09 Nov 2009 11:28:51 +0100 [thread overview]
Message-ID: <1257762531.7245.23.camel@no> (raw)
[-- Attachment #1.1: Type: text/plain, Size: 810 bytes --]
(this is a resent with all the people included in the CC that git
blame'd they are the authors).
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-)touchpads
where click and hold + moving the mouse does not work (yet?).
I am using this for over a week now with about that uptime - so it
should be safe.
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 #1.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 */
[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 836 bytes --]
next reply other threads:[~2009-11-09 11:07 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-11-09 10:28 Soeren Sonnenburg [this message]
2009-11-14 5:42 ` [PATCH] mouse button 1 emulation for mac_hid 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
-- strict thread matches above, loose matches on Subject: below --
2009-10-31 10:57 [PATCH] mouse button #1 " 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=1257762531.7245.23.camel@no \
--to=sonne@debian.org \
--cc=bunk@stusta.de \
--cc=dmitry.torokhov@gmail.com \
--cc=jirislaby@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=olh@suse.de \
--cc=torvalds@linux-foundation.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.