Commit 92ba0ab9 authored by Martyn Welch's avatar Martyn Welch Committed by Jonathan Cameron

iio: pressure: st_pressure: Add support for LPS22DF

Add support for ST LPS22DF pressure sensor.

Datasheet: https://www.st.com/resource/en/datasheet/lps22df.pdfSigned-off-by: default avatarMartyn Welch <martyn.welch@collabora.co.uk>
Link: https://lore.kernel.org/r/20220909161611.780720-2-martyn.welch@collabora.co.ukSigned-off-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
parent b4027837
...@@ -22,6 +22,7 @@ enum st_press_type { ...@@ -22,6 +22,7 @@ enum st_press_type {
LPS33HW, LPS33HW,
LPS35HW, LPS35HW,
LPS22HH, LPS22HH,
LPS22DF,
ST_PRESS_MAX, ST_PRESS_MAX,
}; };
...@@ -32,6 +33,7 @@ enum st_press_type { ...@@ -32,6 +33,7 @@ enum st_press_type {
#define LPS33HW_PRESS_DEV_NAME "lps33hw" #define LPS33HW_PRESS_DEV_NAME "lps33hw"
#define LPS35HW_PRESS_DEV_NAME "lps35hw" #define LPS35HW_PRESS_DEV_NAME "lps35hw"
#define LPS22HH_PRESS_DEV_NAME "lps22hh" #define LPS22HH_PRESS_DEV_NAME "lps22hh"
#define LPS22DF_PRESS_DEV_NAME "lps22df"
/** /**
* struct st_sensors_platform_data - default press platform data * struct st_sensors_platform_data - default press platform data
......
...@@ -552,6 +552,76 @@ static const struct st_sensor_settings st_press_sensors_settings[] = { ...@@ -552,6 +552,76 @@ static const struct st_sensor_settings st_press_sensors_settings[] = {
.multi_read_bit = false, .multi_read_bit = false,
.bootime = 2, .bootime = 2,
}, },
{
/*
* CUSTOM VALUES FOR LPS22DF SENSOR
* See LPS22DF datasheet:
* http://www.st.com/resource/en/datasheet/lps22df.pdf
*/
.wai = 0xb4,
.wai_addr = ST_SENSORS_DEFAULT_WAI_ADDRESS,
.sensors_supported = {
[0] = LPS22DF_PRESS_DEV_NAME,
},
.ch = (struct iio_chan_spec *)st_press_lps22hb_channels,
.num_ch = ARRAY_SIZE(st_press_lps22hb_channels),
.odr = {
.addr = 0x10,
.mask = 0x78,
.odr_avl = {
{ .hz = 1, .value = 0x01 },
{ .hz = 4, .value = 0x02 },
{ .hz = 10, .value = 0x03 },
{ .hz = 25, .value = 0x04 },
{ .hz = 50, .value = 0x05 },
{ .hz = 75, .value = 0x06 },
{ .hz = 100, .value = 0x07 },
{ .hz = 200, .value = 0x08 },
},
},
.pw = {
.addr = 0x10,
.mask = 0x78,
.value_off = ST_SENSORS_DEFAULT_POWER_OFF_VALUE,
},
.fs = {
.fs_avl = {
/*
* Pressure and temperature sensitivity values
* as defined in table 2 of LPS22DF datasheet.
*/
[0] = {
.num = ST_PRESS_FS_AVL_1260MB,
.gain = ST_PRESS_KPASCAL_NANO_SCALE,
.gain2 = ST_PRESS_LPS22HB_LSB_PER_CELSIUS,
},
},
},
.bdu = {
.addr = 0x11,
.mask = BIT(3),
},
.drdy_irq = {
.int1 = {
.addr = 0x13,
.mask = BIT(5),
.addr_od = 0x12,
.mask_od = BIT(1),
},
.addr_ihl = 0x12,
.mask_ihl = BIT(3),
.stat_drdy = {
.addr = ST_SENSORS_DEFAULT_STAT_ADDR,
.mask = 0x03,
},
},
.sim = {
.addr = 0x0E,
.value = BIT(5),
},
.multi_read_bit = false,
.bootime = 2,
},
}; };
static int st_press_write_raw(struct iio_dev *indio_dev, static int st_press_write_raw(struct iio_dev *indio_dev,
......
...@@ -47,6 +47,10 @@ static const struct of_device_id st_press_of_match[] = { ...@@ -47,6 +47,10 @@ static const struct of_device_id st_press_of_match[] = {
.compatible = "st,lps22hh", .compatible = "st,lps22hh",
.data = LPS22HH_PRESS_DEV_NAME, .data = LPS22HH_PRESS_DEV_NAME,
}, },
{
.compatible = "st,lps22df",
.data = LPS22DF_PRESS_DEV_NAME,
},
{}, {},
}; };
MODULE_DEVICE_TABLE(of, st_press_of_match); MODULE_DEVICE_TABLE(of, st_press_of_match);
...@@ -67,6 +71,7 @@ static const struct i2c_device_id st_press_id_table[] = { ...@@ -67,6 +71,7 @@ static const struct i2c_device_id st_press_id_table[] = {
{ LPS33HW_PRESS_DEV_NAME, LPS33HW }, { LPS33HW_PRESS_DEV_NAME, LPS33HW },
{ LPS35HW_PRESS_DEV_NAME, LPS35HW }, { LPS35HW_PRESS_DEV_NAME, LPS35HW },
{ LPS22HH_PRESS_DEV_NAME, LPS22HH }, { LPS22HH_PRESS_DEV_NAME, LPS22HH },
{ LPS22DF_PRESS_DEV_NAME, LPS22DF },
{}, {},
}; };
MODULE_DEVICE_TABLE(i2c, st_press_id_table); MODULE_DEVICE_TABLE(i2c, st_press_id_table);
......
...@@ -51,6 +51,10 @@ static const struct of_device_id st_press_of_match[] = { ...@@ -51,6 +51,10 @@ static const struct of_device_id st_press_of_match[] = {
.compatible = "st,lps22hh", .compatible = "st,lps22hh",
.data = LPS22HH_PRESS_DEV_NAME, .data = LPS22HH_PRESS_DEV_NAME,
}, },
{
.compatible = "st,lps22df",
.data = LPS22DF_PRESS_DEV_NAME,
},
{}, {},
}; };
MODULE_DEVICE_TABLE(of, st_press_of_match); MODULE_DEVICE_TABLE(of, st_press_of_match);
...@@ -97,6 +101,7 @@ static const struct spi_device_id st_press_id_table[] = { ...@@ -97,6 +101,7 @@ static const struct spi_device_id st_press_id_table[] = {
{ LPS33HW_PRESS_DEV_NAME }, { LPS33HW_PRESS_DEV_NAME },
{ LPS35HW_PRESS_DEV_NAME }, { LPS35HW_PRESS_DEV_NAME },
{ LPS22HH_PRESS_DEV_NAME }, { LPS22HH_PRESS_DEV_NAME },
{ LPS22DF_PRESS_DEV_NAME },
{ "lps001wp-press" }, { "lps001wp-press" },
{ "lps25h-press", }, { "lps25h-press", },
{ "lps331ap-press" }, { "lps331ap-press" },
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment