05f5d78834
Add triggered buffer feature. Signed-off-by: Petre Rodan <petre.rodan@subdimension.ro> Link: https://lore.kernel.org/r/20240211075645.28777-7-petre.rodan@subdimension.ro Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
82 lines
1.8 KiB
C
82 lines
1.8 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
/*
|
|
* Honeywell TruStability HSC Series pressure/temperature sensor
|
|
*
|
|
* Copyright (c) 2023 Petre Rodan <petre.rodan@subdimension.ro>
|
|
*/
|
|
|
|
#ifndef _HSC030PA_H
|
|
#define _HSC030PA_H
|
|
|
|
#include <linux/types.h>
|
|
|
|
#include <linux/iio/iio.h>
|
|
|
|
#define HSC_REG_MEASUREMENT_RD_SIZE 4
|
|
#define HSC_RESP_TIME_MS 2
|
|
|
|
struct device;
|
|
|
|
struct iio_chan_spec;
|
|
struct iio_dev;
|
|
|
|
struct hsc_data;
|
|
struct hsc_chip_data;
|
|
|
|
typedef int (*hsc_recv_fn)(struct hsc_data *);
|
|
|
|
/**
|
|
* struct hsc_data
|
|
* @dev: current device structure
|
|
* @chip: structure containing chip's channel properties
|
|
* @recv_cb: function that implements the chip reads
|
|
* @is_valid: true if last transfer has been validated
|
|
* @pmin: minimum measurable pressure limit
|
|
* @pmax: maximum measurable pressure limit
|
|
* @outmin: minimum raw pressure in counts (based on transfer function)
|
|
* @outmax: maximum raw pressure in counts (based on transfer function)
|
|
* @function: transfer function
|
|
* @p_scale: pressure scale
|
|
* @p_scale_dec: pressure scale, decimal places
|
|
* @p_offset: pressure offset
|
|
* @p_offset_dec: pressure offset, decimal places
|
|
* @buffer: raw conversion data
|
|
*/
|
|
struct hsc_data {
|
|
struct device *dev;
|
|
const struct hsc_chip_data *chip;
|
|
hsc_recv_fn recv_cb;
|
|
bool is_valid;
|
|
s32 pmin;
|
|
s32 pmax;
|
|
u32 outmin;
|
|
u32 outmax;
|
|
u32 function;
|
|
s64 p_scale;
|
|
s32 p_scale_dec;
|
|
s64 p_offset;
|
|
s32 p_offset_dec;
|
|
struct {
|
|
__be16 chan[2];
|
|
s64 timestamp __aligned(8);
|
|
} scan;
|
|
u8 buffer[HSC_REG_MEASUREMENT_RD_SIZE] __aligned(IIO_DMA_MINALIGN);
|
|
};
|
|
|
|
struct hsc_chip_data {
|
|
bool (*valid)(struct hsc_data *data);
|
|
const struct iio_chan_spec *channels;
|
|
u8 num_channels;
|
|
};
|
|
|
|
enum hsc_func_id {
|
|
HSC_FUNCTION_A,
|
|
HSC_FUNCTION_B,
|
|
HSC_FUNCTION_C,
|
|
HSC_FUNCTION_F,
|
|
};
|
|
|
|
int hsc_common_probe(struct device *dev, hsc_recv_fn recv);
|
|
|
|
#endif
|