aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/input/serio
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2009-12-09 22:52:01 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2009-12-09 22:52:01 -0500
commitfa395aaec823b9d1a5800913a6b5d0e6d1c5ced2 (patch)
treed599abe9f4f48f1737da50fa9a48dadfd08100e3 /drivers/input/serio
parent3e7468313758913c5e4d372f35b271b96bad1298 (diff)
parent1f26978afd123deb22dd3c7dc75771a02f6e03f6 (diff)
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input: (51 commits) Input: appletouch - give up maintainership Input: dm355evm_kbd - switch to using sparse keymap library Input: wistron_btns - switch to using sparse keymap library Input: add generic support for sparse keymaps Input: fix memory leak in force feedback core Input: wistron - remove identification strings from DMI table Input: psmouse - remove identification strings from DMI tables Input: atkbd - remove identification strings from DMI table Input: i8042 - remove identification strings from DMI tables DMI: allow omitting ident strings in DMI tables Input: psmouse - do not carry DMI data around Input: matrix-keypad - switch to using dev_pm_ops Input: keyboard - fix lack of locking when traversing handler->h_list Input: gpio_keys - scan gpio state at probe and resume time Input: keyboard - add locking around event handling Input: usbtouchscreen - add support for ET&T TC5UH touchscreen controller Input: xpad - add two new Xbox 360 devices Input: polled device - do not start polling if interval is zero Input: polled device - schedule first poll immediately Input: add S3C24XX touchscreen driver ...
Diffstat (limited to 'drivers/input/serio')
-rw-r--r--drivers/input/serio/Kconfig8
-rw-r--r--drivers/input/serio/Makefile1
-rw-r--r--drivers/input/serio/altera_ps2.c200
-rw-r--r--drivers/input/serio/i8042-x86ia64io.h143
4 files changed, 275 insertions, 77 deletions
diff --git a/drivers/input/serio/Kconfig b/drivers/input/serio/Kconfig
index aa533ceffe3..7e319d65ec5 100644
--- a/drivers/input/serio/Kconfig
+++ b/drivers/input/serio/Kconfig
@@ -201,4 +201,12 @@ config SERIO_XILINX_XPS_PS2
201 To compile this driver as a module, choose M here: the 201 To compile this driver as a module, choose M here: the
202 module will be called xilinx_ps2. 202 module will be called xilinx_ps2.
203 203
204config SERIO_ALTERA_PS2
205 tristate "Altera UP PS/2 controller"
206 help
207 Say Y here if you have Altera University Program PS/2 ports.
208
209 To compile this driver as a module, choose M here: the
210 module will be called altera_ps2.
211
204endif 212endif
diff --git a/drivers/input/serio/Makefile b/drivers/input/serio/Makefile
index 9b6c8135955..bf945f789d0 100644
--- a/drivers/input/serio/Makefile
+++ b/drivers/input/serio/Makefile
@@ -22,3 +22,4 @@ obj-$(CONFIG_SERIO_MACEPS2) += maceps2.o
22obj-$(CONFIG_SERIO_LIBPS2) += libps2.o 22obj-$(CONFIG_SERIO_LIBPS2) += libps2.o
23obj-$(CONFIG_SERIO_RAW) += serio_raw.o 23obj-$(CONFIG_SERIO_RAW) += serio_raw.o
24obj-$(CONFIG_SERIO_XILINX_XPS_PS2) += xilinx_ps2.o 24obj-$(CONFIG_SERIO_XILINX_XPS_PS2) += xilinx_ps2.o
25obj-$(CONFIG_SERIO_ALTERA_PS2) += altera_ps2.o
diff --git a/drivers/input/serio/altera_ps2.c b/drivers/input/serio/altera_ps2.c
new file mode 100644
index 00000000000..f479ea50919
--- /dev/null
+++ b/drivers/input/serio/altera_ps2.c
@@ -0,0 +1,200 @@
1/*
2 * Altera University Program PS2 controller driver
3 *
4 * Copyright (C) 2008 Thomas Chou <thomas@wytron.com.tw>
5 *
6 * Based on sa1111ps2.c, which is:
7 * Copyright (C) 2002 Russell King
8 *
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License version 2 as
11 * published by the Free Software Foundation.
12 */
13
14#include <linux/module.h>
15#include <linux/init.h>
16#include <linux/input.h>
17#include <linux/serio.h>
18#include <linux/interrupt.h>
19#include <linux/platform_device.h>
20#include <linux/io.h>
21
22#define DRV_NAME "altera_ps2"
23
24struct ps2if {
25 struct serio *io;
26 struct resource *iomem_res;
27 void __iomem *base;
28 unsigned irq;
29};
30
31/*
32 * Read all bytes waiting in the PS2 port. There should be
33 * at the most one, but we loop for safety.
34 */
35static irqreturn_t altera_ps2_rxint(int irq, void *dev_id)
36{
37 struct ps2if *ps2if = dev_id;
38 unsigned int status;
39 int handled = IRQ_NONE;
40
41 while ((status = readl(ps2if->base)) & 0xffff0000) {
42 serio_interrupt(ps2if->io, status & 0xff, 0);
43 handled = IRQ_HANDLED;
44 }
45
46 return handled;
47}
48
49/*
50 * Write a byte to the PS2 port.
51 */
52static int altera_ps2_write(struct serio *io, unsigned char val)
53{
54 struct ps2if *ps2if = io->port_data;
55
56 writel(val, ps2if->base);
57 return 0;
58}
59
60static int altera_ps2_open(struct serio *io)
61{
62 struct ps2if *ps2if = io->port_data;
63
64 /* clear fifo */
65 while (readl(ps2if->base) & 0xffff0000)
66 /* empty */;
67
68 writel(1, ps2if->base + 4); /* enable rx irq */
69 return 0;
70}
71
72static void altera_ps2_close(struct serio *io)
73{
74 struct ps2if *ps2if = io->port_data;
75
76 writel(0, ps2if->base); /* disable rx irq */
77}
78
79/*
80 * Add one device to this driver.
81 */
82static int altera_ps2_probe(struct platform_device *pdev)
83{
84 struct ps2if *ps2if;
85 struct serio *serio;
86 int error;
87
88 ps2if = kzalloc(sizeof(struct ps2if), GFP_KERNEL);
89 serio = kzalloc(sizeof(struct serio), GFP_KERNEL);
90 if (!ps2if || !serio) {
91 error = -ENOMEM;
92 goto err_free_mem;
93 }
94
95 serio->id.type = SERIO_8042;
96 serio->write = altera_ps2_write;
97 serio->open = altera_ps2_open;
98 serio->close = altera_ps2_close;
99 strlcpy(serio->name, dev_name(&pdev->dev), sizeof(serio->name));
100 strlcpy(serio->phys, dev_name(&pdev->dev), sizeof(serio->phys));
101 serio->port_data = ps2if;
102 serio->dev.parent = &pdev->dev;
103 ps2if->io = serio;
104
105 ps2if->iomem_res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
106 if (ps2if->iomem_res == NULL) {
107 error = -ENOENT;
108 goto err_free_mem;
109 }
110
111 ps2if->irq = platform_get_irq(pdev, 0);
112 if (ps2if->irq < 0) {
113 error = -ENXIO;
114 goto err_free_mem;
115 }
116
117 if (!request_mem_region(ps2if->iomem_res->start,
118 resource_size(ps2if->iomem_res), pdev->name)) {
119 error = -EBUSY;
120 goto err_free_mem;
121 }
122
123 ps2if->base = ioremap(ps2if->iomem_res->start,
124 resource_size(ps2if->iomem_res));
125 if (!ps2if->base) {
126 error = -ENOMEM;
127 goto err_free_res;
128 }
129
130 error = request_irq(ps2if->irq, altera_ps2_rxint, 0, pdev->name, ps2if);
131 if (error) {
132 dev_err(&pdev->dev, "could not allocate IRQ %d: %d\n",
133 ps2if->irq, error);
134 goto err_unmap;
135 }
136
137 dev_info(&pdev->dev, "base %p, irq %d\n", ps2if->base, ps2if->irq);
138
139 serio_register_port(ps2if->io);
140 platform_set_drvdata(pdev, ps2if);
141
142 return 0;
143
144 err_unmap:
145 iounmap(ps2if->base);
146 err_free_res:
147 release_mem_region(ps2if->iomem_res->start,
148 resource_size(ps2if->iomem_res));
149 err_free_mem:
150 kfree(ps2if);
151 kfree(serio);
152 return error;
153}
154
155/*
156 * Remove one device from this driver.
157 */
158static int altera_ps2_remove(struct platform_device *pdev)
159{
160 struct ps2if *ps2if = platform_get_drvdata(pdev);
161
162 platform_set_drvdata(pdev, NULL);
163 serio_unregister_port(ps2if->io);
164 free_irq(ps2if->irq, ps2if);
165 iounmap(ps2if->base);
166 release_mem_region(ps2if->iomem_res->start,
167 resource_size(ps2if->iomem_res));
168 kfree(ps2if);
169
170 return 0;
171}
172
173/*
174 * Our device driver structure
175 */
176static struct platform_driver altera_ps2_driver = {
177 .probe = altera_ps2_probe,
178 .remove = altera_ps2_remove,
179 .driver = {
180 .name = DRV_NAME,
181 },
182};
183
184static int __init altera_ps2_init(void)
185{
186 return platform_driver_register(&altera_ps2_driver);
187}
188
189static void __exit altera_ps2_exit(void)
190{
191 platform_driver_unregister(&altera_ps2_driver);
192}
193
194module_init(altera_ps2_init);
195module_exit(altera_ps2_exit);
196
197MODULE_DESCRIPTION("Altera University Program PS2 controller driver");
198MODULE_AUTHOR("Thomas Chou <thomas@wytron.com.tw>");
199MODULE_LICENSE("GPL");
200MODULE_ALIAS("platform:" DRV_NAME);
diff --git a/drivers/input/serio/i8042-x86ia64io.h b/drivers/input/serio/i8042-x86ia64io.h
index 2bcf1ace27c..7fbffe431bc 100644
--- a/drivers/input/serio/i8042-x86ia64io.h
+++ b/drivers/input/serio/i8042-x86ia64io.h
@@ -67,10 +67,12 @@ static inline void i8042_write_command(int val)
67 67
68#include <linux/dmi.h> 68#include <linux/dmi.h>
69 69
70static struct dmi_system_id __initdata i8042_dmi_noloop_table[] = { 70static const struct dmi_system_id __initconst i8042_dmi_noloop_table[] = {
71 { 71 {
72 /* AUX LOOP command does not raise AUX IRQ */ 72 /*
73 .ident = "Arima-Rioworks HDAMB", 73 * Arima-Rioworks HDAMB -
74 * AUX LOOP command does not raise AUX IRQ
75 */
74 .matches = { 76 .matches = {
75 DMI_MATCH(DMI_BOARD_VENDOR, "RIOWORKS"), 77 DMI_MATCH(DMI_BOARD_VENDOR, "RIOWORKS"),
76 DMI_MATCH(DMI_BOARD_NAME, "HDAMB"), 78 DMI_MATCH(DMI_BOARD_NAME, "HDAMB"),
@@ -78,7 +80,7 @@ static struct dmi_system_id __initdata i8042_dmi_noloop_table[] = {
78 }, 80 },
79 }, 81 },
80 { 82 {
81 .ident = "ASUS G1S", 83 /* ASUS G1S */
82 .matches = { 84 .matches = {
83 DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer Inc."), 85 DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer Inc."),
84 DMI_MATCH(DMI_BOARD_NAME, "G1S"), 86 DMI_MATCH(DMI_BOARD_NAME, "G1S"),
@@ -86,8 +88,7 @@ static struct dmi_system_id __initdata i8042_dmi_noloop_table[] = {
86 }, 88 },
87 }, 89 },
88 { 90 {
89 /* AUX LOOP command does not raise AUX IRQ */ 91 /* ASUS P65UP5 - AUX LOOP command does not raise AUX IRQ */
90 .ident = "ASUS P65UP5",
91 .matches = { 92 .matches = {
92 DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."), 93 DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK Computer INC."),
93 DMI_MATCH(DMI_BOARD_NAME, "P/I-P65UP5"), 94 DMI_MATCH(DMI_BOARD_NAME, "P/I-P65UP5"),
@@ -95,7 +96,6 @@ static struct dmi_system_id __initdata i8042_dmi_noloop_table[] = {
95 }, 96 },
96 }, 97 },
97 { 98 {
98 .ident = "Compaq Proliant 8500",
99 .matches = { 99 .matches = {
100 DMI_MATCH(DMI_SYS_VENDOR, "Compaq"), 100 DMI_MATCH(DMI_SYS_VENDOR, "Compaq"),
101 DMI_MATCH(DMI_PRODUCT_NAME , "ProLiant"), 101 DMI_MATCH(DMI_PRODUCT_NAME , "ProLiant"),
@@ -103,7 +103,6 @@ static struct dmi_system_id __initdata i8042_dmi_noloop_table[] = {
103 }, 103 },
104 }, 104 },
105 { 105 {
106 .ident = "Compaq Proliant DL760",
107 .matches = { 106 .matches = {
108 DMI_MATCH(DMI_SYS_VENDOR, "Compaq"), 107 DMI_MATCH(DMI_SYS_VENDOR, "Compaq"),
109 DMI_MATCH(DMI_PRODUCT_NAME , "ProLiant"), 108 DMI_MATCH(DMI_PRODUCT_NAME , "ProLiant"),
@@ -111,7 +110,7 @@ static struct dmi_system_id __initdata i8042_dmi_noloop_table[] = {
111 }, 110 },
112 }, 111 },
113 { 112 {
114 .ident = "OQO Model 01", 113 /* OQO Model 01 */
115 .matches = { 114 .matches = {
116 DMI_MATCH(DMI_SYS_VENDOR, "OQO"), 115 DMI_MATCH(DMI_SYS_VENDOR, "OQO"),
117 DMI_MATCH(DMI_PRODUCT_NAME, "ZEPTO"), 116 DMI_MATCH(DMI_PRODUCT_NAME, "ZEPTO"),
@@ -119,8 +118,7 @@ static struct dmi_system_id __initdata i8042_dmi_noloop_table[] = {
119 }, 118 },
120 }, 119 },
121 { 120 {
122 /* AUX LOOP does not work properly */ 121 /* ULI EV4873 - AUX LOOP does not work properly */
123 .ident = "ULI EV4873",
124 .matches = { 122 .matches = {
125 DMI_MATCH(DMI_SYS_VENDOR, "ULI"), 123 DMI_MATCH(DMI_SYS_VENDOR, "ULI"),
126 DMI_MATCH(DMI_PRODUCT_NAME, "EV4873"), 124 DMI_MATCH(DMI_PRODUCT_NAME, "EV4873"),
@@ -128,7 +126,7 @@ static struct dmi_system_id __initdata i8042_dmi_noloop_table[] = {
128 }, 126 },
129 }, 127 },
130 { 128 {
131 .ident = "Microsoft Virtual Machine", 129 /* Microsoft Virtual Machine */
132 .matches = { 130 .matches = {
133 DMI_MATCH(DMI_SYS_VENDOR, "Microsoft Corporation"), 131 DMI_MATCH(DMI_SYS_VENDOR, "Microsoft Corporation"),
134 DMI_MATCH(DMI_PRODUCT_NAME, "Virtual Machine"), 132 DMI_MATCH(DMI_PRODUCT_NAME, "Virtual Machine"),
@@ -136,7 +134,7 @@ static struct dmi_system_id __initdata i8042_dmi_noloop_table[] = {
136 }, 134 },
137 }, 135 },
138 { 136 {
139 .ident = "Medion MAM 2070", 137 /* Medion MAM 2070 */
140 .matches = { 138 .matches = {
141 DMI_MATCH(DMI_SYS_VENDOR, "Notebook"), 139 DMI_MATCH(DMI_SYS_VENDOR, "Notebook"),
142 DMI_MATCH(DMI_PRODUCT_NAME, "MAM 2070"), 140 DMI_MATCH(DMI_PRODUCT_NAME, "MAM 2070"),
@@ -144,7 +142,7 @@ static struct dmi_system_id __initdata i8042_dmi_noloop_table[] = {
144 }, 142 },
145 }, 143 },
146 { 144 {
147 .ident = "Blue FB5601", 145 /* Blue FB5601 */
148 .matches = { 146 .matches = {
149 DMI_MATCH(DMI_SYS_VENDOR, "blue"), 147 DMI_MATCH(DMI_SYS_VENDOR, "blue"),
150 DMI_MATCH(DMI_PRODUCT_NAME, "FB5601"), 148 DMI_MATCH(DMI_PRODUCT_NAME, "FB5601"),
@@ -152,7 +150,7 @@ static struct dmi_system_id __initdata i8042_dmi_noloop_table[] = {
152 }, 150 },
153 }, 151 },
154 { 152 {
155 .ident = "Gigabyte M912", 153 /* Gigabyte M912 */
156 .matches = { 154 .matches = {
157 DMI_MATCH(DMI_SYS_VENDOR, "GIGABYTE"), 155 DMI_MATCH(DMI_SYS_VENDOR, "GIGABYTE"),
158 DMI_MATCH(DMI_PRODUCT_NAME, "M912"), 156 DMI_MATCH(DMI_PRODUCT_NAME, "M912"),
@@ -160,7 +158,6 @@ static struct dmi_system_id __initdata i8042_dmi_noloop_table[] = {
160 }, 158 },
161 }, 159 },
162 { 160 {
163 .ident = "HP DV9700",
164 .matches = { 161 .matches = {
165 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), 162 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
166 DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion dv9700"), 163 DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion dv9700"),
@@ -177,72 +174,72 @@ static struct dmi_system_id __initdata i8042_dmi_noloop_table[] = {
177 * ... apparently some Toshibas don't like MUX mode either and 174 * ... apparently some Toshibas don't like MUX mode either and
178 * die horrible death on reboot. 175 * die horrible death on reboot.
179 */ 176 */
180static struct dmi_system_id __initdata i8042_dmi_nomux_table[] = { 177static const struct dmi_system_id __initconst i8042_dmi_nomux_table[] = {
181 { 178 {
182 .ident = "Fujitsu Lifebook P7010/P7010D", 179 /* Fujitsu Lifebook P7010/P7010D */
183 .matches = { 180 .matches = {
184 DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"), 181 DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
185 DMI_MATCH(DMI_PRODUCT_NAME, "P7010"), 182 DMI_MATCH(DMI_PRODUCT_NAME, "P7010"),
186 }, 183 },
187 }, 184 },
188 { 185 {
189 .ident = "Fujitsu Lifebook P7010", 186 /* Fujitsu Lifebook P7010 */
190 .matches = { 187 .matches = {
191 DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"), 188 DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"),
192 DMI_MATCH(DMI_PRODUCT_NAME, "0000000000"), 189 DMI_MATCH(DMI_PRODUCT_NAME, "0000000000"),
193 }, 190 },
194 }, 191 },
195 { 192 {
196 .ident = "Fujitsu Lifebook P5020D", 193 /* Fujitsu Lifebook P5020D */
197 .matches = { 194 .matches = {
198 DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"), 195 DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
199 DMI_MATCH(DMI_PRODUCT_NAME, "LifeBook P Series"), 196 DMI_MATCH(DMI_PRODUCT_NAME, "LifeBook P Series"),
200 }, 197 },
201 }, 198 },
202 { 199 {
203 .ident = "Fujitsu Lifebook S2000", 200 /* Fujitsu Lifebook S2000 */
204 .matches = { 201 .matches = {
205 DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"), 202 DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
206 DMI_MATCH(DMI_PRODUCT_NAME, "LifeBook S Series"), 203 DMI_MATCH(DMI_PRODUCT_NAME, "LifeBook S Series"),
207 }, 204 },
208 }, 205 },
209 { 206 {
210 .ident = "Fujitsu Lifebook S6230", 207 /* Fujitsu Lifebook S6230 */
211 .matches = { 208 .matches = {
212 DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"), 209 DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
213 DMI_MATCH(DMI_PRODUCT_NAME, "LifeBook S6230"), 210 DMI_MATCH(DMI_PRODUCT_NAME, "LifeBook S6230"),
214 }, 211 },
215 }, 212 },
216 { 213 {
217 .ident = "Fujitsu T70H", 214 /* Fujitsu T70H */
218 .matches = { 215 .matches = {
219 DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"), 216 DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
220 DMI_MATCH(DMI_PRODUCT_NAME, "FMVLT70H"), 217 DMI_MATCH(DMI_PRODUCT_NAME, "FMVLT70H"),
221 }, 218 },
222 }, 219 },
223 { 220 {
224 .ident = "Fujitsu-Siemens Lifebook T3010", 221 /* Fujitsu-Siemens Lifebook T3010 */
225 .matches = { 222 .matches = {
226 DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"), 223 DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"),
227 DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK T3010"), 224 DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK T3010"),
228 }, 225 },
229 }, 226 },
230 { 227 {
231 .ident = "Fujitsu-Siemens Lifebook E4010", 228 /* Fujitsu-Siemens Lifebook E4010 */
232 .matches = { 229 .matches = {
233 DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"), 230 DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"),
234 DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK E4010"), 231 DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK E4010"),
235 }, 232 },
236 }, 233 },
237 { 234 {
238 .ident = "Fujitsu-Siemens Amilo Pro 2010", 235 /* Fujitsu-Siemens Amilo Pro 2010 */
239 .matches = { 236 .matches = {
240 DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"), 237 DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"),
241 DMI_MATCH(DMI_PRODUCT_NAME, "AMILO Pro V2010"), 238 DMI_MATCH(DMI_PRODUCT_NAME, "AMILO Pro V2010"),
242 }, 239 },
243 }, 240 },
244 { 241 {
245 .ident = "Fujitsu-Siemens Amilo Pro 2030", 242 /* Fujitsu-Siemens Amilo Pro 2030 */
246 .matches = { 243 .matches = {
247 DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"), 244 DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU SIEMENS"),
248 DMI_MATCH(DMI_PRODUCT_NAME, "AMILO PRO V2030"), 245 DMI_MATCH(DMI_PRODUCT_NAME, "AMILO PRO V2030"),
@@ -253,7 +250,7 @@ static struct dmi_system_id __initdata i8042_dmi_nomux_table[] = {
253 * No data is coming from the touchscreen unless KBC 250 * No data is coming from the touchscreen unless KBC
254 * is in legacy mode. 251 * is in legacy mode.
255 */ 252 */
256 .ident = "Panasonic CF-29", 253 /* Panasonic CF-29 */
257 .matches = { 254 .matches = {
258 DMI_MATCH(DMI_SYS_VENDOR, "Matsushita"), 255 DMI_MATCH(DMI_SYS_VENDOR, "Matsushita"),
259 DMI_MATCH(DMI_PRODUCT_NAME, "CF-29"), 256 DMI_MATCH(DMI_PRODUCT_NAME, "CF-29"),
@@ -261,10 +258,10 @@ static struct dmi_system_id __initdata i8042_dmi_nomux_table[] = {
261 }, 258 },
262 { 259 {
263 /* 260 /*
264 * Errors on MUX ports are reported without raising AUXDATA 261 * HP Pavilion DV4017EA -
262 * errors on MUX ports are reported without raising AUXDATA
265 * causing "spurious NAK" messages. 263 * causing "spurious NAK" messages.
266 */ 264 */
267 .ident = "HP Pavilion DV4017EA",
268 .matches = { 265 .matches = {
269 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), 266 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
270 DMI_MATCH(DMI_PRODUCT_NAME, "Pavilion dv4000 (EA032EA#ABF)"), 267 DMI_MATCH(DMI_PRODUCT_NAME, "Pavilion dv4000 (EA032EA#ABF)"),
@@ -272,9 +269,9 @@ static struct dmi_system_id __initdata i8042_dmi_nomux_table[] = {
272 }, 269 },
273 { 270 {
274 /* 271 /*
275 * Like DV4017EA does not raise AUXERR for errors on MUX ports. 272 * HP Pavilion ZT1000 -
273 * like DV4017EA does not raise AUXERR for errors on MUX ports.
276 */ 274 */
277 .ident = "HP Pavilion ZT1000",
278 .matches = { 275 .matches = {
279 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), 276 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
280 DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion Notebook PC"), 277 DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion Notebook PC"),
@@ -283,44 +280,41 @@ static struct dmi_system_id __initdata i8042_dmi_nomux_table[] = {
283 }, 280 },
284 { 281 {
285 /* 282 /*
286 * Like DV4017EA does not raise AUXERR for errors on MUX ports. 283 * HP Pavilion DV4270ca -
284 * like DV4017EA does not raise AUXERR for errors on MUX ports.
287 */ 285 */
288 .ident = "HP Pavilion DV4270ca",
289 .matches = { 286 .matches = {
290 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"), 287 DMI_MATCH(DMI_SYS_VENDOR, "Hewlett-Packard"),
291 DMI_MATCH(DMI_PRODUCT_NAME, "Pavilion dv4000 (EH476UA#ABL)"), 288 DMI_MATCH(DMI_PRODUCT_NAME, "Pavilion dv4000 (EH476UA#ABL)"),
292 }, 289 },
293 }, 290 },
294 { 291 {
295 .ident = "Toshiba P10",
296 .matches = { 292 .matches = {
297 DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), 293 DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"),
298 DMI_MATCH(DMI_PRODUCT_NAME, "Satellite P10"), 294 DMI_MATCH(DMI_PRODUCT_NAME, "Satellite P10"),
299 }, 295 },
300 }, 296 },
301 { 297 {
302 .ident = "Toshiba Equium A110",
303 .matches = { 298 .matches = {
304 DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), 299 DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"),
305 DMI_MATCH(DMI_PRODUCT_NAME, "EQUIUM A110"), 300 DMI_MATCH(DMI_PRODUCT_NAME, "EQUIUM A110"),
306 }, 301 },
307 }, 302 },
308 { 303 {
309 .ident = "Alienware Sentia",
310 .matches = { 304 .matches = {
311 DMI_MATCH(DMI_SYS_VENDOR, "ALIENWARE"), 305 DMI_MATCH(DMI_SYS_VENDOR, "ALIENWARE"),
312 DMI_MATCH(DMI_PRODUCT_NAME, "Sentia"), 306 DMI_MATCH(DMI_PRODUCT_NAME, "Sentia"),
313 }, 307 },
314 }, 308 },
315 { 309 {
316 .ident = "Sharp Actius MM20", 310 /* Sharp Actius MM20 */
317 .matches = { 311 .matches = {
318 DMI_MATCH(DMI_SYS_VENDOR, "SHARP"), 312 DMI_MATCH(DMI_SYS_VENDOR, "SHARP"),
319 DMI_MATCH(DMI_PRODUCT_NAME, "PC-MM20 Series"), 313 DMI_MATCH(DMI_PRODUCT_NAME, "PC-MM20 Series"),
320 }, 314 },
321 }, 315 },
322 { 316 {
323 .ident = "Sony Vaio FS-115b", 317 /* Sony Vaio FS-115b */
324 .matches = { 318 .matches = {
325 DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"), 319 DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
326 DMI_MATCH(DMI_PRODUCT_NAME, "VGN-FS115B"), 320 DMI_MATCH(DMI_PRODUCT_NAME, "VGN-FS115B"),
@@ -328,73 +322,72 @@ static struct dmi_system_id __initdata i8042_dmi_nomux_table[] = {
328 }, 322 },
329 { 323 {
330 /* 324 /*
331 * Reset and GET ID commands issued via KBD port are 325 * Sony Vaio FZ-240E -
326 * reset and GET ID commands issued via KBD port are
332 * sometimes being delivered to AUX3. 327 * sometimes being delivered to AUX3.
333 */ 328 */
334 .ident = "Sony Vaio FZ-240E",
335 .matches = { 329 .matches = {
336 DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"), 330 DMI_MATCH(DMI_SYS_VENDOR, "Sony Corporation"),
337 DMI_MATCH(DMI_PRODUCT_NAME, "VGN-FZ240E"), 331 DMI_MATCH(DMI_PRODUCT_NAME, "VGN-FZ240E"),
338 }, 332 },
339 }, 333 },
340 { 334 {
341 .ident = "Amoi M636/A737", 335 /* Amoi M636/A737 */
342 .matches = { 336 .matches = {
343 DMI_MATCH(DMI_SYS_VENDOR, "Amoi Electronics CO.,LTD."), 337 DMI_MATCH(DMI_SYS_VENDOR, "Amoi Electronics CO.,LTD."),
344 DMI_MATCH(DMI_PRODUCT_NAME, "M636/A737 platform"), 338 DMI_MATCH(DMI_PRODUCT_NAME, "M636/A737 platform"),
345 }, 339 },
346 }, 340 },
347 { 341 {
348 .ident = "Lenovo 3000 n100", 342 /* Lenovo 3000 n100 */
349 .matches = { 343 .matches = {
350 DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), 344 DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"),
351 DMI_MATCH(DMI_PRODUCT_NAME, "076804U"), 345 DMI_MATCH(DMI_PRODUCT_NAME, "076804U"),
352 }, 346 },
353 }, 347 },
354 { 348 {
355 .ident = "Acer Aspire 1360",
356 .matches = { 349 .matches = {
357 DMI_MATCH(DMI_SYS_VENDOR, "Acer"), 350 DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
358 DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 1360"), 351 DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 1360"),
359 }, 352 },
360 }, 353 },
361 { 354 {
362 .ident = "Gericom Bellagio", 355 /* Gericom Bellagio */
363 .matches = { 356 .matches = {
364 DMI_MATCH(DMI_SYS_VENDOR, "Gericom"), 357 DMI_MATCH(DMI_SYS_VENDOR, "Gericom"),
365 DMI_MATCH(DMI_PRODUCT_NAME, "N34AS6"), 358 DMI_MATCH(DMI_PRODUCT_NAME, "N34AS6"),
366 }, 359 },
367 }, 360 },
368 { 361 {
369 .ident = "IBM 2656", 362 /* IBM 2656 */
370 .matches = { 363 .matches = {
371 DMI_MATCH(DMI_SYS_VENDOR, "IBM"), 364 DMI_MATCH(DMI_SYS_VENDOR, "IBM"),
372 DMI_MATCH(DMI_PRODUCT_NAME, "2656"), 365 DMI_MATCH(DMI_PRODUCT_NAME, "2656"),
373 }, 366 },
374 }, 367 },
375 { 368 {
376 .ident = "Dell XPS M1530", 369 /* Dell XPS M1530 */
377 .matches = { 370 .matches = {
378 DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), 371 DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
379 DMI_MATCH(DMI_PRODUCT_NAME, "XPS M1530"), 372 DMI_MATCH(DMI_PRODUCT_NAME, "XPS M1530"),
380 }, 373 },
381 }, 374 },
382 { 375 {
383 .ident = "Compal HEL80I", 376 /* Compal HEL80I */
384 .matches = { 377 .matches = {
385 DMI_MATCH(DMI_SYS_VENDOR, "COMPAL"), 378 DMI_MATCH(DMI_SYS_VENDOR, "COMPAL"),
386 DMI_MATCH(DMI_PRODUCT_NAME, "HEL80I"), 379 DMI_MATCH(DMI_PRODUCT_NAME, "HEL80I"),
387 }, 380 },
388 }, 381 },
389 { 382 {
390 .ident = "Dell Vostro 1510", 383 /* Dell Vostro 1510 */
391 .matches = { 384 .matches = {
392 DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), 385 DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
393 DMI_MATCH(DMI_PRODUCT_NAME, "Vostro1510"), 386 DMI_MATCH(DMI_PRODUCT_NAME, "Vostro1510"),
394 }, 387 },
395 }, 388 },
396 { 389 {
397 .ident = "Acer Aspire 5536", 390 /* Acer Aspire 5536 */
398 .matches = { 391 .matches = {
399 DMI_MATCH(DMI_SYS_VENDOR, "Acer"), 392 DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
400 DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5536"), 393 DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5536"),
@@ -404,65 +397,65 @@ static struct dmi_system_id __initdata i8042_dmi_nomux_table[] = {
404 { } 397 { }
405}; 398};
406 399
407static struct dmi_system_id __initdata i8042_dmi_reset_table[] = { 400static const struct dmi_system_id __initconst i8042_dmi_reset_table[] = {
408 { 401 {
409 .ident = "MSI Wind U-100", 402 /* MSI Wind U-100 */
410 .matches = { 403 .matches = {
411 DMI_MATCH(DMI_BOARD_NAME, "U-100"), 404 DMI_MATCH(DMI_BOARD_NAME, "U-100"),
412 DMI_MATCH(DMI_BOARD_VENDOR, "MICRO-STAR INTERNATIONAL CO., LTD"), 405 DMI_MATCH(DMI_BOARD_VENDOR, "MICRO-STAR INTERNATIONAL CO., LTD"),
413 }, 406 },
414 }, 407 },
415 { 408 {
416 .ident = "LG Electronics X110", 409 /* LG Electronics X110 */
417 .matches = { 410 .matches = {
418 DMI_MATCH(DMI_BOARD_NAME, "X110"), 411 DMI_MATCH(DMI_BOARD_NAME, "X110"),
419 DMI_MATCH(DMI_BOARD_VENDOR, "LG Electronics Inc."), 412 DMI_MATCH(DMI_BOARD_VENDOR, "LG Electronics Inc."),
420 }, 413 },
421 }, 414 },
422 { 415 {
423 .ident = "Acer Aspire One 150", 416 /* Acer Aspire One 150 */
424 .matches = { 417 .matches = {
425 DMI_MATCH(DMI_SYS_VENDOR, "Acer"), 418 DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
426 DMI_MATCH(DMI_PRODUCT_NAME, "AOA150"), 419 DMI_MATCH(DMI_PRODUCT_NAME, "AOA150"),
427 }, 420 },
428 }, 421 },
429 { 422 {
430 .ident = "Advent 4211", 423 /* Advent 4211 */
431 .matches = { 424 .matches = {
432 DMI_MATCH(DMI_SYS_VENDOR, "DIXONSXP"), 425 DMI_MATCH(DMI_SYS_VENDOR, "DIXONSXP"),
433 DMI_MATCH(DMI_PRODUCT_NAME, "Advent 4211"), 426 DMI_MATCH(DMI_PRODUCT_NAME, "Advent 4211"),
434 }, 427 },
435 }, 428 },
436 { 429 {
437 .ident = "Medion Akoya Mini E1210", 430 /* Medion Akoya Mini E1210 */
438 .matches = { 431 .matches = {
439 DMI_MATCH(DMI_SYS_VENDOR, "MEDION"), 432 DMI_MATCH(DMI_SYS_VENDOR, "MEDION"),
440 DMI_MATCH(DMI_PRODUCT_NAME, "E1210"), 433 DMI_MATCH(DMI_PRODUCT_NAME, "E1210"),
441 }, 434 },
442 }, 435 },
443 { 436 {
444 .ident = "Mivvy M310", 437 /* Mivvy M310 */
445 .matches = { 438 .matches = {
446 DMI_MATCH(DMI_SYS_VENDOR, "VIOOO"), 439 DMI_MATCH(DMI_SYS_VENDOR, "VIOOO"),
447 DMI_MATCH(DMI_PRODUCT_NAME, "N10"), 440 DMI_MATCH(DMI_PRODUCT_NAME, "N10"),
448 }, 441 },
449 }, 442 },
450 { 443 {
451 .ident = "Dell Vostro 1320", 444 /* Dell Vostro 1320 */
452 .matches = { 445 .matches = {
453 DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), 446 DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
454 DMI_MATCH(DMI_PRODUCT_NAME, "Vostro 1320"), 447 DMI_MATCH(DMI_PRODUCT_NAME, "Vostro 1320"),
455 }, 448 },
456 }, 449 },
457 { 450 {
458 .ident = "Dell Vostro 1520", 451 /* Dell Vostro 1520 */
459 .matches = { 452 .matches = {
460 DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), 453 DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
461 DMI_MATCH(DMI_PRODUCT_NAME, "Vostro 1520"), 454 DMI_MATCH(DMI_PRODUCT_NAME, "Vostro 1520"),
462 }, 455 },
463 }, 456 },
464 { 457 {
465 .ident = "Dell Vostro 1720", 458 /* Dell Vostro 1720 */
466 .matches = { 459 .matches = {
467 DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."), 460 DMI_MATCH(DMI_SYS_VENDOR, "Dell Inc."),
468 DMI_MATCH(DMI_PRODUCT_NAME, "Vostro 1720"), 461 DMI_MATCH(DMI_PRODUCT_NAME, "Vostro 1720"),
@@ -472,16 +465,16 @@ static struct dmi_system_id __initdata i8042_dmi_reset_table[] = {
472}; 465};
473 466
474#ifdef CONFIG_PNP 467#ifdef CONFIG_PNP
475static struct dmi_system_id __initdata i8042_dmi_nopnp_table[] = { 468static const struct dmi_system_id __initconst i8042_dmi_nopnp_table[] = {
476 { 469 {
477 .ident = "Intel MBO Desktop D845PESV", 470 /* Intel MBO Desktop D845PESV */
478 .matches = { 471 .matches = {
479 DMI_MATCH(DMI_BOARD_NAME, "D845PESV"), 472 DMI_MATCH(DMI_BOARD_NAME, "D845PESV"),
480 DMI_MATCH(DMI_BOARD_VENDOR, "Intel Corporation"), 473 DMI_MATCH(DMI_BOARD_VENDOR, "Intel Corporation"),
481 }, 474 },
482 }, 475 },
483 { 476 {
484 .ident = "MSI Wind U-100", 477 /* MSI Wind U-100 */
485 .matches = { 478 .matches = {
486 DMI_MATCH(DMI_BOARD_NAME, "U-100"), 479 DMI_MATCH(DMI_BOARD_NAME, "U-100"),
487 DMI_MATCH(DMI_BOARD_VENDOR, "MICRO-STAR INTERNATIONAL CO., LTD"), 480 DMI_MATCH(DMI_BOARD_VENDOR, "MICRO-STAR INTERNATIONAL CO., LTD"),
@@ -490,27 +483,23 @@ static struct dmi_system_id __initdata i8042_dmi_nopnp_table[] = {
490 { } 483 { }
491}; 484};
492 485
493static struct dmi_system_id __initdata i8042_dmi_laptop_table[] = { 486static const struct dmi_system_id __initconst i8042_dmi_laptop_table[] = {
494 { 487 {
495 .ident = "Portable",
496 .matches = { 488 .matches = {
497 DMI_MATCH(DMI_CHASSIS_TYPE, "8"), /* Portable */ 489 DMI_MATCH(DMI_CHASSIS_TYPE, "8"), /* Portable */
498 }, 490 },
499 }, 491 },
500 { 492 {
501 .ident = "Laptop",
502 .matches = { 493 .matches = {
503 DMI_MATCH(DMI_CHASSIS_TYPE, "9"), /* Laptop */ 494 DMI_MATCH(DMI_CHASSIS_TYPE, "9"), /* Laptop */
504 }, 495 },
505 }, 496 },
506 { 497 {
507 .ident = "Notebook",
508 .matches = { 498 .matches = {
509 DMI_MATCH(DMI_CHASSIS_TYPE, "10"), /* Notebook */ 499 DMI_MATCH(DMI_CHASSIS_TYPE, "10"), /* Notebook */
510 }, 500 },
511 }, 501 },
512 { 502 {
513 .ident = "Sub-Notebook",
514 .matches = { 503 .matches = {
515 DMI_MATCH(DMI_CHASSIS_TYPE, "14"), /* Sub-Notebook */ 504 DMI_MATCH(DMI_CHASSIS_TYPE, "14"), /* Sub-Notebook */
516 }, 505 },
@@ -525,58 +514,58 @@ static struct dmi_system_id __initdata i8042_dmi_laptop_table[] = {
525 * Originally, this was just confined to older laptops, but a few Acer laptops 514 * Originally, this was just confined to older laptops, but a few Acer laptops
526 * have turned up in 2007 that also need this again. 515 * have turned up in 2007 that also need this again.
527 */ 516 */
528static struct dmi_system_id __initdata i8042_dmi_dritek_table[] = { 517static const struct dmi_system_id __initconst i8042_dmi_dritek_table[] = {
529 { 518 {
530 .ident = "Acer Aspire 5630", 519 /* Acer Aspire 5630 */
531 .matches = { 520 .matches = {
532 DMI_MATCH(DMI_SYS_VENDOR, "Acer"), 521 DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
533 DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5630"), 522 DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5630"),
534 }, 523 },
535 }, 524 },
536 { 525 {
537 .ident = "Acer Aspire 5650", 526 /* Acer Aspire 5650 */
538 .matches = { 527 .matches = {
539 DMI_MATCH(DMI_SYS_VENDOR, "Acer"), 528 DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
540 DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5650"), 529 DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5650"),
541 }, 530 },
542 }, 531 },
543 { 532 {
544 .ident = "Acer Aspire 5680", 533 /* Acer Aspire 5680 */
545 .matches = { 534 .matches = {
546 DMI_MATCH(DMI_SYS_VENDOR, "Acer"), 535 DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
547 DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5680"), 536 DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5680"),
548 }, 537 },
549 }, 538 },
550 { 539 {
551 .ident = "Acer Aspire 5720", 540 /* Acer Aspire 5720 */
552 .matches = { 541 .matches = {
553 DMI_MATCH(DMI_SYS_VENDOR, "Acer"), 542 DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
554 DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5720"), 543 DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 5720"),
555 }, 544 },
556 }, 545 },
557 { 546 {
558 .ident = "Acer Aspire 9110", 547 /* Acer Aspire 9110 */
559 .matches = { 548 .matches = {
560 DMI_MATCH(DMI_SYS_VENDOR, "Acer"), 549 DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
561 DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 9110"), 550 DMI_MATCH(DMI_PRODUCT_NAME, "Aspire 9110"),
562 }, 551 },
563 }, 552 },
564 { 553 {
565 .ident = "Acer TravelMate 660", 554 /* Acer TravelMate 660 */
566 .matches = { 555 .matches = {
567 DMI_MATCH(DMI_SYS_VENDOR, "Acer"), 556 DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
568 DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 660"), 557 DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 660"),
569 }, 558 },
570 }, 559 },
571 { 560 {
572 .ident = "Acer TravelMate 2490", 561 /* Acer TravelMate 2490 */
573 .matches = { 562 .matches = {
574 DMI_MATCH(DMI_SYS_VENDOR, "Acer"), 563 DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
575 DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 2490"), 564 DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 2490"),
576 }, 565 },
577 }, 566 },
578 { 567 {
579 .ident = "Acer TravelMate 4280", 568 /* Acer TravelMate 4280 */
580 .matches = { 569 .matches = {
581 DMI_MATCH(DMI_SYS_VENDOR, "Acer"), 570 DMI_MATCH(DMI_SYS_VENDOR, "Acer"),
582 DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 4280"), 571 DMI_MATCH(DMI_PRODUCT_NAME, "TravelMate 4280"),