ms5611.h (1435B)
1/* SPDX-License-Identifier: GPL-2.0 */ 2/* 3 * MS5611 pressure and temperature sensor driver 4 * 5 * Copyright (c) Tomasz Duszynski <tduszyns@gmail.com> 6 * 7 */ 8 9#ifndef _MS5611_H 10#define _MS5611_H 11 12#include <linux/device.h> 13#include <linux/iio/iio.h> 14#include <linux/mutex.h> 15 16struct regulator; 17 18#define MS5611_RESET 0x1e 19#define MS5611_READ_ADC 0x00 20#define MS5611_READ_PROM_WORD 0xA0 21#define MS5611_PROM_WORDS_NB 8 22 23enum { 24 MS5611, 25 MS5607, 26}; 27 28struct ms5611_chip_info { 29 u16 prom[MS5611_PROM_WORDS_NB]; 30 31 int (*temp_and_pressure_compensate)(struct ms5611_chip_info *chip_info, 32 s32 *temp, s32 *pressure); 33}; 34 35/* 36 * OverSampling Rate descriptor. 37 * Warning: cmd MUST be kept aligned on a word boundary (see 38 * m5611_spi_read_adc_temp_and_pressure in ms5611_spi.c). 39 */ 40struct ms5611_osr { 41 unsigned long conv_usec; 42 u8 cmd; 43 unsigned short rate; 44}; 45 46struct ms5611_state { 47 void *client; 48 struct mutex lock; 49 50 const struct ms5611_osr *pressure_osr; 51 const struct ms5611_osr *temp_osr; 52 53 int (*reset)(struct ms5611_state *st); 54 int (*read_prom_word)(struct ms5611_state *st, int index, u16 *word); 55 int (*read_adc_temp_and_pressure)(struct ms5611_state *st, 56 s32 *temp, s32 *pressure); 57 58 struct ms5611_chip_info *chip_info; 59 struct regulator *vdd; 60}; 61 62int ms5611_probe(struct iio_dev *indio_dev, struct device *dev, 63 const char *name, int type); 64void ms5611_remove(struct iio_dev *indio_dev); 65 66#endif /* _MS5611_H */