xref: /OK3568_Linux_fs/kernel/include/linux/iio/common/ssp_sensors.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-or-later */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  *  Copyright (C) 2014, Samsung Electronics Co. Ltd. All Rights Reserved.
4*4882a593Smuzhiyun  */
5*4882a593Smuzhiyun #ifndef _SSP_SENSORS_H_
6*4882a593Smuzhiyun #define _SSP_SENSORS_H_
7*4882a593Smuzhiyun 
8*4882a593Smuzhiyun #include <linux/iio/iio.h>
9*4882a593Smuzhiyun 
10*4882a593Smuzhiyun #define SSP_TIME_SIZE				4
11*4882a593Smuzhiyun #define SSP_ACCELEROMETER_SIZE			6
12*4882a593Smuzhiyun #define SSP_GYROSCOPE_SIZE			6
13*4882a593Smuzhiyun #define SSP_BIO_HRM_RAW_SIZE			8
14*4882a593Smuzhiyun #define SSP_BIO_HRM_RAW_FAC_SIZE		36
15*4882a593Smuzhiyun #define SSP_BIO_HRM_LIB_SIZE			8
16*4882a593Smuzhiyun 
17*4882a593Smuzhiyun /**
18*4882a593Smuzhiyun  * enum ssp_sensor_type - SSP sensor type
19*4882a593Smuzhiyun  */
20*4882a593Smuzhiyun enum ssp_sensor_type {
21*4882a593Smuzhiyun 	SSP_ACCELEROMETER_SENSOR = 0,
22*4882a593Smuzhiyun 	SSP_GYROSCOPE_SENSOR,
23*4882a593Smuzhiyun 	SSP_GEOMAGNETIC_UNCALIB_SENSOR,
24*4882a593Smuzhiyun 	SSP_GEOMAGNETIC_RAW,
25*4882a593Smuzhiyun 	SSP_GEOMAGNETIC_SENSOR,
26*4882a593Smuzhiyun 	SSP_PRESSURE_SENSOR,
27*4882a593Smuzhiyun 	SSP_GESTURE_SENSOR,
28*4882a593Smuzhiyun 	SSP_PROXIMITY_SENSOR,
29*4882a593Smuzhiyun 	SSP_TEMPERATURE_HUMIDITY_SENSOR,
30*4882a593Smuzhiyun 	SSP_LIGHT_SENSOR,
31*4882a593Smuzhiyun 	SSP_PROXIMITY_RAW,
32*4882a593Smuzhiyun 	SSP_ORIENTATION_SENSOR,
33*4882a593Smuzhiyun 	SSP_STEP_DETECTOR,
34*4882a593Smuzhiyun 	SSP_SIG_MOTION_SENSOR,
35*4882a593Smuzhiyun 	SSP_GYRO_UNCALIB_SENSOR,
36*4882a593Smuzhiyun 	SSP_GAME_ROTATION_VECTOR,
37*4882a593Smuzhiyun 	SSP_ROTATION_VECTOR,
38*4882a593Smuzhiyun 	SSP_STEP_COUNTER,
39*4882a593Smuzhiyun 	SSP_BIO_HRM_RAW,
40*4882a593Smuzhiyun 	SSP_BIO_HRM_RAW_FAC,
41*4882a593Smuzhiyun 	SSP_BIO_HRM_LIB,
42*4882a593Smuzhiyun 	SSP_SENSOR_MAX,
43*4882a593Smuzhiyun };
44*4882a593Smuzhiyun 
45*4882a593Smuzhiyun struct ssp_data;
46*4882a593Smuzhiyun 
47*4882a593Smuzhiyun /**
48*4882a593Smuzhiyun  * struct ssp_sensor_data - Sensor object
49*4882a593Smuzhiyun  * @process_data:	Callback to feed sensor data.
50*4882a593Smuzhiyun  * @type:		Used sensor type.
51*4882a593Smuzhiyun  * @buffer:		Received data buffer.
52*4882a593Smuzhiyun  */
53*4882a593Smuzhiyun struct ssp_sensor_data {
54*4882a593Smuzhiyun 	int (*process_data)(struct iio_dev *indio_dev, void *buf,
55*4882a593Smuzhiyun 			    int64_t timestamp);
56*4882a593Smuzhiyun 	enum ssp_sensor_type type;
57*4882a593Smuzhiyun 	u8 *buffer;
58*4882a593Smuzhiyun };
59*4882a593Smuzhiyun 
60*4882a593Smuzhiyun void ssp_register_consumer(struct iio_dev *indio_dev,
61*4882a593Smuzhiyun 			   enum ssp_sensor_type type);
62*4882a593Smuzhiyun 
63*4882a593Smuzhiyun int ssp_enable_sensor(struct ssp_data *data, enum ssp_sensor_type type,
64*4882a593Smuzhiyun 		      u32 delay);
65*4882a593Smuzhiyun 
66*4882a593Smuzhiyun int ssp_disable_sensor(struct ssp_data *data, enum ssp_sensor_type type);
67*4882a593Smuzhiyun 
68*4882a593Smuzhiyun u32 ssp_get_sensor_delay(struct ssp_data *data, enum ssp_sensor_type);
69*4882a593Smuzhiyun 
70*4882a593Smuzhiyun int ssp_change_delay(struct ssp_data *data, enum ssp_sensor_type type,
71*4882a593Smuzhiyun 		     u32 delay);
72*4882a593Smuzhiyun #endif /* _SSP_SENSORS_H_ */
73