iio: chemical: Add support for Bosch BME680 sensor
authorHimanshu Jha <himanshujha199640@gmail.com>
Thu, 26 Jul 2018 11:35:10 +0000 (17:05 +0530)
committerJonathan Cameron <Jonathan.Cameron@huawei.com>
Sat, 28 Jul 2018 10:38:46 +0000 (11:38 +0100)
commit1b3bd8592780c87c5eddabbe98666b086bbaee36
tree6880cfcd7bf89e6f0376986dd9c04383ac17000b
parent6431975789fc3c480cb6344256f72d85889df3b2
iio: chemical: Add support for Bosch BME680 sensor

Bosch BME680 is a 4-in-1 sensor with temperature, pressure, humidity
and gas sensing capability. It supports both I2C and SPI communication
protocol for effective data communication.

The device supports two modes:

1. Sleep mode
2. Forced mode

The measurements only takes place when forced mode is triggered and a
single TPHG cycle is performed by the sensor. The sensor automatically
goes to sleep after afterwards.

The device has various calibration constants/parameters programmed into
devices' non-volatile memory(NVM) during production and can't be altered
by the user. These constants are used in the compensation functions to
get the required compensated readings along with the raw data. The
compensation functions/algorithms are provided by Bosch Sensortec GmbH
via their API[1]. As these don't change during the measurement cycle,
therefore we read and store them at the probe. The default configs
supplied by Bosch are also set at probe.

0-day tested with build success.

GSoC-2018: https://summerofcode.withgoogle.com/projects/#6691473790074880
Mentor: Daniel Baluta
[1] https://github.com/BoschSensortec/BME680_driver
Datasheet:
https://ae-bst.resource.bosch.com/media/_tech/media/datasheets/BST-BME680-DS001-00.pdf

Note from Jonathan: The compensation functions are 'interesting' and
could do with a tidy up in future.  However, they work so we can leave that
for another day.

Cc: Daniel Baluta <daniel.baluta@nxp.com>
Signed-off-by: Himanshu Jha <himanshujha199640@gmail.com>
Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
drivers/iio/chemical/Kconfig
drivers/iio/chemical/Makefile
drivers/iio/chemical/bme680.h [new file with mode: 0644]
drivers/iio/chemical/bme680_core.c [new file with mode: 0644]
drivers/iio/chemical/bme680_i2c.c [new file with mode: 0644]
drivers/iio/chemical/bme680_spi.c [new file with mode: 0644]