STMems_Linux_Input_drivers
STMems_Linux_Input_drivers copied to clipboard
DISCONTINUED (October 2022): the maintenance for this repository has been discontinued. Please refer to https://github.com/STMicroelectronics/st-mems-android-linux-drivers-input for the up-to-date...
Important Notice
DISCONTINUED (October 2022): the maintenance for this repository has been discontinued.
Please refer to:
https://github.com/STMicroelectronics/st-mems-android-linux-drivers-input
for the up-to-date drivers' repository.
Index
* Introduction
* Integration details
* More information
* Copyright
Introduction
This repository contains Linux kernel (v4.19, v3.10, v3.4) with STMicroelectronics MEMS sensor support. STM sensor drivers are located under the directory drivers/input/misc/st organized by sensor type:
Inertial Module Unit (IMU):
LSM330, LSM330DLC, LSM6DS0, LSM6DS3, LSM6DSL, LSM6DSM, LSM9DS0, LSM9DS1, ISM330DLC, ASM330LHH, LSM6DSO, LSM6DSO32, LSM6DSOX, LSM6DSO32X, LSM6DSR, ISM330DHCX
eCompass:
LSM303AGR, LSM303AH, LSM303C, LSM303D, LSM303DLHC, ISM303DAC
Accelerometer:
AIS328DQ, AIS3624DQ, H3LIS100DL, H3LIS331DL, LIS2DE, LIS2DE12, LIS2DH, LIS2DH12, LIS2DS12, LIS2HH12, LIS331DLH, LIS331HH, LIS3DE, LIS3DH, LIS3DSH, LIS2DW12, LIS3DHH, IIS3DHHC, IIS2DH
Gyroscope:
A3G4250D, L3G4200D, L3GD20, L3GD20H
Magnetometer:
LIS3MDL, LIS2MDL, IIS2MDC
Humidity:
HTS221
Pressure:
LPS22CH, LPS22HB, LPS22HD, LPS22HH, LPS22DF, LPS25H, LPS25HB, LPS27HHW, LPS27HHTW, LPS33HW, LPS35HW
Ultraviolet:
UVIS25
Temperature:
STTS751, STTS22H
Data collected by STM sensors are pushed to userland through the Linux kernel Input framework using EV_MSC events. User space applications can get sensor events by reading the related input device created in the /dev directory. Please see Input for more information.
All STM MEMS sensors support I2C/SPI digital interface. Please refer to I2C and SPI for detailed documentation.
Integration details
In order to explain how to integrate STM sensors in a different kernel, please consider the following LSM6DSM IMU example
Source code integration
- Copy driver source code into the target directory (e.g. drivers/input/misc)
- Edit related Kconfig (e.g. drivers/input/misc/Kconfig) to include LSM6DSM support:
source "drivers/input/misc/lsm6dsm/Kconfig"
- Edit related Makefile (e.g. drivers/input/misc/Makefile) adding the following line:
obj-y += lsm6dsm/
Device Tree configuration
To enable driver probing, add the lsm6dsm node to the platform device tree as described below.
Required properties:
- compatible: "st,lsm6dsm"
- reg: the I2C address or SPI chip select the device will respond to
- interrupt-parent: phandle to the parent interrupt controller as documented in interrupts
- interrupts: interrupt mapping for IRQ as documented in interrupts
Recommended properties for SPI bus usage:
- spi-max-frequency: maximum SPI bus frequency as documented in SPI
Optional properties:
- st,drdy-int-pin: MEMS sensor interrupt line to use (default 1)
I2C example (based on Raspberry PI 3):
&i2c0 { status = "ok"; #address-cells = <0x1>; #size-cells = <0x0>; lsm6dsm@6b { compatible = "st,lsm6dsm"; reg = <0x6b>; interrupt-parent = <&gpio>; interrupts = <26 IRQ_TYPE_EDGE_RISING>; };
SPI example (based on Raspberry PI 3):
&spi0 { status = "ok"; #address-cells = <0x1>; #size-cells = <0x0>; lsm6dsm@0 { spi-max-frequency = <500000>; compatible = "st,lsm6dsm"; reg = <0>; interrupt-parent = <&gpio>; interrupts = <26 IRQ_TYPE_EDGE_RISING>; };
Kernel configuration
Configure kernel with make menuconfig (alternatively use make xconfig or make qconfig)
Device Drivers ---> Input device support ---> [*] Miscellaneous devices ---> <*> STM MEMs Device Drivers ---> <M> Inertial motion unit ---> <M> STMicroelectronics LSM6DSM sensor
More Information
https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/Documentation/input
https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/Documentation/i2c
https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/Documentation/spi
Copyright
Copyright (C) 2016 STMicroelectronics
This software is distributed under the GNU General Public License - see the accompanying COPYING file for more details.