Bug#679750: Lenovo G360: ALPS Touchpad Recognized as PS/2 Generic Mouse(with newly dmesg information)

2012-07-19 Thread Seth Forshee
On Sun, Jul 15, 2012 at 10:15:57AM +0800, littlebat wrote:
 In the Windows 7 guest OS, the touchpad Lenovo pointing device
 disappeared from the hardwares list. And, the log file in Ubuntu 11.10
 has the content below: 
 y@y-PC:~$ cat ./psmouse-reverse/reverse.log 
 S ff
 R fe
 S ff
 R fe
 S ff
 R fe
 S ed
 R fe

From the outset this doesn't look right. When reset is sent (0xff) the
touchpad should respond with and acknowledge (0xfa) and a couple more
bytes. Something obviously isn't working right, but I'm not sure what.

The only suggestion I have is to start debugging and try to see what's
going wrong. Is the data from the guest OS getting to the hardware okay,
and vice versa? Are you sure you've got the correct device?

Seth


-- 
To UNSUBSCRIBE, email to debian-kernel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/20120719194740.GA21315@ubuntu-530U



Bug#679750: Lenovo G360: ALPS Touchpad Recognized as PS/2 Generic Mouse(with newly dmesg information)

2012-07-14 Thread littlebat
On Mon, 9 Jul 2012 23:57:14 -0500
Seth Forshee seth.fors...@canonical.com wrote:

 I did a write-up a while back about how I did it.
 http://swapspace.forshee.me/2011/11/touchpad-protocol-reverse-engineering.html

Hi,
I have done some testing on my Lenovo G360 Laptop according to the
instruction above, but it seems can't work as the instruction says.
Here is my steps:

1, Install Ubuntu 11.10 for i386 on laptop.
2, sudo apt-get update
3, sudo apt-get build-dep virtualbox
4, sudo apt-get source virtualbox (download
virtualbox_4.1.2-dfsg-1ubuntu1 source into home folder) 
5, Applied the virtualbox patch vbox-psmouse-serio-passthrough.patch
downloaded from instruction page 
6, sudo apt-get -b source virtualbox (this will compile patched source
and generate several deb virtualbox packages into home folder) 
7, sudo dpkg -i virtualbox_4.1.2-dfsg-1ubuntu1_i386.deb
virtualbox-dbg_4.1.2-dfsg-1ubuntu1_i386.deb
virtualbox-dkms_4.1.2-dfsg-1ubuntu1_all.deb
virtualbox-fuse_4.1.2-dfsg-1ubuntu1_i386.deb
virtualbox-qt_4.1.2-dfsg-1ubuntu1_i386.deb (install generated
virtualbox packages) 
8, Installed Windows 7 (or Windows xp SP2, has the
almost same testing result) into VirtualBox virtual machine. 
9, Installed Touchpad driver in Windows 7 in VirtualBox virtual machine.
But, the touchpad still act as a normal ps/2 mouse in Windows in
virtual machine, it misses edge scrolling function although has
installed windows touchpad driver successfully. 
10, Do the test:
y@y-PC:~$ sudo ./psmouse-reverse/mouse-to-serio.sh 1 
y@y-PC:~$ sudo chmod 666 /dev/serio_raw0 
y@y-PC:~$ ls -la /dev/serio*
crw-rw-rw- 1 root root 10, 55 2012-07-14 07:40 /dev/serio_raw0 
y@y-PC:~ $ export PSMOUSE_SERIO_DEV_PATH=/dev/serio_raw0 
y@y-PC:~$ export
PSMOUSE_SERIO_LOG_PATH=/home/y/psmouse-reverse/reverse.log 
y@y-PC:~$ virtualbox --startvm w7 (w7 is my VirtualBox virtual
machine Windows 7 guest OS name)

In the Windows 7 guest OS, the touchpad Lenovo pointing device
disappeared from the hardwares list. And, the log file in Ubuntu 11.10
has the content below: 
y@y-PC:~$ cat ./psmouse-reverse/reverse.log 
S ff
R fe
S ff
R fe
S ff
R fe
S ed
R fe

