On Thursday 05,May,2011 03:15 AM, catcalls wrote: > Hi Owner, > > Interested in joining this group to learn about the USB functions of > the Linux kernel with hopes of one day writing a USB Keyboard Device > Driver. > > Just looking for pointers in the right direction of the source code. > > Kind regards, > > Mr A. Obrzut > > looking into the keyboard implementation the following are the files:
./drivers/char/keyboard.c ./drivers/s390/char/keyboard.c ./drivers/input/keyboard/sunkbd.c ./drivers/input/keyboard/gpio_keys.c ./drivers/input/keyboard/w90p910_keypad.c ./drivers/input/keyboard/hil_kbd.c ./drivers/input/keyboard/locomokbd.c ./drivers/input/keyboard/max7359_keypad.c ./drivers/input/keyboard/sh_keysc.c ./drivers/input/keyboard/xtkbd.c ./drivers/input/keyboard/pxa27x_keypad.c ./drivers/input/keyboard/lkkbd.c ./drivers/input/keyboard/matrix_keypad.c ./drivers/input/keyboard/maple_keyb.c ./drivers/input/keyboard/stowaway.c ./drivers/input/keyboard/pxa930_rotary.c ./drivers/input/keyboard/twl4030_keypad.c ./drivers/input/keyboard/hilkbd.c ./drivers/input/keyboard/ep93xx_keypad.c ./drivers/input/keyboard/adp5520-keys.c ./drivers/input/keyboard/jornada720_kbd.c ./drivers/input/keyboard/jornada680_kbd.c ./drivers/input/keyboard/tca6416-keypad.c ./drivers/input/keyboard/opencores-kbd.c ./drivers/input/keyboard/lm8323.c ./drivers/input/keyboard/qt2160.c ./drivers/input/keyboard/atkbd.c ./drivers/input/keyboard/davinci_keyscan.c ./drivers/input/keyboard/atakbd.c ./drivers/input/keyboard/adp5588-keys.c ./drivers/input/keyboard/omap-keypad.c ./drivers/input/keyboard/aaed2000_kbd.c ./drivers/input/keyboard/bf54x-keys.c ./drivers/input/keyboard/newtonkbd.c ./drivers/input/keyboard/amikbd.c ./drivers/input/keyboard/imx_keypad.c ./kernel/debug/kdb/kdb_keyboard.c But u can see many keypad - which is not a physical keyboard, but touchscreen based representation of a keyboard (where u can see from source code it is always trying to map the XY coordinates into the relevant keycodes). Doing a ftrace snapshot: <idle>-0 [000] 3491.542033: i8042_interrupt <-handle_irq_event_percpu <idle>-0 [000] 3491.542044: atkbd_interrupt <-serio_interrupt <idle>-0 [000] 3491.542051: atkbd_event <-input_handle_event <idle>-0 [000] 3491.542053: kbd_event <-input_pass_event <idle>-0 [000] 3491.542066: kbd_event <-input_pass_event <idle>-0 [000] 3491.542074: kbd_event <-input_pass_event <idle>-0 [000] 3491.542086: kbd_bh <-tasklet_action <idle>-0 [000] 3491.560647: i8042_interrupt <-handle_irq_event_percpu <idle>-0 [000] 3491.560655: atkbd_interrupt <-serio_interrupt <idle>-0 [000] 3491.560662: atkbd_event <-input_handle_event <idle>-0 [000] 3491.560664: kbd_event <-input_pass_event <idle>-0 [000] 3491.560677: kbd_event <-input_pass_event <idle>-0 [000] 3491.560684: kbd_event <-input_pass_event <idle>-0 [000] 3491.560695: kbd_bh <-tasklet_action <idle>-0 [001] 3491.596080: i8042_interrupt <-handle_irq_event_percpu <idle>-0 [001] 3491.596089: atkbd_interrupt <-serio_interrupt all the API above are sequentially executed by the kernel, and u can see that it using the traditional i8042 interrupt mechanism. For USB, I think it is not using this interrupt mechanism, BUT not sure, have to do a ftrace to be sure.