brintos

brintos / linux-shallow public Read only

0
0
Text · 1.7 KiB · 4528ab5 Raw
73 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2#ifndef __SSP_IIO_SENSOR_H__3#define __SSP_IIO_SENSOR_H__4 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		},\19}20 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		},							\31}32 33#define SSP_MS_PER_S			100034#define SSP_INVERTED_SCALING_FACTOR	1000000U35 36#define SSP_FACTOR_WITH_MS \37	(SSP_INVERTED_SCALING_FACTOR * SSP_MS_PER_S)38 39int ssp_common_buffer_postenable(struct iio_dev *indio_dev);40 41int ssp_common_buffer_postdisable(struct iio_dev *indio_dev);42 43int ssp_common_process_data(struct iio_dev *indio_dev, void *buf,44			    unsigned int len, int64_t timestamp);45 46/* Converts time in ms to frequency */47static inline void ssp_convert_to_freq(u32 time, int *integer_part,48				       int *fractional)49{50	if (time == 0) {51		*fractional = 0;52		*integer_part = 0;53		return;54	}55 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;59}60 61/* Converts frequency to time in ms */62static inline int ssp_convert_to_time(int integer_part, int fractional)63{64	u64 value;65 66	value = (u64)integer_part * SSP_INVERTED_SCALING_FACTOR + fractional;67	if (value == 0)68		return 0;69 70	return div64_u64((u64)SSP_FACTOR_WITH_MS, value);71}72#endif /* __SSP_IIO_SENSOR_H__ */73