Then, restart Windows 7 guest OS without the environment variables
PSMOUSE_SERIO_DEV_PATH, PSMOUSE_SERIO_LOG_PATH, the touchpad
Lenovo pointing device appeared in the Windows 7 guest OS hardwares
list. I replaced touchpad Lenovo pointing device driver with normal
Microsoft PS/2 Mouse driver. Restart Windows 7 guest OS, I can see
Microsoft PS/2 Mouse in the hardwares list.

Then, empty the log file ./psmouse-reverse/reverse.log, set
PSMOUSE_SERIO_DEV_PATH, PSMOUSE_SERIO_LOG_PATH environment
variables and restart Windows 7 guest OS.

In the Windows 7 guest OS, Microsoft PS/2 Mouse disappeared from the
hardwares list. And, the log file in Ubuntu 11.10 has the content
below: 
y@y-PC:~$ cat ./psmouse-reverse/reverse.log 
S ff
R fe
S ff
R fe
S ff
R fe
S ed
R fe

Note, the content of the log file is same as when enable Lenovo
pointing device touchpad driver. And, when enable environment
variables, under  VirtualBox Windows 7 guest OS,  although the device
Lenovo pointing device or Microsoft PS/2 Mouse disappeared from the
hardwares list, the touchpad can still work as a normal PS/2 mouse in
the Windows 7. But, when I operate touchpad under Windows 7 guest OS,
there isn't any other bit wrote into the log file
./psmouse-reverse/reverse.log. Only when start virtualbox machine
Windows guest OS, the log file will be written the same eight lines as
above.

I have alse tested qemu-kvm_0.14.1+noroms-0ubuntu6 with Windows XP
SP2 guest OS installed, the result is same except two points: 
1, When I start guest OS without environment variables, the terminal
output as below: 
y@y-PC:~$ qemu -m 1024 ./QEMU/wxp.img 
open /dev/kvm: No such file or directory Could not initialize KVM, will
disable KVM support 
qemu: ps2 mouse init

qemu: serio_pt_init

qemu: No serio device specified in environment

qemu: pci_add_option_rom: failed to find romfile pxe-rtl8139.bin

And, when start it with environment variables set, the terminal output
as below: 
y@y-PC:~$ qemu -m 1024 ./QEMU/wxp.img
open /dev/kvm: No such file or directory
Could not initialize KVM, will disable KVM support
qemu: ps2 mouse init

qemu: serio_pt_init

qemu: pci_add_option_rom: failed to find romfile pxe-rtl8139.bin

2, When start qemu windows xp sp2 guest OS with environment variables
set, unlike in the virtualbox Windows guest OS, the touchpad and USB
mouse can't work in the qemu windows xp sp2 guest OS, the cursor can't
move.

Briefly, it seems the instruction at
http://swapspace.forshee.me/2011/11/touchpad-protocol-reverse-engineering.html;
can't work on my Lenovo G360, is there any thing wrong with me?

Thanks.


-- 
To UNSUBSCRIBE, email to debian-kernel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/20120715101557.e20a039b.dashing.m...@gmail.com



Bug#679750: Lenovo G360: ALPS Touchpad Recognized as PS/2 Generic Mouse(with newly dmesg information)

2012-07-10 Thread Rik Theys
Hi Seth,

On Tue, Jul 10, 2012 at 6:57 AM, Seth Forshee
seth.fors...@canonical.com wrote:
 On Tue, Jul 10, 2012 at 12:16:27PM +0800, littlebat wrote:
 3, If you are interest in this and have time and it is helpful, I can
 provide a root password for this laptop to you and run ssh service for
 you all the time. Then you can operate this laptop via ssh connection
 in this way. You can do anything on this machine even format the
 disk :-)

 I'm afraid it's just not practical to do this remotely. Being able to
 physically interact with the touchpad is pretty crucial.

How long do you think you will need to reverse engineer the protocol
if you would have the hardware?
Depending on how long you think you might need, and how much it would
cost me to ship my laptop to you (where are you located?), would it
help if I simply ship my laptop to you?

I can't do that right now, but might be able to do that in a few months.

Regards,

Rik



-- 
To UNSUBSCRIBE, email to debian-kernel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: 
http://lists.debian.org/CAPwv0Jn5SFTe_banVh3ey8cLEbMSioR6ncoSn=mga2g3kdy...@mail.gmail.com



Bug#679750: Lenovo G360: ALPS Touchpad Recognized as PS/2 Generic Mouse(with newly dmesg information)

