summaryrefslogtreecommitdiff
path: root/components/drivers/include
diff options
context:
space:
mode:
authorBernard Xiong <[email protected]>2018-11-22 20:25:04 +0800
committerGitHub <[email protected]>2018-11-22 20:25:04 +0800
commit94d85fa3b5cd49350d3d65f33a8b2f1801380f4c (patch)
treeae0c811b496872dd03e07211514068c0122f85b7 /components/drivers/include
parent8ea5b770117cacea7f17b2b08305f360ed71bca7 (diff)
parent257ce972d0d54cb311274f04c270630e5c015288 (diff)
Merge pull request #1996 from qgyhd1234/qspi
[DeviceDrivers][spi]:add qspi support
Diffstat (limited to 'components/drivers/include')
-rw-r--r--components/drivers/include/drivers/spi.h108
1 files changed, 108 insertions, 0 deletions
diff --git a/components/drivers/include/drivers/spi.h b/components/drivers/include/drivers/spi.h
index 84b589ace0..7394710581 100644
--- a/components/drivers/include/drivers/spi.h
+++ b/components/drivers/include/drivers/spi.h
@@ -45,6 +45,9 @@ extern "C"{
#define RT_SPI_MODE_MASK (RT_SPI_CPHA | RT_SPI_CPOL | RT_SPI_MSB)
+#define RT_SPI_BUS_MODE_SPI (1<<0)
+#define RT_SPI_BUS_MODE_QSPI (1<<1)
+
#define RT_SPI_CS_HIGH (1<<4) /* Chipselect active high */
#define RT_SPI_NO_CS (1<<5) /* No chipselect */
#define RT_SPI_3WIRE (1<<6) /* SI/SO pin shared */
@@ -80,6 +83,7 @@ struct rt_spi_ops;
struct rt_spi_bus
{
struct rt_device parent;
+ rt_uint8_t mode;
const struct rt_spi_ops *ops;
struct rt_mutex lock;
@@ -106,6 +110,55 @@ struct rt_spi_device
struct rt_spi_configuration config;
void *user_data;
};
+
+struct rt_qspi_message
+{
+ struct rt_spi_message parent;
+
+ /* instruction stage */
+ struct
+ {
+ rt_uint8_t content;
+ rt_uint8_t qspi_lines;
+ } instruction;
+
+ /* address and alternate_bytes stage */
+ struct
+ {
+ rt_uint32_t content;
+ rt_uint8_t size;
+ rt_uint8_t qspi_lines;
+ } address, alternate_bytes;
+
+ /* dummy_cycles stage */
+ rt_uint32_t dummy_cycles;
+
+ /* number of lines in qspi data stage, the other configuration items are in parent */
+ rt_uint8_t qspi_data_lines;
+};
+
+struct rt_qspi_configuration
+{
+ struct rt_spi_configuration parent;
+ /* The size of medium */
+ rt_uint32_t medium_size;
+ /* double data rate mode */
+ rt_uint8_t ddr_mode;
+ /* the number of lines connected to the hardware */
+ rt_uint8_t qspi_hw_lines;
+};
+
+struct rt_qspi_device
+{
+ struct rt_spi_device parent;
+
+ struct rt_qspi_configuration config;
+
+ void (*enter_qspi_mode)(struct rt_qspi_device *device);
+
+ void (*exit_qspi_mode)(struct rt_qspi_device *device);
+};
+
#define SPI_DEVICE(dev) ((struct rt_spi_device *)(dev))
/* register a SPI bus */
@@ -255,6 +308,61 @@ rt_inline void rt_spi_message_append(struct rt_spi_message *list,
message->next = RT_NULL;
}
+/**
+ * This function can set configuration on QSPI device.
+ *
+ * @param device the QSPI device attached to QSPI bus.
+ * @param cfg the configuration pointer.
+ *
+ * @return the actual length of transmitted.
+ */
+rt_err_t rt_qspi_configure(struct rt_qspi_device *device, struct rt_qspi_configuration *cfg);
+
+/**
+ * This function can register a SPI bus for QSPI mode.
+ *
+ * @param bus the SPI bus for QSPI mode.
+ * @param name The name of the spi bus.
+ * @param ops the SPI bus instance to be registered.
+ *
+ * @return the actual length of transmitted.
+ */
+rt_err_t rt_qspi_bus_register(struct rt_spi_bus *bus, const char *name, const struct rt_spi_ops *ops);
+
+/**
+ * This function transmits data to QSPI device.
+ *
+ * @param device the QSPI device attached to QSPI bus.
+ * @param message the message pointer.
+ *
+ * @return the actual length of transmitted.
+ */
+rt_size_t rt_qspi_transfer_message(struct rt_qspi_device *device, struct rt_qspi_message *message);
+
+/**
+ * This function can send data then receive data from QSPI device
+ *
+ * @param device the QSPI device attached to QSPI bus.
+ * @param send_buf the buffer to be transmitted to QSPI device.
+ * @param send_length the number of data to be transmitted.
+ * @param recv_buf the buffer to be recivied from QSPI device.
+ * @param recv_length the data to be recivied.
+ *
+ * @return the status of transmit.
+ */
+rt_err_t rt_qspi_send_then_recv(struct rt_qspi_device *device, const void *send_buf, rt_size_t send_length,void *recv_buf, rt_size_t recv_length);
+
+/**
+ * This function can send data to QSPI device
+ *
+ * @param device the QSPI device attached to QSPI bus.
+ * @param send_buf the buffer to be transmitted to QSPI device.
+ * @param send_length the number of data to be transmitted.
+ *
+ * @return the status of transmit.
+ */
+rt_err_t rt_qspi_send(struct rt_qspi_device *device, const void *send_buf, rt_size_t length);
+
#ifdef __cplusplus
}
#endif