forked from Minki/linux
iio:st_pressure:initial lps22hh sensor support
Initial support for ST LPS22HH pressure sensor. Datasheet: http://www2.st.com/resource/en/datasheet/lps22hh.pdf Features: * pressure, temperature data and timestamping channels * sampling frequency selection [1..200] Hz * interrupt based trigger * over I2C or SPI interface Signed-off-by: mario tesi <mario.tesi@st.com> Acked-by: Denis Ciocca <denis.ciocca@st.com> Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
This commit is contained in:
parent
f6ff49b8a3
commit
e5aab7b0d8
@ -165,7 +165,7 @@ config IIO_ST_PRESS
|
||||
select IIO_TRIGGERED_BUFFER if (IIO_BUFFER)
|
||||
help
|
||||
Say yes here to build support for STMicroelectronics pressure
|
||||
sensors: LPS001WP, LPS25H, LPS331AP, LPS22HB.
|
||||
sensors: LPS001WP, LPS25H, LPS331AP, LPS22HB, LPS22HH.
|
||||
|
||||
This driver can also be built as a module. If so, these modules
|
||||
will be created:
|
||||
|
@ -21,6 +21,7 @@ enum st_press_type {
|
||||
LPS22HB,
|
||||
LPS33HW,
|
||||
LPS35HW,
|
||||
LPS22HH,
|
||||
ST_PRESS_MAX,
|
||||
};
|
||||
|
||||
@ -30,6 +31,7 @@ enum st_press_type {
|
||||
#define LPS22HB_PRESS_DEV_NAME "lps22hb"
|
||||
#define LPS33HW_PRESS_DEV_NAME "lps33hw"
|
||||
#define LPS35HW_PRESS_DEV_NAME "lps35hw"
|
||||
#define LPS22HH_PRESS_DEV_NAME "lps22hh"
|
||||
|
||||
/**
|
||||
* struct st_sensors_platform_data - default press platform data
|
||||
|
@ -492,6 +492,75 @@ static const struct st_sensor_settings st_press_sensors_settings[] = {
|
||||
.multi_read_bit = false,
|
||||
.bootime = 2,
|
||||
},
|
||||
{
|
||||
/*
|
||||
* CUSTOM VALUES FOR LPS22HH SENSOR
|
||||
* See LPS22HH datasheet:
|
||||
* http://www2.st.com/resource/en/datasheet/lps22hh.pdf
|
||||
*/
|
||||
.wai = 0xb3,
|
||||
.wai_addr = ST_SENSORS_DEFAULT_WAI_ADDRESS,
|
||||
.sensors_supported = {
|
||||
[0] = LPS22HH_PRESS_DEV_NAME,
|
||||
},
|
||||
.ch = (struct iio_chan_spec *)st_press_lps22hb_channels,
|
||||
.num_ch = ARRAY_SIZE(st_press_lps22hb_channels),
|
||||
.odr = {
|
||||
.addr = 0x10,
|
||||
.mask = 0x70,
|
||||
.odr_avl = {
|
||||
{ .hz = 1, .value = 0x01 },
|
||||
{ .hz = 10, .value = 0x02 },
|
||||
{ .hz = 25, .value = 0x03 },
|
||||
{ .hz = 50, .value = 0x04 },
|
||||
{ .hz = 75, .value = 0x05 },
|
||||
{ .hz = 100, .value = 0x06 },
|
||||
{ .hz = 200, .value = 0x07 },
|
||||
},
|
||||
},
|
||||
.pw = {
|
||||
.addr = 0x10,
|
||||
.mask = 0x70,
|
||||
.value_off = ST_SENSORS_DEFAULT_POWER_OFF_VALUE,
|
||||
},
|
||||
.fs = {
|
||||
.fs_avl = {
|
||||
/*
|
||||
* Pressure and temperature sensitivity values
|
||||
* as defined in table 3 of LPS22HH datasheet.
|
||||
*/
|
||||
[0] = {
|
||||
.num = ST_PRESS_FS_AVL_1260MB,
|
||||
.gain = ST_PRESS_KPASCAL_NANO_SCALE,
|
||||
.gain2 = ST_PRESS_LPS22HB_LSB_PER_CELSIUS,
|
||||
},
|
||||
},
|
||||
},
|
||||
.bdu = {
|
||||
.addr = 0x10,
|
||||
.mask = BIT(1),
|
||||
},
|
||||
.drdy_irq = {
|
||||
.int1 = {
|
||||
.addr = 0x12,
|
||||
.mask = BIT(2),
|
||||
.addr_od = 0x11,
|
||||
.mask_od = BIT(5),
|
||||
},
|
||||
.addr_ihl = 0x11,
|
||||
.mask_ihl = BIT(6),
|
||||
.stat_drdy = {
|
||||
.addr = ST_SENSORS_DEFAULT_STAT_ADDR,
|
||||
.mask = 0x03,
|
||||
},
|
||||
},
|
||||
.sim = {
|
||||
.addr = 0x10,
|
||||
.value = BIT(0),
|
||||
},
|
||||
.multi_read_bit = false,
|
||||
.bootime = 2,
|
||||
},
|
||||
};
|
||||
|
||||
static int st_press_write_raw(struct iio_dev *indio_dev,
|
||||
|
@ -45,6 +45,10 @@ static const struct of_device_id st_press_of_match[] = {
|
||||
.compatible = "st,lps35hw",
|
||||
.data = LPS35HW_PRESS_DEV_NAME,
|
||||
},
|
||||
{
|
||||
.compatible = "st,lps22hh",
|
||||
.data = LPS22HH_PRESS_DEV_NAME,
|
||||
},
|
||||
{},
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, st_press_of_match);
|
||||
@ -69,6 +73,7 @@ static const struct i2c_device_id st_press_id_table[] = {
|
||||
{ LPS22HB_PRESS_DEV_NAME, LPS22HB },
|
||||
{ LPS33HW_PRESS_DEV_NAME, LPS33HW },
|
||||
{ LPS35HW_PRESS_DEV_NAME, LPS35HW },
|
||||
{ LPS22HH_PRESS_DEV_NAME, LPS22HH },
|
||||
{},
|
||||
};
|
||||
MODULE_DEVICE_TABLE(i2c, st_press_id_table);
|
||||
|
@ -49,6 +49,10 @@ static const struct of_device_id st_press_of_match[] = {
|
||||
.compatible = "st,lps35hw",
|
||||
.data = LPS35HW_PRESS_DEV_NAME,
|
||||
},
|
||||
{
|
||||
.compatible = "st,lps22hh",
|
||||
.data = LPS22HH_PRESS_DEV_NAME,
|
||||
},
|
||||
{},
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, st_press_of_match);
|
||||
@ -93,6 +97,7 @@ static const struct spi_device_id st_press_id_table[] = {
|
||||
{ LPS22HB_PRESS_DEV_NAME },
|
||||
{ LPS33HW_PRESS_DEV_NAME },
|
||||
{ LPS35HW_PRESS_DEV_NAME },
|
||||
{ LPS22HH_PRESS_DEV_NAME },
|
||||
{},
|
||||
};
|
||||
MODULE_DEVICE_TABLE(spi, st_press_id_table);
|
||||
|
Loading…
Reference in New Issue
Block a user