Not work accelerometer, magnetometer and ambientlight sensors (Lenovo Yoga Tablet 2)

498 views
Skip to first unread message

Kitsune

unread,
Oct 8, 2017, 4:36:11 PM10/8/17
to Android-x86
On my tablet is lsm303d accel and magn, in kernel no this driver, and this error with magnetometer:
i2c i2c-4: Failed to register i2c client MAGN0001:00 at 0x1d (-16) 
i2c i2c-4: failed to add I2C device MAGN0001:00 from ACPI


in dmesg: lsm303d driver: init
Accel not work.

Ambientlight sensor is AL3320B, but with AL3340a driver in kernel, light sensor not work. In dmesg no messages for this driver.

Kitsune

unread,
Oct 15, 2017, 5:05:34 AM10/15/17
to Android-x86
I partially fix problem, device registered. Dmesg: https://drive.google.com/file/d/0B0wusAQaS8ewdjVIZ0VCb3VwNEk/view?usp=sharing

[    9.728837] lsm303d_probe
[    9.728848] lsm303d i2c-ACCL0001:00: probe start.
[    9.729612] lsm303d_probe:======msensor id is 0x49=======
[    9.730438] lsm303d i2c-ACCL0001:00: using default plaform_data for accelerometer and magnetometer
[    9.730444] lsm303d i2c-ACCL0001:00: pdata_acc--gpio_int1:-22, gpio_int2:-22
[    9.730447] lsm303d: hw init start
[    9.731728] lsm303d: hw init done
[    9.740525] input: lsm303d_acc as /devices/platform/80860F41:04/i2c-4/i2c-ACCL0001:00/input/input2
[    9.740858] input: lsm303d_mag as /devices/platform/80860F41:04/i2c-4/i2c-ACCL0001:00/input/input3
[    9.741606] lsm303d i2c-ACCL0001:00: lsm303d: probed
[    9.741835] I2C bus = 5, name =          lsm303d, irq = 0x 0, addr = 0x1d
[    9.761578] ueventd: blacklisted module evbug: 1
[    9.769918] ueventd: blacklisted module evbug: 1
[    9.778618] ueventd: blacklisted module evbug: 1
[    9.786391] ueventd: blacklisted module evbug: 1
[    9.797022] I2C bus = 5, name =           al3320, irq = 0x75, addr = 0x1c
[    9.829951] LDBG: func [al3320_input_init], line [805], 
[    9.829956] registering light sensor input device
[    9.830135] input: light as /devices/virtual/input/input4
[    9.830877] al3320 i2c-CALS0001:00: Driver version 1.04 enabled

Not work magnetometer, but i can view values acelerometer in file /sys/devices/platform/80860F41:04/i2c-4/i2c-ACCL0001:00/accelerometer/gsensor_data , when i'm enable accel in file enable_device
Light sensor values in /sys/devices/virtual/input/input4/lux

But autorotate not work and apps don't show the values from sensors? How do it?

Chih-Wei Huang

unread,
Oct 16, 2017, 1:12:08 AM10/16/17
to Android-x86
You need to write a sensor HAL to handle the events.
Read the sensors porting guide from AOSP:
https://source.android.com/devices/sensors/

You may refer to the code in hardware/libsensors
as examples.


--
Chih-Wei
Android-x86 project
http://www.android-x86.org

Kitsune

unread,
Oct 21, 2017, 9:08:52 AM10/21/17
to Android-x86
Thank you for answer.
I found HAL https://github.com/STMicroelectronics/STMems_Android_Sensor_HAL_Input but they not compile in /out/target/product/<board>/system/vendor/lib/ no folder hw. 
In device.mk I add: PRODUCT_PACKAGES += sensors.android_x86_64
in Android.mk ENABLED_SENSORS := LSM303D

понедельник, 16 октября 2017 г., 8:12:08 UTC+3 пользователь Chih-Wei Huang написал:

Kitsune

unread,
Nov 11, 2017, 5:24:10 AM11/11/17
to Android-x86
I'm compile HAL, if enable magnetometer and accelerometer is magnetometer value 0.1-0.4 in cpu-z, but no acelerometer value. In logcat this errors:

