xref: /linux/drivers/iio/pressure/hsc030pa.h (revision e6a901a00822659181c93c86d8bbc2a17779fddc)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  * Honeywell TruStability HSC Series pressure/temperature sensor
4  *
5  * Copyright (c) 2023 Petre Rodan <petre.rodan@subdimension.ro>
6  */
7 
8 #ifndef _HSC030PA_H
9 #define _HSC030PA_H
10 
11 #include <linux/types.h>
12 
13 #include <linux/iio/iio.h>
14 
15 #define HSC_REG_MEASUREMENT_RD_SIZE 4
16 #define HSC_RESP_TIME_MS            2
17 
18 struct device;
19 
20 struct iio_chan_spec;
21 struct iio_dev;
22 
23 struct hsc_data;
24 struct hsc_chip_data;
25 
26 typedef int (*hsc_recv_fn)(struct hsc_data *);
27 
28 /**
29  * struct hsc_data
30  * @dev: current device structure
31  * @chip: structure containing chip's channel properties
32  * @recv_cb: function that implements the chip reads
33  * @is_valid: true if last transfer has been validated
34  * @pmin: minimum measurable pressure limit
35  * @pmax: maximum measurable pressure limit
36  * @outmin: minimum raw pressure in counts (based on transfer function)
37  * @outmax: maximum raw pressure in counts (based on transfer function)
38  * @function: transfer function
39  * @p_scale: pressure scale
40  * @p_scale_dec: pressure scale, decimal places
41  * @p_offset: pressure offset
42  * @p_offset_dec: pressure offset, decimal places
43  * @buffer: raw conversion data
44  */
45 struct hsc_data {
46 	struct device *dev;
47 	const struct hsc_chip_data *chip;
48 	hsc_recv_fn recv_cb;
49 	bool is_valid;
50 	s32 pmin;
51 	s32 pmax;
52 	u32 outmin;
53 	u32 outmax;
54 	u32 function;
55 	s64 p_scale;
56 	s32 p_scale_dec;
57 	s64 p_offset;
58 	s32 p_offset_dec;
59 	struct {
60 		__be16 chan[2];
61 		s64 timestamp __aligned(8);
62 	} scan;
63 	u8 buffer[HSC_REG_MEASUREMENT_RD_SIZE] __aligned(IIO_DMA_MINALIGN);
64 };
65 
66 struct hsc_chip_data {
67 	bool (*valid)(struct hsc_data *data);
68 	const struct iio_chan_spec *channels;
69 	u8 num_channels;
70 };
71 
72 enum hsc_func_id {
73 	HSC_FUNCTION_A,
74 	HSC_FUNCTION_B,
75 	HSC_FUNCTION_C,
76 	HSC_FUNCTION_F,
77 };
78 
79 int hsc_common_probe(struct device *dev, hsc_recv_fn recv);
80 
81 #endif
82