Date: Tue, 08 Mar 2016 21:52:06 -0330 From: "Jonathan Anderson" <jonathan@FreeBSD.org> To: freebsd-mobile@freebsd.org Subject: HID over I2C Message-ID: <0F2F1CD4-1327-4B72-BF6D-1358EEF03516@FreeBSD.org>
next in thread | raw e-mail | index | archive | help
Hi all,
I have a shiny new notebook to run FreeBSD on (the ASUS Zenbook =
UX305CA). I wasn't expecting accelerated graphics to work, so I'm happy =
enough to get the native HD resolution with the scfb driver. The =
wireless mostly works, too, with one known caveat [1] that isn't too =
annoying. However, of all things, the touchpad doesn't work!
It turns out that this notebook's touchpad is connected using HID over =
I2C. This seems to be a pattern of increasing prevalence, so I'm hoping =
that FreeBSD either has some support for it or else somebody is working =
on it. However, besides the HID-over-I2C bit, I also need updated I2C =
parts.
I see that FreeBSD has the 'ig4' module (imported from Dragonfly) for =
Haswell I2C, but I believe that there are some further changes with =
Skylake (at least the Linux folks needed some changes [2]). I'm slightly =
confused about the difference between SMBus and I2C... I believe they're =
compatible, but they seem to be exposed as difference PCI devices [3]. =
Is this because one is used with host-as-master only and the other =
supports the multi-master mode for async transfer? I've tried simple =
things like adding the Skylake PCI IDs to `ichsmb`, which causes a =
`/dev/smb0` to be created, but when I try to use `consolehm` I get lots =
of "Device not configured" errors. At any rate, it seems like I need to =
be worried about I2C and not SMBus.
So, I really have two questions for the list:
1. Where is the right place to make I2C changes?
We have the 'ig4' module for the fourth-generation Intel PCH... are we =
going to go down the road of creating an 'ig5', 'ig6', etc.? Should =
'ig4' be renamed to align with its path in the source tree =
('sys/dev/ichiic') and be extended to support more recent generations of =
hardware too?
2. What else is required to support HID over I2C?
Once I have a working Skylake I2C bus, how do I connect an input device =
to it? We have code for dealing with HID over USB, but that seems pretty =
tied into USB ('sys/dev/usb/input/uhid.c' and 'sys/dev/usb/usb_hid.c'). =
Now, it's only ~1500 lines of code, so it mightn't be too hard to =
re-implement the protocol, but ideally one wouldn't have to. If the =
touchpad can be exposed directly as a device, can X itself speak the HID =
protocol? Alternatively, if we get I2C working correctly, will psm =
magically start to work with the touchpad?
Thanks for your patience,
Jon
[1] =
http://lists.freebsd.org/pipermail/freebsd-wireless/2016-March/006530.htm=
l
[2] https://bugzilla.kernel.org/show_bug.cgi?id=3D108581
[3] =
https://download.01.org/future-platform-configuration-hub/skylake/registe=
r-definitions/332219-002.pdf
--
Jonathan Anderson
jonathan@FreeBSD.org
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?0F2F1CD4-1327-4B72-BF6D-1358EEF03516>
