25 #include <linux/serio.h>
26 #include <linux/slab.h>
27 #include <linux/module.h>
38 static struct serio *ams_delta_serio;
40 static int check_data(
int data)
45 if (!(data & 0x400)) {
47 "invalid stop bit, data=0x%X\n",
52 for (i = 1; i < 10; i++) {
57 if (!(parity & 0x01)) {
59 "paritiy check failed, data=0x%X parity=0x%X\n",
85 dfl = check_data(data);
86 scancode = (
u8) (data >> 1) & 0xFF;
92 static int ams_delta_serio_open(
struct serio *
serio)
100 static void ams_delta_serio_close(
struct serio *
serio)
108 .gpio = AMS_DELTA_GPIO_PIN_KEYBRD_DATA,
110 .label =
"serio-data",
113 .gpio = AMS_DELTA_GPIO_PIN_KEYBRD_CLK,
115 .label =
"serio-clock",
118 .gpio = AMS_DELTA_GPIO_PIN_KEYBRD_PWR,
120 .label =
"serio-power",
123 .gpio = AMS_DELTA_GPIO_PIN_KEYBRD_DATAOUT,
125 .label =
"serio-dataout",
129 static int __init ams_delta_serio_init(
void)
133 if (!machine_is_ams_delta())
137 if (!ams_delta_serio)
141 ams_delta_serio->
open = ams_delta_serio_open;
142 ams_delta_serio->
close = ams_delta_serio_close;
143 strlcpy(ams_delta_serio->
name,
"AMS DELTA keyboard adapter",
144 sizeof(ams_delta_serio->
name));
146 sizeof(ams_delta_serio->
phys));
151 pr_err(
"ams_delta_serio: Couldn't request gpio pins\n");
157 "ams-delta-serio", 0);
159 pr_err(
"ams_delta_serio: couldn't request gpio interrupt %d\n",
168 irq_set_handler(
gpio_to_irq(AMS_DELTA_GPIO_PIN_KEYBRD_CLK),
179 kfree(ams_delta_serio);
184 static void __exit ams_delta_serio_exit(
void)