GNU Linux-libre 4.14.290-gnu1
[releases.git] / drivers / iio / humidity / hts221.h
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 enum hts221_sensor_type {
34         HTS221_SENSOR_H,
35         HTS221_SENSOR_T,
36         HTS221_SENSOR_MAX,
37 };
38
39 struct hts221_sensor {
40         u8 cur_avg_idx;
41         int slope, b_gen;
42 };
43
44 struct hts221_hw {
45         const char *name;
46         struct device *dev;
47
48         struct mutex lock;
49         struct iio_trigger *trig;
50         int irq;
51
52         struct hts221_sensor sensors[HTS221_SENSOR_MAX];
53
54         bool enabled;
55         u8 odr;
56
57         const struct hts221_transfer_function *tf;
58         struct hts221_transfer_buffer tb;
59 };
60
61 extern const struct dev_pm_ops hts221_pm_ops;
62
63 int hts221_write_with_mask(struct hts221_hw *hw, u8 addr, u8 mask, u8 val);
64 int hts221_probe(struct iio_dev *iio_dev);
65 int hts221_set_enable(struct hts221_hw *hw, bool enable);
66 int hts221_allocate_buffers(struct hts221_hw *hw);
67 int hts221_allocate_trigger(struct hts221_hw *hw);
68
69 #endif /* HTS221_H */