On 01/05/16 20:28, Jonathan Cameron wrote: > On 24/04/16 10:29, Jonathan Cameron wrote: >> On 19/04/16 10:18, Gregor Boirie wrote: >>> Initial support for ST LPS22HB pressure sensor. Datasheet: >>> http://www2.st.com/resource/en/datasheet/lps22hb.pdf >>> >>> Features: >>> * pressure data and timestamping channels >>> * sampling frequency selection >>> * interrupt based trigger >>> * over I2C or SPI >>> >>> Signed-off-by: Gregor Boirie <gregor.boirie@xxxxxxxxxx> >> Looks good to me. I would however like an Ack from Denis if possible >> as this is his driver. Same is true for this whole series. > Denis, are you likely to get a chance to look at this series? > > No immediate rush if you are busy right now as we've almost certainly > missed the merge window anyway and there are open questions on approach > taken in patch 4. Denis is rather swamped at the moment and not sure when he'll get a chance to catch up so in the meantime I'm going to take the less controversial patches without the usual Ack. Applied to the togreg branch of iio.git - initially pushed out as testing for the autobuilders to play with it. Thanks, Jonathan > > Jonathan >> >> Jonathan >>> --- >>> .../devicetree/bindings/iio/st-sensors.txt | 1 + >>> drivers/iio/pressure/Kconfig | 2 +- >>> drivers/iio/pressure/st_pressure.h | 1 + >>> drivers/iio/pressure/st_pressure_core.c | 93 +++++++++++++++++++++- >>> drivers/iio/pressure/st_pressure_i2c.c | 4 + >>> drivers/iio/pressure/st_pressure_spi.c | 1 + >>> 6 files changed, 97 insertions(+), 5 deletions(-) >>> >>> diff --git a/Documentation/devicetree/bindings/iio/st-sensors.txt b/Documentation/devicetree/bindings/iio/st-sensors.txt >>> index 637e283..2bb8931 100644 >>> --- a/Documentation/devicetree/bindings/iio/st-sensors.txt >>> +++ b/Documentation/devicetree/bindings/iio/st-sensors.txt >>> @@ -63,3 +63,4 @@ Pressure sensors: >>> - st,lps001wp-press >>> - st,lps25h-press >>> - st,lps331ap-press >>> +- st,lps22hb-press >>> diff --git a/drivers/iio/pressure/Kconfig b/drivers/iio/pressure/Kconfig >>> index 8de0192..d63d280 100644 >>> --- a/drivers/iio/pressure/Kconfig >>> +++ b/drivers/iio/pressure/Kconfig >>> @@ -118,7 +118,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. >>> + sensors: LPS001WP, LPS25H, LPS331AP, LPS22HB. >>> >>> This driver can also be built as a module. If so, these modules >>> will be created: >>> diff --git a/drivers/iio/pressure/st_pressure.h b/drivers/iio/pressure/st_pressure.h >>> index f5f4149..903a21e 100644 >>> --- a/drivers/iio/pressure/st_pressure.h >>> +++ b/drivers/iio/pressure/st_pressure.h >>> @@ -17,6 +17,7 @@ >>> #define LPS001WP_PRESS_DEV_NAME "lps001wp" >>> #define LPS25H_PRESS_DEV_NAME "lps25h" >>> #define LPS331AP_PRESS_DEV_NAME "lps331ap" >>> +#define LPS22HB_PRESS_DEV_NAME "lps22hb" >>> >>> /** >>> * struct st_sensors_platform_data - default press platform data >>> diff --git a/drivers/iio/pressure/st_pressure_core.c b/drivers/iio/pressure/st_pressure_core.c >>> index 9e9b72a..c0ff3bf 100644 >>> --- a/drivers/iio/pressure/st_pressure_core.c >>> +++ b/drivers/iio/pressure/st_pressure_core.c >>> @@ -113,6 +113,26 @@ >>> #define ST_PRESS_LPS25H_OUT_XL_ADDR 0x28 >>> #define ST_TEMP_LPS25H_OUT_L_ADDR 0x2b >>> >>> +/* CUSTOM VALUES FOR LPS22HB SENSOR */ >>> +#define ST_PRESS_LPS22HB_WAI_EXP 0xb1 >>> +#define ST_PRESS_LPS22HB_ODR_ADDR 0x10 >>> +#define ST_PRESS_LPS22HB_ODR_MASK 0x70 >>> +#define ST_PRESS_LPS22HB_ODR_AVL_1HZ_VAL 0x01 >>> +#define ST_PRESS_LPS22HB_ODR_AVL_10HZ_VAL 0x02 >>> +#define ST_PRESS_LPS22HB_ODR_AVL_25HZ_VAL 0x03 >>> +#define ST_PRESS_LPS22HB_ODR_AVL_50HZ_VAL 0x04 >>> +#define ST_PRESS_LPS22HB_ODR_AVL_75HZ_VAL 0x05 >>> +#define ST_PRESS_LPS22HB_PW_ADDR 0x10 >>> +#define ST_PRESS_LPS22HB_PW_MASK 0x70 >>> +#define ST_PRESS_LPS22HB_BDU_ADDR 0x10 >>> +#define ST_PRESS_LPS22HB_BDU_MASK 0x02 >>> +#define ST_PRESS_LPS22HB_DRDY_IRQ_ADDR 0x12 >>> +#define ST_PRESS_LPS22HB_DRDY_IRQ_INT1_MASK 0x04 >>> +#define ST_PRESS_LPS22HB_DRDY_IRQ_INT2_MASK 0x08 >>> +#define ST_PRESS_LPS22HB_IHL_IRQ_ADDR 0x12 >>> +#define ST_PRESS_LPS22HB_IHL_IRQ_MASK 0x80 >>> +#define ST_PRESS_LPS22HB_MULTIREAD_BIT true >>> + >>> static const struct iio_chan_spec st_press_1_channels[] = { >>> { >>> .type = IIO_PRESSURE, >>> @@ -183,6 +203,27 @@ static const struct iio_chan_spec st_press_lps001wp_channels[] = { >>> IIO_CHAN_SOFT_TIMESTAMP(1) >>> }; >>> >>> +static const struct iio_chan_spec st_press_lps22hb_channels[] = { >>> + { >>> + .type = IIO_PRESSURE, >>> + .channel2 = IIO_NO_MOD, >>> + .address = ST_PRESS_1_OUT_XL_ADDR, >>> + .scan_index = 0, >>> + .scan_type = { >>> + .sign = 'u', >>> + .realbits = 24, >>> + .storagebits = 24, >>> + .endianness = IIO_LE, >>> + }, >>> + .info_mask_separate = >>> + BIT(IIO_CHAN_INFO_RAW) | >>> + BIT(IIO_CHAN_INFO_SCALE), >>> + .info_mask_shared_by_all = BIT(IIO_CHAN_INFO_SAMP_FREQ), >>> + .modified = 0, >>> + }, >>> + IIO_CHAN_SOFT_TIMESTAMP(1) >>> +}; >>> + >>> static const struct st_sensor_settings st_press_sensors_settings[] = { >>> { >>> .wai = ST_PRESS_LPS331AP_WAI_EXP, >>> @@ -326,6 +367,51 @@ static const struct st_sensor_settings st_press_sensors_settings[] = { >>> .multi_read_bit = ST_PRESS_LPS25H_MULTIREAD_BIT, >>> .bootime = 2, >>> }, >>> + { >>> + .wai = ST_PRESS_LPS22HB_WAI_EXP, >>> + .wai_addr = ST_SENSORS_DEFAULT_WAI_ADDRESS, >>> + .sensors_supported = { >>> + [0] = LPS22HB_PRESS_DEV_NAME, >>> + }, >>> + .ch = (struct iio_chan_spec *)st_press_lps22hb_channels, >>> + .num_ch = ARRAY_SIZE(st_press_lps22hb_channels), >>> + .odr = { >>> + .addr = ST_PRESS_LPS22HB_ODR_ADDR, >>> + .mask = ST_PRESS_LPS22HB_ODR_MASK, >>> + .odr_avl = { >>> + { 1, ST_PRESS_LPS22HB_ODR_AVL_1HZ_VAL, }, >>> + { 10, ST_PRESS_LPS22HB_ODR_AVL_10HZ_VAL, }, >>> + { 25, ST_PRESS_LPS22HB_ODR_AVL_25HZ_VAL, }, >>> + { 50, ST_PRESS_LPS22HB_ODR_AVL_50HZ_VAL, }, >>> + { 75, ST_PRESS_LPS22HB_ODR_AVL_75HZ_VAL, }, >>> + }, >>> + }, >>> + .pw = { >>> + .addr = ST_PRESS_LPS22HB_PW_ADDR, >>> + .mask = ST_PRESS_LPS22HB_PW_MASK, >>> + .value_off = ST_SENSORS_DEFAULT_POWER_OFF_VALUE, >>> + }, >>> + .fs = { >>> + .fs_avl = { >>> + [0] = { >>> + .num = ST_PRESS_FS_AVL_1260MB, >>> + .gain = ST_PRESS_KPASCAL_NANO_SCALE, >>> + }, >>> + }, >>> + }, >>> + .bdu = { >>> + .addr = ST_PRESS_LPS22HB_BDU_ADDR, >>> + .mask = ST_PRESS_LPS22HB_BDU_MASK, >>> + }, >>> + .drdy_irq = { >>> + .addr = ST_PRESS_LPS22HB_DRDY_IRQ_ADDR, >>> + .mask_int1 = ST_PRESS_LPS22HB_DRDY_IRQ_INT1_MASK, >>> + .mask_int2 = ST_PRESS_LPS22HB_DRDY_IRQ_INT2_MASK, >>> + .addr_ihl = ST_PRESS_LPS22HB_IHL_IRQ_ADDR, >>> + .mask_ihl = ST_PRESS_LPS22HB_IHL_IRQ_MASK, >>> + }, >>> + .multi_read_bit = ST_PRESS_LPS22HB_MULTIREAD_BIT, >>> + }, >>> }; >>> >>> static int st_press_write_raw(struct iio_dev *indio_dev, >>> @@ -454,10 +540,9 @@ int st_press_common_probe(struct iio_dev *indio_dev) >>> indio_dev->channels = press_data->sensor_settings->ch; >>> indio_dev->num_channels = press_data->sensor_settings->num_ch; >>> >>> - if (press_data->sensor_settings->fs.addr != 0) >>> - press_data->current_fullscale = >>> - (struct st_sensor_fullscale_avl *) >>> - &press_data->sensor_settings->fs.fs_avl[0]; >>> + press_data->current_fullscale = >>> + (struct st_sensor_fullscale_avl *) >>> + &press_data->sensor_settings->fs.fs_avl[0]; >>> >>> press_data->odr = press_data->sensor_settings->odr.odr_avl[0].hz; >>> >>> diff --git a/drivers/iio/pressure/st_pressure_i2c.c b/drivers/iio/pressure/st_pressure_i2c.c >>> index 8fcf976..ed18701 100644 >>> --- a/drivers/iio/pressure/st_pressure_i2c.c >>> +++ b/drivers/iio/pressure/st_pressure_i2c.c >>> @@ -32,6 +32,10 @@ static const struct of_device_id st_press_of_match[] = { >>> .compatible = "st,lps331ap-press", >>> .data = LPS331AP_PRESS_DEV_NAME, >>> }, >>> + { >>> + .compatible = "st,lps22hb-press", >>> + .data = LPS22HB_PRESS_DEV_NAME, >>> + }, >>> {}, >>> }; >>> MODULE_DEVICE_TABLE(of, st_press_of_match); >>> diff --git a/drivers/iio/pressure/st_pressure_spi.c b/drivers/iio/pressure/st_pressure_spi.c >>> index 40c0692..5505080 100644 >>> --- a/drivers/iio/pressure/st_pressure_spi.c >>> +++ b/drivers/iio/pressure/st_pressure_spi.c >>> @@ -50,6 +50,7 @@ static const struct spi_device_id st_press_id_table[] = { >>> { LPS001WP_PRESS_DEV_NAME }, >>> { LPS25H_PRESS_DEV_NAME }, >>> { LPS331AP_PRESS_DEV_NAME }, >>> + { LPS22HB_PRESS_DEV_NAME }, >>> {}, >>> }; >>> MODULE_DEVICE_TABLE(spi, st_press_id_table); >>> >> >> -- >> To unsubscribe from this list: send the line "unsubscribe linux-iio" in >> the body of a message to majordomo@xxxxxxxxxxxxxxx >> More majordomo info at http://vger.kernel.org/majordomo-info.html >> > > -- > To unsubscribe from this list: send the line "unsubscribe linux-iio" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html > -- To unsubscribe from this list: send the line "unsubscribe linux-iio" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html