xref: /openbmc/linux/drivers/iio/humidity/hts221.h (revision 4f6cce39)
1 /*
2  * STMicroelectronics hts221 sensor driver
3  *
4  * Copyright 2016 STMicroelectronics Inc.
5  *
6  * Lorenzo Bianconi <lorenzo.bianconi@st.com>
7  *
8  * Licensed under the GPL-2.
9  */
10 
11 #ifndef HTS221_H
12 #define HTS221_H
13 
14 #define HTS221_DEV_NAME		"hts221"
15 
16 #include <linux/iio/iio.h>
17 
18 #define HTS221_RX_MAX_LENGTH	8
19 #define HTS221_TX_MAX_LENGTH	8
20 
21 #define HTS221_DATA_SIZE	2
22 
23 struct hts221_transfer_buffer {
24 	u8 rx_buf[HTS221_RX_MAX_LENGTH];
25 	u8 tx_buf[HTS221_TX_MAX_LENGTH] ____cacheline_aligned;
26 };
27 
28 struct hts221_transfer_function {
29 	int (*read)(struct device *dev, u8 addr, int len, u8 *data);
30 	int (*write)(struct device *dev, u8 addr, int len, u8 *data);
31 };
32 
33 #define HTS221_AVG_DEPTH	8
34 struct hts221_avg_avl {
35 	u16 avg;
36 	u8 val;
37 };
38 
39 enum hts221_sensor_type {
40 	HTS221_SENSOR_H,
41 	HTS221_SENSOR_T,
42 	HTS221_SENSOR_MAX,
43 };
44 
45 struct hts221_sensor {
46 	u8 cur_avg_idx;
47 	int slope, b_gen;
48 };
49 
50 struct hts221_hw {
51 	const char *name;
52 	struct device *dev;
53 
54 	struct mutex lock;
55 	struct iio_trigger *trig;
56 	int irq;
57 
58 	struct hts221_sensor sensors[HTS221_SENSOR_MAX];
59 
60 	u8 odr;
61 
62 	const struct hts221_transfer_function *tf;
63 	struct hts221_transfer_buffer tb;
64 };
65 
66 int hts221_config_drdy(struct hts221_hw *hw, bool enable);
67 int hts221_probe(struct iio_dev *iio_dev);
68 int hts221_power_on(struct hts221_hw *hw);
69 int hts221_power_off(struct hts221_hw *hw);
70 int hts221_allocate_buffers(struct hts221_hw *hw);
71 int hts221_allocate_trigger(struct hts221_hw *hw);
72 
73 #endif /* HTS221_H */
74