1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
| #ifndef __SSP_IIO_SENSOR_H__
| #define __SSP_IIO_SENSOR_H__
|
| #define SSP_CHANNEL_AG(_type, _mod, _index) \
| { \
| .type = _type,\
| .modified = 1,\
| .channel2 = _mod,\
| .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SAMP_FREQ),\
| .scan_index = _index,\
| .scan_type = {\
| .sign = 's',\
| .realbits = 16,\
| .storagebits = 16,\
| .shift = 0,\
| .endianness = IIO_LE,\
| },\
| }
|
| /* It is defined here as it is a mixed timestamp */
| #define SSP_CHAN_TIMESTAMP(_si) { \
| .type = IIO_TIMESTAMP, \
| .channel = -1, \
| .scan_index = _si, \
| .scan_type = { \
| .sign = 's', \
| .realbits = 64, \
| .storagebits = 64, \
| }, \
| }
|
| #define SSP_MS_PER_S 1000
| #define SSP_INVERTED_SCALING_FACTOR 1000000U
|
| #define SSP_FACTOR_WITH_MS \
| (SSP_INVERTED_SCALING_FACTOR * SSP_MS_PER_S)
|
| int ssp_common_buffer_postenable(struct iio_dev *indio_dev);
|
| int ssp_common_buffer_postdisable(struct iio_dev *indio_dev);
|
| int ssp_common_process_data(struct iio_dev *indio_dev, void *buf,
| unsigned int len, int64_t timestamp);
|
| /* Converts time in ms to frequency */
| static inline void ssp_convert_to_freq(u32 time, int *integer_part,
| int *fractional)
| {
| if (time == 0) {
| *fractional = 0;
| *integer_part = 0;
| return;
| }
|
| *integer_part = SSP_FACTOR_WITH_MS / time;
| *fractional = *integer_part % SSP_INVERTED_SCALING_FACTOR;
| *integer_part = *integer_part / SSP_INVERTED_SCALING_FACTOR;
| }
|
| /* Converts frequency to time in ms */
| static inline int ssp_convert_to_time(int integer_part, int fractional)
| {
| u64 value;
|
| value = (u64)integer_part * SSP_INVERTED_SCALING_FACTOR + fractional;
| if (value == 0)
| return 0;
|
| return div64_u64((u64)SSP_FACTOR_WITH_MS, value);
| }
| #endif /* __SSP_IIO_SENSOR_H__ */
|
|