mirror of
https://github.com/RT-Thread/rt-thread.git
synced 2026-09-21 10:36:04 +08:00
[DM/SPI] Support DM mode in SPI
Signed-off-by: GuEe-GUI <2991707448@qq.com>
This commit is contained in:
@@ -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
|
||||
*
|
||||
|
||||
Reference in New Issue
Block a user