2012-07-09 Thread Seth Forshee
On Sat, Jul 07, 2012 at 01:35:19PM +0800, littlebat wrote:
 Briefly, proto_version V4 with command_mode_resp 0x00, 0x01, 0x73,
 0x0d and V3 with 0x0d, 0x73, show the almost same symptoms:
 1, dmesg output:
 [   19.105550] psmouse serio4: alps: E6 report: 00 00 64
 [   19.130028] psmouse serio4: alps: E7 report: 73 03 50
 [   19.149304] psmouse serio4: alps: unknown response while entering
 command mode: 73 01 0d 
 mode

Okay, I don't suspect the v3/v4 protocol support is likely to work then.

 And, V2 or V1 with 0x8a or 0x00, show the almost same symptoms below:
 1, dmesg output:
 [   19.935069] psmouse serio4: alps: E6 report: 00 00 64
 [   19.960457] psmouse serio4: alps: E7 report: 73 03 50
 [   20.000732] psmouse serio4: alps: Status: 10 00 0a

...

 4, There is touchpad tab in gnome mouse setting dialog, but the
 functions of edge scrolling and disable touchpad when typing still
 can't work even if I can setup them in touchpad tab in gnome mouse
 setting dialog.

The alps driver will detect and handle raw PS/2 mouse data, so what it
sounds like to me is that the alps driver manages to attach to your
device but doesn't get it sending absolute data packets. As a result the
driver is only passing relative motion data instead of absolute position
data, which means the touchpad is usable but still can't support any
touchpad features like edge scrolling.

So it sounds like we don't know how to talk to your touchpad, and
there's no trivial way to add support for it to the driver. There's
not really anything more I can do to help since I don't have access to
the hardware.

Seth



-- 
To UNSUBSCRIBE, email to debian-kernel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/20120709144508.GB4985@thinkpad-t410



Bug#679750: Lenovo G360: ALPS Touchpad Recognized as PS/2 Generic Mouse(with newly dmesg information)

2012-07-09 Thread littlebat
On Mon, 9 Jul 2012 09:45:08 -0500
Seth Forshee seth.fors...@canonical.com wrote:
 So it sounds like we don't know how to talk to your touchpad, and
 there's no trivial way to add support for it to the driver. There's
 not really anything more I can do to help since I don't have access to
 the hardware.
Thanks.

Three things:
1, Can you provide a simple tutorial (or web page address) of how to
reverse-engineer a Linux ALPS driver if possible? I have very basic
programming knowledge(shell script, read basic C code except hardware
driver). Maybe, I can provide more detail hardware information about
this ALPS touchpad in this way?

2, Is there a tool, it can show the message when I operate on touchpad
edge scrolling? So, according to the output, it is able to get a dirty
solution about edge scrolling function of Lenovo G360 touchpad.
The funciton of disable touchpad when typing has a solution using
python script I have mentioned in the previous posts.

3, If you are interest in this and have time and it is helpful, I can
provide a root password for this laptop to you and run ssh service for
you all the time. Then you can operate this laptop via ssh connection
in this way. You can do anything on this machine even format the
disk :-)



-- 
To UNSUBSCRIBE, email to debian-kernel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/20120710121627.22558c22.dashing.m...@gmail.com



Bug#679750: Lenovo G360: ALPS Touchpad Recognized as PS/2 Generic Mouse(with newly dmesg information)

2012-07-09 Thread Seth Forshee
On Tue, Jul 10, 2012 at 12:16:27PM +0800, littlebat wrote:
 1, Can you provide a simple tutorial (or web page address) of how to
 reverse-engineer a Linux ALPS driver if possible? I have very basic
 programming knowledge(shell script, read basic C code except hardware
 driver). Maybe, I can provide more detail hardware information about
 this ALPS touchpad in this way?

I did a write-up a while back about how I did it.

http://swapspace.forshee.me/2011/11/touchpad-protocol-reverse-engineering.html

 2, Is there a tool, it can show the message when I operate on touchpad
 edge scrolling? So, according to the output, it is able to get a dirty
 solution about edge scrolling function of Lenovo G360 touchpad.
 The funciton of disable touchpad when typing has a solution using
 python script I have mentioned in the previous posts.

