2018-09-01 21:52:14 +02:00
/* SPDX-License-Identifier: GPL-2.0 */
2015-03-14 21:29:31 +01:00
/*
* MS5611 pressure and temperature sensor driver
*
* Copyright ( c ) Tomasz Duszynski < tduszyns @ gmail . com >
*
*/
# ifndef _MS5611_H
# define _MS5611_H
# include <linux/device.h>
# include <linux/iio/iio.h>
# include <linux/mutex.h>
2016-03-17 12:55:03 +01:00
struct regulator ;
2015-03-14 21:29:31 +01:00
# define MS5611_RESET 0x1e
# define MS5611_READ_ADC 0x00
# define MS5611_READ_PROM_WORD 0xA0
# define MS5611_PROM_WORDS_NB 8
2015-06-23 20:45:48 +02:00
enum {
MS5611 ,
MS5607 ,
} ;
struct ms5611_chip_info {
u16 prom [ MS5611_PROM_WORDS_NB ] ;
int ( * temp_and_pressure_compensate ) ( struct ms5611_chip_info * chip_info ,
s32 * temp , s32 * pressure ) ;
} ;
2016-03-01 11:31:38 +01:00
/*
* OverSampling Rate descriptor .
* Warning : cmd MUST be kept aligned on a word boundary ( see
* m5611_spi_read_adc_temp_and_pressure in ms5611_spi . c ) .
*/
struct ms5611_osr {
unsigned long conv_usec ;
u8 cmd ;
unsigned short rate ;
} ;
2015-03-14 21:29:31 +01:00
struct ms5611_state {
void * client ;
struct mutex lock ;
2016-03-01 11:31:38 +01:00
const struct ms5611_osr * pressure_osr ;
const struct ms5611_osr * temp_osr ;
2015-03-14 21:29:31 +01:00
int ( * reset ) ( struct device * dev ) ;
int ( * read_prom_word ) ( struct device * dev , int index , u16 * word ) ;
int ( * read_adc_temp_and_pressure ) ( struct device * dev ,
s32 * temp , s32 * pressure ) ;
2015-06-23 20:45:48 +02:00
struct ms5611_chip_info * chip_info ;
2016-03-17 12:55:03 +01:00
struct regulator * vdd ;
2015-03-14 21:29:31 +01:00
} ;
2016-02-17 18:52:50 +01:00
int ms5611_probe ( struct iio_dev * indio_dev , struct device * dev ,
2018-02-16 17:44:41 -02:00
const char * name , int type ) ;
2016-02-03 18:50:38 +02:00
int ms5611_remove ( struct iio_dev * indio_dev ) ;
2015-03-14 21:29:31 +01:00
# endif /* _MS5611_H */