1 /*
2  *  Copyright (C) 2014, Samsung Electronics Co. Ltd. All Rights Reserved.
3  *
4  *  This program is free software; you can redistribute it and/or modify
5  *  it under the terms of the GNU General Public License as published by
6  *  the Free Software Foundation; either version 2 of the License, or
7  *  (at your option) any later version.
8  *
9  *  This program is distributed in the hope that it will be useful,
10  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12  *  GNU General Public License for more details.
13  *
14  */
15 #ifndef _SSP_SENSORS_H_
16 #define _SSP_SENSORS_H_
17 
18 #include <linux/iio/iio.h>
19 
20 #define SSP_TIME_SIZE				4
21 #define SSP_ACCELEROMETER_SIZE			6
22 #define SSP_GYROSCOPE_SIZE			6
23 #define SSP_BIO_HRM_RAW_SIZE			8
24 #define SSP_BIO_HRM_RAW_FAC_SIZE		36
25 #define SSP_BIO_HRM_LIB_SIZE			8
26 
27 /**
28  * enum ssp_sensor_type - SSP sensor type
29  */
30 enum ssp_sensor_type {
31 	SSP_ACCELEROMETER_SENSOR = 0,
32 	SSP_GYROSCOPE_SENSOR,
33 	SSP_GEOMAGNETIC_UNCALIB_SENSOR,
34 	SSP_GEOMAGNETIC_RAW,
35 	SSP_GEOMAGNETIC_SENSOR,
36 	SSP_PRESSURE_SENSOR,
37 	SSP_GESTURE_SENSOR,
38 	SSP_PROXIMITY_SENSOR,
39 	SSP_TEMPERATURE_HUMIDITY_SENSOR,
40 	SSP_LIGHT_SENSOR,
41 	SSP_PROXIMITY_RAW,
42 	SSP_ORIENTATION_SENSOR,
43 	SSP_STEP_DETECTOR,
44 	SSP_SIG_MOTION_SENSOR,
45 	SSP_GYRO_UNCALIB_SENSOR,
46 	SSP_GAME_ROTATION_VECTOR,
47 	SSP_ROTATION_VECTOR,
48 	SSP_STEP_COUNTER,
49 	SSP_BIO_HRM_RAW,
50 	SSP_BIO_HRM_RAW_FAC,
51 	SSP_BIO_HRM_LIB,
52 	SSP_SENSOR_MAX,
53 };
54 
55 struct ssp_data;
56 
57 /**
58  * struct ssp_sensor_data - Sensor object
59  * @process_data:	Callback to feed sensor data.
60  * @type:		Used sensor type.
61  * @buffer:		Received data buffer.
62  */
63 struct ssp_sensor_data {
64 	int (*process_data)(struct iio_dev *indio_dev, void *buf,
65 			    int64_t timestamp);
66 	enum ssp_sensor_type type;
67 	u8 *buffer;
68 };
69 
70 void ssp_register_consumer(struct iio_dev *indio_dev,
71 			   enum ssp_sensor_type type);
72 
73 int ssp_enable_sensor(struct ssp_data *data, enum ssp_sensor_type type,
74 		      u32 delay);
75 
76 int ssp_disable_sensor(struct ssp_data *data, enum ssp_sensor_type type);
77 
78 u32 ssp_get_sensor_delay(struct ssp_data *data, enum ssp_sensor_type);
79 
80 int ssp_change_delay(struct ssp_data *data, enum ssp_sensor_type type,
81 		     u32 delay);
82 #endif /* _SSP_SENSORS_H_ */
83