adbhid: enable KEY_FN key reporting
PATCH 1/1 adbhid: enable KEY_FN key reporting
This patch enables the KEY_FN reporting on ADB based machines. This is a needed step to move special key sequences handling to user space and to allow the usage of Fn key to other purposes. I've been running this for some days without problems.
drivers/macintosh/adbhid.c +10 -11
@@ -70,7 +70,7 @@#define ADB_KEY_POWER_OLD 0x7e#define ADB_KEY_POWER 0x7f -u8 adb_to_linux_keycodes[128 ] = { +u16 adb_to_linux_keycodes[128 ] = {/* 0x00 */ KEY_A ,/* 30 */ /* 0x01 */ KEY_S ,/* 31 */ /* 0x02 */ KEY_D ,/* 32 */
@@ -134,7 +134,7 @@/* 0x3c */ KEY_RIGHT ,/* 106 */ /* 0x3d */ KEY_DOWN ,/* 108 */ /* 0x3e */ KEY_UP ,/* 103 */ -/* 0x3f */ 0 , +/* 0x3f */ KEY_FN ,/* 0x1d0 */ /* 0x40 */ 0 ,/* 0x41 */ KEY_KPDOT ,/* 83 */ /* 0x42 */ 0,
@@ -208,7 +208,7 @@int original_handler_id;int current_handler_id;int mouse_kind; -unsigned char *keycode; +u16 *keycode;char name[64 ];char phys[32 ];int flags;
@@ -275,7 +275,7 @@ adbhid_input_keycode(int id, int keycode, int repeat, struct pt_regs *regs) { struct adbhid *ahid = adbhid[id]; -int up_flag; +int up_flag, key; up_flag = (keycode &0x80 ); keycode &=0x7f ;
@@ -322,8 +322,7 @@ } }else ahid->flags |=FLAG_FN_KEY_PRESSED ; -/* Swallow the key press */ -return ; +break ;case ADB_KEY_DEL :/* Emulate Fn+delete = forward delete */ if (ahid->flags &FLAG_FN_KEY_PRESSED ) {
@@ -337,10 +336,10 @@#endif /* CONFIG_PPC_PMAC */ } -if (adbhid[id]->keycode[keycode]) { + key = adbhid[id]->keycode[keycode]; +if (key) {input_regs (adbhid[id]->input, regs); -input_report_key (adbhid[id]->input, - adbhid[id]->keycode[keycode], !up_flag); +input_report_key (adbhid[id]->input, key, !up_flag);input_sync (adbhid[id]->input); }else printk(KERN_INFO "Unhandled ADB key (scancode %#02x) %s.\n", keycode,
@@ -764,8 +763,8 @@ input_dev->evbit[0 ] =BIT (EV_KEY ) |BIT (EV_LED ) |BIT (EV_REP ); input_dev->ledbit[0 ] =BIT (LED_SCROLLL ) |BIT (LED_CAPSL ) |BIT (LED_NUML ); input_dev->event = adbhid_kbd_event; - input_dev->keycodemax =127 ; - input_dev->keycodesize =1 ; + input_dev->keycodemax =KEY_FN ; + input_dev->keycodesize =sizeof (hid->keycode[0 ]);break ;case ADB_MOUSE :
Quoted 7 lines
This patch enables the
KEY_FNreporting on ADB based machines. This is a needed step to move special key sequences handling to user space and to allow the usage of Fn key to other purposes. I've been running this for some days without problems.Signed-off-by Aristeu S. Rozanski F. <[email protected]>
any comments on this one?
Quoted 79 lines
Index:
ppc-2.6/drivers/macintosh/adbhid.c
===================================================================drivers/macintosh/adbhid.c +10
-11@@ -70,7 +70,7 @@#define ADB_KEY_POWER_OLD 0x7e#define ADB_KEY_POWER 0x7f -u8 adb_to_linux_keycodes[128 ] = { +u16 adb_to_linux_keycodes[128 ] = {/* 0x00 */ KEY_A ,/* 30 */ /* 0x01 */ KEY_S ,/* 31 */ /* 0x02 */ KEY_D ,/* 32 */ @@ -134,7 +134,7 @@/* 0x3c */ KEY_RIGHT ,/* 106 */ /* 0x3d */ KEY_DOWN ,/* 108 */ /* 0x3e */ KEY_UP ,/* 103 */ -/* 0x3f */ 0 , +/* 0x3f */ KEY_FN ,/* 0x1d0 */ /* 0x40 */ 0 ,/* 0x41 */ KEY_KPDOT ,/* 83 */ /* 0x42 */ 0,@@ -208,7 +208,7 @@int original_handler_id;int current_handler_id;int mouse_kind; -unsigned char *keycode; +u16 *keycode;char name[64 ];char phys[32 ];int flags;@@ -275,7 +275,7 @@ adbhid_input_keycode(int id, int keycode, int repeat, struct pt_regs *regs) { struct adbhid *ahid = adbhid[id]; -int up_flag; +int up_flag, key; up_flag = (keycode &0x80 ); keycode &=0x7f ;@@ -322,8 +322,7 @@ } }else ahid->flags |=FLAG_FN_KEY_PRESSED ; -/* Swallow the key press */ -return ; +break ;case ADB_KEY_DEL :/* Emulate Fn+delete = forward delete */ if (ahid->flags &FLAG_FN_KEY_PRESSED ) {@@ -337,10 +336,10 @@#endif /* CONFIG_PPC_PMAC */ } -if (adbhid[id]->keycode[keycode]) { + key = adbhid[id]->keycode[keycode]; +if (key) {input_regs (adbhid[id]->input, regs); -input_report_key (adbhid[id]->input, - adbhid[id]->keycode[keycode], !up_flag); +input_report_key (adbhid[id]->input, key, !up_flag);input_sync (adbhid[id]->input); }else printk(KERN_INFO "Unhandled ADB key (scancode %#02x) %s.\n", keycode,@@ -764,8 +763,8 @@ input_dev->evbit[0 ] =BIT (EV_KEY ) |BIT (EV_LED ) |BIT (EV_REP ); input_dev->ledbit[0 ] =BIT (LED_SCROLLL ) |BIT (LED_CAPSL ) |BIT (LED_NUML ); input_dev->event = adbhid_kbd_event; - input_dev->keycodemax =127 ; - input_dev->keycodesize =1 ; + input_dev->keycodemax =KEY_FN ; + input_dev->keycodesize =sizeof (hid->keycode[0 ]);break ;case ADB_MOUSE :_______________________________________________
Linuxppc-dev mailing list
[email protected]
https://ozlabs.org/mailman/listinfo/linuxppc-dev
Signature · 1 line
Aristeu