root/drivers/iio/common/ssp_sensors/ssp_iio_sensor.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


DEFINITIONS

This source file includes following definitions.
  1. ssp_convert_to_freq
  2. ssp_convert_to_time

   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                    1000
  34 #define SSP_INVERTED_SCALING_FACTOR     1000000U
  35 
  36 #define SSP_FACTOR_WITH_MS \
  37         (SSP_INVERTED_SCALING_FACTOR * SSP_MS_PER_S)
  38 
  39 int ssp_common_buffer_postenable(struct iio_dev *indio_dev);
  40 
  41 int ssp_common_buffer_postdisable(struct iio_dev *indio_dev);
  42 
  43 int 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 */
  47 static 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 */
  62 static 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__ */

/* [<][>][^][v][top][bottom][index][help] */