29 #include <linux/slab.h>
30 #include <linux/module.h>
31 #include <linux/input.h>
33 #include <linux/serio.h>
35 #define DRIVER_DESC "Newton keyboard driver"
42 #define NKBD_PRESS 0x80
44 static unsigned char nkbd_keycode[128] = {
53 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
54 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
55 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
56 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
62 struct input_dev *
dev;
70 struct nkbd *
nkbd = serio_get_drvdata(serio);
75 input_sync(nkbd->
dev);
78 else if (data == 0xe7)
84 static int nkbd_connect(
struct serio *serio,
struct serio_driver *drv)
87 struct input_dev *input_dev;
91 nkbd = kzalloc(
sizeof(
struct nkbd),
GFP_KERNEL);
92 input_dev = input_allocate_device();
93 if (!nkbd || !input_dev)
97 nkbd->
dev = input_dev;
101 input_dev->name =
"Newton Keyboard";
102 input_dev->phys = nkbd->
phys;
105 input_dev->id.product = 0x0001;
106 input_dev->id.version = 0x0100;
107 input_dev->dev.parent = &serio->
dev;
110 input_dev->keycode = nkbd->
keycode;
111 input_dev->keycodesize =
sizeof(
unsigned char);
112 input_dev->keycodemax =
ARRAY_SIZE(nkbd_keycode);
113 for (i = 0; i < 128; i++)
117 serio_set_drvdata(serio, nkbd);
123 err = input_register_device(nkbd->
dev);
130 fail2: serio_set_drvdata(serio,
NULL);
131 fail1: input_free_device(input_dev);
136 static void nkbd_disconnect(
struct serio *serio)
138 struct nkbd *nkbd = serio_get_drvdata(serio);
141 serio_set_drvdata(serio,
NULL);
142 input_unregister_device(nkbd->
dev);
163 .id_table = nkbd_serio_ids,
164 .interrupt = nkbd_interrupt,
165 .connect = nkbd_connect,
166 .disconnect = nkbd_disconnect,