1 /* SPDX-License-Identifier: GPL-2.0 */
2 #ifndef __SSP_IIO_SENSOR_H__
3 #define __SSP_IIO_SENSOR_H__
5 #define SSP_CHANNEL_AG(_type, _mod, _index) \
10 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SAMP_FREQ),\
11 .scan_index = _index,\
17 .endianness = IIO_LE,\
21 /* It is defined here as it is a mixed timestamp */
22 #define SSP_CHAN_TIMESTAMP(_si) { \
23 .type = IIO_TIMESTAMP, \
33 #define SSP_MS_PER_S 1000
34 #define SSP_INVERTED_SCALING_FACTOR 1000000U
36 #define SSP_FACTOR_WITH_MS \
37 (SSP_INVERTED_SCALING_FACTOR * SSP_MS_PER_S)
39 int ssp_common_buffer_postenable(struct iio_dev
*indio_dev
);
41 int ssp_common_buffer_postdisable(struct iio_dev
*indio_dev
);
43 int ssp_common_process_data(struct iio_dev
*indio_dev
, void *buf
,
44 unsigned int len
, int64_t timestamp
);
46 /* Converts time in ms to frequency */
47 static inline void ssp_convert_to_freq(u32 time
, int *integer_part
,
56 *integer_part
= SSP_FACTOR_WITH_MS
/ time
;
57 *fractional
= *integer_part
% SSP_INVERTED_SCALING_FACTOR
;
58 *integer_part
= *integer_part
/ SSP_INVERTED_SCALING_FACTOR
;
61 /* Converts frequency to time in ms */
62 static inline int ssp_convert_to_time(int integer_part
, int fractional
)
66 value
= (u64
)integer_part
* SSP_INVERTED_SCALING_FACTOR
+ fractional
;
70 return div64_u64((u64
)SSP_FACTOR_WITH_MS
, value
);
72 #endif /* __SSP_IIO_SENSOR_H__ */