Re: [RFC 0/4] Intel Integrated Sensor Hub Support (ISH)

Grant Likely
2016-06-10T14:02:44Z

On Fri, Jun 10, 2016 at 10:44 AM, Grant Likely
<grant.likely@secretlab.ca> wrote:
> On Thu, Jun 9, 2016 at 10:54 PM, Srinivas Pandruvada
> <srinivas.pandruvada@linux.intel.com> wrote:
>> Hi,
>> On Thu, 2016-06-09 at 22:45 +0100, Grant Likely wrote:
>>> On Tue, May 31, 2016 at 5:27 AM, Srinivas Pandruvada
>>> <srinivas.pandruvada@linux.intel.com> wrote:
>>> >
>>> > Starting from Cherrytrail, multiple generation of Intel processors
>>> > offers
>>> > on package sensor hub. Several recent tablets, 2-in-1 convertible
>>> > laptops
>>> > are using ISH instead of external sensor hubs. This resulted in
>>> > lack of
>>> > support of sensor function like device rotation and auto backlight
>>> > adjustment. In addition, depending on the OEM implementation,
>>> > support of ISH
>>> > is required to support low power sleep states.
>>> >
>>> > The support of ISH on Linux platforms is not new. Android platforms
>>> > with
>>> > Intel SoCs had this support for a while submitted by Daniel Drubin.
>>> > This patcheset is reusing most of those changes with clean up and
>>> > removing Android platform specific changes.
>>> Hi Srinivas,
>>>
>>> Thanks for this patch series. I've got an HP Spectre x360 G2
>>> (skylake), and I've built a 4.6.0 kernel with this driver patched in.
>>> It detects the sensors hub, and creates IIO devices under
>>> /sys/bus/iio/devices:
>>>
>>> $ ls /sys/bus/iio/devices/
>>> iio:device0 iio:device1 iio:device2 iio:device3 iio:device4
>>> iio:device5 iio:device6 iio:device7 iio:device8 iio:device9
>>> trigger0 trigger1 trigger2 trigger3 trigger4 trigger5 trigger6
>>> trigger7 trigger8 trigger9
>>>
>>> However, I haven't figured out how to test it yet. (This is the first
>>> time I'm working with IIO). Do you have any test code or test
>>> procedures to show if it is working?
>>>
>> If you use Fedora 23 (or any distro with iio-sensor-proxy with gnome
>> rotation stuff), you should be able to do screen rotation and
>> brightness using ALS.
>> Each of these folders should have some raw sysfs files
>> in_xxx_raw_xx
>>
>> You should be able to use "cat" on them.
>
> Yes, I do see the in_*_raw_* files in sysfs, and I'm able to get data
> out of them. Gnome also seems to recognize that the accelerometers are
> there because it adds a rotation lock button to the system menu.
>
> However, the events are getting through yet. It may be that I'm
> missing something in my kernel config. I'm rebuilding the kernel with
> Debian's config for the 4.5.5 kernel as a quick sanity test. I'll
> report back when I've tried.

Still no joy here on getting wired up to Gnome. The sensors exist, and
I can view the output. For example, the following shell command will
give a live view of the accelerometer settings:

while true; clear; do { for f in iio\:device*/in_accel*raw; do echo $f
`cat $f`; done }; sleep 0.25s; done

In "Laptop mode":
iio:device1/in_accel_x_raw 2184
iio:device1/in_accel_y_raw -968620
iio:device1/in_accel_z_raw -224273
iio:device3/in_accel_x_raw 5784
iio:device3/in_accel_y_raw -946324
iio:device3/in_accel_z_raw -218647

When rotated clockwise 90 degrees:
iio:device1/in_accel_x_raw 1013843
iio:device1/in_accel_y_raw 8523
iio:device1/in_accel_z_raw -12259
iio:device3/in_accel_x_raw 1012352
iio:device3/in_accel_y_raw 14487
iio:device3/in_accel_z_raw -6891

When lying flat:
iio:device1/in_accel_x_raw 6995
iio:device1/in_accel_y_raw -32824
iio:device1/in_accel_z_raw -986080
iio:device3/in_accel_x_raw 5797
iio:device3/in_accel_y_raw -31402
iio:device3/in_accel_z_raw -984732

However, Gnome isn't picking up the rotation events. I don't know
where in the stack things are falling down. I do have iio-sensor-proxy
running. Any hints on debugging this?

Yet, some stuff is working now. The keyboard (but not the trackpad)
gets disabled when folded back in tablet mode.

g.

