Re: Issues with Lenovo Yoga 900 IIO devices (accelerometer, etc.)

From: Crt Mori
Date: Thu Dec 17 2015 - 03:42:42 EST


On 17 December 2015 at 06:27, Nish Aravamudan <nish.aravamudan@xxxxxxxxx> wrote:
> On Wed, Dec 16, 2015 at 3:05 PM, Nish Aravamudan
> <nish.aravamudan@xxxxxxxxx> wrote:
>> On Wed, Dec 16, 2015 at 2:55 PM, Crt Mori <cmo@xxxxxxxxxxx> wrote:
>>>
>>> On Dec 16, 2015 11:37 PM, "Nish Aravamudan" <nish.aravamudan@xxxxxxxxx>
>>> wrote:
>>>>
>>>> Hi,
>>>>
>>>> On Wed, Dec 16, 2015 at 2:22 PM, Crt Mori <cmo@xxxxxxxxxxx> wrote:
>>>> > On 16 December 2015 at 22:41, Nish Aravamudan
>>>> > <nish.aravamudan@xxxxxxxxx> wrote:
>>>> >> Hi Daniel,
>>>> >>
>>>> >> On Wed, Dec 16, 2015 at 1:43 AM, Daniel Baluta
>>>> >> <daniel.baluta@xxxxxxxxx> wrote:
>>>> >>> On Tue, Dec 15, 2015 at 9:19 PM, Nish Aravamudan
>>>> >>> <nish.aravamudan@xxxxxxxxx> wrote:
>>>> >>>> So, I apologize in advance for this relatively vague report, but I'm
>>>> >>>> fairly sure
>>>> >>>> the Yoga 900 has an accelerometer amongst other sensors (ambient
>>>> >>>> light?)
>>>> >>>> exported over IIO.
>>>> >>>>
>>>> >>>> But, these sensors seem to not be updating at all with a 4.4-rc5+
>>>> >>>> kernel (a
>>>> >>>> set of patches from https://lkml.org/lkml/2015/11/30/441 applied to
>>>> >>>> Linus'
>>>> >>>> tree).
>>>> >>>>
>>>> >>>> The odd part is at some point in messing with this, I'm fairly sure
>>>> >>>> it did work!
>>>> >>>> That is,
>>>> >>>>
>>>> >>>> `watch -n 0.1 cat '/sys/bus/iio/devices/iio:device'*/*raw*`
>>>> >>>
>>>> >>> Can you send us a sample of the output? Also, would be
>>>> >>> good to identify the exact driver for accel.
>>>> >>
>>>> >> cat /sys/bus/iio/devices/iio:device*/*raw*
>>>> >> 65478
>>>> >> 7
>>>> >> 1023
>>>> >> 0
>>>> >> 0
>>>> >> 0
>>>> >> 100
>>>> >> -539062
>>>> >> -742187
>>>> >> 1292968
>>>> >> 1592
>>>> >> 64932
>>>> >> 2
>>>> >> 275
>>>> >> 0 0 0 0
>>>> >>
>>>> >> Now, I should say that I distinctly remember at some point waving my
>>>> >> laptop around and seeing these values change ... but now they seem to
>>>> >> be "stuck". Maybe it's a hardware issue or something special that
>>>> >> WIndows does to leverage the IIO sensors?
>>>> >>
>>>> >>> Perhaps: cat /sys/bus/iio/devices/iio:device'*/name
>>>> >>
>>>> >> $ cat /sys/bus/iio/devices/iio:device*/name
>>>> >> accel_3d
>>>> >
>>>> > Can you list the directory of iio:device with this name (it is:
>>>> > drivers/iio/accel/hid-sensor-accel-3d.c).
>>>> > This is something you will be looking at for accel debugging, but it
>>>> > seems more like
>>>> > standard
>>>>
>>>> /sys/bus/iio/devices/iio:device0/name
>>>> gyro_3d
>>>> /sys/bus/iio/devices/iio:device1/name
>>>> dev_rotation
>>>> /sys/bus/iio/devices/iio:device2/name
>>>> als
>>>> /sys/bus/iio/devices/iio:device3/name
>>>> magn_3d
>>>> /sys/bus/iio/devices/iio:device4/name
>>>> accel_3d
>>>> /sys/bus/iio/devices/iio:device5/name
>>>> incli_3d
>>>>
>>>> are all the IIO sensors, sorry about that!
>>>>
>>>
>>> I was more thinking what else is in iio:device4 directory, so that we can
>>> see if it was initialized OK. Can you also grep the dmesg for any errors?
>>
>> Well, I just noticed the device #s are not consistent boot-to-boot, so
>> this time it was device0. Trimming out the directories:
>>

