diff options
-rw-r--r-- | drivers/input/keyboard/imx_keypad.c | 4 | ||||
-rw-r--r-- | drivers/input/misc/ab8500-ponkey.c | 4 | ||||
-rw-r--r-- | drivers/input/mouse/sentelic.c | 11 | ||||
-rw-r--r-- | drivers/input/serio/ambakmi.c | 6 | ||||
-rw-r--r-- | drivers/input/serio/i8042-x86ia64io.h | 6 | ||||
-rw-r--r-- | drivers/input/touchscreen/edt-ft5x06.c | 9 | ||||
-rw-r--r-- | drivers/input/touchscreen/usbtouchscreen.c | 40 |
7 files changed, 70 insertions, 10 deletions
diff --git a/drivers/input/keyboard/imx_keypad.c b/drivers/input/keyboard/imx_keypad.c index ce68e361558c..cdc252612c0b 100644 --- a/drivers/input/keyboard/imx_keypad.c +++ b/drivers/input/keyboard/imx_keypad.c | |||
@@ -516,9 +516,9 @@ static int __devinit imx_keypad_probe(struct platform_device *pdev) | |||
516 | input_set_drvdata(input_dev, keypad); | 516 | input_set_drvdata(input_dev, keypad); |
517 | 517 | ||
518 | /* Ensure that the keypad will stay dormant until opened */ | 518 | /* Ensure that the keypad will stay dormant until opened */ |
519 | clk_enable(keypad->clk); | 519 | clk_prepare_enable(keypad->clk); |
520 | imx_keypad_inhibit(keypad); | 520 | imx_keypad_inhibit(keypad); |
521 | clk_disable(keypad->clk); | 521 | clk_disable_unprepare(keypad->clk); |
522 | 522 | ||
523 | error = request_irq(irq, imx_keypad_irq_handler, 0, | 523 | error = request_irq(irq, imx_keypad_irq_handler, 0, |
524 | pdev->name, keypad); | 524 | pdev->name, keypad); |
diff --git a/drivers/input/misc/ab8500-ponkey.c b/drivers/input/misc/ab8500-ponkey.c index f06231b7cab1..84ec691c05aa 100644 --- a/drivers/input/misc/ab8500-ponkey.c +++ b/drivers/input/misc/ab8500-ponkey.c | |||
@@ -74,8 +74,8 @@ static int __devinit ab8500_ponkey_probe(struct platform_device *pdev) | |||
74 | 74 | ||
75 | ponkey->idev = input; | 75 | ponkey->idev = input; |
76 | ponkey->ab8500 = ab8500; | 76 | ponkey->ab8500 = ab8500; |
77 | ponkey->irq_dbf = ab8500_irq_get_virq(ab8500, irq_dbf); | 77 | ponkey->irq_dbf = irq_dbf; |
78 | ponkey->irq_dbr = ab8500_irq_get_virq(ab8500, irq_dbr); | 78 | ponkey->irq_dbr = irq_dbr; |
79 | 79 | ||
80 | input->name = "AB8500 POn(PowerOn) Key"; | 80 | input->name = "AB8500 POn(PowerOn) Key"; |
81 | input->dev.parent = &pdev->dev; | 81 | input->dev.parent = &pdev->dev; |
diff --git a/drivers/input/mouse/sentelic.c b/drivers/input/mouse/sentelic.c index 3f5649f19082..a261d8576919 100644 --- a/drivers/input/mouse/sentelic.c +++ b/drivers/input/mouse/sentelic.c | |||
@@ -721,6 +721,17 @@ static psmouse_ret_t fsp_process_byte(struct psmouse *psmouse) | |||
721 | 721 | ||
722 | switch (psmouse->packet[0] >> FSP_PKT_TYPE_SHIFT) { | 722 | switch (psmouse->packet[0] >> FSP_PKT_TYPE_SHIFT) { |
723 | case FSP_PKT_TYPE_ABS: | 723 | case FSP_PKT_TYPE_ABS: |
724 | |||
725 | if ((packet[0] == 0x48 || packet[0] == 0x49) && | ||
726 | packet[1] == 0 && packet[2] == 0) { | ||
727 | /* | ||
728 | * Ignore coordinate noise when finger leaving the | ||
729 | * surface, otherwise cursor may jump to upper-left | ||
730 | * corner. | ||
731 | */ | ||
732 | packet[3] &= 0xf0; | ||
733 | } | ||
734 | |||
724 | abs_x = GET_ABS_X(packet); | 735 | abs_x = GET_ABS_X(packet); |
725 | abs_y = GET_ABS_Y(packet); | 736 | abs_y = GET_ABS_Y(packet); |
726 | 737 | ||
diff --git a/drivers/input/serio/ambakmi.c b/drivers/input/serio/ambakmi.c index 2ffd110bd5bc..2e77246c2e5a 100644 --- a/drivers/input/serio/ambakmi.c +++ b/drivers/input/serio/ambakmi.c | |||
@@ -72,7 +72,7 @@ static int amba_kmi_open(struct serio *io) | |||
72 | unsigned int divisor; | 72 | unsigned int divisor; |
73 | int ret; | 73 | int ret; |
74 | 74 | ||
75 | ret = clk_enable(kmi->clk); | 75 | ret = clk_prepare_enable(kmi->clk); |
76 | if (ret) | 76 | if (ret) |
77 | goto out; | 77 | goto out; |
78 | 78 | ||
@@ -92,7 +92,7 @@ static int amba_kmi_open(struct serio *io) | |||
92 | return 0; | 92 | return 0; |
93 | 93 | ||
94 | clk_disable: | 94 | clk_disable: |
95 | clk_disable(kmi->clk); | 95 | clk_disable_unprepare(kmi->clk); |
96 | out: | 96 | out: |
97 | return ret; | 97 | return ret; |
98 | } | 98 | } |
@@ -104,7 +104,7 @@ static void amba_kmi_close(struct serio *io) | |||
104 | writeb(0, KMICR); | 104 | writeb(0, KMICR); |
105 | 105 | ||
106 | free_irq(kmi->irq, kmi); | 106 | free_irq(kmi->irq, kmi); |
107 | clk_disable(kmi->clk); | 107 | clk_disable_unprepare(kmi->clk); |
108 | } | 108 | } |
109 | 109 | ||
110 | static int __devinit amba_kmi_probe(struct amba_device *dev, | 110 | static int __devinit amba_kmi_probe(struct amba_device *dev, |
diff --git a/drivers/input/serio/i8042-x86ia64io.h b/drivers/input/serio/i8042-x86ia64io.h index 6918773ce024..d6cc77a53c7e 100644 --- a/drivers/input/serio/i8042-x86ia64io.h +++ b/drivers/input/serio/i8042-x86ia64io.h | |||
@@ -335,6 +335,12 @@ static const struct dmi_system_id __initconst i8042_dmi_nomux_table[] = { | |||
335 | }, | 335 | }, |
336 | { | 336 | { |
337 | .matches = { | 337 | .matches = { |
338 | DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), | ||
339 | DMI_MATCH(DMI_PRODUCT_NAME, "SATELLITE C850D"), | ||
340 | }, | ||
341 | }, | ||
342 | { | ||
343 | .matches = { | ||
338 | DMI_MATCH(DMI_SYS_VENDOR, "ALIENWARE"), | 344 | DMI_MATCH(DMI_SYS_VENDOR, "ALIENWARE"), |
339 | DMI_MATCH(DMI_PRODUCT_NAME, "Sentia"), | 345 | DMI_MATCH(DMI_PRODUCT_NAME, "Sentia"), |
340 | }, | 346 | }, |
diff --git a/drivers/input/touchscreen/edt-ft5x06.c b/drivers/input/touchscreen/edt-ft5x06.c index b06a5e3a665e..64957770b522 100644 --- a/drivers/input/touchscreen/edt-ft5x06.c +++ b/drivers/input/touchscreen/edt-ft5x06.c | |||
@@ -566,9 +566,12 @@ static ssize_t edt_ft5x06_debugfs_raw_data_read(struct file *file, | |||
566 | } | 566 | } |
567 | 567 | ||
568 | read = min_t(size_t, count, tsdata->raw_bufsize - *off); | 568 | read = min_t(size_t, count, tsdata->raw_bufsize - *off); |
569 | error = copy_to_user(buf, tsdata->raw_buffer + *off, read); | 569 | if (copy_to_user(buf, tsdata->raw_buffer + *off, read)) { |
570 | if (!error) | 570 | error = -EFAULT; |
571 | *off += read; | 571 | goto out; |
572 | } | ||
573 | |||
574 | *off += read; | ||
572 | out: | 575 | out: |
573 | mutex_unlock(&tsdata->mutex); | 576 | mutex_unlock(&tsdata->mutex); |
574 | return error ?: read; | 577 | return error ?: read; |
diff --git a/drivers/input/touchscreen/usbtouchscreen.c b/drivers/input/touchscreen/usbtouchscreen.c index e32709e0dd65..721fdb3597ca 100644 --- a/drivers/input/touchscreen/usbtouchscreen.c +++ b/drivers/input/touchscreen/usbtouchscreen.c | |||
@@ -304,6 +304,45 @@ static int e2i_read_data(struct usbtouch_usb *dev, unsigned char *pkt) | |||
304 | #define EGALAX_PKT_TYPE_REPT 0x80 | 304 | #define EGALAX_PKT_TYPE_REPT 0x80 |
305 | #define EGALAX_PKT_TYPE_DIAG 0x0A | 305 | #define EGALAX_PKT_TYPE_DIAG 0x0A |
306 | 306 | ||
307 | static int egalax_init(struct usbtouch_usb *usbtouch) | ||
308 | { | ||
309 | int ret, i; | ||
310 | unsigned char *buf; | ||
311 | struct usb_device *udev = interface_to_usbdev(usbtouch->interface); | ||
312 | |||
313 | /* | ||
314 | * An eGalax diagnostic packet kicks the device into using the right | ||
315 | * protocol. We send a "check active" packet. The response will be | ||
316 | * read later and ignored. | ||
317 | */ | ||
318 | |||
319 | buf = kmalloc(3, GFP_KERNEL); | ||
320 | if (!buf) | ||
321 | return -ENOMEM; | ||
322 | |||
323 | buf[0] = EGALAX_PKT_TYPE_DIAG; | ||
324 | buf[1] = 1; /* length */ | ||
325 | buf[2] = 'A'; /* command - check active */ | ||
326 | |||
327 | for (i = 0; i < 3; i++) { | ||
328 | ret = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), | ||
329 | 0, | ||
330 | USB_DIR_OUT | USB_TYPE_VENDOR | USB_RECIP_DEVICE, | ||
331 | 0, 0, buf, 3, | ||
332 | USB_CTRL_SET_TIMEOUT); | ||
333 | if (ret >= 0) { | ||
334 | ret = 0; | ||
335 | break; | ||
336 | } | ||
337 | if (ret != -EPIPE) | ||
338 | break; | ||
339 | } | ||
340 | |||
341 | kfree(buf); | ||
342 | |||
343 | return ret; | ||
344 | } | ||
345 | |||
307 | static int egalax_read_data(struct usbtouch_usb *dev, unsigned char *pkt) | 346 | static int egalax_read_data(struct usbtouch_usb *dev, unsigned char *pkt) |
308 | { | 347 | { |
309 | if ((pkt[0] & EGALAX_PKT_TYPE_MASK) != EGALAX_PKT_TYPE_REPT) | 348 | if ((pkt[0] & EGALAX_PKT_TYPE_MASK) != EGALAX_PKT_TYPE_REPT) |
@@ -1056,6 +1095,7 @@ static struct usbtouch_device_info usbtouch_dev_info[] = { | |||
1056 | .process_pkt = usbtouch_process_multi, | 1095 | .process_pkt = usbtouch_process_multi, |
1057 | .get_pkt_len = egalax_get_pkt_len, | 1096 | .get_pkt_len = egalax_get_pkt_len, |
1058 | .read_data = egalax_read_data, | 1097 | .read_data = egalax_read_data, |
1098 | .init = egalax_init, | ||
1059 | }, | 1099 | }, |
1060 | #endif | 1100 | #endif |
1061 | 1101 | ||