You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mynewt.apache.org by an...@apache.org on 2018/12/05 14:34:36 UTC

[mynewt-core] 05/08: hw/drivers/lis2dw12: Add proper I2C/SPI interface handling

This is an automated email from the ASF dual-hosted git repository.

andk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/mynewt-core.git

commit d37c47f6b4b853856b5271de450a51fe5bf39a3c
Author: Andrzej Kaczmarek <an...@codecoup.pl>
AuthorDate: Tue Dec 4 17:48:49 2018 +0100

    hw/drivers/lis2dw12: Add proper I2C/SPI interface handling
---
 hw/drivers/sensors/lis2dw12/include/lis2dw12/lis2dw12.h |  3 +++
 hw/drivers/sensors/lis2dw12/src/lis2dw12.c              | 12 ++++++++++++
 2 files changed, 15 insertions(+)

diff --git a/hw/drivers/sensors/lis2dw12/include/lis2dw12/lis2dw12.h b/hw/drivers/sensors/lis2dw12/include/lis2dw12/lis2dw12.h
index 7148269..53afb51 100644
--- a/hw/drivers/sensors/lis2dw12/include/lis2dw12/lis2dw12.h
+++ b/hw/drivers/sensors/lis2dw12/include/lis2dw12/lis2dw12.h
@@ -285,6 +285,9 @@ struct lis2dw12 {
     struct lis2dw12_cfg cfg;
     struct lis2dw12_int intr;
     struct lis2dw12_pdd pdd;
+#if MYNEWT_VAL(BUS_DRIVER_PRESENT)
+    bool node_is_spi;
+#endif
 };
 
 /**
diff --git a/hw/drivers/sensors/lis2dw12/src/lis2dw12.c b/hw/drivers/sensors/lis2dw12/src/lis2dw12.c
index d8b2e38..f81af8a 100644
--- a/hw/drivers/sensors/lis2dw12/src/lis2dw12.c
+++ b/hw/drivers/sensors/lis2dw12/src/lis2dw12.c
@@ -515,6 +515,12 @@ lis2dw12_readlen(struct sensor_itf *itf, uint8_t reg, uint8_t *buffer,
     int rc;
 
 #if MYNEWT_VAL(BUS_DRIVER_PRESENT)
+    struct lis2dw12 *dev = (struct lis2dw12 *)itf->si_dev;
+
+    if (dev->node_is_spi) {
+        reg |= LIS2DW12_SPI_READ_CMD_BIT;
+    }
+
     rc = bus_node_simple_write_read_transact(itf->si_dev, &reg, 1, buffer, len);
 #else
     rc = sensor_itf_lock(itf, MYNEWT_VAL(LIS2DW12_ITF_LOCK_TMO));
@@ -3362,11 +3368,14 @@ lis2dw12_create_i2c_sensor_dev(struct bus_i2c_node *node, const char *name,
                                const struct bus_i2c_node_cfg *i2c_cfg,
                                struct sensor_itf *sensor_itf)
 {
+    struct lis2dw12 *dev = (struct lis2dw12 *)node;
     struct bus_node_callbacks cbs = {
         .init = init_node_cb,
     };
     int rc;
 
+    dev->node_is_spi = false;
+
     bus_node_set_callbacks((struct os_dev *)node, &cbs);
 
     rc = bus_i2c_node_create(name, node, i2c_cfg, sensor_itf);
@@ -3379,11 +3388,14 @@ lis2dw12_create_spi_sensor_dev(struct bus_spi_node *node, const char *name,
                                const struct bus_spi_node_cfg *spi_cfg,
                                struct sensor_itf *sensor_itf)
 {
+    struct lis2dw12 *dev = (struct lis2dw12 *)node;
     struct bus_node_callbacks cbs = {
         .init = init_node_cb,
     };
     int rc;
 
+    dev->node_is_spi = true;
+
     bus_node_set_callbacks((struct os_dev *)node, &cbs);
 
     rc = bus_spi_node_create(name, node, spi_cfg, sensor_itf);