                     ARCHITECTURE OF LINUX INPUT SUBSYSTEM


                                  +---------+
                                  | HANDLER |
                                  |  evdev  |
                                  +---------+
                                       |
                                   +-------+
                    +--------------| input |--------------+
                    |              +-------+              |
                    |                  |                  |
           +----------------+  +----------------+ +----------------+
           |     DEVICE     |  |     DEVICE     | |     DEVICE     |
           | psmouse-base.c |  |    atkbd.c     | |     hid.c      |
           +----------------+  +----------------+ +----------------+
                          \      /                        |
                        +---------+                   +-------+
                        |  serio  |                   |  usb  |
                        +---------+                   +-------+
                             |                            |
                      +--------------+                   ...
                      |     PORT     |
                      |    i8042.c   |
                      +--------------+

  i8042.c --(raw)--> atkbd.c --(events)--> input.c
  usb.c   --(raw)-->  hid.c  --(events)--> input.c
