xref: /linux/drivers/iio/pressure/abp2030pa.h (revision c17ee635fd3a482b2ad2bf5e269755c2eae5f25e)
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  * Honeywell ABP2 series pressure sensor driver
4  *
5  * Copyright (c) 2025 Petre Rodan <petre.rodan@subdimension.ro>
6  */
7 
8 #ifndef _ABP2030PA_H
9 #define _ABP2030PA_H
10 
11 #include <linux/completion.h>
12 #include <linux/types.h>
13 
14 #include <linux/iio/iio.h>
15 
16 #define ABP2_MEASUREMENT_RD_SIZE 7
17 
18 struct device;
19 
20 struct abp2_data;
21 struct abp2_ops;
22 
23 enum abp2_func_id {
24 	ABP2_FUNCTION_A,
25 };
26 
27 /**
28  * struct abp2_data
29  * @dev: current device structure
30  * @ops: pointers for bus specific read and write functions
31  * @pmin: minimal pressure in pascal
32  * @pmax: maximal pressure in pascal
33  * @outmin: minimum raw pressure in counts (based on transfer function)
34  * @outmax: maximum raw pressure in counts (based on transfer function)
35  * @function: transfer function
36  * @p_scale: pressure scale
37  * @p_scale_dec: pressure scale, decimal number
38  * @p_offset: pressure offset
39  * @irq: end of conversion - applies only to the i2c sensor
40  * @completion: handshake from irq to read
41  * @scan: channel values for buffered mode
42  * @tx_buf: transmit buffer used during the SPI communication
43  * @rx_buf: raw data provided by sensor
44  */
45 struct abp2_data {
46 	struct device *dev;
47 	const struct abp2_ops *ops;
48 	s32 pmin;
49 	s32 pmax;
50 	u32 outmin;
51 	u32 outmax;
52 	enum abp2_func_id function;
53 	int p_scale;
54 	int p_scale_dec;
55 	int p_offset;
56 	int irq;
57 	struct completion completion;
58 	struct {
59 		u32 chan[2];
60 		aligned_s64 timestamp;
61 	} scan;
62 	u8 rx_buf[ABP2_MEASUREMENT_RD_SIZE] __aligned(IIO_DMA_MINALIGN);
63 	u8 tx_buf[ABP2_MEASUREMENT_RD_SIZE];
64 };
65 
66 struct abp2_ops {
67 	int (*read)(struct abp2_data *data, u8 cmd, u8 nbytes);
68 	int (*write)(struct abp2_data *data, u8 cmd, u8 nbytes);
69 };
70 
71 int abp2_common_probe(struct device *dev, const struct abp2_ops *ops, int irq);
72 
73 #endif
74