Re: usbhid: HP LD4200tm touchscreen ALMOST works

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, Oct 25, 2010 at 07:48:01PM -0400, William Sherman wrote:
> Hello,
> 
> I'm looking to dig into the usbhid driver code to get me the last
> mile and get my HP LD4200tm touchscreen working on my Linux system.
> [NOTE: I posted about this elsewhere, but as I think about it more,
> this is more of a linux-kernel issue than anything else, so I'm
> reprising that note here.]
> 

I think you'll have better luck on linux-input...

> So, in first connecting the HP touchscreen (with touchscreen hardware
> from Nexio) to the Linux system (running Ubuntu 10.10 -- 2.6.35-22 generic)
> things were looking up, as the unit almost worked right out of the box
> as a plug-and-play device.  Unfortunately, that last mile needs to be
> addressed in order for the unit to work in a useful way.  I think I've
> narrowed down the problem to the usbhid driver, as I'll explain in a
> moment, and while I expect I have the ability to debug and fix the issue,
> this would be my first dive into Linux driver coding, so I could probably
> use a pointer as to what steps are necessary to get the proper kernel
> sources, compile the needed parts and restart the system (hopefully
> just restart X-windows) to test my edits (especially since Ubuntu tends
> to not include a not of the necessary components).
> 
> I've collected gobs of data on what udev, hidraw, evtest and X-windows
> report, but before I get to any of that, here's the executive summary:
> 
> Plugging the HP LD4200tm into a Ubuntu 10.10 system will cause the
> device to be recognized, create a usbhid device, create an event device,
> activate the evdev driver for Xorg, and put it on the list of X's inputs.
> So far, so good.
> 
> Touching the device causes the mouse pointer to jump to that location,
> even better.
> 
> But when I'm touching the screen, what happens is that the system
> generates a continuous stream of button presses/releases -- as if
> I moved the mouse to a particular location and then went crazy
> tapping on the mouse button.  This is the part that makes the system
> unusable.
> 
> One more data point is that if I touch the screen with a second
> finger, the button barrage stops, and it will now gracefully report
> the movement of the first finger.
> 
> So all I need to do is modify the driver for this device's protocol
> to not send all the unnecessary release/press events.
> 
> 
> Here is the data that leads me to believe the issue is at the usbhid
> layer:
> 
> 
> 1) Running "evtest /dev/input/event4" reveals that the button barrage
> is already occurring at the HID event layer.
> 
> 2) Watching the raw data on /dev/usb/hiddev2 does report a stream of
> data as the touchscreen is touched (and no data when it's not touched),
> looking at the output suggests that the device is only reporting touch/
> release events when the screen is actually touched or released.  And of
> course, even if the device were reporting things poorly, I figure the
> usbhid driver could be written to overcome this.
> 
> Fortunately, the data seems to be a constant 14-byte stride, so I
> wrote a simple awk script ("nexio") to reformat the data as I was
> figuring out the raw protocol.  Here's a sample of the reformatted
> data, followed by my estimation of the protocol:
>         % sudo xxd -c 14 -g 1 /dev/hidraw2 | nexio
>         0000000: 01 03 01 12d8 3357  02 02 15e1 1f71  01
>         000000e: 01 03 01 12cc 332a  02 02 15e1 1f71  01
>         000001c: 01 03 01 12de 3335  00 02 15e1 1f71  01
>         000002a: 01 03 01 12f4 3346  00 02 15e1 1f71  01
>         0000038: 01 03 01 1304 3352  00 02 15e1 1f71  01
>         0000046: 01 03 01 130c 3358  00 02 15e1 1f71  01
>         [... (next I stop touching the screen, and then touch it again)]
>         00009a0: 01 03 01 12d8 3357  00 02 15e1 1f71  01
>         00009ae: 01 03 01 12d8 3357  00 02 15e1 1f71  01
>         00009bc: 01 02 01 12d8 3357  00 02 15e1 1f71  01
>         00009ca: 01 03 01 10af 3681  02 02 15e1 1f71  01
>         00009d8: 01 03 01 10a5 3651  02 02 15e1 1f71  01
>         00009e6: 01 03 01 10b7 3654  00 02 15e1 1f71  01
>         [... (next is a multi-touch event)]
>         0000c78: 01 03 01 1019 3627  00 02 15e1 1f71  01
>         0000c86: 01 03 01 1019 3627  00 02 15e1 1f71  01
>         0000c94: 01 00 01 100b 35f8  00 02 1585 3110  00
>         0000ca2: 01 00 01 100e 3604  00 02 158a 311b  00
>         0000cb0: 01 00 01 1013 3615  00 02 1591 312b  00
>         0000cbe: 01 00 01 1017 3622  00 02 1596 3136  00
>         0000ccc: 01 00 01 1019 3628  00 02 1598 313c  00
>         0000cda: 01 00 01 1019 3629  00 02 1599 313d  00
>         0000ce8: 01 03 01 1019 3629  03 02 1598 313d  02
>         0000cf6: 01 03 01 1019 3628  03 02 1598 313c  02
>         0000d04: 01 03 01 1019 3627  03 02 1598 313b  02
>         0000d12: 01 03 01 1018 3627  03 02 1597 313a  02
>         [... (next I release both fingers -- not quite simultaneously)]
>         0000df2: 01 03 01 1019 3627  03 02 1598 3132  02
>         0000e00: 01 03 01 1019 3627  03 02 1598 3132  02
>         0000e0e: 01 03 01 1019 3627  02 02 1598 3132  01
>         0000e1c: 01 03 01 1019 3626  02 02 1598 3132  01
>         0000e2a: 01 03 01 1019 3626  00 02 1598 3132  01
>         0000e38: 01 03 01 1019 3626  00 02 1598 3132  01
>         0000e46: 01 03 01 1019 3626  00 02 1598 3132  01
>         0000e54: 01 03 01 1019 3626  00 02 1598 3132  01
>         0000e62: 01 03 01 1019 3625  00 02 1598 3132  01
>         0000e70: 01 02 01 1019 3625  00 02 1598 3132  01
> 
> Decoding the above:
> - column 1: just a reprint of the xxd byte count
> - column 2: always 01 -- probably a data packet sync byte
> - column 3: usually 03 (which means an on-going touch event)
> 		- 02 seems to indicate a touch-release event
> 		- 00 seems to indicate a transition to a dual-touch event
> - column 4: always 01 -- probably an indicator that the next two
> 		words are the X/Y values for touch #1
> - column 5: value of X location of touch #1
> - column 6: value of Y location of touch #1
> - column 7: usually 00
> 		- 02 seems to mean initiation of a single-touch event
> 		- 03 seems to indicate an on-going dual-touch event
> - column 8: always 02 -- probably an indicator that the next two
> 		words are the X/Y values for touch #2
> - column 9: value of X location of touch #2
> - column 10:value of Y location of touch #2
> - column 11: usually 01 or 02 representing the number of contact points
> 		- will be 00 when transitioning from single to dual
> 		  contact touch event
> 
> The rest of this email is a sample of some of the data that I've
> collected about what the system reports.  I think this should be
> sufficient to get across all necessary information, but I have
> more if warrented.
> 
>         % xinput list --short 10
>         Nexio Touch Device.   HID Multi-Touch           id=10
> [slave  pointer  (2)]
>         % xinput test 10
>         motion a[0]=15177 a[1]=5581 a[2]=15479 a[3]=7829 a[4]=0 a[5]=0
>         motion a[6]=0 a[7]=0 a[8]=0 a[9]=0 a[10]=0
>         button press   1
>         button release 1
>         button press   1
>         button release 1
>         button press   1
>         button release 1
>         button press   1
>         button release 1
>         button press   1
>         button release 1
>         button press   1
>         button release 1
>         [...]
> 
> So you can see that at first contact the location of the touch is reported,
> but then there is the continual stream of button press/release.
> 
> Here is the output from "evtest" from a single finger interaction:
>     % sudo evtest /dev/input/event4
>     Input driver version is 1.0.1
>     Input device ID: bus 0x3 vendor 0x1870 product 0x100 version 0x111
>     Input device name: "Nexio Touch Device.   HID Multi-Touch"
>     Supported events:
>       Event type 0 (Sync)
>       Event type 1 (Key)
>         Event code 272 (LeftBtn)
>         Event code 273 (RightBtn)
>         Event code 274 (MiddleBtn)
>         Event code 320 (ToolPen)
>         Event code 321 (ToolRubber)
>         Event code 322 (ToolBrush)
>         Event code 330 (Touch)
>       Event type 3 (Absolute)
>         Event code 0 (X)
>           Value  15129
>           Min        0
>           Max    16383
>         Event code 1 (Y)
>           Value   6425
>           Min        0
>           Max    16383
>         Event code 2 (Z)
>           Value  14859
>           Min        0
>           Max    16383
>         Event code 3 (Rx)
>           Value   7160
>           Min        0
>           Max    16383
>         Event code 4 (Ry)
>           Value      0
>           Min        0
>           Max    32767
>         Event code 5 (Rz)
>           Value      0
>           Min        0
>           Max    32767
>         Event code 6 (Throttle)
>           Value      0
>           Min        0
>           Max    16383
>         Event code 7 (Rudder)
>           Value      0
>           Min        0
>           Max    16383
>         Event code 40 (Misc)
>           Value      1
>           Min        0
>           Max        1
>         Event code 41 (?)
>           Value      2
>           Min        0
>           Max        1
>         Event code 42 (?)
>           Value      1
>           Min        0
>           Max        2
>       Event type 4 (Misc)
>         Event code 4 (ScanCode)
>     Testing ... (interrupt to exit)
>     Event: time 1287784276.760109, type 4 (Misc), code 4 (ScanCode),
> value d0042
>     Event: time 1287784276.760112, type 1 (Key), code 330 (Touch), value 1
>     Event: time 1287784276.760119, type 3 (Absolute), code 0 (X),
> value 14976
>     Event: time 1287784276.760122, type 3 (Absolute), code 1 (Y),
> value 7291
>     Event: time 1287784276.760125, type 4 (Misc), code 4 (ScanCode),
> value d0042
>     Event: time 1287784276.760127, type 1 (Key), code 330 (Touch), value 0
>     Event: time 1287784276.760130, type 1 (Key), code 321
> (ToolRubber), value 1
>     Event: time 1287784276.760139, -------------- Report Sync ------------
>     Event: time 1287784276.773107, type 4 (Misc), code 4 (ScanCode),
> value d0042
>     Event: time 1287784276.773111, type 1 (Key), code 330 (Touch), value 1
>     Event: time 1287784276.773117, type 3 (Absolute), code 0 (X),
> value 14925
>     Event: time 1287784276.773120, type 3 (Absolute), code 1 (Y),
> value 7266
>     Event: time 1287784276.773123, type 4 (Misc), code 4 (ScanCode),
> value d0042
>     Event: time 1287784276.773124, type 1 (Key), code 330 (Touch), value 0
>     Event: time 1287784276.773135, -------------- Report Sync ------------
>     Event: time 1287784276.785094, type 4 (Misc), code 4 (ScanCode),
> value d0042
>     Event: time 1287784276.785099, type 1 (Key), code 330 (Touch), value 1
>     Event: time 1287784276.785105, type 3 (Absolute), code 0 (X),
> value 14937
>     Event: time 1287784276.785108, type 3 (Absolute), code 1 (Y),
> value 7269
>     Event: time 1287784276.785112, type 4 (Misc), code 4 (ScanCode),
> value d0042
>     Event: time 1287784276.785113, type 1 (Key), code 330 (Touch), value 0
>     Event: time 1287784276.785116, type 1 (Key), code 321
> (ToolRubber), value 0
>     Event: time 1287784276.785125, -------------- Report Sync ------------
>     ^C
> 
> And here is the output of "evtest" from when I touched the screen with
> two fingers:
>     % sudo evtest /dev/input/event4
>     Input driver version is 1.0.1
>     Input device ID: bus 0x3 vendor 0x1870 product 0x100 version 0x111
>     Input device name: "Nexio Touch Device.   HID Multi-Touch"
>     Supported events:
>       Event type 0 (Sync)
>       Event type 1 (Key)
>         Event code 272 (LeftBtn)
>         Event code 273 (RightBtn)
>         Event code 274 (MiddleBtn)
>         Event code 320 (ToolPen)
>         Event code 321 (ToolRubber)
>         Event code 322 (ToolBrush)
>         Event code 330 (Touch)
>       Event type 3 (Absolute)
>         Event code 0 (X)
>           Value  14937
>           Min        0
>           Max    16383
>         Event code 1 (Y)
>           Value   7269
>           Min        0
>           Max    16383
>         Event code 2 (Z)
>           Value  14859
>           Min        0
>           Max    16383
>         Event code 3 (Rx)
>           Value   7160
>           Min        0
>           Max    16383
>         Event code 4 (Ry)
>           Value      0
>           Min        0
>           Max    32767
>         Event code 5 (Rz)
>           Value      0
>           Min        0
>           Max    32767
>         Event code 6 (Throttle)
>           Value      0
>           Min        0
>           Max    16383
>         Event code 7 (Rudder)
>           Value      0
>           Min        0
>           Max    16383
>         Event code 40 (Misc)
>           Value      1
>           Min        0
>           Max        1
>         Event code 41 (?)
>           Value      2
>           Min        0
>           Max        1
>         Event code 42 (?)
>           Value      1
>           Min        0
>           Max        2
>       Event type 4 (Misc)
>         Event code 4 (ScanCode)
>     Testing ... (interrupt to exit)
>     Event: time 1287784360.966997, type 1 (Key), code 320 (ToolPen),
> value 0
>     Event: time 1287784360.967004, type 3 (Absolute), code 0 (X),
> value 14717
>     Event: time 1287784360.967006, type 3 (Absolute), code 1 (Y),
> value 6211
>     Event: time 1287784360.967014, type 3 (Absolute), code 2 (Z),
> value 15680
>     Event: time 1287784360.967016, type 3 (Absolute), code 3 (Rx),
> value 6211
>     Event: time 1287784360.967019, type 3 (Absolute), code 42 (?), value 0
>     Event: time 1287784360.967020, -------------- Report Sync ------------
>     Event: time 1287784360.979997, type 3 (Absolute), code 0 (X),
> value 14667
>     Event: time 1287784360.980001, type 3 (Absolute), code 1 (Y),
> value 6189
>     Event: time 1287784360.980008, type 3 (Absolute), code 2 (Z),
> value 15626
>     Event: time 1287784360.980011, type 3 (Absolute), code 3 (Rx),
> value 6189
>     Event: time 1287784360.980014, -------------- Report Sync ------------
>     Event: time 1287784360.992997, type 3 (Absolute), code 0 (X),
> value 14684
>     Event: time 1287784360.993000, type 3 (Absolute), code 1 (Y),
> value 6195
>     Event: time 1287784360.993008, type 3 (Absolute), code 2 (Z),
> value 15640
>     Event: time 1287784360.993011, type 3 (Absolute), code 3 (Rx),
> value 6195
>     Event: time 1287784360.993014, -------------- Report Sync ------------
>     Event: time 1287784361.005998, type 3 (Absolute), code 0 (X),
> value 14715
>     Event: time 1287784361.006001, type 3 (Absolute), code 1 (Y),
> value 6220
>     Event: time 1287784361.006008, type 3 (Absolute), code 2 (Z),
> value 15660
>     Event: time 1287784361.006011, type 3 (Absolute), code 3 (Rx),
> value 6220
>     Event: time 1287784361.006014, -------------- Report Sync ------------
>     Event: time 1287784361.018000, type 3 (Absolute), code 0 (X),
> value 14745
>     Event: time 1287784361.018004, type 3 (Absolute), code 1 (Y),
> value 6278
>     Event: time 1287784361.018012, type 3 (Absolute), code 2 (Z),
> value 15674
>     Event: time 1287784361.018014, type 3 (Absolute), code 3 (Rx),
> value 6278
>     Event: time 1287784361.018017, -------------- Report Sync ------------
>     Event: time 1287784361.030997, type 3 (Absolute), code 0 (X),
> value 14767
>     Event: time 1287784361.031000, type 3 (Absolute), code 1 (Y),
> value 6358
>     Event: time 1287784361.031008, type 3 (Absolute), code 2 (Z),
> value 15680
>     Event: time 1287784361.031010, type 3 (Absolute), code 3 (Rx),
> value 6358
>     Event: time 1287784361.031013, -------------- Report Sync ------------
>     Event: time 1287784361.043996, type 4 (Misc), code 4 (ScanCode),
> value d0042
>     Event: time 1287784361.043999, type 1 (Key), code 330 (Touch), value 1
>     Event: time 1287784361.044001, type 1 (Key), code 320 (ToolPen),
> value 1
>     Event: time 1287784361.044006, type 3 (Absolute), code 0 (X),
> value 14777
>     Event: time 1287784361.044008, type 3 (Absolute), code 1 (Y),
> value 6451
>     Event: time 1287784361.044012, type 1 (Key), code 321
> (ToolRubber), value 1
>     Event: time 1287784361.044016, type 3 (Absolute), code 2 (Z),
> value 15682
>     Event: time 1287784361.044019, type 3 (Absolute), code 3 (Rx),
> value 6451
>     Event: time 1287784361.044021, type 3 (Absolute), code 42 (?), value 2
>     Event: time 1287784361.044023, -------------- Report Sync ------------
>     Event: time 1287784361.057000, type 3 (Absolute), code 0 (X),
> value 14779
>     Event: time 1287784361.057004, type 3 (Absolute), code 1 (Y),
> value 6546
>     Event: time 1287784361.057012, type 3 (Absolute), code 3 (Rx),
> value 6546
>     Event: time 1287784361.057016, -------------- Report Sync ------------
>     Event: time 1287784361.069998, type 3 (Absolute), code 0 (X),
> value 14778
>     Event: time 1287784361.070001, type 3 (Absolute), code 1 (Y),
> value 6640
>     Event: time 1287784361.070009, type 3 (Absolute), code 2 (Z),
> value 15681
>     Event: time 1287784361.070011, type 3 (Absolute), code 3 (Rx),
> value 6640
>     Event: time 1287784361.070014, -------------- Report Sync ------------
>     Event: time 1287784361.081989, type 3 (Absolute), code 0 (X),
> value 14776
>     Event: time 1287784361.081992, type 3 (Absolute), code 1 (Y),
> value 6733
>     Event: time 1287784361.082000, type 3 (Absolute), code 2 (Z),
> value 15680
>     Event: time 1287784361.082002, type 3 (Absolute), code 3 (Rx),
> value 6733
>     Event: time 1287784361.082005, -------------- Report Sync ------------
>     Event: time 1287784361.094987, type 3 (Absolute), code 0 (X),
> value 14775
>     Event: time 1287784361.094990, type 3 (Absolute), code 1 (Y),
> value 6832
>     Event: time 1287784361.094998, type 3 (Absolute), code 2 (Z),
> value 15679
>     Event: time 1287784361.095000, type 3 (Absolute), code 3 (Rx),
> value 6832
>     Event: time 1287784361.095004, -------------- Report Sync ------------
>     Event: time 1287784361.107986, type 3 (Absolute), code 0 (X),
> value 14774
>     Event: time 1287784361.107990, type 3 (Absolute), code 1 (Y),
> value 6939
>     Event: time 1287784361.107999, type 3 (Absolute), code 3 (Rx),
> value 6939
>     Event: time 1287784361.108002, -------------- Report Sync ------------
>     Event: time 1287784361.121001, type 3 (Absolute), code 1 (Y),
> value 7042
>     Event: time 1287784361.121011, type 3 (Absolute), code 3 (Rx),
> value 7042
>     Event: time 1287784361.121014, -------------- Report Sync ------------
>     Event: time 1287784361.132987, type 3 (Absolute), code 0 (X),
> value 14779
>     Event: time 1287784361.132991, type 3 (Absolute), code 1 (Y),
> value 7138
>     Event: time 1287784361.132999, type 3 (Absolute), code 3 (Rx),
> value 7138
>     Event: time 1287784361.133003, -------------- Report Sync ------------
>     Event: time 1287784361.145998, type 3 (Absolute), code 0 (X),
> value 14794
>     Event: time 1287784361.146001, type 3 (Absolute), code 1 (Y),
> value 7221
>     Event: time 1287784361.146010, type 3 (Absolute), code 3 (Rx),
> value 7221
>     Event: time 1287784361.146014, -------------- Report Sync ------------
>     Event: time 1287784361.158999, type 3 (Absolute), code 0 (X),
> value 14815
>     Event: time 1287784361.159003, type 3 (Absolute), code 1 (Y),
> value 7284
>     Event: time 1287784361.159010, type 3 (Absolute), code 2 (Z),
> value 15684
>     Event: time 1287784361.159012, type 3 (Absolute), code 3 (Rx),
> value 7284
>     Event: time 1287784361.159016, -------------- Report Sync ------------
>     Event: time 1287784361.183994, type 4 (Misc), code 4 (ScanCode),
> value d0042
>     Event: time 1287784361.183996, type 1 (Key), code 330 (Touch), value 0
>     Event: time 1287784361.184014, -------------- Report Sync ------------
>     ^C
> 
> So you can see that the location of both fingers is reported for the
> multi-touch operation (with one finger reported as X & Y, and the
> second finger as Z & Rx).  But with one finger, it's a bunch of button
> presses and then nearly instantaneous releases.
> 
> 
> And one final bit of information.  Here is the relevant information from
> the udev.log:
>     -----------------------------
>     UDEV  [1287664208.316717] add
> /devices/pci0000:00/0000:00:1d.2/usb8/8-2/8-2:1.0/input/input4/event4
> (input)
>     UDEV_LOG=3
>     ACTION=add
> 
> DEVPATH=/devices/pci0000:00/0000:00:1d.2/usb8/8-2/8-2:1.0/input/input4/event4
>     SUBSYSTEM=input
>     DEVNAME=/dev/input/event4
>     SEQNUM=1272
>     ID_INPUT=1
>     ID_INPUT_TABLET=1
>     ID_VENDOR=Nexio_Touch_Device.
>     ID_VENDOR_ENC=Nexio\x20Touch\x20Device.\x20\x20
>     ID_VENDOR_ID=1870
>     ID_MODEL=HID_Multi-Touch
>     ID_MODEL_ENC=HID\x20Multi-Touch
>     ID_MODEL_ID=0100
>     ID_REVISION=0006
>     ID_SERIAL=Nexio_Touch_Device._HID_Multi-Touch
>     ID_TYPE=hid
>     ID_BUS=usb
>     ID_USB_INTERFACES=:030000:
>     ID_USB_INTERFACE_NUM=00
>     ID_USB_DRIVER=usbhid
>     ID_PATH=pci-0000:00:1d.2-usb-0:2:1.0
>     MAJOR=13
>     MINOR=68
>     DEVLINKS=/dev/char/13:68
> /dev/input/by-id/usb-Nexio_Touch_Device._HID_Multi-Touch-event-mouse
> /dev/input/by-path/pci-0000:00:1d.2-usb-0:2:1.0-event-mouse
> 
>     UDEV  [1287664208.316759] add
> /devices/pci0000:00/0000:00:1d.2/usb8/8-2/8-2:1.0/input/input4/mouse1
> (input)
>     UDEV_LOG=3
>     ACTION=add
> 
> DEVPATH=/devices/pci0000:00/0000:00:1d.2/usb8/8-2/8-2:1.0/input/input4/mouse1
>     SUBSYSTEM=input
>     DEVNAME=/dev/input/mouse1
>     SEQNUM=1273
>     ID_INPUT=1
>     ID_INPUT_TABLET=1
>     ID_VENDOR=Nexio_Touch_Device.
>     ID_VENDOR_ENC=Nexio\x20Touch\x20Device.\x20\x20
>     ID_VENDOR_ID=1870
>     ID_MODEL=HID_Multi-Touch
>     ID_MODEL_ENC=HID\x20Multi-Touch
>     ID_MODEL_ID=0100
>     ID_REVISION=0006
>     ID_SERIAL=Nexio_Touch_Device._HID_Multi-Touch
>     ID_TYPE=hid
>     ID_BUS=usb
>     ID_USB_INTERFACES=:030000:
>     ID_USB_INTERFACE_NUM=00
>     ID_USB_DRIVER=usbhid
>     ID_PATH=pci-0000:00:1d.2-usb-0:2:1.0
>     MAJOR=13
>     MINOR=33
>     DEVLINKS=/dev/char/13:33
> /dev/input/by-id/usb-Nexio_Touch_Device._HID_Multi-Touch-mouse
> /dev/input/by-path/pci-0000:00:1d.2-usb-0:2:1.0-mouse
>     -----------------------------
> 
> And if that isn't enough info, I'm happy to provide more.
> 
> 
>     Thanks for whatever suggestions you can provide,
>     Bill
> 
> -- 
> Bill Sherman
> Sr. Technology Advisor
> Advanced Visualization Lab
> Pervasive Technology Inst
> Indiana University
> shermanw@xxxxxxxxxxx
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@xxxxxxxxxxxxxxx
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/

-- 
Dmitry
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Media Devel]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Linux Wireless Networking]     [Linux Omap]

  Powered by Linux