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