11-11 10:10:03.029  1899  4025 D Sensors : SensorBase: setDelay handle = 1
11-11 10:10:03.029  1899  4025 E Sensors : AccelSensor::Delay() Failed to set delay: 200 [ms] - /sys/class/input/event2/device/device/accelerometer/pollrate_ms
11-11 10:10:03.029  1899  4025 D Sensors : SensorBase: setDelay handle = 1
11-11 10:10:03.029  1899  4025 E Sensors : AccelSensor::Delay() Failed to set delay: 200 [ms] - /sys/class/input/event2/device/device/accelerometer/pollrate_ms
11-11 10:10:03.029  1899  4025 E Sensors : AccelSensor::setFullScale() Failed to set Full-scale: 8 - /sys/class/input/event2/device/device/accelerometer/full_scale
11-11 10:10:03.029  1899  4025 E Sensors : AccelSensor::Enable(Accel) Failed to set enable: 1 - /sys/class/input/event2/device/device/accelerometer/enable_device
11-11 10:10:03.029  1899  4025 E Sensors : AccelSensor::enable(1), handle: 1, what: 0, mEnabled: 1
11-11 10:10:03.029  1899  4025 E SensorService: Error activating sensor 1 (Operation not permitted)
11-11 10:10:03.031  1899  4025 D Sensors : SensorBase: setDelay handle = 2
11-11 10:10:03.032  1899  4025 E Sensors : MagnSensor::Delay() Failed to set delay: 200 [ms] - /sys/class/input/event3/device/device/magnetometer/pollrate_ms
11-11 10:10:03.032  1899  4025 E Sensors : MagnSensor::setFullScale() Failed to set Full-scale: 8 - /sys/class/input/event3/device/device/magnetometer/full_scale
11-11 10:10:03.032  1899  4025 E Sensors : MagnSensor::Enable() Failed to set enable: 1 - /sys/class/input/event3/device/device/magnetometer/enable_device
11-11 10:10:03.032  1899  4025 E Sensors : MagSensor::enable(1), handle: 2, what: 0, mEnabled: 1
11-11 10:10:03.032  1899  4025 E SensorService: Error activating sensor 2 (Operation not permitted)
11-11 10:10:03.033  1899  4025 D Sensors : SensorBase: setDelay handle = 2
11-11 10:10:03.033  1899  4025 E Sensors : MagnSensor::Delay() Failed to set delay: 200 [ms] - /sys/class/input/event3/device/device/magnetometer/pollrate_ms
11-11 10:10:03.033  1899  4025 D Sensors : MagSensor::enable(1), handle: 15, what: 1, mEnabled: 3
11-11 10:10:03.034  1899  4025 D Sensors : SensorBase: setDelay handle = 1
11-11 10:10:03.034  1899  4025 E Sensors : AccelSensor::Delay() Failed to set delay: 50 [ms] - /sys/class/input/event2/device/device/accelerometer/pollrate_ms
11-11 10:10:03.034  1899  4025 D Sensors : SensorBase: setDelay handle = 2
11-11 10:10:03.034  1899  4025 E Sensors : MagnSensor::Delay() Failed to set delay: 20 [ms] - /sys/class/input/event3/device/device/magnetometer/pollrate_ms
11-11 10:10:03.034  1899  4025 D Sensors : SensorBase: setDelay handle = 1
11-11 10:10:03.034  1899  4025 E Sensors : AccelSensor::Delay() Failed to set delay: 50 [ms] - /sys/class/input/event2/device/device/accelerometer/pollrate_ms
11-11 10:10:03.034  1899  4025 E Sensors : AccelSensor::setFullScale() Failed to set Full-scale: 8 - /sys/class/input/event2/device/device/accelerometer/full_scale
11-11 10:10:03.034  1899  4025 E Sensors : AccelSensor::Enable(Accel) Failed to set enable: 1 - /sys/class/input/event2/device/device/accelerometer/enable_device
11-11 10:10:03.034  1899  4025 E Sensors : AccelSensor::enable(1), handle: 1, what: 0, mEnabled: 1
11-11 10:10:03.034  1899  4025 E SensorService: Error activating sensor 1 (Operation not permitted)
11-11 10:10:03.034  1899  4025 D Sensors : SensorBase: setDelay handle = 2
11-11 10:10:03.034  1899  4025 E Sensors : MagnSensor::Delay() Failed to set delay: 20 [ms] - /sys/class/input/event3/device/device/magnetometer/pollrate_ms
11-11 10:10:03.034  1899  4025 D Sensors : MagSensor::enable(1), handle: 2, what: 0, mEnabled: 3

Kitsune

