Skip site navigation (1)Skip section navigation (2)
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>