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.
 


Reply via email to