aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/input/serio
diff options
context:
space:
mode:
authorDmitry Torokhov <dmitry.torokhov@gmail.com>2014-10-11 14:34:07 -0400
committerDmitry Torokhov <dmitry.torokhov@gmail.com>2014-10-11 14:34:07 -0400
commit9d93551188069a0a21e664b4bfc89ed4a6df1903 (patch)
treebcf7334c0e57323a6844b8147ce1c92180fe8cef /drivers/input/serio
parentdd4cae8bf16611053ee7b00e20aa4fa945b92b99 (diff)
parentbfe01a5ba2490f299e1d2d5508cbbbadd897bbe9 (diff)
Merge tag 'v3.17' into next
Synchronize with mainline to bring in changes to Synaptics and i8042 drivers.
Diffstat (limited to 'drivers/input/serio')
-rw-r--r--drivers/input/serio/i8042-sparcio.h3
-rw-r--r--drivers/input/serio/i8042-x86ia64io.h22
-rw-r--r--drivers/input/serio/i8042.c2
-rw-r--r--drivers/input/serio/serport.c45
4 files changed, 64 insertions, 8 deletions
diff --git a/drivers/input/serio/i8042-sparcio.h b/drivers/input/serio/i8042-sparcio.h
index d6aa4c67dbb6..93cb7912703c 100644
--- a/drivers/input/serio/i8042-sparcio.h
+++ b/drivers/input/serio/i8042-sparcio.h
@@ -17,7 +17,6 @@ static int i8042_aux_irq = -1;
17#define I8042_MUX_PHYS_DESC "sparcps2/serio%d" 17#define I8042_MUX_PHYS_DESC "sparcps2/serio%d"
18 18
19static void __iomem *kbd_iobase; 19static void __iomem *kbd_iobase;
20static struct resource *kbd_res;
21 20
22#define I8042_COMMAND_REG (kbd_iobase + 0x64UL) 21#define I8042_COMMAND_REG (kbd_iobase + 0x64UL)
23#define I8042_DATA_REG (kbd_iobase + 0x60UL) 22#define I8042_DATA_REG (kbd_iobase + 0x60UL)
@@ -44,6 +43,8 @@ static inline void i8042_write_command(int val)
44 43
45#ifdef CONFIG_PCI 44#ifdef CONFIG_PCI
46 45
46static struct resource *kbd_res;
47
47#define OBP_PS2KBD_NAME1 "kb_ps2" 48#define OBP_PS2KBD_NAME1 "kb_ps2"
48#define OBP_PS2KBD_NAME2 "keyboard" 49#define OBP_PS2KBD_NAME2 "keyboard"
49#define OBP_PS2MS_NAME1 "kdmouse" 50#define OBP_PS2MS_NAME1 "kdmouse"
diff --git a/drivers/input/serio/i8042-x86ia64io.h b/drivers/input/serio/i8042-x86ia64io.h
index 136b7b204f56..40b7d6c0ff17 100644
--- a/drivers/input/serio/i8042-x86ia64io.h
+++ b/drivers/input/serio/i8042-x86ia64io.h
@@ -465,6 +465,20 @@ static const struct dmi_system_id __initconst i8042_dmi_nomux_table[] = {
465 DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion dv4 Notebook PC"), 465 DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion dv4 Notebook PC"),
466 }, 466 },
467 }, 467 },
468 {
469 /* Asus X450LCP */
470 .matches = {
471 DMI_MATCH(DMI_SYS_VENDOR, "ASUSTeK COMPUTER INC."),
472 DMI_MATCH(DMI_PRODUCT_NAME, "X450LCP"),
473 },
474 },
475 {
476 /* Avatar AVIU-145A6 */
477 .matches = {
478 DMI_MATCH(DMI_SYS_VENDOR, "Intel"),
479 DMI_MATCH(DMI_PRODUCT_NAME, "IC4I"),
480 },
481 },
468 { } 482 { }
469}; 483};
470 484
@@ -608,6 +622,14 @@ static const struct dmi_system_id __initconst i8042_dmi_notimeout_table[] = {
608 DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion dv4 Notebook PC"), 622 DMI_MATCH(DMI_PRODUCT_NAME, "HP Pavilion dv4 Notebook PC"),
609 }, 623 },
610 }, 624 },
625 {
626 /* Fujitsu U574 laptop */
627 /* https://bugzilla.kernel.org/show_bug.cgi?id=69731 */
628 .matches = {
629 DMI_MATCH(DMI_SYS_VENDOR, "FUJITSU"),
630 DMI_MATCH(DMI_PRODUCT_NAME, "LIFEBOOK U574"),
631 },
632 },
611 { } 633 { }
612}; 634};
613 635
diff --git a/drivers/input/serio/i8042.c b/drivers/input/serio/i8042.c
index 3807c3e971cc..f5a98af3b325 100644
--- a/drivers/input/serio/i8042.c
+++ b/drivers/input/serio/i8042.c
@@ -1254,6 +1254,8 @@ static int __init i8042_create_aux_port(int idx)
1254 } else { 1254 } else {
1255 snprintf(serio->name, sizeof(serio->name), "i8042 AUX%d port", idx); 1255 snprintf(serio->name, sizeof(serio->name), "i8042 AUX%d port", idx);
1256 snprintf(serio->phys, sizeof(serio->phys), I8042_MUX_PHYS_DESC, idx + 1); 1256 snprintf(serio->phys, sizeof(serio->phys), I8042_MUX_PHYS_DESC, idx + 1);
1257 strlcpy(serio->firmware_id, i8042_aux_firmware_id,
1258 sizeof(serio->firmware_id));
1257 } 1259 }
1258 1260
1259 port->serio = serio; 1261 port->serio = serio;
diff --git a/drivers/input/serio/serport.c b/drivers/input/serio/serport.c
index 0cb7ef59071b..69175b825346 100644
--- a/drivers/input/serio/serport.c
+++ b/drivers/input/serio/serport.c
@@ -21,6 +21,7 @@
21#include <linux/init.h> 21#include <linux/init.h>
22#include <linux/serio.h> 22#include <linux/serio.h>
23#include <linux/tty.h> 23#include <linux/tty.h>
24#include <linux/compat.h>
24 25
25MODULE_AUTHOR("Vojtech Pavlik <vojtech@ucw.cz>"); 26MODULE_AUTHOR("Vojtech Pavlik <vojtech@ucw.cz>");
26MODULE_DESCRIPTION("Input device TTY line discipline"); 27MODULE_DESCRIPTION("Input device TTY line discipline");
@@ -198,28 +199,55 @@ static ssize_t serport_ldisc_read(struct tty_struct * tty, struct file * file, u
198 return 0; 199 return 0;
199} 200}
200 201
202static void serport_set_type(struct tty_struct *tty, unsigned long type)
203{
204 struct serport *serport = tty->disc_data;
205
206 serport->id.proto = type & 0x000000ff;
207 serport->id.id = (type & 0x0000ff00) >> 8;
208 serport->id.extra = (type & 0x00ff0000) >> 16;
209}
210
201/* 211/*
202 * serport_ldisc_ioctl() allows to set the port protocol, and device ID 212 * serport_ldisc_ioctl() allows to set the port protocol, and device ID
203 */ 213 */
204 214
205static int serport_ldisc_ioctl(struct tty_struct * tty, struct file * file, unsigned int cmd, unsigned long arg) 215static int serport_ldisc_ioctl(struct tty_struct *tty, struct file *file,
216 unsigned int cmd, unsigned long arg)
206{ 217{
207 struct serport *serport = (struct serport*) tty->disc_data;
208 unsigned long type;
209
210 if (cmd == SPIOCSTYPE) { 218 if (cmd == SPIOCSTYPE) {
219 unsigned long type;
220
211 if (get_user(type, (unsigned long __user *) arg)) 221 if (get_user(type, (unsigned long __user *) arg))
212 return -EFAULT; 222 return -EFAULT;
213 223
214 serport->id.proto = type & 0x000000ff; 224 serport_set_type(tty, type);
215 serport->id.id = (type & 0x0000ff00) >> 8; 225 return 0;
216 serport->id.extra = (type & 0x00ff0000) >> 16; 226 }
227
228 return -EINVAL;
229}
230
231#ifdef CONFIG_COMPAT
232#define COMPAT_SPIOCSTYPE _IOW('q', 0x01, compat_ulong_t)
233static long serport_ldisc_compat_ioctl(struct tty_struct *tty,
234 struct file *file,
235 unsigned int cmd, unsigned long arg)
236{
237 if (cmd == COMPAT_SPIOCSTYPE) {
238 void __user *uarg = compat_ptr(arg);
239 compat_ulong_t compat_type;
240
241 if (get_user(compat_type, (compat_ulong_t __user *)uarg))
242 return -EFAULT;
217 243
244 serport_set_type(tty, compat_type);
218 return 0; 245 return 0;
219 } 246 }
220 247
221 return -EINVAL; 248 return -EINVAL;
222} 249}
250#endif
223 251
224static void serport_ldisc_write_wakeup(struct tty_struct * tty) 252static void serport_ldisc_write_wakeup(struct tty_struct * tty)
225{ 253{
@@ -243,6 +271,9 @@ static struct tty_ldisc_ops serport_ldisc = {
243 .close = serport_ldisc_close, 271 .close = serport_ldisc_close,
244 .read = serport_ldisc_read, 272 .read = serport_ldisc_read,
245 .ioctl = serport_ldisc_ioctl, 273 .ioctl = serport_ldisc_ioctl,
274#ifdef CONFIG_COMPAT
275 .compat_ioctl = serport_ldisc_compat_ioctl,
276#endif
246 .receive_buf = serport_ldisc_receive, 277 .receive_buf = serport_ldisc_receive,
247 .write_wakeup = serport_ldisc_write_wakeup 278 .write_wakeup = serport_ldisc_write_wakeup
248}; 279};