drivers/iio/common/ssp_sensors/ssp_iio_sensor.h
Source file repositories/reference/linux-study-clean/drivers/iio/common/ssp_sensors/ssp_iio_sensor.h
File Facts
- System
- Linux kernel
- Corpus path
drivers/iio/common/ssp_sensors/ssp_iio_sensor.h- Extension
.h- Size
- 1787 bytes
- Lines
- 73
- Domain
- Driver Families
- Bucket
- drivers/iio
- Inferred role
- Driver Families: implementation source
- Status
- source implementation candidate
Why This File Exists
Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
- No C-style include directives detected by the generator.
Detected Declarations
function ssp_convert_to_freqfunction ssp_convert_to_time
Annotated Snippet
#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__ */
Annotation
- Detected declarations: `function ssp_convert_to_freq`, `function ssp_convert_to_time`.
- Atlas domain: Driver Families / drivers/iio.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.