Hi,

I am trying to trace kernel USB keyboard issue and will appreciate help
to trace it down.

Problem: 
Few dead keys on APPLE_GEYSER4_JIS USB keyboard on MacBook.

Situation:
(Pathless filenames refer to the files in devices/usb/input/.)

As I see hid-core.c defines 3 types of keybord for each generation of
apple laptop PCs ANSI, ISO, JIS.
----
#define USB_DEVICE_ID_APPLE_GEYSER_ANSI 0x0214
#define USB_DEVICE_ID_APPLE_GEYSER_ISO  0x0215
#define USB_DEVICE_ID_APPLE_GEYSER_JIS  0x0216
#define USB_DEVICE_ID_APPLE_GEYSER3_ANSI x0217
#define USB_DEVICE_ID_APPLE_GEYSER3_ISO x0218
#define USB_DEVICE_ID_APPLE_GEYSER3_JIS x0219
#define USB_DEVICE_ID_APPLE_GEYSER4_ANSI x021A
#define USB_DEVICE_ID_APPLE_GEYSER4_ISO x021B
#define USB_DEVICE_ID_APPLE_GEYSER4_JIS x021C
----
These are model names and:
 ANSI is the 101 key sequence variant for USA.
 ISO  is the 102 key sequence variant for Europe.
 JSI  is the 106 key sequence variant for Japan.
I have x021C model (MacBook JP) here.

The key sequence difference between ANSI and ISO is taken care by
conditional (hid->quirks & HID_QUIRK_POWERBOOK_ISO_KEYBOARD) in
hid-input.c which swaps KEY_GRAVE and KEY_102ND using table
powerbook_iso_keyboard.

But I see no code for JIS.  Naturally I am suffering problem on my
MacBook(JP model) and need help to track down method to address this
problem.  I see no response with xev or showkey program.

Dead response keys are marked as following and cause following 8 byte
data to be passed to the kernel routines:

  MARKS               : _____U8_DATA__(HEX)____  TBL-> KEYCODE
  Yen-mark and bar    : 00 00 89 00 00 00 00 00   124  KEY_YEN
  Japanese RO         : 00 00 87 00 00 00 00 00    89  KEY_RO
  EISUU               : 00 00 91 00 00 00 00 00   123  KEY_HANGUL
  HIRAGANA/KATAKANA   : 00 00 89 00 00 00 00 00   122  KEY_HANJA

All other normal keys emmit real scan code in the 3rd BYTE and the talbe 
  static const unsigned char hid_keyboard[256] in hid-input.c converts
them to the Linux keycode (the one used by loadkeys and xmodmap) .
Funny thing is hid_keyboard table in source is valid for JIS but it does
not emmit keycode to user space.

I captured above 8 byte data sequence of key event by enabling DEBUG out
put in hid_input_report of hid-core.c.  This is the 8 byte data 
    u8 *data = urb->transfer_buffer

Funny thing is this key data will not come to the routine to convert
from hardware specific scan code to the Linux keycode using hid_keyboard
table
  static void hidinput_configure_usage(struct hid_input *hidinput, struct 
hid_field *field, struct hid_usage *usage)
in hid-input.c.  So of course these are not passed to user space. 

I am not quite sure how these data evaporates in the kernel.  I see no
particular code to prevents them. 

Linux HID code get them so it is not hardware initialization issue and
these key responses are drop in the kernel code and must be fixed there.

Osamu


-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Mactel-linux-devel mailing list
Mactel-linux-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/mactel-linux-devel

Reply via email to