You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
LIS3LV02Dx Accelerometer driver
This adds a driver to the accelerometer sensor found in several HP laptops (under the commercial names of "HP Mobile Data Protection System 3D" and "HP 3D driveguard"). It tries to have more or less the same interfaces as the hdaps and other accelerometer drivers: in sysfs and as a joystick. This driver was first written by Yan Burman. Eric Piel has updated it and slimed it up (including the removal of an interface to access to the free-fall feature of the sensor because it is not reliable enough for now). Pavel Machek removed few more features and switched locking from semaphore to mutex. Several people have contributed to the database of the axes. [eric.piel@tremplin-utc.net: LIS3LV02D: Conform to the new ACPI API] Signed-off-by: Eric Piel <eric.piel@tremplin-utc.net> Signed-off-by: Yan Burman <burman.yan@gmail.com> Signed-off-by: Pavel Machek <pavel@suse.cz> Cc: "Mark M. Hoffman" <mhoffman@lightlink.com> Signed-off-by: Eric Piel <eric.piel@tremplin-utc.net> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
committed by
Linus Torvalds
parent
33c5d3d645
commit
455fbdd376
@@ -0,0 +1,49 @@
|
||||
Kernel driver lis3lv02d
|
||||
==================
|
||||
|
||||
Supported chips:
|
||||
|
||||
* STMicroelectronics LIS3LV02DL and LIS3LV02DQ
|
||||
|
||||
Author:
|
||||
Yan Burman <burman.yan@gmail.com>
|
||||
Eric Piel <eric.piel@tremplin-utc.net>
|
||||
|
||||
|
||||
Description
|
||||
-----------
|
||||
|
||||
This driver provides support for the accelerometer found in various HP laptops
|
||||
sporting the feature officially called "HP Mobile Data Protection System 3D" or
|
||||
"HP 3D DriveGuard". It detect automatically laptops with this sensor. Known models
|
||||
(for now the HP 2133, nc6420, nc2510, nc8510, nc84x0, nw9440 and nx9420) will
|
||||
have their axis automatically oriented on standard way (eg: you can directly
|
||||
play neverball). The accelerometer data is readable via
|
||||
/sys/devices/platform/lis3lv02d.
|
||||
|
||||
Sysfs attributes under /sys/devices/platform/lis3lv02d/:
|
||||
position - 3D position that the accelerometer reports. Format: "(x,y,z)"
|
||||
calibrate - read: values (x, y, z) that are used as the base for input class device operation.
|
||||
write: forces the base to be recalibrated with the current position.
|
||||
rate - reports the sampling rate of the accelerometer device in HZ
|
||||
|
||||
This driver also provides an absolute input class device, allowing
|
||||
the laptop to act as a pinball machine-esque joystick.
|
||||
|
||||
Axes orientation
|
||||
----------------
|
||||
|
||||
For better compatibility between the various laptops. The values reported by
|
||||
the accelerometer are converted into a "standard" organisation of the axes
|
||||
(aka "can play neverball out of the box"):
|
||||
* When the laptop is horizontal the position reported is about 0 for X and Y
|
||||
and a positive value for Z
|
||||
* If the left side is elevated, X increases (becomes positive)
|
||||
* If the front side (where the touchpad is) is elevated, Y decreases (becomes negative)
|
||||
* If the laptop is put upside-down, Z becomes negative
|
||||
|
||||
If your laptop model is not recognized (cf "dmesg"), you can send an email to the
|
||||
authors to add it to the database. When reporting a new laptop, please include
|
||||
the output of "dmidecode" plus the value of /sys/devices/platform/lis3lv02d/position
|
||||
in these four cases.
|
||||
|
||||
@@ -2703,6 +2703,11 @@ P: Arnaldo Carvalho de Melo
|
||||
M: acme@ghostprotocols.net
|
||||
S: Maintained
|
||||
|
||||
LIS3LV02D ACCELEROMETER DRIVER
|
||||
P: Eric Piel
|
||||
M: eric.piel@tremplin-utc.net
|
||||
S: Maintained
|
||||
|
||||
LM83 HARDWARE MONITOR DRIVER
|
||||
P: Jean Delvare
|
||||
M: khali@linux-fr.org
|
||||
|
||||
@@ -825,6 +825,25 @@ config SENSORS_HDAPS
|
||||
Say Y here if you have an applicable laptop and want to experience
|
||||
the awesome power of hdaps.
|
||||
|
||||
config SENSORS_LIS3LV02D
|
||||
tristate "STMicroeletronics LIS3LV02Dx three-axis digital accelerometer"
|
||||
depends on ACPI && INPUT
|
||||
default n
|
||||
help
|
||||
This driver provides support for the LIS3LV02Dx accelerometer. In
|
||||
particular, it can be found in a number of HP laptops, which have the
|
||||
"Mobile Data Protection System 3D" or "3D DriveGuard" feature. On such
|
||||
systems the driver should load automatically (via ACPI). The
|
||||
accelerometer might also be found in other systems, connected via SPI
|
||||
or I2C. The accelerometer data is readable via
|
||||
/sys/devices/platform/lis3lv02d.
|
||||
|
||||
This driver also provides an absolute input class device, allowing
|
||||
the laptop to act as a pinball machine-esque joystick.
|
||||
|
||||
This driver can also be built as a module. If so, the module
|
||||
will be called lis3lv02d.
|
||||
|
||||
config SENSORS_APPLESMC
|
||||
tristate "Apple SMC (Motion sensor, light sensor, keyboard backlight)"
|
||||
depends on INPUT && X86
|
||||
|
||||
@@ -48,6 +48,7 @@ obj-$(CONFIG_SENSORS_IBMAEM) += ibmaem.o
|
||||
obj-$(CONFIG_SENSORS_IBMPEX) += ibmpex.o
|
||||
obj-$(CONFIG_SENSORS_IT87) += it87.o
|
||||
obj-$(CONFIG_SENSORS_K8TEMP) += k8temp.o
|
||||
obj-$(CONFIG_SENSORS_LIS3LV02D) += lis3lv02d.o
|
||||
obj-$(CONFIG_SENSORS_LM63) += lm63.o
|
||||
obj-$(CONFIG_SENSORS_LM70) += lm70.o
|
||||
obj-$(CONFIG_SENSORS_LM75) += lm75.o
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,149 @@
|
||||
/*
|
||||
* lis3lv02d.h - ST LIS3LV02DL accelerometer driver
|
||||
*
|
||||
* Copyright (C) 2007-2008 Yan Burman
|
||||
* Copyright (C) 2008 Eric Piel
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation; either version 2 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
/*
|
||||
* The actual chip is STMicroelectronics LIS3LV02DL or LIS3LV02DQ that seems to
|
||||
* be connected via SPI. There exists also several similar chips (such as LIS302DL or
|
||||
* LIS3L02DQ) but not in the HP laptops and they have slightly different registers.
|
||||
* They can also be connected via I²C.
|
||||
*/
|
||||
|
||||
#define LIS3LV02DL_ID 0x3A /* Also the LIS3LV02DQ */
|
||||
#define LIS302DL_ID 0x3B /* Also the LIS202DL! */
|
||||
|
||||
enum lis3lv02d_reg {
|
||||
WHO_AM_I = 0x0F,
|
||||
OFFSET_X = 0x16,
|
||||
OFFSET_Y = 0x17,
|
||||
OFFSET_Z = 0x18,
|
||||
GAIN_X = 0x19,
|
||||
GAIN_Y = 0x1A,
|
||||
GAIN_Z = 0x1B,
|
||||
CTRL_REG1 = 0x20,
|
||||
CTRL_REG2 = 0x21,
|
||||
CTRL_REG3 = 0x22,
|
||||
HP_FILTER_RESET = 0x23,
|
||||
STATUS_REG = 0x27,
|
||||
OUTX_L = 0x28,
|
||||
OUTX_H = 0x29,
|
||||
OUTY_L = 0x2A,
|
||||
OUTY_H = 0x2B,
|
||||
OUTZ_L = 0x2C,
|
||||
OUTZ_H = 0x2D,
|
||||
FF_WU_CFG = 0x30,
|
||||
FF_WU_SRC = 0x31,
|
||||
FF_WU_ACK = 0x32,
|
||||
FF_WU_THS_L = 0x34,
|
||||
FF_WU_THS_H = 0x35,
|
||||
FF_WU_DURATION = 0x36,
|
||||
DD_CFG = 0x38,
|
||||
DD_SRC = 0x39,
|
||||
DD_ACK = 0x3A,
|
||||
DD_THSI_L = 0x3C,
|
||||
DD_THSI_H = 0x3D,
|
||||
DD_THSE_L = 0x3E,
|
||||
DD_THSE_H = 0x3F,
|
||||
};
|
||||
|
||||
enum lis3lv02d_ctrl1 {
|
||||
CTRL1_Xen = 0x01,
|
||||
CTRL1_Yen = 0x02,
|
||||
CTRL1_Zen = 0x04,
|
||||
CTRL1_ST = 0x08,
|
||||
CTRL1_DF0 = 0x10,
|
||||
CTRL1_DF1 = 0x20,
|
||||
CTRL1_PD0 = 0x40,
|
||||
CTRL1_PD1 = 0x80,
|
||||
};
|
||||
enum lis3lv02d_ctrl2 {
|
||||
CTRL2_DAS = 0x01,
|
||||
CTRL2_SIM = 0x02,
|
||||
CTRL2_DRDY = 0x04,
|
||||
CTRL2_IEN = 0x08,
|
||||
CTRL2_BOOT = 0x10,
|
||||
CTRL2_BLE = 0x20,
|
||||
CTRL2_BDU = 0x40, /* Block Data Update */
|
||||
CTRL2_FS = 0x80, /* Full Scale selection */
|
||||
};
|
||||
|
||||
|
||||
enum lis3lv02d_ctrl3 {
|
||||
CTRL3_CFS0 = 0x01,
|
||||
CTRL3_CFS1 = 0x02,
|
||||
CTRL3_FDS = 0x10,
|
||||
CTRL3_HPFF = 0x20,
|
||||
CTRL3_HPDD = 0x40,
|
||||
CTRL3_ECK = 0x80,
|
||||
};
|
||||
|
||||
enum lis3lv02d_status_reg {
|
||||
STATUS_XDA = 0x01,
|
||||
STATUS_YDA = 0x02,
|
||||
STATUS_ZDA = 0x04,
|
||||
STATUS_XYZDA = 0x08,
|
||||
STATUS_XOR = 0x10,
|
||||
STATUS_YOR = 0x20,
|
||||
STATUS_ZOR = 0x40,
|
||||
STATUS_XYZOR = 0x80,
|
||||
};
|
||||
|
||||
enum lis3lv02d_ff_wu_cfg {
|
||||
FF_WU_CFG_XLIE = 0x01,
|
||||
FF_WU_CFG_XHIE = 0x02,
|
||||
FF_WU_CFG_YLIE = 0x04,
|
||||
FF_WU_CFG_YHIE = 0x08,
|
||||
FF_WU_CFG_ZLIE = 0x10,
|
||||
FF_WU_CFG_ZHIE = 0x20,
|
||||
FF_WU_CFG_LIR = 0x40,
|
||||
FF_WU_CFG_AOI = 0x80,
|
||||
};
|
||||
|
||||
enum lis3lv02d_ff_wu_src {
|
||||
FF_WU_SRC_XL = 0x01,
|
||||
FF_WU_SRC_XH = 0x02,
|
||||
FF_WU_SRC_YL = 0x04,
|
||||
FF_WU_SRC_YH = 0x08,
|
||||
FF_WU_SRC_ZL = 0x10,
|
||||
FF_WU_SRC_ZH = 0x20,
|
||||
FF_WU_SRC_IA = 0x40,
|
||||
};
|
||||
|
||||
enum lis3lv02d_dd_cfg {
|
||||
DD_CFG_XLIE = 0x01,
|
||||
DD_CFG_XHIE = 0x02,
|
||||
DD_CFG_YLIE = 0x04,
|
||||
DD_CFG_YHIE = 0x08,
|
||||
DD_CFG_ZLIE = 0x10,
|
||||
DD_CFG_ZHIE = 0x20,
|
||||
DD_CFG_LIR = 0x40,
|
||||
DD_CFG_IEND = 0x80,
|
||||
};
|
||||
|
||||
enum lis3lv02d_dd_src {
|
||||
DD_SRC_XL = 0x01,
|
||||
DD_SRC_XH = 0x02,
|
||||
DD_SRC_YL = 0x04,
|
||||
DD_SRC_YH = 0x08,
|
||||
DD_SRC_ZL = 0x10,
|
||||
DD_SRC_ZH = 0x20,
|
||||
DD_SRC_IA = 0x40,
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user