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:39 UTC
[mynewt-core] 08/08: hw/drivers/lps33hw: Add SPI support
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 0350849e9bdea186c5872204062cbd5a3c72d94f
Author: Andrzej Kaczmarek <an...@codecoup.pl>
AuthorDate: Tue Dec 4 17:48:49 2018 +0100
hw/drivers/lps33hw: Add SPI support
---
.../sensors/lps33hw/include/lps33hw/lps33hw.h | 23 ++++++++++++++++-
hw/drivers/sensors/lps33hw/src/lps33hw.c | 29 ++++++++++++++++++++++
2 files changed, 51 insertions(+), 1 deletion(-)
diff --git a/hw/drivers/sensors/lps33hw/include/lps33hw/lps33hw.h b/hw/drivers/sensors/lps33hw/include/lps33hw/lps33hw.h
index baa9a31..014da64 100644
--- a/hw/drivers/sensors/lps33hw/include/lps33hw/lps33hw.h
+++ b/hw/drivers/sensors/lps33hw/include/lps33hw/lps33hw.h
@@ -82,7 +82,10 @@ struct lps33hw_private_driver_data {
struct lps33hw {
#if MYNEWT_VAL(BUS_DRIVER_PRESENT)
- struct bus_i2c_node i2c_node;
+ union {
+ struct bus_i2c_node i2c_node;
+ struct bus_spi_node spi_node;
+ };
#else
struct os_dev dev;
#endif
@@ -90,6 +93,9 @@ struct lps33hw {
struct lps33hw_cfg cfg;
os_time_t last_read_time;
struct lps33hw_private_driver_data pdd;
+#if MYNEWT_VAL(BUS_DRIVER_PRESENT)
+ bool node_is_spi;
+#endif
};
/**
@@ -235,6 +241,21 @@ int
lps33hw_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);
+
+/**
+ * Create SPI bus node for LPS33HW sensor
+ *
+ * @param node Bus node
+ * @param name Device name
+ * @param spi_cfg SPI node configuration
+ * @param sensor_itf Sensors interface
+ *
+ * @return 0 on success, non-zero on failure
+ */
+int
+lps33hw_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);
#endif
#ifdef __cplusplus
diff --git a/hw/drivers/sensors/lps33hw/src/lps33hw.c b/hw/drivers/sensors/lps33hw/src/lps33hw.c
index 7cc221b..d215b36 100644
--- a/hw/drivers/sensors/lps33hw/src/lps33hw.c
+++ b/hw/drivers/sensors/lps33hw/src/lps33hw.c
@@ -404,6 +404,12 @@ lps33hw_get_regs(struct sensor_itf *itf, uint8_t reg, uint8_t size,
int rc;
#if MYNEWT_VAL(BUS_DRIVER_PRESENT)
+ struct lps33hw *dev = (struct lps33hw *)itf->si_dev;
+
+ if (dev->node_is_spi) {
+ reg |= LPS33HW_SPI_READ_CMD_BIT;
+ }
+
rc = bus_node_simple_write_read_transact(itf->si_dev, ®, 1, buffer, size);
#else
rc = sensor_itf_lock(itf, MYNEWT_VAL(LPS33HW_ITF_LOCK_TMO));
@@ -1121,15 +1127,38 @@ lps33hw_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 lps33hw *dev = (struct lps33hw *)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);
return rc;
}
+
+int
+lps33hw_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 lps33hw *dev = (struct lps33hw *)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);
+
+ return rc;
+}
#endif