aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/iio/chemical/bme680.h
diff options
context:
space:
mode:
authorMike Looijmans <mike.looijmans@topic.nl>2019-03-06 08:31:48 +0100
committerJonathan Cameron <Jonathan.Cameron@huawei.com>2019-03-09 17:27:36 +0000
commit73f3bc6da506711302bb67572440eb84b1ec4a2c (patch)
tree07eaf7b76e7fac992b698b987ccf60cbba3f1f1b /drivers/iio/chemical/bme680.h
parentiio:chemical:bme680: Fix, report temperature in millidegrees (diff)
downloadlinux-dev-73f3bc6da506711302bb67572440eb84b1ec4a2c.tar.xz
linux-dev-73f3bc6da506711302bb67572440eb84b1ec4a2c.zip
iio:chemical:bme680: Fix SPI read interface
The SPI interface implementation was completely broken. When using the SPI interface, there are only 7 address bits, the upper bit is controlled by a page select register. The core needs access to both ranges, so implement register read/write for both regions. The regmap paging functionality didn't agree with a register that needs to be read and modified, so I implemented a custom paging algorithm. This fixes that the device wouldn't even probe in SPI mode. The SPI interface then isn't different from I2C, merged them into the core, and the I2C/SPI named registers are no longer needed. Implemented register value caching for the registers to reduce the I2C/SPI data transfers considerably. The calibration set reads as all zeroes until some undefined point in time, and I couldn't determine what makes it valid. The datasheet mentions these registers but does not provide any hints on when they become valid, and they aren't even enumerated in the memory map. So check the calibration and retry reading it from the device after each measurement until it provides something valid. Despite the size this is suitable for a stable backport given that it seems the SPI support never worked. Signed-off-by: Mike Looijmans <mike.looijmans@topic.nl> Fixes: 1b3bd8592780 ("iio: chemical: Add support for Bosch BME680 sensor"); Cc: <Stable@vger.kernel.org> Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Diffstat (limited to 'drivers/iio/chemical/bme680.h')
-rw-r--r--drivers/iio/chemical/bme680.h6
1 files changed, 2 insertions, 4 deletions
diff --git a/drivers/iio/chemical/bme680.h b/drivers/iio/chemical/bme680.h
index 0ae89b87e2d6..4edc5d21cb9f 100644
--- a/drivers/iio/chemical/bme680.h
+++ b/drivers/iio/chemical/bme680.h
@@ -2,11 +2,9 @@
#ifndef BME680_H_
#define BME680_H_
-#define BME680_REG_CHIP_I2C_ID 0xD0
-#define BME680_REG_CHIP_SPI_ID 0x50
+#define BME680_REG_CHIP_ID 0xD0
#define BME680_CHIP_ID_VAL 0x61
-#define BME680_REG_SOFT_RESET_I2C 0xE0
-#define BME680_REG_SOFT_RESET_SPI 0x60
+#define BME680_REG_SOFT_RESET 0xE0
#define BME680_CMD_SOFTRESET 0xB6
#define BME680_REG_STATUS 0x73
#define BME680_SPI_MEM_PAGE_BIT BIT(4)