Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input

Pull input updates from Dmitry Torokhov:
"Updates for the input subsystem. Just a few driver updates mostly
dealing with recent regressions."

* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input:
Input: edt-ft5x06 - return -EFAULT on copy_to_user() error
Input: sentelic - filter out erratic movement when lifting finger
Input: ambakmi - [un]prepare clocks when enabling amd disabling
Input: i8042 - disable mux on Toshiba C850D
Revert "input: ab8500-ponkey: Create AB8500 domain IRQ mapping"
Input: imx_keypad - fix missing clk conversions
Input: usbtouchscreen - initialize eGalax devices

+70 -10
+2 -2
drivers/input/keyboard/imx_keypad.c
··· 516 516 input_set_drvdata(input_dev, keypad); 517 517 518 518 /* Ensure that the keypad will stay dormant until opened */ 519 - clk_enable(keypad->clk); 519 + clk_prepare_enable(keypad->clk); 520 520 imx_keypad_inhibit(keypad); 521 - clk_disable(keypad->clk); 521 + clk_disable_unprepare(keypad->clk); 522 522 523 523 error = request_irq(irq, imx_keypad_irq_handler, 0, 524 524 pdev->name, keypad);
+2 -2
drivers/input/misc/ab8500-ponkey.c
··· 74 74 75 75 ponkey->idev = input; 76 76 ponkey->ab8500 = ab8500; 77 - ponkey->irq_dbf = ab8500_irq_get_virq(ab8500, irq_dbf); 78 - ponkey->irq_dbr = ab8500_irq_get_virq(ab8500, irq_dbr); 77 + ponkey->irq_dbf = irq_dbf; 78 + ponkey->irq_dbr = irq_dbr; 79 79 80 80 input->name = "AB8500 POn(PowerOn) Key"; 81 81 input->dev.parent = &pdev->dev;
+11
drivers/input/mouse/sentelic.c
··· 721 721 722 722 switch (psmouse->packet[0] >> FSP_PKT_TYPE_SHIFT) { 723 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 735 abs_x = GET_ABS_X(packet); 725 736 abs_y = GET_ABS_Y(packet); 726 737
+3 -3
drivers/input/serio/ambakmi.c
··· 72 72 unsigned int divisor; 73 73 int ret; 74 74 75 - ret = clk_enable(kmi->clk); 75 + ret = clk_prepare_enable(kmi->clk); 76 76 if (ret) 77 77 goto out; 78 78 ··· 92 92 return 0; 93 93 94 94 clk_disable: 95 - clk_disable(kmi->clk); 95 + clk_disable_unprepare(kmi->clk); 96 96 out: 97 97 return ret; 98 98 } ··· 104 104 writeb(0, KMICR); 105 105 106 106 free_irq(kmi->irq, kmi); 107 - clk_disable(kmi->clk); 107 + clk_disable_unprepare(kmi->clk); 108 108 } 109 109 110 110 static int __devinit amba_kmi_probe(struct amba_device *dev,
+6
drivers/input/serio/i8042-x86ia64io.h
··· 335 335 }, 336 336 { 337 337 .matches = { 338 + DMI_MATCH(DMI_SYS_VENDOR, "TOSHIBA"), 339 + DMI_MATCH(DMI_PRODUCT_NAME, "SATELLITE C850D"), 340 + }, 341 + }, 342 + { 343 + .matches = { 338 344 DMI_MATCH(DMI_SYS_VENDOR, "ALIENWARE"), 339 345 DMI_MATCH(DMI_PRODUCT_NAME, "Sentia"), 340 346 },
+6 -3
drivers/input/touchscreen/edt-ft5x06.c
··· 566 566 } 567 567 568 568 read = min_t(size_t, count, tsdata->raw_bufsize - *off); 569 - error = copy_to_user(buf, tsdata->raw_buffer + *off, read); 570 - if (!error) 571 - *off += read; 569 + if (copy_to_user(buf, tsdata->raw_buffer + *off, read)) { 570 + error = -EFAULT; 571 + goto out; 572 + } 573 + 574 + *off += read; 572 575 out: 573 576 mutex_unlock(&tsdata->mutex); 574 577 return error ?: read;
+40
drivers/input/touchscreen/usbtouchscreen.c
··· 304 304 #define EGALAX_PKT_TYPE_REPT 0x80 305 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 346 static int egalax_read_data(struct usbtouch_usb *dev, unsigned char *pkt) 308 347 { 309 348 if ((pkt[0] & EGALAX_PKT_TYPE_MASK) != EGALAX_PKT_TYPE_REPT) ··· 1095 1056 .process_pkt = usbtouch_process_multi, 1096 1057 .get_pkt_len = egalax_get_pkt_len, 1097 1058 .read_data = egalax_read_data, 1059 + .init = egalax_init, 1098 1060 }, 1099 1061 #endif 1100 1062