summaryrefslogtreecommitdiff
path: root/driver/accel_kionix.h
diff options
context:
space:
mode:
authorAseda Aboagye <aaboagye@google.com>2015-09-10 17:18:43 -0700
committerchrome-bot <chrome-bot@chromium.org>2015-09-15 11:02:43 -0700
commit16a18a5e0eeaeebff5f4ab5c9363481f8d1426aa (patch)
treebb62d47ffad8c4f9f80a50c1a8bd3fd06788af4b /driver/accel_kionix.h
parent070a82524836efe44dc7e5908b9b0ba019996097 (diff)
downloadchrome-ec-16a18a5e0eeaeebff5f4ab5c9363481f8d1426aa.tar.gz
driver: Refactor Kionix Accelerometer drivers.
This commit adds a new basic driver for the Kionix KX022 Accelerometer. Currently, the driver is capable of reading the sensor data and manipulating its ODR, resolution, and range. This sensor also has integrated support for Directional Tap/Double-Tap(TM), however that functionality is not yet implemented in the driver. Lastly, since this accelerometer is very similar to the previous KXCJ9, this commit tries to combine the drivers. Note, the variant of the Kionix accelerometer MUST be specified in the private data structure. BUG=chrome-os-partner:43494 BRANCH=None TEST=Build GLaDOS EC with driver enabled and verify that valid accelerometer data is read, and that range, resolution, and odr can all be modified. TEST=Build samus EC image and verify that the lid still works. Additionally, verify that I can change the odr, rate, and resolution. TEST=make buildall tests Change-Id: I238ff1dc13f5342a93f8f701a0da85c52f25d214 Signed-off-by: Aseda Aboagye <aaboagye@google.com> Reviewed-on: https://chromium-review.googlesource.com/299013 Commit-Ready: Aseda Aboagye <aaboagye@chromium.org> Tested-by: Aseda Aboagye <aaboagye@chromium.org> Reviewed-by: Gwendal Grignou <gwendal@chromium.org>
Diffstat (limited to 'driver/accel_kionix.h')
-rw-r--r--driver/accel_kionix.h66
1 files changed, 66 insertions, 0 deletions
diff --git a/driver/accel_kionix.h b/driver/accel_kionix.h
new file mode 100644
index 0000000000..e326dd3cb3
--- /dev/null
+++ b/driver/accel_kionix.h
@@ -0,0 +1,66 @@
+/* Copyright 2015 The Chromium OS Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+/* Kionix Accelerometer driver for Chrome EC */
+
+#ifndef __CROS_EC_ACCEL_KIONIX_H
+#define __CROS_EC_ACCEL_KIONIX_H
+
+#include "common.h"
+#include "driver/accel_kx022.h"
+#include "driver/accel_kxcj9.h"
+
+enum kionix_accel {
+ KX022,
+ KXCJ9,
+ SUPPORTED_KIONIX_ACCELS,
+};
+
+/*
+ * Struct for pairing an engineering value with the register value for a
+ * parameter.
+ */
+struct accel_param_pair {
+ int val; /* Value in engineering units. */
+ int reg; /* Corresponding register value. */
+};
+
+struct kionix_accel_data {
+ /* Variant of Kionix Accelerometer. */
+ uint8_t variant;
+ /* Note, the following are indicies into their respective tables. */
+ /* Current range of accelerometer. */
+ int sensor_range;
+ /* Current output data rate of accelerometer. */
+ int sensor_datarate;
+ /* Current resolution of accelerometer. */
+ int sensor_resolution;
+ /* Device address. */
+ int accel_addr;
+ int16_t offset[3];
+};
+
+extern const struct accelgyro_drv kionix_accel_drv;
+
+#define KIONIX_CTRL1_REG(v) (KX022_CNTL1 + \
+ (v) * (KXCJ9_CTRL1 - KX022_CNTL1))
+#define KIONIX_CTRL2_REG(v) (KX022_CNTL2 + \
+ (v) * (KXCJ9_CTRL2 - KX022_CNTL2))
+#define KIONIX_ODR_REG(v) (KX022_ODCNTL + \
+ (v) * (KXCJ9_DATA_CTRL - KX022_ODCNTL))
+#define KIONIX_ODR_FIELD(v) (KX022_OSA_FIELD + \
+ (v) * (KXCJ9_OSA_FIELD - KX022_OSA_FIELD))
+#define KIONIX_PC1_FIELD(v) (KX022_CNTL1_PC1 + \
+ (v) * (KXCJ9_CTRL1_PC1 - KX022_CNTL1_PC1))
+#define KIONIX_RANGE_FIELD(v) (KX022_GSEL_FIELD + \
+ (v) * (KXCJ9_GSEL_ALL - KX022_GSEL_FIELD))
+#define KIONIX_RES_FIELD(v) (KX022_RES_16BIT + \
+ (v) * (KXCJ9_RES_12BIT - KX022_RES_16BIT))
+#define KIONIX_RESET_FIELD(v) (KX022_CNTL2_SRST + \
+ (v) * (KXCJ9_CTRL2_SRST - KX022_CNTL2_SRST))
+#define KIONIX_XOUT_L(v) (KX022_XOUT_L + \
+ (v) * (KXCJ9_XOUT_L - KX022_XOUT_L))
+
+#endif /* __CROS_EC_ACCEL_KIONIX_H */