18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * MS5611 pressure and temperature sensor driver 48c2ecf20Sopenharmony_ci * 58c2ecf20Sopenharmony_ci * Copyright (c) Tomasz Duszynski <tduszyns@gmail.com> 68c2ecf20Sopenharmony_ci * 78c2ecf20Sopenharmony_ci */ 88c2ecf20Sopenharmony_ci 98c2ecf20Sopenharmony_ci#ifndef _MS5611_H 108c2ecf20Sopenharmony_ci#define _MS5611_H 118c2ecf20Sopenharmony_ci 128c2ecf20Sopenharmony_ci#include <linux/device.h> 138c2ecf20Sopenharmony_ci#include <linux/iio/iio.h> 148c2ecf20Sopenharmony_ci#include <linux/mutex.h> 158c2ecf20Sopenharmony_ci 168c2ecf20Sopenharmony_cistruct regulator; 178c2ecf20Sopenharmony_ci 188c2ecf20Sopenharmony_ci#define MS5611_RESET 0x1e 198c2ecf20Sopenharmony_ci#define MS5611_READ_ADC 0x00 208c2ecf20Sopenharmony_ci#define MS5611_READ_PROM_WORD 0xA0 218c2ecf20Sopenharmony_ci#define MS5611_PROM_WORDS_NB 8 228c2ecf20Sopenharmony_ci 238c2ecf20Sopenharmony_cienum { 248c2ecf20Sopenharmony_ci MS5611, 258c2ecf20Sopenharmony_ci MS5607, 268c2ecf20Sopenharmony_ci}; 278c2ecf20Sopenharmony_ci 288c2ecf20Sopenharmony_ci/* 298c2ecf20Sopenharmony_ci * OverSampling Rate descriptor. 308c2ecf20Sopenharmony_ci * Warning: cmd MUST be kept aligned on a word boundary (see 318c2ecf20Sopenharmony_ci * m5611_spi_read_adc_temp_and_pressure in ms5611_spi.c). 328c2ecf20Sopenharmony_ci */ 338c2ecf20Sopenharmony_cistruct ms5611_osr { 348c2ecf20Sopenharmony_ci unsigned long conv_usec; 358c2ecf20Sopenharmony_ci u8 cmd; 368c2ecf20Sopenharmony_ci unsigned short rate; 378c2ecf20Sopenharmony_ci}; 388c2ecf20Sopenharmony_ci 398c2ecf20Sopenharmony_cistruct ms5611_state { 408c2ecf20Sopenharmony_ci void *client; 418c2ecf20Sopenharmony_ci struct mutex lock; 428c2ecf20Sopenharmony_ci 438c2ecf20Sopenharmony_ci const struct ms5611_osr *pressure_osr; 448c2ecf20Sopenharmony_ci const struct ms5611_osr *temp_osr; 458c2ecf20Sopenharmony_ci 468c2ecf20Sopenharmony_ci u16 prom[MS5611_PROM_WORDS_NB]; 478c2ecf20Sopenharmony_ci 488c2ecf20Sopenharmony_ci int (*reset)(struct ms5611_state *st); 498c2ecf20Sopenharmony_ci int (*read_prom_word)(struct ms5611_state *st, int index, u16 *word); 508c2ecf20Sopenharmony_ci int (*read_adc_temp_and_pressure)(struct ms5611_state *st, 518c2ecf20Sopenharmony_ci s32 *temp, s32 *pressure); 528c2ecf20Sopenharmony_ci 538c2ecf20Sopenharmony_ci int (*compensate_temp_and_pressure)(struct ms5611_state *st, s32 *temp, 548c2ecf20Sopenharmony_ci s32 *pressure); 558c2ecf20Sopenharmony_ci struct regulator *vdd; 568c2ecf20Sopenharmony_ci}; 578c2ecf20Sopenharmony_ci 588c2ecf20Sopenharmony_ciint ms5611_probe(struct iio_dev *indio_dev, struct device *dev, 598c2ecf20Sopenharmony_ci const char *name, int type); 608c2ecf20Sopenharmony_ciint ms5611_remove(struct iio_dev *indio_dev); 618c2ecf20Sopenharmony_ci 628c2ecf20Sopenharmony_ci#endif /* _MS5611_H */ 63