forked from Minki/linux
b7079eeac5
Add system sleep power management support to hts221 driver Signed-off-by: Lorenzo Bianconi <lorenzo.bianconi@st.com> Signed-off-by: Jonathan Cameron <jic23@kernel.org>
77 lines
1.5 KiB
C
77 lines
1.5 KiB
C
/*
|
|
* STMicroelectronics hts221 sensor driver
|
|
*
|
|
* Copyright 2016 STMicroelectronics Inc.
|
|
*
|
|
* Lorenzo Bianconi <lorenzo.bianconi@st.com>
|
|
*
|
|
* Licensed under the GPL-2.
|
|
*/
|
|
|
|
#ifndef HTS221_H
|
|
#define HTS221_H
|
|
|
|
#define HTS221_DEV_NAME "hts221"
|
|
|
|
#include <linux/iio/iio.h>
|
|
|
|
#define HTS221_RX_MAX_LENGTH 8
|
|
#define HTS221_TX_MAX_LENGTH 8
|
|
|
|
#define HTS221_DATA_SIZE 2
|
|
|
|
struct hts221_transfer_buffer {
|
|
u8 rx_buf[HTS221_RX_MAX_LENGTH];
|
|
u8 tx_buf[HTS221_TX_MAX_LENGTH] ____cacheline_aligned;
|
|
};
|
|
|
|
struct hts221_transfer_function {
|
|
int (*read)(struct device *dev, u8 addr, int len, u8 *data);
|
|
int (*write)(struct device *dev, u8 addr, int len, u8 *data);
|
|
};
|
|
|
|
#define HTS221_AVG_DEPTH 8
|
|
struct hts221_avg_avl {
|
|
u16 avg;
|
|
u8 val;
|
|
};
|
|
|
|
enum hts221_sensor_type {
|
|
HTS221_SENSOR_H,
|
|
HTS221_SENSOR_T,
|
|
HTS221_SENSOR_MAX,
|
|
};
|
|
|
|
struct hts221_sensor {
|
|
u8 cur_avg_idx;
|
|
int slope, b_gen;
|
|
};
|
|
|
|
struct hts221_hw {
|
|
const char *name;
|
|
struct device *dev;
|
|
|
|
struct mutex lock;
|
|
struct iio_trigger *trig;
|
|
int irq;
|
|
|
|
struct hts221_sensor sensors[HTS221_SENSOR_MAX];
|
|
|
|
bool enabled;
|
|
u8 odr;
|
|
|
|
const struct hts221_transfer_function *tf;
|
|
struct hts221_transfer_buffer tb;
|
|
};
|
|
|
|
extern const struct dev_pm_ops hts221_pm_ops;
|
|
|
|
int hts221_config_drdy(struct hts221_hw *hw, bool enable);
|
|
int hts221_probe(struct iio_dev *iio_dev);
|
|
int hts221_power_on(struct hts221_hw *hw);
|
|
int hts221_power_off(struct hts221_hw *hw);
|
|
int hts221_allocate_buffers(struct hts221_hw *hw);
|
|
int hts221_allocate_trigger(struct hts221_hw *hw);
|
|
|
|
#endif /* HTS221_H */
|