>
> I'll also take some time and review the patch series later this afternoon.
>
> g.
>
>>
>> Thanks,
>> Srinivas
>>
>>
>>> Thanks,
>>> g.
>>>
>>> >
>>> >
>>> > This series is tested on:
>>> > - Lenovo Yoga 260 with Skylake processor
>>> > - HP Pavilion x2 detachable with Cherrytrail
>>> >
>>> > The user mode ABI is still same as external sensor hubs using Linux
>>> > IIO. So existing user mode software should still work without
>>> > change.
>>> > This series primarily brings in new HID transport used in ISH.
>>> >
>>> > This series submitted as a RFC to try on several devices. We have
>>> > received request from Linux users who wanted this support. So I
>>> > hope all
>>> > those users try and give feedback.
>>> >
>>> > Daniel Drubin (3):
>>> > hid: intel_ish-hid: ISH Transport layer
>>> > hid: intel-ish-hid: ipc layer
>>> > hid: intel-ish-hid: ISH HID client driver
>>> >
>>> > Srinivas Pandruvada (1):
>>> > Documentation: hid: Intel ISH HID document
>>> >
>>> > Documentation/hid/intel-ish-hid.txt | 375 +++++++++
>>> > drivers/hid/Kconfig | 2 +
>>> > drivers/hid/Makefile | 2 +
>>> > drivers/hid/intel-ish-hid/Kconfig | 27 +
>>> > drivers/hid/intel-ish-hid/Makefile | 20 +
>>> > drivers/hid/intel-ish-hid/ipc/hw-ish-regs.h | 220 +++++
>>> > drivers/hid/intel-ish-hid/ipc/hw-ish.h | 71 ++
>>> > drivers/hid/intel-ish-hid/ipc/ipc.c | 710
>>> > ++++++++++++++++
>>> > drivers/hid/intel-ish-hid/ipc/pci-ish.c | 238 ++++++
>>> > drivers/hid/intel-ish-hid/ipc/utils.h | 65 ++
>>> > drivers/hid/intel-ish-hid/ishtp-hid-client.c | 672
>>> > +++++++++++++++
>>> > drivers/hid/intel-ish-hid/ishtp-hid.c | 201 +++++
>>> > drivers/hid/intel-ish-hid/ishtp-hid.h | 157 ++++
>>> > drivers/hid/intel-ish-hid/ishtp/bus.c | 670
>>> > +++++++++++++++
>>> > drivers/hid/intel-ish-hid/ishtp/bus.h | 99 +++
>>> > drivers/hid/intel-ish-hid/ishtp/client.c | 1131
>>> > ++++++++++++++++++++++++++
>>> > drivers/hid/intel-ish-hid/ishtp/client.h | 196 +++++
>>> > drivers/hid/intel-ish-hid/ishtp/dma-if.c | 175 ++++
>>> > drivers/hid/intel-ish-hid/ishtp/hbm.c | 911
>>> > +++++++++++++++++++++
>>> > drivers/hid/intel-ish-hid/ishtp/hbm.h | 319 ++++++++
>>> > drivers/hid/intel-ish-hid/ishtp/init.c | 94 +++
>>> > drivers/hid/intel-ish-hid/ishtp/ishtp-dev.h | 276 +++++++
>>> > include/trace/events/intel_ish.h | 30 +
>>> > 23 files changed, 6661 insertions(+)
>>> > create mode 100644 Documentation/hid/intel-ish-hid.txt
>>> > create mode 100644 drivers/hid/intel-ish-hid/Kconfig
>>> > create mode 100644 drivers/hid/intel-ish-hid/Makefile
>>> > create mode 100644 drivers/hid/intel-ish-hid/ipc/hw-ish-regs.h
>>> > create mode 100644 drivers/hid/intel-ish-hid/ipc/hw-ish.h
>>> > create mode 100644 drivers/hid/intel-ish-hid/ipc/ipc.c
>>> > create mode 100644 drivers/hid/intel-ish-hid/ipc/pci-ish.c
>>> > create mode 100644 drivers/hid/intel-ish-hid/ipc/utils.h
>>> > create mode 100644 drivers/hid/intel-ish-hid/ishtp-hid-client.c
>>> > create mode 100644 drivers/hid/intel-ish-hid/ishtp-hid.c
>>> > create mode 100644 drivers/hid/intel-ish-hid/ishtp-hid.h
>>> > create mode 100644 drivers/hid/intel-ish-hid/ishtp/bus.c
>>> > create mode 100644 drivers/hid/intel-ish-hid/ishtp/bus.h
>>> > create mode 100644 drivers/hid/intel-ish-hid/ishtp/client.c
>>> > create mode 100644 drivers/hid/intel-ish-hid/ishtp/client.h
>>> > create mode 100644 drivers/hid/intel-ish-hid/ishtp/dma-if.c
>>> > create mode 100644 drivers/hid/intel-ish-hid/ishtp/hbm.c
>>> > create mode 100644 drivers/hid/intel-ish-hid/ishtp/hbm.h
>>> > create mode 100644 drivers/hid/intel-ish-hid/ishtp/init.c
>>> > create mode 100644 drivers/hid/intel-ish-hid/ishtp/ishtp-dev.h
>>> > create mode 100644 include/trace/events/intel_ish.h
>>> >
>>> > --
>>> > 1.9.1
>>> >