This is correct/intended. You need to confirm "deviceX/name" each time.

>> /sys/bus/iio/devices/iio:device0/buffer
>> cat: /sys/bus/iio/devices/iio:device0/buffer: Is a directory
>> /sys/bus/iio/devices/iio:device0/dev
>> 250:0
>> /sys/bus/iio/devices/iio:device0/in_accel_hysteresis
>> cat: /sys/bus/iio/devices/iio:device0/in_accel_hysteresis: Invalid argument
>> /sys/bus/iio/devices/iio:device0/in_accel_offset
>> 0
>> /sys/bus/iio/devices/iio:device0/in_accel_sampling_frequency
>> 8.000000
>> /sys/bus/iio/devices/iio:device0/in_accel_scale
>> 0.009806
>> /sys/bus/iio/devices/iio:device0/in_accel_x_raw
>> 65478
>> /sys/bus/iio/devices/iio:device0/in_accel_y_raw
>> 7
>> /sys/bus/iio/devices/iio:device0/in_accel_z_raw
>> 1023

This seems like a valid number 1023 * 0.009806 = 10,031 m/s2 but X does not.

>> /sys/bus/iio/devices/iio:device0/name
>> accel_3d
>> /sys/bus/iio/devices/iio:device0/uevent
>> MAJOR=250
>> MINOR=0
>> DEVNAME=iio:device0
>> DEVTYPE=iio_device
>>
>> Another thing I just noticed:
>>
>> /sys/bus/iio/devices/iio:device0/buffer/enable
>> 0

This is buffer enable not chip enable. You can write 1 to that so it
will be enables
(echo "1" > /sys/bus/iio/devices/.../buffer/enable) and see what
happens. It might be
that it needs buffer to update properly (I haven't checked the code).

>>
>> The only error I'm getting consistently is:
>>
>> [ 1.115327] i2c_hid i2c-ITE8396:00: error in i2c_hid_init_report
>> size:19 / ret_size:18
>>
>> which I don't think is relevant, but I might be wrong.

If accel is i2c this might be a relevant error - and probe would also
not fail, but error would
repeat itself each time probably Maybe track where that line is in
i2c_hid and see what it
could mean.

>>
>>>> >> gyro_3d
>>>> >> als
>>>> >> magn_3d
>>>> >> incli_3d
>>>> >> dev_rotation
>>>> >>
>>>> >>
>>>> >>>>
>>>> >>>> showed updating values as I moved the laptop around.
>>>> >>>>
>>>> >>>> I've not done any accelerometer debugging before, so any suggestion
>>>> >>>> on
>>>> >>>> where to start would be greatly appreciated!
>>>> >>>
>>>> >>> Did you applied some patches and recompiled the kernel? Or when it did
>>>> >>> stopped
>>>> >>> working?
>>>> >>
>>>> >> As far as I can tell, it only worked that one one time and hasn't
>>>> >> since. Although your question does make me wonder *which* kernel I was
>>>> >> on that I experienced the values changing. Let me go back to a stock
>>>> >> 4.4-rc5 and see.
>>>> >
>>>> > Did you compile the stock kernel? It might be that .dts file you are
>>>> > using (or defconfig)
>>>> > is not correct.
>>>>
>>>> I compiled the stock kernel, based off the the Ubuntu 15.04 .config,
>>>> trimmed to account for the hardware I have on the system. I can attach
>>>> the .config if that will be useful.
>>>>
>>>> I just went back to 4.4-rc4 and it also didn't seem to have any
>>>> updates to the raw file contents.
>>>>
>>>
>>> I hope full post of your defconfig will not be needed. However could you
>>> double check that you have enabled all drivers for accel (check the kbuild
>>> file in drivers/iio/accel). If they have driver for accel in main kernel (or
>>> staging) then it will link with existing device tree nicely.
>>
>> I'll go back and enable everything just to be safe. Building now, will
>> report the results once I have them.
>
> Using the stock Ubuntu .config as the base, meaning many, many modules
> (including all possible IIO accelerometers, it seems), I still see no
> updates to the *raw* file contents.
>
> -Nish
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/