From owner-freebsd-hardware@freebsd.org Tue Feb 21 00:49:42 2017 Return-Path: Delivered-To: freebsd-hardware@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id C0624CE6E6B for ; Tue, 21 Feb 2017 00:49:42 +0000 (UTC) (envelope-from large.hadron.collider@gmx.com) Received: from mout.gmx.net (mout.gmx.net [212.227.15.15]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client CN "mout.gmx.net", Issuer "TeleSec ServerPass DE-2" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 3D7C91597 for ; Tue, 21 Feb 2017 00:49:42 +0000 (UTC) (envelope-from large.hadron.collider@gmx.com) Received: from [192.168.0.12] ([50.69.17.158]) by mail.gmx.com (mrgmx002 [212.227.17.184]) with ESMTPSA (Nemesis) id 0LlVZv-1c6uXi2ODH-00bIa2 for ; Tue, 21 Feb 2017 01:49:33 +0100 To: freebsd-hardware@freebsd.org From: Large Hadron Collider Subject: In which a touchscreen is rehabilitated, or: How I learned to stop being scared and just hack at /usr/src/sys/dev Message-ID: <0c7ad294-86f0-a076-f337-83e17d58fdd0@gmx.com> Date: Mon, 20 Feb 2017 16:49:32 -0800 User-Agent: Mozilla/5.0 (X11; FreeBSD amd64; rv:45.0) Gecko/20100101 Thunderbird/45.6.0 MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit X-Provags-ID: V03:K0:aO9MHDV5xYWs10uZbe2ShO0WSE0ecGly5l84dwPq5et59NRll9O aVZAgs9PML5AahvI8ZBy1k1emSB7PoEv8CP9s87NHkRUBXtq4adjumuoDavhp3QTwaSlgQt ChmT+a01OsD4OkNjS7ljnauT63bkvetVDB6uA0w1a63pxlfXrrx7YsHxNU5dlVvOnoxnLRY HHaxupI9yrnz+LyJgYeKQ== X-UI-Out-Filterresults: notjunk:1;V01:K0:BW2BfDT61TI=:l8xmjrFWaNyZI6vF37m04i lD2/5EujWFOvLucr1J9yntCvOGiMcMNpYyg35wlQ5HnZ/3x2XXqq7PHqm4RKSCJ6rmhPKB3q5 1FEBTJ1g00fgIpoLJAoCe+6c6YFAwVGS/ztpUf9c2wwvKs+X/x0r3Swq9KWwJozabQHpoBP// 0qLSTj4wZefiKBqrubfZzEq4XERH2sNaTnauQMpYMbdz56UBq3tUzvgqi6OVBeNTu5FxElReX tZbDD+ZfCWdjZN0sbBymOCYRstsET3rnjzucVwPeKzyMF3DkOOHRMRFQbpqCpTQcr1j/JtHCI sOgLEP0OM/MNvATiB8SlfSN86Mp7tvfZ3KgQL7zETrrypZl+9Ugf5LwMq2UElI4bpdMPOWZpC sZ0pAsfub6Z30EidBfDDFjdE60dgCLY91qGrrxf2ri0gmnHjFEhdI5+pBmQV+bKZTF2as2LJC 9maOgDpDdg== X-BeenThere: freebsd-hardware@freebsd.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: General discussion of FreeBSD hardware List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 21 Feb 2017 00:49:42 -0000 (Apologies if this doesn't line break at 79 chars - full formatting in HTML but this may be lost - shouldn't lose any info though) Good day subscribers to this list. I'm here with what could be described as a success story and a patch in the same e-mail. Please do stop me if WACF00E has already been slated for the next major release - but I would like to share how I got my HP Elitebook 2760p's touchscreen working. So I, a former and now again user of FreeBSD (I got hacked the first time... silly Ellie shouldn't give shells to strangers, should she now?) have a laptop whose screen is touch-capable, and whose touchscreen subsystem is based on a serial Wacom tablet. It worked under Linux and too I presume Windows (with which the laptop shipped), but not FreeBSD. I thought, what was going on? What was I doing wrong? So after some poking around I discovered that the screen is a WACF00E - not supported in 11.0-RELEASE-p1 by the driver that handles the UART. It showed unknown pnpinfo _HID=WACF00E _UID=0 at handle=\_SB_.PCI0.LPCB.SIO_.DIGI as the devinfo line. Intriguingly, there was this line in uart_bus_acpi.c:static struct isa_pnp_id acpi_ns8250_ids[]: {0x04f0235c, "Wacom Tablet PC Screen"}, /* WACF004 */ So I thought what the hell, I'd copy that line under itself and change 04f0 (which is byte-swapped, counterintuitively) to 0ef0, representing WACF00E. Adding this: {0x0ef0235c, "Wacom Tablet PC Screen 00e"}, /* WACF00e */ to uart_bus_acpi.c and this: {0x0ef0235c, NULL}, /* WACF004 - Wacom Tablet PC Screen*/ (Yes it should read WACF00E in the comment) under the WACF004 entry in uart_bus_isa.c, then recompiling and installing in whatever way your configuration might demand seems to make the kernel detect the tablet as a UART. So it detected it, and the dev file was /dev/cuau4, for uart4, the WACF00E (it was ttyS4 under Linux). Great. X didn't detect it on its own, but that let me debug it using Minicom, which I promptly installed. After telling Minicom to use /dev/cuau4 as the modem, and telling it to use 38400 8N1, touches to the screen resulted in what can only be described as euphoric garbage, indicating that this ugly hack on top of hack alert worked. So I set up /usr/local/etc/X11/xorg.conf.d/wacom.conf to include (slightly amended from my actual setup, which only has ISDV4 in the stylus but still works for touch, haven't tested for stylus): Section "InputDevice" Identifier "wacom stylus" Driver "wacom" Option "Type" "stylus" Option "Device" "/dev/cuau4" Option "ForceDevice" "ISDV4" Option "AutoServerLayout" "true" EndSection Section "InputDevice" Identifier "wacom eraser" Driver "wacom" Option "Type" "eraser" Option "Device" "/dev/cuau4" Option "ForceDevice" "ISDV4" Option "AutoServerLayout" "true" EndSection Section "InputDevice" Identifier "wacom touch" Driver "wacom" Option "Type" "touch" Option "Touch" "on" Option "Device" "/dev/cuau4" Option "ForceDevice" "ISDV4" Option "AutoServerLayout" "true" EndSection Restarted X, and after % xsetwacom set "wacom touch" Touch on (I didn't initially have Touch on in the options list for "wacom touch") it was almost like striking platinum in a gold mine or something when the mouse just followed my finger the way I was used to it doing so under Linux. To those of you who say that FreeBSD will never be ready for the desktop, you're only right when you're talking to newbs. And this is living proof that if you know some C and you're intrepid enough, miracles really can happen.