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