1c942fddfSThomas Gleixner /* SPDX-License-Identifier: GPL-2.0-or-later */
250dd64d5SKarol Wrona /*
350dd64d5SKarol Wrona  *  Copyright (C) 2014, Samsung Electronics Co. Ltd. All Rights Reserved.
450dd64d5SKarol Wrona  */
550dd64d5SKarol Wrona #ifndef _SSP_SENSORS_H_
650dd64d5SKarol Wrona #define _SSP_SENSORS_H_
750dd64d5SKarol Wrona 
850dd64d5SKarol Wrona #include <linux/iio/iio.h>
950dd64d5SKarol Wrona 
1050dd64d5SKarol Wrona #define SSP_TIME_SIZE				4
1150dd64d5SKarol Wrona #define SSP_ACCELEROMETER_SIZE			6
1250dd64d5SKarol Wrona #define SSP_GYROSCOPE_SIZE			6
1350dd64d5SKarol Wrona #define SSP_BIO_HRM_RAW_SIZE			8
1450dd64d5SKarol Wrona #define SSP_BIO_HRM_RAW_FAC_SIZE		36
1550dd64d5SKarol Wrona #define SSP_BIO_HRM_LIB_SIZE			8
1650dd64d5SKarol Wrona 
1750dd64d5SKarol Wrona /**
1850dd64d5SKarol Wrona  * enum ssp_sensor_type - SSP sensor type
1950dd64d5SKarol Wrona  */
2050dd64d5SKarol Wrona enum ssp_sensor_type {
2150dd64d5SKarol Wrona 	SSP_ACCELEROMETER_SENSOR = 0,
2250dd64d5SKarol Wrona 	SSP_GYROSCOPE_SENSOR,
2350dd64d5SKarol Wrona 	SSP_GEOMAGNETIC_UNCALIB_SENSOR,
2450dd64d5SKarol Wrona 	SSP_GEOMAGNETIC_RAW,
2550dd64d5SKarol Wrona 	SSP_GEOMAGNETIC_SENSOR,
2650dd64d5SKarol Wrona 	SSP_PRESSURE_SENSOR,
2750dd64d5SKarol Wrona 	SSP_GESTURE_SENSOR,
2850dd64d5SKarol Wrona 	SSP_PROXIMITY_SENSOR,
2950dd64d5SKarol Wrona 	SSP_TEMPERATURE_HUMIDITY_SENSOR,
3050dd64d5SKarol Wrona 	SSP_LIGHT_SENSOR,
3150dd64d5SKarol Wrona 	SSP_PROXIMITY_RAW,
3250dd64d5SKarol Wrona 	SSP_ORIENTATION_SENSOR,
3350dd64d5SKarol Wrona 	SSP_STEP_DETECTOR,
3450dd64d5SKarol Wrona 	SSP_SIG_MOTION_SENSOR,
3550dd64d5SKarol Wrona 	SSP_GYRO_UNCALIB_SENSOR,
3650dd64d5SKarol Wrona 	SSP_GAME_ROTATION_VECTOR,
3750dd64d5SKarol Wrona 	SSP_ROTATION_VECTOR,
3850dd64d5SKarol Wrona 	SSP_STEP_COUNTER,
3950dd64d5SKarol Wrona 	SSP_BIO_HRM_RAW,
4050dd64d5SKarol Wrona 	SSP_BIO_HRM_RAW_FAC,
4150dd64d5SKarol Wrona 	SSP_BIO_HRM_LIB,
4250dd64d5SKarol Wrona 	SSP_SENSOR_MAX,
4350dd64d5SKarol Wrona };
4450dd64d5SKarol Wrona 
4550dd64d5SKarol Wrona struct ssp_data;
4650dd64d5SKarol Wrona 
4750dd64d5SKarol Wrona /**
4850dd64d5SKarol Wrona  * struct ssp_sensor_data - Sensor object
4950dd64d5SKarol Wrona  * @process_data:	Callback to feed sensor data.
5050dd64d5SKarol Wrona  * @type:		Used sensor type.
5150dd64d5SKarol Wrona  * @buffer:		Received data buffer.
5250dd64d5SKarol Wrona  */
5350dd64d5SKarol Wrona struct ssp_sensor_data {
5450dd64d5SKarol Wrona 	int (*process_data)(struct iio_dev *indio_dev, void *buf,
5550dd64d5SKarol Wrona 			    int64_t timestamp);
5650dd64d5SKarol Wrona 	enum ssp_sensor_type type;
5750dd64d5SKarol Wrona 	u8 *buffer;
5850dd64d5SKarol Wrona };
5950dd64d5SKarol Wrona 
6050dd64d5SKarol Wrona void ssp_register_consumer(struct iio_dev *indio_dev,
6150dd64d5SKarol Wrona 			   enum ssp_sensor_type type);
6250dd64d5SKarol Wrona 
6350dd64d5SKarol Wrona int ssp_enable_sensor(struct ssp_data *data, enum ssp_sensor_type type,
6450dd64d5SKarol Wrona 		      u32 delay);
6550dd64d5SKarol Wrona 
6650dd64d5SKarol Wrona int ssp_disable_sensor(struct ssp_data *data, enum ssp_sensor_type type);
6750dd64d5SKarol Wrona 
6850dd64d5SKarol Wrona u32 ssp_get_sensor_delay(struct ssp_data *data, enum ssp_sensor_type);
6950dd64d5SKarol Wrona 
7050dd64d5SKarol Wrona int ssp_change_delay(struct ssp_data *data, enum ssp_sensor_type type,
7150dd64d5SKarol Wrona 		     u32 delay);
7250dd64d5SKarol Wrona #endif /* _SSP_SENSORS_H_ */
73