I'm sorry, I can't quite tell what you're asking. If you're asking for a
way to enable edge scrolling without having a functioning touchpad
driver, I don't know of any. I doubt it's even possible to detect that
you're near the edge of the touchpad with only relative motion events.

 3, If you are interest in this and have time and it is helpful, I can
 provide a root password for this laptop to you and run ssh service for
 you all the time. Then you can operate this laptop via ssh connection
 in this way. You can do anything on this machine even format the
 disk :-)

I'm afraid it's just not practical to do this remotely. Being able to
physically interact with the touchpad is pretty crucial.

Seth



-- 
To UNSUBSCRIBE, email to debian-kernel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/20120710045714.GA3429@ubuntu-mba



Bug#679750: Lenovo G360: ALPS Touchpad Recognized as PS/2 Generic Mouse(with newly dmesg information)

2012-07-05 Thread Seth Forshee
On Fri, Jul 06, 2012 at 11:39:42AM +0800, littlebat wrote:
 I found these lines in my dmesg information:
 [   19.995850] psmouse serio4: alps: E6 report: 00 00 64
 [   20.021288] psmouse serio4: alps: E7 report: 73 03 50
 [   20.623609] input: PS/2 Generic Mouse
 as /devices/platform/i8042/serio4/input/input9

Thanks, this is the information we need to check whether or not your
touchpad uses any of the known ALPS protocols.

I'm attaching a patch to use as a starting point. Basically we're just
going to try each protocol version until either we find one that works
or run out of options. You should have an external mouse available,
because it's likely that your touchpad will not be usable. I've also
heard that some of the workarounds that people use to get the disable
touchpad while typing behavior can cause the touchpad to no longer
function once it starts behaving as a touchpad, so you should look out
for that as well.

I won't be able to respond further until next Monday, but it's pretty
simple to modify the driver to try different protocol versions so I'll
give you some instructions. The patch adds the following line. I've
identified the two fields you'll need to change.

{ { 0x73, 0x03, 0x50 }, 0x8a, ALPS_PROTO_V4, 0x8f, 0x8f, 0 },
  ^ ^
  | |
command_mode_resp   |
  proto_version

Not surprisingly, to try different protocol versions you just need to
change the proto_version field. Try ALPS_PROTO_V4 first, if that doesn't
work try ALPS_PROTO_V3, etc., until you've tried them all or found one
that works.

The first time you run the patch though you need to be on the lookout
for a message in dmesg that says Unknown command mode response
followed by two hex digits. If you see this then you need to change
command_mode_resp to match the response printed in the message. Be sure
to leave the 0x characters in place; only replace the 8a characters.
Then try the same protocol version again.

The basic test procedure after booting with a test version of the driver
is:

 1. Check dmesg for any errors from the alps driver. If you see anything
other than the Unknown command mode response message then it
probably means your touchpad doesn't use that protocol version, so
you should move on to the next one. If the device name isn't showing
up as something with ALPS in it, that also indicates your device
isn't using that version.

 2. Thoroughly test the touchpad. You may see erratic behavior -- the
pointer jumping around, random clicks, etc -- which means it's using
a different protocol.

If you find a protocol version that works, let me know and I'll help get
it added to the driver. If you don't then there's not much more I can do
to help without hardware.

Seth
diff --git a/drivers/input/mouse/alps.c b/drivers/input/mouse/alps.c
index 4c6a72d..979339c 100644
--- a/drivers/input/mouse/alps.c
+++ b/drivers/input/mouse/alps.c
@@ -15,6 +15,8 @@
  * the Free Software Foundation.
  */
 
+#define DEBUG
+
 #include linux/slab.h
 #include linux/input.h
 #include linux/input/mt.h
@@ -112,6 +114,7 @@ static const struct alps_model_info alps_model_data[] = {
 	{ { 0x73, 0x02, 0x64 },	0x9b, ALPS_PROTO_V3, 0x8f, 0x8f, ALPS_DUALPOINT },
 	{ { 0x73, 0x02, 0x64 },	0x9d, ALPS_PROTO_V3, 0x8f, 0x8f, ALPS_DUALPOINT },
 	{ { 0x73, 0x02, 0x64 },	0x8a, ALPS_PROTO_V4, 0x8f, 0x8f, 0 },
+	{ { 0x73, 0x03, 0x50 },	0x8a, ALPS_PROTO_V4, 0x8f, 0x8f, 0 },
 };
 
 /*