2015-03-14 23:29:31 +03:00
/*
* MS5611 pressure and temperature sensor driver
*
* Copyright ( c ) Tomasz Duszynski < tduszyns @ gmail . com >
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation .
*
*/
# ifndef _MS5611_H
# define _MS5611_H
# include <linux/device.h>
# include <linux/iio/iio.h>
# include <linux/mutex.h>
2016-03-17 14:55:03 +03:00
struct regulator ;
2015-03-14 23:29:31 +03: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 21:45:48 +03: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 13:31:38 +03: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 23:29:31 +03:00
struct ms5611_state {
void * client ;
struct mutex lock ;
2016-03-01 13:31:38 +03:00
const struct ms5611_osr * pressure_osr ;
const struct ms5611_osr * temp_osr ;
2015-03-14 23:29:31 +03: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 21:45:48 +03:00
struct ms5611_chip_info * chip_info ;
2016-03-17 14:55:03 +03:00
struct regulator * vdd ;
2015-03-14 23:29:31 +03:00
} ;
2016-02-17 20:52:50 +03:00
int ms5611_probe ( struct iio_dev * indio_dev , struct device * dev ,
2018-02-16 22:44:41 +03:00
const char * name , int type ) ;
2016-02-03 19:50:38 +03:00
int ms5611_remove ( struct iio_dev * indio_dev ) ;
2015-03-14 23:29:31 +03:00
# endif /* _MS5611_H */