WIP FPC-III support
[linux/fpc-iii.git] / drivers / iio / common / ssp_sensors / ssp_iio_sensor.h
blob4528ab55eb68ad855b1033f37e1539e4b9308075
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) \
6 { \
7 .type = _type,\
8 .modified = 1,\
9 .channel2 = _mod,\
10 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SAMP_FREQ),\
11 .scan_index = _index,\
12 .scan_type = {\
13 .sign = 's',\
14 .realbits = 16,\
15 .storagebits = 16,\
16 .shift = 0,\
17 .endianness = IIO_LE,\
18 },\
21 /* It is defined here as it is a mixed timestamp */
22 #define SSP_CHAN_TIMESTAMP(_si) { \
23 .type = IIO_TIMESTAMP, \
24 .channel = -1, \
25 .scan_index = _si, \
26 .scan_type = { \
27 .sign = 's', \
28 .realbits = 64, \
29 .storagebits = 64, \
30 }, \
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,
48 int *fractional)
50 if (time == 0) {
51 *fractional = 0;
52 *integer_part = 0;
53 return;
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)
64 u64 value;
66 value = (u64)integer_part * SSP_INVERTED_SCALING_FACTOR + fractional;
67 if (value == 0)
68 return 0;
70 return div64_u64((u64)SSP_FACTOR_WITH_MS, value);
72 #endif /* __SSP_IIO_SENSOR_H__ */