/* SPDX-License-Identifier: GPL-2.0 */
/*
* MPRLS0025PA - Honeywell MicroPressure pressure sensor series driver
*
* Copyright ( c ) Andreas Klinger < ak @ it - klinger . de >
*
* Data sheet :
* https : //prod-edam.honeywell.com/content/dam/honeywell-edam/sps/siot/en-us/products/sensors/pressure-sensors/board-mount-pressure-sensors/micropressure-mpr-series/documents/sps-siot-mpr-series-datasheet-32332628-ciid-172626.pdf
*/
#ifndef _MPRLS0025PA_H
#define _MPRLS0025PA_H
#include <linux/completion.h>
#include <linux/delay.h>
#include <linux/device.h>
#include <linux/mutex.h>
#include <linux/stddef.h>
#include <linux/types.h>
#include <linux/iio/iio.h>
#define MPR_MEASUREMENT_RD_SIZE 4
#define MPR_CMD_NOP 0 xf0
#define MPR_CMD_SYNC 0 xaa
#define MPR_PKT_NOP_LEN MPR_MEASUREMENT_RD_SIZE
#define MPR_PKT_SYNC_LEN 3
struct device;
struct iio_chan_spec;
struct iio_dev;
struct mpr_data;
struct mpr_ops;
enum mpr_func_id {
MPR_FUNCTION_A,
MPR_FUNCTION_B,
MPR_FUNCTION_C,
};
/**
* struct mpr_data
* @ dev : current device structure
* @ ops : functions that implement the sensor reads / writes , bus init
* @ lock : access to device during read
* @ pmin : minimal pressure in pascal
* @ pmax : maximal pressure in pascal
* @ function : transfer function
* @ outmin : minimum raw pressure in counts ( based on transfer function )
* @ outmax : maximum raw pressure in counts ( based on transfer function )
* @ scale : pressure scale
* @ scale2 : pressure scale , decimal number
* @ offset : pressure offset
* @ offset2 : pressure offset , decimal number
* @ gpiod_reset : reset
* @ irq : end of conversion irq . used to distinguish between irq mode and
* reading in a loop until data is ready
* @ completion : handshake from irq to read
* @ chan : channel values for buffered mode
* @ chan . pres : pressure value
* @ chan . ts : timestamp
* @ buffer : raw conversion data
*/
struct mpr_data {
struct device *dev;
const struct mpr_ops *ops;
struct mutex lock;
u32 pmin;
u32 pmax;
enum mpr_func_id function;
u32 outmin;
u32 outmax;
int scale;
int scale2;
int offset;
int offset2;
struct gpio_desc *gpiod_reset;
int irq;
struct completion completion;
struct {
s32 pres;
aligned_s64 ts;
} chan;
u8 buffer[MPR_MEASUREMENT_RD_SIZE] __aligned(IIO_DMA_MINALIGN);
};
struct mpr_ops {
int (*init)(struct device *dev);
int (*read)(struct mpr_data *data, const u8 cmd, const u8 cnt);
int (*write)(struct mpr_data *data, const u8 cmd, const u8 cnt);
};
int mpr_common_probe(struct device *dev, const struct mpr_ops *ops, int irq);
#endif
Messung V0.5 in Prozent C=97 H=94 G=95
¤ Dauer der Verarbeitung: 0.27 Sekunden
(vorverarbeitet am 2026-10-11)
¤
*© Formatika GbR, Deutschland