1515#include  <gpio.h> 
1616#include  <misc/util.h> 
1717#include  <sensor.h> 
18- 
19- /* COMMON DEFINE FOR ACCEL SENSOR */ 
20- #define  LIS2DW12_EN_BIT 		0x01
21- #define  LIS2DW12_DIS_BIT 		0x00
22- #define  LIS2DW12_OUT_LEN 		6
23- 
24- /* temperature sensor */ 
25- #define  LIS2DW12_OUT_TEMP_L_ADDR 	0x0d
26- 
27- /* Who Am I  */ 
28- #define  LIS2DW12_WHO_AM_I_REG 		0x0f
29- #define  LIS2DW12_WHO_AM_I 		0x44
30- 
31- #define  LIS2DW12_CTRL1_ADDR 		0x20
32- #define  LIS2DW12_LOW_POWER_MASK 	0x03
33- #define  LIS2DW12_POWER_MODE_MASK 	0x0c
34- #define  LIS2DW12_LOW_POWER_MODE 	0x00
35- #define  LIS2DW12_HP_MODE 		0x04
36- #define  LIS2DW12_ODR_MASK 		0xf0
37- 
38- enum  lis2dh_powermode  {
39- 	LIS2DW12_LOW_POWER_M1 ,
40- 	LIS2DW12_LOW_POWER_M2 ,
41- 	LIS2DW12_LOW_POWER_M3 ,
42- 	LIS2DW12_LOW_POWER_M4 ,
43- 	LIS2DW12_HIGH_PERF 
44- };
45- 
46- /* Acc data rate for Low Power mode */ 
47- #define  LIS2DW12_MAX_ODR 		1600
48- 
49- enum  lis2dh_odr  {
50- 	LIS2DW12_ODR_POWER_OFF_VAL ,
51- 	LIS2DW12_ODR_1_6HZ_VAL ,
52- 	LIS2DW12_ODR_12_5HZ_VAL ,
53- 	LIS2DW12_ODR_25HZ_VAL ,
54- 	LIS2DW12_ODR_50HZ_VAL ,
55- 	LIS2DW12_ODR_100HZ_VAL ,
56- 	LIS2DW12_ODR_200HZ_VAL ,
57- 	LIS2DW12_ODR_400HZ_VAL ,
58- 	LIS2DW12_ODR_800HZ_VAL ,
59- 	LIS2DW12_ODR_1600HZ_VAL 
60- };
18+ #include  "lis2dw12_reg.h" 
6119
6220#if  defined(CONFIG_LIS2DW12_ODR_1_6 )
63- 	#define  LIS2DW12_DEFAULT_ODR 	LIS2DW12_ODR_1_6HZ_VAL 
21+ 	#define  LIS2DW12_DEFAULT_ODR 	LIS2DW12_XL_ODR_1Hz6_LP_ONLY 
6422#elif  defined(CONFIG_LIS2DW12_ODR_12_5 )
65- 	#define  LIS2DW12_DEFAULT_ODR 	LIS2DW12_ODR_12_5HZ_VAL 
23+ 	#define  LIS2DW12_DEFAULT_ODR 	LIS2DW12_XL_ODR_12Hz5 
6624#elif  defined(CONFIG_LIS2DW12_ODR_25 )
67- 	#define  LIS2DW12_DEFAULT_ODR 	LIS2DW12_ODR_25HZ_VAL 
25+ 	#define  LIS2DW12_DEFAULT_ODR 	LIS2DW12_XL_ODR_25Hz 
6826#elif  defined(CONFIG_LIS2DW12_ODR_50 )
69- 	#define  LIS2DW12_DEFAULT_ODR 	LIS2DW12_ODR_50HZ_VAL 
27+ 	#define  LIS2DW12_DEFAULT_ODR 	LIS2DW12_XL_ODR_50Hz 
7028#elif  defined(CONFIG_LIS2DW12_ODR_100 ) ||  \
7129	defined(CONFIG_LIS2DW12_ODR_RUNTIME )
72- 	#define  LIS2DW12_DEFAULT_ODR 	LIS2DW12_ODR_100HZ_VAL 
30+ 	#define  LIS2DW12_DEFAULT_ODR 	LIS2DW12_XL_ODR_100Hz 
7331#elif  defined(CONFIG_LIS2DW12_ODR_200 )
74- 	#define  LIS2DW12_DEFAULT_ODR 	LIS2DW12_ODR_200HZ_VAL 
32+ 	#define  LIS2DW12_DEFAULT_ODR 	LIS2DW12_XL_ODR_200Hz 
7533#elif  defined(CONFIG_LIS2DW12_ODR_400 )
76- 	#define  LIS2DW12_DEFAULT_ODR 	LIS2DW12_ODR_400HZ_VAL 
34+ 	#define  LIS2DW12_DEFAULT_ODR 	LIS2DW12_XL_ODR_400Hz 
7735#elif  defined(CONFIG_LIS2DW12_ODR_800 )
78- 	#define  LIS2DW12_DEFAULT_ODR 	LIS2DW12_ODR_800HZ_VAL 
36+ 	#define  LIS2DW12_DEFAULT_ODR 	LIS2DW12_XL_ODR_800Hz 
7937#elif  defined(CONFIG_LIS2DW12_ODR_1600 )
80- 	#define  LIS2DW12_DEFAULT_ODR 	LIS2DW12_ODR_1600HZ_VAL 
38+ 	#define  LIS2DW12_DEFAULT_ODR 	LIS2DW12_XL_ODR_1k6Hz 
8139#endif 
8240
8341/* Return ODR reg value based on data rate set */ 
8442#define  LIS2DW12_ODR_TO_REG (_odr ) \
85- 	((_odr <= 1) ? LIS2DW12_ODR_1_6HZ_VAL  : \
86- 	 (_odr <= 12) ? LIS2DW12_ODR_12_5HZ_VAL  : \
43+ 	((_odr <= 1) ? LIS2DW12_XL_ODR_1Hz6_LP_ONLY  : \
44+ 	 (_odr <= 12) ? LIS2DW12_XL_ODR_12Hz5  : \
8745	 ((31 - __builtin_clz(_odr / 25))) + 3)
8846
89- #define  LIS2DW12_CTRL2_ADDR 		0x21
90- #define  LIS2DW12_BDU_MASK 		BIT(3)
91- #define  LIS2DW12_RESET_MASK 		BIT(6)
92- #define  LIS2DW12_BOOT_MASK 		BIT(7)
93- #define  LIS2DW12_CTRL3_ADDR 		0x22
94- #define  LIS2DW12_LIR_MASK 		BIT(4)
95- 
96- #define  LIS2DW12_CTRL4_ADDR 		0x23
97- #define  LIS2DW12_INT1_DRDY 		BIT(0)
98- 
99- #define  LIS2DW12_CTRL5_ADDR 		0x24
100- #define  LIS2DW12_INT2_DRDY 		BIT(0)
101- 
102- #define  LIS2DW12_CTRL6_ADDR 		0x25
103- #define  LIS2DW12_FS_MASK 		0x30
104- 
105- enum  lis2dh_fs  {
106- 	LIS2DW12_FS_2G_VAL ,
107- 	LIS2DW12_FS_4G_VAL ,
108- 	LIS2DW12_FS_8G_VAL ,
109- 	LIS2DW12_FS_16G_VAL 
110- };
111- 
11247/* FS reg value from Full Scale */ 
11348#define  LIS2DW12_FS_TO_REG (_fs )	(30 - __builtin_clz(_fs))
11449
11550#if  defined(CONFIG_LIS2DW12_ACCEL_RANGE_RUNTIME ) ||  \
11651	defined(CONFIG_LIS2DW12_ACCEL_RANGE_2G )
117- 	#define  LIS2DW12_ACC_FS 		LIS2DW12_FS_2G_VAL 
52+ 	#define  LIS2DW12_ACC_FS 		LIS2DW12_2g 
11853#elif  defined(CONFIG_LIS2DW12_ACCEL_RANGE_4G )
119- 	#define  LIS2DW12_ACC_FS 		LIS2DW12_FS_4G_VAL 
54+ 	#define  LIS2DW12_ACC_FS 		LIS2DW12_4g 
12055#elif  defined(CONFIG_LIS2DW12_ACCEL_RANGE_8G )
121- 	#define  LIS2DW12_ACC_FS 		LIS2DW12_FS_8G_VAL 
56+ 	#define  LIS2DW12_ACC_FS 		LIS2DW12_8g 
12257#elif  defined(CONFIG_LIS2DW12_ACCEL_RANGE_16G )
123- 	#define  LIS2DW12_ACC_FS 		LIS2DW12_FS_16G_VAL 
58+ 	#define  LIS2DW12_ACC_FS 		LIS2DW12_16g 
12459#endif 
12560
126- #define  LIS2DW12_OUT_T_REG 		0x26
127- 
128- #define  LIS2DW12_STATUS_REG 		0x27
129- #define  LIS2DW12_STS_XLDA_UP 		0x01
130- 
131- #define  LIS2DW12_OUT_X_L_ADDR 		0x28
132- 
13361/* Acc Gain value in ug/LSB in High Perf mode */ 
13462#define  LIS2DW12_FS_2G_GAIN 		244
13563#define  LIS2DW12_FS_4G_GAIN 		488
@@ -155,7 +83,7 @@ enum lis2dh_fs {
15583 */ 
15684struct  lis2dw12_device_config  {
15785	const  char  * bus_name ;
158- 	enum   lis2dh_powermode  pm ;
86+ 	lis2dw12_mode_t  pm ;
15987#ifdef  CONFIG_LIS2DW12_TRIGGER 
16088	const  char  * int_gpio_port ;
16189	u8_t  int_gpio_pin ;
@@ -166,20 +94,6 @@ struct lis2dw12_device_config {
16694/* sensor data forward declaration (member definition is below) */ 
16795struct  lis2dw12_data ;
16896
169- /* transmission function interface */ 
170- struct  lis2dw12_tf  {
171- 	int  (* read_data )(struct  lis2dw12_data  * data , u8_t  reg_addr ,
172- 			 u8_t  * value , u8_t  len );
173- 	int  (* write_data )(struct  lis2dw12_data  * data , u8_t  reg_addr ,
174- 			 u8_t  * value , u8_t  len );
175- 	int  (* read_reg )(struct  lis2dw12_data  * data , u8_t  reg_addr ,
176- 			u8_t  * value );
177- 	int  (* write_reg )(struct  lis2dw12_data  * data , u8_t  reg_addr ,
178- 			 u8_t  value );
179- 	int  (* update_reg )(struct  lis2dw12_data  * data , u8_t  reg_addr ,
180- 			  u8_t  mask , u8_t  value );
181- };
182- 
18397/* sensor data */ 
18498struct  lis2dw12_data  {
18599	struct  device  * bus ;
@@ -188,7 +102,7 @@ struct lis2dw12_data {
188102	 /* save sensitivity */ 
189103	u16_t  gain ;
190104
191- 	const   struct   lis2dw12_tf   * hw_tf ;
105+ 	lis2dw12_ctx_t   * ctx ;
192106#ifdef  CONFIG_LIS2DW12_TRIGGER 
193107	struct  device  * gpio ;
194108	struct  gpio_callback  gpio_cb ;
0 commit comments