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);

Reply via email to