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 */ 70