summaryrefslogtreecommitdiff
path: root/components/drivers/include
diff options
context:
space:
mode:
authorGuEe-GUI <[email protected]>2024-11-27 11:08:08 +0800
committerRbb666 <[email protected]>2024-11-27 18:04:07 +0800
commit6f68ca7c7133a2a06b5be8663ec644b9181a2c9d (patch)
tree4e75aa10a29349eccf59ace7ac90d998eabe6f96 /components/drivers/include
parent49d18ec0a919c64f06f9614d49b6eecbd05751eb (diff)
[DM/SPI] Support DM mode in SPI
Signed-off-by: GuEe-GUI <[email protected]>
Diffstat (limited to 'components/drivers/include')
-rw-r--r--components/drivers/include/drivers/dev_spi.h63
1 files changed, 63 insertions, 0 deletions
diff --git a/components/drivers/include/drivers/dev_spi.h b/components/drivers/include/drivers/dev_spi.h
index 45e8e8544f..ad23453d5b 100644
--- a/components/drivers/include/drivers/dev_spi.h
+++ b/components/drivers/include/drivers/dev_spi.h
@@ -16,6 +16,8 @@
#include <stdlib.h>
#include <rtthread.h>
#include <drivers/dev_pin.h>
+#include <drivers/core/driver.h>
+
/**
* @addtogroup Drivers RTTHREAD Driver
* @defgroup SPI SPI
@@ -151,7 +153,12 @@ struct rt_spi_configuration
{
rt_uint8_t mode;
rt_uint8_t data_width;
+#ifdef RT_USING_DM
+ rt_uint8_t data_width_tx;
+ rt_uint8_t data_width_rx;
+#else
rt_uint16_t reserved;
+#endif
rt_uint32_t max_hz;
};
@@ -167,6 +174,12 @@ struct rt_spi_bus
rt_uint8_t mode;
const struct rt_spi_ops *ops;
+#ifdef RT_USING_DM
+ rt_base_t *pins;
+ rt_bool_t slave;
+ int num_chipselect;
+#endif /* RT_USING_DM */
+
struct rt_mutex lock;
struct rt_spi_device *owner;
};
@@ -180,6 +193,20 @@ struct rt_spi_ops
rt_ssize_t (*xfer)(struct rt_spi_device *device, struct rt_spi_message *message);
};
+#ifdef RT_USING_DM
+/**
+ * @brief SPI delay info
+ */
+struct rt_spi_delay
+{
+#define RT_SPI_DELAY_UNIT_USECS 0
+#define RT_SPI_DELAY_UNIT_NSECS 1
+#define RT_SPI_DELAY_UNIT_SCK 2
+ rt_uint16_t value;
+ rt_uint8_t unit;
+};
+#endif /* RT_USING_DM */
+
/**
* @brief SPI Virtual BUS, one device must connected to a virtual BUS
*/
@@ -188,6 +215,17 @@ struct rt_spi_device
struct rt_device parent;
struct rt_spi_bus *bus;
+#ifdef RT_USING_DM
+ const char *name;
+ const struct rt_spi_device_id *id;
+ const struct rt_ofw_node_id *ofw_id;
+
+ rt_uint8_t chip_select;
+ struct rt_spi_delay cs_setup;
+ struct rt_spi_delay cs_hold;
+ struct rt_spi_delay cs_inactive;
+#endif
+
struct rt_spi_configuration config;
rt_base_t cs_pin;
void *user_data;
@@ -252,6 +290,31 @@ struct rt_qspi_device
#define SPI_DEVICE(dev) ((struct rt_spi_device *)(dev))
+#ifdef RT_USING_DM
+struct rt_spi_device_id
+{
+ char name[20];
+ void *data;
+};
+
+struct rt_spi_driver
+{
+ struct rt_driver parent;
+
+ const struct rt_spi_device_id *ids;
+ const struct rt_ofw_node_id *ofw_ids;
+
+ rt_err_t (*probe)(struct rt_spi_device *device);
+ rt_err_t (*remove)(struct rt_spi_device *device);
+ rt_err_t (*shutdown)(struct rt_spi_device *device);
+};
+
+rt_err_t rt_spi_driver_register(struct rt_spi_driver *driver);
+rt_err_t rt_spi_device_register(struct rt_spi_device *device);
+
+#define RT_SPI_DRIVER_EXPORT(driver) RT_DRIVER_EXPORT(driver, spi, BUILIN)
+#endif /* RT_USING_DM */
+
/**
* @brief register a SPI bus
*