Re: accelerometer orientation

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

On 12-09-16 17:39, Bastien Nocera wrote:
Hey,

On Mon, 2016-09-12 at 17:25 +0200, Hans de Goede wrote:
Hi Bastien,

So as I guess you sorta know in my spare time I work on Linux
(mainline) support for Allwinner SoC based ARM devices, including
a whole lot of cheap Chinese tablets.

Recently I've begun looking into supporting the accelerometers
on these devices and I'm making good progress on getting the
kernel bits working using iio drivers (including a few new
ones I've written recently).

Yesterday I realized there is a bit of a catch though, all
these iio drivers report results assuming that the accelerometer
is mounted on the top side of the PCB and with its X/Y
coordination properly taken info account.

Unfortunately neither is necessarily true. Almost all
tablet PCBS are mounted upside down (with an empty PCB
backside against the lcd-panel. Meaning that the Z axis
reads -1G when the tablet is lying on its back instead
of the expected +1G and some need X/Y axis swapping and/or
inversion too.

So there are 3 problems here:

1) Where do we store the orientation of the chip

<snip>
2) Where do we correct the readings for the orientation
<snip>
3) Currently implementing orientation support in an iio driver
requires copy and pasting quite a bit of boiler plate, so
a question to the linux-iio list, has anyone though of an
easier way to do this. I really just want to be able to
pass say a single flag to iio_device_register and then
have the iio-core automatically call of_iio_read_mount_matrix()
and add mount_matrix ext_info.

All good ideas, but we need a way to do this for devices without DT
(meaning all of the x86 tablets).

Yes, so I've also been working on a touchscreen driver for silead
touchscreen controllers (the gsl1680 and compatibles), which has
the same problem, e.g. it needs tablet model specific firmware,
so we need to provide a per tablet firmware name, and also
things like resolution and orientation are different per model
tablet. I now have 2 x86 tablets with such touchscreens, my plan
for the silead driver is to use dmi info to identify the tablet
and have a tablet with per tablet info inside the driver, this
is not so easy to extend as the udev hw db, but in this case
the info is needed inside the actual driver for things to work
properly.

Perhaps iio-sensor-proxy could read from udev instead, and udev either
pull from DT when available, or apply from its own rules?

Directly pulling from dt is not really convenient and iio
already more or less has standardized on the mount_matrix
sysfs attribute. I think it might be best to make the
mount_matrix sysfs attribute writable and then udev can
write the correct settings there for x86 tablets at
least. So to any iio devs reading this thread:
would making the mount_matrix sysfs attribute writable
be an acceptable solution ?

Regards,

Hans
--
To unsubscribe from this list: send the line "unsubscribe linux-iio" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Input]     [Linux Kernel]     [Linux SCSI]     [X.org]

  Powered by Linux