162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * MS5611 pressure and temperature sensor driver 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * Copyright (c) Tomasz Duszynski <tduszyns@gmail.com> 662306a36Sopenharmony_ci * 762306a36Sopenharmony_ci */ 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci#ifndef _MS5611_H 1062306a36Sopenharmony_ci#define _MS5611_H 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci#include <linux/device.h> 1362306a36Sopenharmony_ci#include <linux/iio/iio.h> 1462306a36Sopenharmony_ci#include <linux/mutex.h> 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_ci#define MS5611_RESET 0x1e 1762306a36Sopenharmony_ci#define MS5611_READ_ADC 0x00 1862306a36Sopenharmony_ci#define MS5611_READ_PROM_WORD 0xA0 1962306a36Sopenharmony_ci#define MS5611_PROM_WORDS_NB 8 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_cienum { 2262306a36Sopenharmony_ci MS5611, 2362306a36Sopenharmony_ci MS5607, 2462306a36Sopenharmony_ci}; 2562306a36Sopenharmony_ci 2662306a36Sopenharmony_ci/* 2762306a36Sopenharmony_ci * OverSampling Rate descriptor. 2862306a36Sopenharmony_ci * Warning: cmd MUST be kept aligned on a word boundary (see 2962306a36Sopenharmony_ci * m5611_spi_read_adc_temp_and_pressure in ms5611_spi.c). 3062306a36Sopenharmony_ci */ 3162306a36Sopenharmony_cistruct ms5611_osr { 3262306a36Sopenharmony_ci unsigned long conv_usec; 3362306a36Sopenharmony_ci u8 cmd; 3462306a36Sopenharmony_ci unsigned short rate; 3562306a36Sopenharmony_ci}; 3662306a36Sopenharmony_ci 3762306a36Sopenharmony_cistruct ms5611_state { 3862306a36Sopenharmony_ci void *client; 3962306a36Sopenharmony_ci struct mutex lock; 4062306a36Sopenharmony_ci 4162306a36Sopenharmony_ci const struct ms5611_osr *pressure_osr; 4262306a36Sopenharmony_ci const struct ms5611_osr *temp_osr; 4362306a36Sopenharmony_ci 4462306a36Sopenharmony_ci u16 prom[MS5611_PROM_WORDS_NB]; 4562306a36Sopenharmony_ci 4662306a36Sopenharmony_ci int (*reset)(struct ms5611_state *st); 4762306a36Sopenharmony_ci int (*read_prom_word)(struct ms5611_state *st, int index, u16 *word); 4862306a36Sopenharmony_ci int (*read_adc_temp_and_pressure)(struct ms5611_state *st, 4962306a36Sopenharmony_ci s32 *temp, s32 *pressure); 5062306a36Sopenharmony_ci 5162306a36Sopenharmony_ci int (*compensate_temp_and_pressure)(struct ms5611_state *st, s32 *temp, 5262306a36Sopenharmony_ci s32 *pressure); 5362306a36Sopenharmony_ci}; 5462306a36Sopenharmony_ci 5562306a36Sopenharmony_ciint ms5611_probe(struct iio_dev *indio_dev, struct device *dev, 5662306a36Sopenharmony_ci const char *name, int type); 5762306a36Sopenharmony_ci 5862306a36Sopenharmony_ci#endif /* _MS5611_H */ 59