162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * STMicroelectronics hts221 sensor driver 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Copyright 2016 STMicroelectronics Inc. 662306a36Sopenharmony_ci * 762306a36Sopenharmony_ci * Lorenzo Bianconi <lorenzo.bianconi@st.com> 862306a36Sopenharmony_ci */ 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ci#ifndef HTS221_H 1162306a36Sopenharmony_ci#define HTS221_H 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ci#define HTS221_DEV_NAME "hts221" 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_ci#include <linux/iio/iio.h> 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_cienum hts221_sensor_type { 1862306a36Sopenharmony_ci HTS221_SENSOR_H, 1962306a36Sopenharmony_ci HTS221_SENSOR_T, 2062306a36Sopenharmony_ci HTS221_SENSOR_MAX, 2162306a36Sopenharmony_ci}; 2262306a36Sopenharmony_ci 2362306a36Sopenharmony_cistruct hts221_sensor { 2462306a36Sopenharmony_ci u8 cur_avg_idx; 2562306a36Sopenharmony_ci int slope, b_gen; 2662306a36Sopenharmony_ci}; 2762306a36Sopenharmony_ci 2862306a36Sopenharmony_cistruct hts221_hw { 2962306a36Sopenharmony_ci const char *name; 3062306a36Sopenharmony_ci struct device *dev; 3162306a36Sopenharmony_ci struct regmap *regmap; 3262306a36Sopenharmony_ci 3362306a36Sopenharmony_ci struct iio_trigger *trig; 3462306a36Sopenharmony_ci int irq; 3562306a36Sopenharmony_ci 3662306a36Sopenharmony_ci struct hts221_sensor sensors[HTS221_SENSOR_MAX]; 3762306a36Sopenharmony_ci 3862306a36Sopenharmony_ci bool enabled; 3962306a36Sopenharmony_ci u8 odr; 4062306a36Sopenharmony_ci /* Ensure natural alignment of timestamp */ 4162306a36Sopenharmony_ci struct { 4262306a36Sopenharmony_ci __le16 channels[2]; 4362306a36Sopenharmony_ci s64 ts __aligned(8); 4462306a36Sopenharmony_ci } scan; 4562306a36Sopenharmony_ci}; 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_ciextern const struct dev_pm_ops hts221_pm_ops; 4862306a36Sopenharmony_ci 4962306a36Sopenharmony_ciint hts221_probe(struct device *dev, int irq, const char *name, 5062306a36Sopenharmony_ci struct regmap *regmap); 5162306a36Sopenharmony_ciint hts221_set_enable(struct hts221_hw *hw, bool enable); 5262306a36Sopenharmony_ciint hts221_allocate_buffers(struct iio_dev *iio_dev); 5362306a36Sopenharmony_ciint hts221_allocate_trigger(struct iio_dev *iio_dev); 5462306a36Sopenharmony_ci 5562306a36Sopenharmony_ci#endif /* HTS221_H */ 56