summaryrefslogtreecommitdiff
path: root/drivers/sensor/bst_sensor_common.c
diff options
context:
space:
mode:
authorYuval Adam <_@yuv.al>2017-08-30 08:25:59 +0000
committerYuval Adam <_@yuv.al>2017-08-30 08:25:59 +0000
commit8e4bff4cab0ddac6060645b0715210484d02ff40 (patch)
tree3a5c3024371a04692a3a6d9974d001cdff8ebf84 /drivers/sensor/bst_sensor_common.c
Initial file dump from open source releaseHEADmaster
Diffstat (limited to 'drivers/sensor/bst_sensor_common.c')
-rw-r--r--drivers/sensor/bst_sensor_common.c56
1 files changed, 56 insertions, 0 deletions
diff --git a/drivers/sensor/bst_sensor_common.c b/drivers/sensor/bst_sensor_common.c
new file mode 100644
index 00000000..503b6239
--- /dev/null
+++ b/drivers/sensor/bst_sensor_common.c
@@ -0,0 +1,56 @@
+/*
+ * (C) Copyright 2013 Bosch Sensortec GmbH All Rights Reserved
+ *
+ * This software program is licensed subject to the GNU General Public License
+ * (GPL).Version 2,June 1991, available at http://www.fsf.org/copyleft/gpl.html
+ *
+ * @date Sep 19th, 2012
+ * @version v1.0
+ * @brief Common APIs for Bosch MEMS sensor drivers
+ */
+
+#include <linux/bst_sensor_common.h>
+
+#define MAX_AXIS_REMAP_TAB_SZ 8 /*P0~P7*/
+static const struct bosch_sensor_axis_remap
+bst_axis_remap_tab_dft[MAX_AXIS_REMAP_TAB_SZ] = {
+ /* src_x src_y src_z sign_x sign_y sign_z */
+ { 0, 1, 2, 1, 1, 1 }, /* P0 */
+ { 1, 0, 2, 1, -1, 1 }, /* P1 */
+ { 0, 1, 2, -1, -1, 1 }, /* P2 */
+ { 1, 0, 2, -1, 1, 1 }, /* P3 */
+
+ { 0, 1, 2, -1, 1, -1 }, /* P4 */
+ { 1, 0, 2, -1, -1, -1 }, /* P5 */
+ { 0, 1, 2, 1, -1, -1 }, /* P6 */
+ { 1, 0, 2, 1, 1, -1 }, /* P7 */
+};
+
+
+void bst_remap_sensor_data(struct bosch_sensor_data *data,
+ const struct bosch_sensor_axis_remap *remap)
+{
+ struct bosch_sensor_data tmp;
+
+ tmp.x = data->v[remap->src_x] * remap->sign_x;
+ tmp.y = data->v[remap->src_y] * remap->sign_y;
+ tmp.z = data->v[remap->src_z] * remap->sign_z;
+
+ memcpy(data, &tmp, sizeof(*data));
+}
+EXPORT_SYMBOL(bst_remap_sensor_data);
+
+
+void bst_remap_sensor_data_dft_tab(struct bosch_sensor_data *data,
+ int place)
+{
+ /* sensor with place 0 needs not to be remapped */
+ if ((place <= 0) || (place >= MAX_AXIS_REMAP_TAB_SZ))
+ return;
+
+ bst_remap_sensor_data(data, &bst_axis_remap_tab_dft[place]);
+}
+EXPORT_SYMBOL(bst_remap_sensor_data_dft_tab);
+
+
+MODULE_LICENSE("GPL");