Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e5aab7b0 authored by mario tesi's avatar mario tesi Committed by Jonathan Cameron
Browse files

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: default avatarmario tesi <mario.tesi@st.com>
Acked-by: default avatarDenis Ciocca <denis.ciocca@st.com>
Signed-off-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
parent f6ff49b8
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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:
+2 −0
Original line number Diff line number Diff line
@@ -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
+69 −0
Original line number Diff line number Diff line
@@ -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,
+5 −0
Original line number Diff line number Diff line
@@ -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);
+5 −0
Original line number Diff line number Diff line
@@ -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);