• M
    iio:chemical:bme680: Fix SPI read interface · adfb0f0b
    Mike Looijmans 提交于
    commit 73f3bc6da506711302bb67572440eb84b1ec4a2c upstream.
    
    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: NMike Looijmans <mike.looijmans@topic.nl>
    Fixes: 1b3bd859 ("iio: chemical: Add support for Bosch BME680 sensor");
    Cc: <Stable@vger.kernel.org>
    Signed-off-by: NJonathan Cameron <Jonathan.Cameron@huawei.com>
    Signed-off-by: NGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    adfb0f0b
bme680.h 2.7 KB