unread,
Nov 11, 2017, 5:27:42 AM11/11/17
to Android-x86
How fix Operation not permitted?

Chih-Wei Huang

unread,
Nov 12, 2017, 9:01:43 PM11/12/17
to Android-x86
2017-11-11 18:27 GMT+08:00 Kitsune <kitsu...@gmail.com>:
> How fix Operation not permitted?

Try to change owner.group to system (1000), say

chown 1000.1000 /sys/class/input/event?/device/device/*/*

Kitsune

unread,
Nov 30, 2017, 11:32:32 AM11/30/17
to Android-x86
Thanks for answer it work, but no autorotate. Yet i'm write iio driver for lsm303d, accelerometer, magnetometer work, is values, but autorotate not work, need other sensors?
 How i can get others sensors? Composite sensors type? Gravity, rotation vector, orientation and etc.? In STM repo no needed libraries...

понедельник, 13 ноября 2017 г., 4:01:43 UTC+2 пользователь Chih-Wei Huang написал:

Chih-Wei Huang

unread,
Nov 30, 2017, 11:06:17 PM11/30/17
to Android-x86
2017-12-01 0:32 GMT+08:00 Kitsune <kitsu...@gmail.com>:
> Thanks for answer it work, but no autorotate. Yet i'm write iio driver for
> lsm303d, accelerometer, magnetometer work, is values, but autorotate not
> work, need other sensors?

Don't know what you meant.
You said it works, but no autoroate?
Then how do you know it works?

> How i can get others sensors? Composite sensors type? Gravity, rotation
> vector, orientation and etc.? In STM repo no needed libraries...

The accelerometer is enough for autoroate.

You can use some sensors test tools
to check if they produce correct value
that the framework expects.

Refer: https://source.android.com/devices/sensors/sensor-types

Kitsune

unread,
Dec 1, 2017, 9:19:21 AM12/1/17
to Android-x86
In cpu-z is this accelerometer values (screenshot): https://drive.google.com/file/d/1iYRjdE-Y0cq4LauXA7CwobwIpjZmYJz5/view?usp=sharing 
In windows the same accelerometer values: https://drive.google.com/open?id=1mHYYldNjfCCBpLrAATEkRPwD36BNORXV
I'm watch in smartphone this values it is "rotation vector" values

пятница, 1 декабря 2017 г., 6:06:17 UTC+2 пользователь Chih-Wei Huang написал:

Kitsune

unread,
Jan 17, 2018, 2:39:09 AM1/17/18
to Android-x86
In latest android nougat sources i'm can't use (select) Android HAL for my LSM303D, command not work... What doing?
Add this:
*600*)
            hal_sensors=lyt2
            ;;

Kitsune

unread,
Jan 17, 2018, 2:40:25 AM1/17/18
to Android-x86
It i'm add in init.sh

среда, 17 января 2018 г., 9:39:09 UTC+2 пользователь Kitsune написал:

Chih-Wei Huang

unread,
Jan 17, 2018, 2:48:35 AM1/17/18
to Android-x86
This is the sensors hal name.
We don't have such a hal.
Is it the hal name you added yourself?

Kitsune

unread,
Jan 17, 2018, 3:05:42 AM1/17/18
to Android-x86
I'm add some changed iio HAL: https://drive.google.com/open?id=15h-XvybErgnUo5-7Kd-7NhrDcOfF4_Mi
In /lib/hw/sensors.lyt2.so is. I thinking it my problem in HAL, but I trying change lyt2 in not right s103t. But In cpu-z i see the same picture: https://drive.google.com/file/d/1D099auYWJsmwu6gw56_0u3gMq03bZlGe/view?usp=sharing
The same picture i'm see without selected hal. Device name is right. I'm think not select needed HAL...

среда, 17 января 2018 г., 9:48:35 UTC+2 пользователь Chih-Wei Huang написал:

Chih-Wei Huang

unread,
Jan 17, 2018, 3:19:39 AM1/17/18
to Android-x86
2018-01-17 16:05 GMT+08:00 Kitsune <kitsu...@gmail.com>:
> I'm add some changed iio HAL:
> https://drive.google.com/open?id=15h-XvybErgnUo5-7Kd-7NhrDcOfF4_Mi
> In /lib/hw/sensors.lyt2.so is. I thinking it my problem in HAL, but I trying

Oh. It looks like the same hal I wrote.
Then why not just use sensors.iio?

BTW, in the latest 7.1 I've replaced my sensors.iio
with intel's which seems to provide better functions.
You should sync and build the latest nougat-x86 branch
to test it.

Kitsune

unread,
Jan 17, 2018, 3:37:49 AM1/17/18
to Android-x86
Yes, It your HAL, but me need some changes:
data[i].acceleration.x = scale * (m[0] * v[0] + m[1] * v[1] + m[2] * v[2]) * (-9.81);
data[i].acceleration.y = scale * (m[3] * v[0] + m[4] * v[1] + m[5] * v[2]) * (-9.81);
data[i].acceleration.z = scale * (m[6] * v[0] + m[7] * v[1] + m[8] * v[2]) * (-9.81);

data[i].magnetic.x = scale_x * (m[0] * v[0] + m[1] * v[1] + m[2] * v[2]) * 100;
data[i].magnetic.y = scale_y * (m[3] * v[0] + m[4] * v[1] + m[5] * v[2]) * 100;
data[i].magnetic.z = scale_z * (m[6] * v[0] + m[7] * v[1] + m[8] * v[2]) * 100;

and seems this:
// conversion of acceleration data to SI units (m/s^2) #define RANGE_A (16*GRAVITY_EARTH) #define RESOLUTION_A (0.0f) // conversion of magnetic data to uT units #define RANGE_M (1200.0f) #define RESOLUTION_M (0.0f)

It need for correctly values showing.

You should sync and build the latest nougat-x86 branch
to test it.
 
I'm compile latest nougat branch, seems intel HAL shows this: https://drive.google.com/file/d/1D099auYWJsmwu6gw56_0u3gMq03bZlGe/view?usp=sharing It shows default. Even if not any changes in init.sh

I'm don't know how use your iio HAL which correctly work with my sensors. In hardware/libsensors/Android.mk need delete  ifeq ($(USE_MY_SENSORS_IIO),true) ? But how set to default this HAL?

Chih-Wei Huang

unread,
Jan 17, 2018, 3:57:01 AM1/17/18
to Android-x86
2018-01-17 16:37 GMT+08:00 Kitsune <kitsu...@gmail.com>:
> Yes, It your HAL, but me need some changes:
>
> data[i].acceleration.x = scale * (m[0] * v[0] + m[1] * v[1] + m[2] * v[2]) *
> (-9.81);
> data[i].acceleration.y = scale * (m[3] * v[0] + m[4] * v[1] + m[5] * v[2]) *
> (-9.81);
> data[i].acceleration.z = scale * (m[6] * v[0] + m[7] * v[1] + m[8] * v[2]) *
> (-9.81);

You don't need to change the code.
Just set the property hal.sensors.iio.accel.matrix.

> data[i].magnetic.x = scale_x * (m[0] * v[0] + m[1] * v[1] + m[2] * v[2]) *
> 100;
> data[i].magnetic.y = scale_y * (m[3] * v[0] + m[4] * v[1] + m[5] * v[2]) *
> 100;
> data[i].magnetic.z = scale_z * (m[6] * v[0] + m[7] * v[1] + m[8] * v[2]) *
> 100;

Similarly, set it to hal.sensors.iio.magn.matrix

> and seems this:
> // conversion of acceleration data to SI units (m/s^2)
> #define RANGE_A (16*GRAVITY_EARTH)
> #define RESOLUTION_A (0.0f)
>
> // conversion of magnetic data to uT units
> #define RANGE_M (1200.0f)
> #define RESOLUTION_M (0.0f)
>
> It need for correctly values showing.
>
>> You should sync and build the latest nougat-x86 branch
>> to test it.
>
> I'm compile latest nougat branch, seems intel HAL shows this:
> https://drive.google.com/file/d/1D099auYWJsmwu6gw56_0u3gMq03bZlGe/view?usp=sharing
> It shows default. Even if not any changes in init.sh
>
> I'm don't know how use your iio HAL which correctly work with my sensors. In
> hardware/libsensors/Android.mk need delete ifeq
> ($(USE_MY_SENSORS_IIO),true) ? But how set to default this HAL?

As I said, it's replaced by new android-iio-sensors-hal
(code in hardware/intel/libsensors/ )
If you have correct iio device nodes
(ls /sys/bus/iio/devices/iio:device* is not null)
it will be used automatically.

You may need to set ro.iio.accel.?.opt_scale property
to calibrate it (? = x, y, z)
Reply all
Reply to author
Forward
0 new messages