summaryrefslogtreecommitdiff
path: root/zephyr/shim/src/motionsense_driver/drvdata-accelgyro.h
blob: 069587f90fa02ad746f5eb4c157cd1275ed61f1c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
/* Copyright 2021 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.
 */

/*
 * Macros are to help creating driver data. A driver data that uses
 * any data structures defined in accelgyro.h should use the macros here
 * to utilize the information in device tree.
 *
 */
#ifndef __ZEPHYR_SHIM_SRC_MOTIONSENSE_DRIVER_DRVDATA_ACCELGYRO_H
#define __ZEPHYR_SHIM_SRC_MOTIONSENSE_DRIVER_DRVDATA_ACCELGYRO_H

/*
 * compatible = "cros-ec,accelgyro-als-channel-scale"
 * als_channel_scale_t in accelgyro.h
 *
 * e.g) The following is the example in DT for als_channel_scale_t
 * als-channel-scale {
 *	compatible = "cros-ec,accelgyro-als-channel-scale";
 *		k-channel-scale = <1>;
 *		cover-scale = <1>;
 *	};
 */
#define ACCELGYRO_ALS_CHANNEL_SCALE(id)					\
	{								\
		.k_channel_scale =					\
			ALS_CHANNEL_SCALE(DT_PROP(id, k_channel_scale)),\
		.cover_scale =						\
			ALS_CHANNEL_SCALE(DT_PROP(id, cover_scale)),	\
	}

#define ALS_CALIBRATION_CHANNEL_SCALE(id)				\
	.als_cal.channel_scale = ACCELGYRO_ALS_CHANNEL_SCALE(id),

#define ALS_CALIBRATION_SET(id)					\
	.als_cal.scale = DT_PROP(id, scale),			\
	.als_cal.uscale = DT_PROP(id, uscale),			\
	.als_cal.offset = DT_PROP(id, offset),			\
	ALS_CALIBRATION_CHANNEL_SCALE(DT_CHILD(id, als_channel_scale))

/*
 * compatible = "cros-ec,accelgyro-als-drv-data"
 * als_drv_data_t in accelgyro.h
 *
 * e.g) The following is the example in DT for als_drv_data_t 
 * als-drv-data {
 *	compatible = "cros-ec,accelgyro-als-drv-data";
 *	als-cal {
 *		scale = <1>;
 *		uscale = <0>;
 *		offset = <0>;
 *		als-channel-scale {
 *		compatible = "cros-ec,accelgyro-als-channel-scale";
 *			k-channel-scale = <1>;
 *			cover-scale = <1>;
 *		};
 *	};
 * };
 */
#define ACCELGYRO_ALS_DRV_DATA(id)					\
	{								\
		ALS_CALIBRATION_SET(DT_CHILD(id, als_cal))		\
	}

#define RGB_CAL_RGB_SET_SCALE(id)			\
	.scale = ACCELGYRO_ALS_CHANNEL_SCALE(id),

#define RGB_CAL_RGB_SET_ONE(id, suffix)					\
	.rgb_cal[suffix] = {						\
	    .offset = DT_PROP(id, offset),				\
	    .coeff[0] = FLOAT_TO_FP(DT_PROP_BY_IDX(id, coeff, 0)),	\
	    .coeff[1] = FLOAT_TO_FP(DT_PROP_BY_IDX(id, coeff, 1)),	\
	    .coeff[2] = FLOAT_TO_FP(DT_PROP_BY_IDX(id, coeff, 2)),	\
	    .coeff[3] = FLOAT_TO_FP(DT_PROP_BY_IDX(id, coeff, 3)),	\
	    RGB_CAL_RGB_SET_SCALE(DT_CHILD(id, als_channel_scale))	\
	},

/*
 * compatible = "cros-ec,accelgyro-rgb-calibration"
 * rgb_calibration_t in accelgyro.h
 *
 * e.g) The following is the example in DT for rgb_calibration_t
 * rgb_calibration {
 * 	compatible = "cros-ec,accelgyro-rgb-calibration";
 *
 *	irt = <1>;
 *
 *	rgb-cal-x {
 *		offset = <0>;
 *		coeff = <0 0 0 0>;
 *		als-channel-scale {
 *		compatible = "cros-ec,accelgyro-als-channel-scale";
 *			k-channel-scale = <1>;
 *			cover-scale = <1>;
 *		};
 *	};
 *	rgb-cal-y {
 *		offset = <0>;
 *		coeff = <0 0 0 0>;
 *		als-channel-scale {
 *		compatible = "cros-ec,accelgyro-als-channel-scale";
 *			k-channel-scale = <1>;
 *			cover-scale = <1>;
 *		};
 *	};
 *	rgb-cal-z {
 *		offset = <0>;
 *		coeff = <0 0 0 0>;
 *		als-channel-scale {
 *		compatible = "cros-ec,accelgyro-als-channel-scale";
 *			k-channel-scale = <1>;
 *			cover-scale = <1>;
 *		};
 *	};
 * };
 */
#define ACCELGYRO_RGB_CALIBRATION(id)				\
	{							\
		RGB_CAL_RGB_SET_ONE(DT_CHILD(id, rgb_cal_x), X)	\
		RGB_CAL_RGB_SET_ONE(DT_CHILD(id, rgb_cal_y), Y)	\
		RGB_CAL_RGB_SET_ONE(DT_CHILD(id, rgb_cal_z), Z)	\
		.irt = INT_TO_FP(DT_PROP(id, irt)),		\
	}

#endif /* __ZEPHYR_SHIM_SRC_MOTIONSENSE_DRIVER_DRVDATA_ACCELGYRO_H */