This is an automated email from the ASF dual-hosted git repository. jerzy pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/mynewt-core.git
commit 68a726a86f5442500854bf0a6cbe9857f7fffe6c Author: Jerzy Kasenberg <jerzy.kasenb...@codecoup.pl> AuthorDate: Wed Jun 12 16:18:50 2019 +0200 sensors/bmp280: Fix write with bus driver enabled All register definitions have MSB set. For spi write this bit must be cleared. Bus driver version of write was not clearing it now it is. --- hw/drivers/sensors/bmp280/include/bmp280/bmp280.h | 1 + hw/drivers/sensors/bmp280/src/bmp280.c | 15 +++++++++++++++ 2 files changed, 16 insertions(+) diff --git a/hw/drivers/sensors/bmp280/include/bmp280/bmp280.h b/hw/drivers/sensors/bmp280/include/bmp280/bmp280.h index c486757..193c1d7 100644 --- a/hw/drivers/sensors/bmp280/include/bmp280/bmp280.h +++ b/hw/drivers/sensors/bmp280/include/bmp280/bmp280.h @@ -106,6 +106,7 @@ struct bmp280 { struct bus_i2c_node i2c_node; struct bus_spi_node spi_node; }; + bool node_is_spi; #else struct os_dev dev; #endif diff --git a/hw/drivers/sensors/bmp280/src/bmp280.c b/hw/drivers/sensors/bmp280/src/bmp280.c index 1fe61c2..c383f91 100644 --- a/hw/drivers/sensors/bmp280/src/bmp280.c +++ b/hw/drivers/sensors/bmp280/src/bmp280.c @@ -87,6 +87,14 @@ static const struct sensor_driver g_bmp280_sensor_driver = { .sd_set_config = bmp280_sensor_set_config, }; +#if MYNEWT_VAL(BUS_DRIVER_PRESENT) +static bool +bmp280_uses_spi(struct sensor_itf *itf) +{ + return ((struct bmp280 *)(itf->si_dev))->node_is_spi; +} +#endif + static int bmp280_default_cfg(struct bmp280_cfg *cfg) { @@ -919,6 +927,9 @@ bmp280_writelen(struct sensor_itf *itf, uint8_t addr, uint8_t *payload, #if MYNEWT_VAL(BUS_DRIVER_PRESENT) uint8_t data[2] = { addr }; + if (bmp280_uses_spi(itf)) { + data[0] &= ~BMP280_SPI_READ_CMD_BIT; + } do { data[1] = *(payload++); rc = bus_node_simple_write(itf->si_dev, data, 2); @@ -1367,6 +1378,8 @@ bmp280_create_i2c_sensor_dev(struct bus_i2c_node *node, const char *name, }; int rc; + ((struct bmp280 *)(node))->node_is_spi = false; + bus_node_set_callbacks((struct os_dev *)node, &cbs); rc = bus_i2c_node_create(name, node, i2c_cfg, sensor_itf); @@ -1384,6 +1397,8 @@ bmp280_create_spi_sensor_dev(struct bus_spi_node *node, const char *name, }; int rc; + ((struct bmp280 *)(node))->node_is_spi = true; + bus_node_set_callbacks((struct os_dev *)node, &cbs); rc = bus_spi_node_create(name, node, spi_cfg, sensor_itf);