This is an automated email from the ASF dual-hosted git repository. acassis pushed a commit to branch pr54 in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git
commit 00a6f1d8353f54b666119e67340677c2a471b4d8 Author: Alin Jerpelea <[email protected]> AuthorDate: Sat Dec 28 09:07:21 2019 +0900 arch: cxd56xx: Enable DMA settings dynamically --- arch/arm/src/cxd56xx/cxd56_spi.c | 198 ++++++++++++++-------- arch/arm/src/cxd56xx/cxd56_spi.h | 28 +++ boards/arm/cxd56xx/common/src/cxd56_altmdm_spi.c | 129 ++++++++------ boards/arm/cxd56xx/common/src/cxd56_ili9340.c | 27 +++ boards/arm/cxd56xx/common/src/cxd56_lpm013m091a.c | 27 +++ boards/arm/cxd56xx/spresense/Kconfig | 4 + boards/arm/cxd56xx/spresense/include/board.h | 14 ++ boards/arm/cxd56xx/spresense/src/cxd56_spi.c | 6 - 8 files changed, 302 insertions(+), 131 deletions(-) diff --git a/arch/arm/src/cxd56xx/cxd56_spi.c b/arch/arm/src/cxd56xx/cxd56_spi.c index 98a85c8..fb9724a 100644 --- a/arch/arm/src/cxd56xx/cxd56_spi.c +++ b/arch/arm/src/cxd56xx/cxd56_spi.c @@ -46,6 +46,7 @@ #include <semaphore.h> #include <errno.h> #include <debug.h> +#include <string.h> #include <arch/board/board.h> #include <nuttx/irq.h> @@ -58,7 +59,7 @@ #include "chip.h" #include "cxd56_spi.h" -#include "chip/cxd56_spi.h" +#include "hardware/cxd56_spi.h" #include "cxd56_clock.h" #include "cxd56_pinconfig.h" #include "cxd56_powermgr.h" @@ -99,6 +100,7 @@ struct cxd56_spidev_s uint8_t port; /* Port number */ int initialized; /* Initialized flag */ #ifdef CONFIG_CXD56_DMAC + bool dmaenable; /* Use DMA or not */ DMA_HANDLE rxdmach; /* RX DMA channel handle */ DMA_HANDLE txdmach; /* TX DMA channel handle */ sem_t dmasem; /* Wait for DMA to complete */ @@ -187,19 +189,10 @@ static const struct spi_ops_s g_spi4ops = #endif .send = spi_send, #ifdef CONFIG_SPI_EXCHANGE -# if defined(CONFIG_CXD56_DMAC_SPI4_TX) || defined(CONFIG_CXD56_DMAC_SPI4_RX) - .exchange = spi_dmaexchange, -# else .exchange = spi_exchange, -# endif #else -# if defined(CONFIG_CXD56_DMAC_SPI4_TX) || defined(CONFIG_CXD56_DMAC_SPI4_RX) - .sndblock = spi_dmasndblock, - .recvblock = spi_dmarecvblock, -# else .sndblock = spi_sndblock, .recvblock = spi_recvblock, -# endif #endif #ifdef CONFIG_SPI_CALLBACK .registercallback = cxd56_spi4register, /* Provided externally */ @@ -236,19 +229,10 @@ static const struct spi_ops_s g_spi5ops = #endif .send = spi_send, #ifdef CONFIG_SPI_EXCHANGE -# if defined(CONFIG_CXD56_DMAC_SPI5_TX) || defined(CONFIG_CXD56_DMAC_SPI5_RX) - .exchange = spi_dmaexchange, -# else .exchange = spi_exchange, -# endif #else -# if defined(CONFIG_CXD56_DMAC_SPI5_TX) || defined(CONFIG_CXD56_DMAC_SPI5_RX) - .sndblock = spi_dmasndblock, - .recvblock = spi_dmarecvblock, -# else .sndblock = spi_sndblock, .recvblock = spi_recvblock, -# endif #endif #ifdef CONFIG_SPI_CALLBACK .registercallback = cxd56_spi5register, /* Provided externally */ @@ -623,6 +607,7 @@ static void spi_setbits(FAR struct spi_dev_s *dev, int nbits) */ priv->nbits = nbits; +#ifdef CONFIG_CXD56_DMAC if (priv->nbits > 8) { priv->txconfig.dest_width = CXD56_DMAC_WIDTH16; @@ -637,6 +622,7 @@ static void spi_setbits(FAR struct spi_dev_s *dev, int nbits) priv->rxconfig.dest_width = CXD56_DMAC_WIDTH8; priv->rxconfig.src_width = CXD56_DMAC_WIDTH8; } +#endif } } @@ -706,10 +692,10 @@ static uint16_t spi_send(FAR struct spi_dev_s *dev, uint16_t wd) } /**************************************************************************** - * Name: spi_exchange + * Name: spi_do_exchange * * Description: - * Exahange a block of data from SPI. Required. + * Exchange a block of data from SPI. Required. * * Input Parameters: * dev - Device-specific state data @@ -726,8 +712,8 @@ static uint16_t spi_send(FAR struct spi_dev_s *dev, uint16_t wd) * ****************************************************************************/ -static void spi_exchange(FAR struct spi_dev_s *dev, FAR const void *txbuffer, - FAR void *rxbuffer, size_t nwords) +static void spi_do_exchange(FAR struct spi_dev_s *dev, FAR const void *txbuffer, + FAR void *rxbuffer, size_t nwords) { FAR struct cxd56_spidev_s *priv = (FAR struct cxd56_spidev_s *)dev; uint32_t regval = 0; @@ -829,6 +815,44 @@ static void spi_exchange(FAR struct spi_dev_s *dev, FAR const void *txbuffer, } /**************************************************************************** + * Name: spi_exchange + * + * Description: + * Wrapper function of exchange a block of data from SPI. + * + * Input Parameters: + * dev - Device-specific state data + * txbuffer - A pointer to the buffer of data to be sent + * rxbuffer - A pointer to the buffer in which to receive data + * nwords - the length of data that to be exchanged in units of words. + * The wordsize is determined by the number of bits-per-word + * selected for the SPI interface. If nbits <= 8, the data is + * packed into uint8_t's; if nbits >8, the data is packed into + * uint16_t's + * + * Returned Value: + * None + * + ****************************************************************************/ + +static void spi_exchange(FAR struct spi_dev_s *dev, FAR const void *txbuffer, + FAR void *rxbuffer, size_t nwords) +{ +#ifdef CONFIG_CXD56_DMAC + FAR struct cxd56_spidev_s *priv = (FAR struct cxd56_spidev_s *)dev; + + if (priv->dmaenable) + { + spi_dmaexchange(dev, txbuffer, rxbuffer, nwords); + } + else +#endif + { + spi_do_exchange(dev, txbuffer, rxbuffer, nwords); + } +} + +/**************************************************************************** * Name: spi_sndblock * * Description: @@ -1143,55 +1167,10 @@ FAR struct spi_dev_s *cxd56_spibus_initialize(int port) priv->spibasefreq = cxd56_get_spi_baseclock(port); /* DMA settings */ - -#if defined(CONFIG_CXD56_DMAC_SPI4_TX) || defined(CONFIG_CXD56_DMAC_SPI4_RX) - if (port == 4) - { -#if defined(CONFIG_CXD56_DMAC_SPI4_TX) - priv->txconfig.channel_cfg = CXD56_DMA_PERIPHERAL_SPI4_TX; - priv->txdmach = cxd56_dmachannel(CONFIG_CXD56_DMAC_SPI4_TX_CH, - CONFIG_CXD56_DMAC_SPI4_TX_MAXSIZE); - if (priv->txdmach == NULL) - { - return NULL; - } -#endif -#if defined(CONFIG_CXD56_DMAC_SPI4_RX) - priv->rxconfig.channel_cfg = CXD56_DMA_PERIPHERAL_SPI4_RX; - priv->rxdmach = cxd56_dmachannel(CONFIG_CXD56_DMAC_SPI4_RX_CH, - CONFIG_CXD56_DMAC_SPI4_RX_MAXSIZE); - if (priv->rxdmach == NULL) - { - return NULL; - } -#endif - nxsem_init(&priv->dmasem, 0, 0); - } -#endif - -#if defined(CONFIG_CXD56_DMAC_SPI5_TX) || defined(CONFIG_CXD56_DMAC_SPI5_RX) - if (port == 5) - { -#if defined(CONFIG_CXD56_DMAC_SPI5_TX) - priv->txconfig.channel_cfg = CXD56_DMA_PERIPHERAL_SPI5_TX; - priv->txdmach = cxd56_dmachannel(CONFIG_CXD56_DMAC_SPI5_TX_CH, - CONFIG_CXD56_DMAC_SPI5_TX_MAXSIZE); - if (priv->txdmach == NULL) - { - return NULL; - } -#endif -#if defined(CONFIG_CXD56_DMAC_SPI5_RX) - priv->rxconfig.channel_cfg = CXD56_DMA_PERIPHERAL_SPI5_RX; - priv->rxdmach = cxd56_dmachannel(CONFIG_CXD56_DMAC_SPI5_RX_CH, - CONFIG_CXD56_DMAC_SPI5_RX_MAXSIZE); - if (priv->rxdmach == NULL) - { - return NULL; - } -#endif - nxsem_init(&priv->dmasem, 0, 0); - } +#ifdef CONFIG_CXD56_DMAC + priv->dmaenable = false; + priv->txdmach = NULL; + priv->rxdmach = NULL; #endif /* CS control */ @@ -1263,6 +1242,81 @@ FAR struct spi_dev_s *cxd56_spibus_initialize(int port) return &priv->spidev; } +#ifdef CONFIG_CXD56_DMAC + +/**************************************************************************** + * Name: cxd56_spi_dmaconfig + * + * Description: + * Enable DMA configuration. + * + * Input Parameter: + * port - Port number + * chtype - Channel type(TX or RX) + * handle - DMA channel handle + * conf - DMA configuration + * + * Returned Value: + * None + * + ****************************************************************************/ + +void cxd56_spi_dmaconfig(int port, int chtype, DMA_HANDLE handle, + FAR dma_config_t *conf) +{ + FAR struct cxd56_spidev_s *priv = NULL; + + switch (port) + { +#if defined(CONFIG_CXD56_SPI4) && defined(CONFIG_CXD56_DMAC_SPI4_TX) + case 4: + priv = &g_spi4dev; + break; +#endif + +#if defined(CONFIG_CXD56_SPI5) && defined(CONFIG_CXD56_DMAC_SPI5_TX) + case 5: + priv = &g_spi5dev; + break; +#endif + + default: + break; + } + + if (priv && priv->initialized) + { + if ((chtype == CXD56_SPI_DMAC_CHTYPE_TX) && (!priv->txdmach)) + { + /* TX DMA setting */ + + priv->txdmach = handle; + memcpy(&priv->txconfig, conf, sizeof(dma_config_t)); + + if (!priv->dmaenable) + { + sem_init(&priv->dmasem, 0, 0); + priv->dmaenable = true; + } + } + else if ((chtype == CXD56_SPI_DMAC_CHTYPE_RX) && (!priv->rxdmach)) + { + /* RX DMA setting */ + + priv->rxdmach = handle; + memcpy(&priv->rxconfig, conf, sizeof(dma_config_t)); + + if (!priv->dmaenable) + { + sem_init(&priv->dmasem, 0, 0); + priv->dmaenable = true; + } + } + } +} + +#endif + /**************************************************************************** * Name: spi_flush * diff --git a/arch/arm/src/cxd56xx/cxd56_spi.h b/arch/arm/src/cxd56xx/cxd56_spi.h index c33ba9f..656efff 100644 --- a/arch/arm/src/cxd56xx/cxd56_spi.h +++ b/arch/arm/src/cxd56xx/cxd56_spi.h @@ -44,6 +44,9 @@ #include <nuttx/config.h> #include <nuttx/spi/spi.h> #include "hardware/cxd56_spi.h" +#ifdef CONFIG_CXD56_DMAC +#include "cxd56_dmac.h" +#endif #if defined(CONFIG_CXD56_SPI0) || defined(CONFIG_CXD56_SPI3) || \ defined(CONFIG_CXD56_SPI4) || defined(CONFIG_CXD56_SPI5) @@ -68,6 +71,9 @@ * for example, will bind the SPI driver to the SPI MMC/SD driver). */ +#define CXD56_SPI_DMAC_CHTYPE_TX (0) +#define CXD56_SPI_DMAC_CHTYPE_RX (1) + /**************************************************************************** * Public Types ****************************************************************************/ @@ -108,6 +114,28 @@ extern "C" FAR struct spi_dev_s *cxd56_spibus_initialize(int port); /**************************************************************************** + * Name: cxd56_spi_dmaconfig + * + * Description: + * Enable DMA configuration. + * + * Input Parameter: + * port - Port number + * chtype - Channel type(TX or RX) + * handle - DMA channel handle + * conf - DMA configuration + * + * Returned Value: + * None + * + ****************************************************************************/ + +#ifdef CONFIG_CXD56_DMAC +void cxd56_spi_dmaconfig(int port, int chtype, DMA_HANDLE handle, + FAR dma_config_t *conf); +#endif + +/**************************************************************************** * Name: cxd56_spiXselect, cxd56_spiXstatus, and cxd56_spiXcmddata * * Description: diff --git a/boards/arm/cxd56xx/common/src/cxd56_altmdm_spi.c b/boards/arm/cxd56xx/common/src/cxd56_altmdm_spi.c index 41bcace..e8d7ccd 100644 --- a/boards/arm/cxd56xx/common/src/cxd56_altmdm_spi.c +++ b/boards/arm/cxd56xx/common/src/cxd56_altmdm_spi.c @@ -50,6 +50,7 @@ #include <nuttx/modem/altmdm.h> #include <arch/board/cxd56_altmdm.h> #include "cxd56_spi.h" +#include "cxd56_dmac.h" #include "cxd56_pinconfig.h" /**************************************************************************** @@ -57,29 +58,27 @@ ****************************************************************************/ #if defined(CONFIG_CXD56_LTE_SPI4) -#define SPI_CH (4) -#if defined(CONFIG_CXD56_LTE_SPI4_DMAC) -# if defined(CONFIG_MODEM_ALTMDM_MAX_PACKET_SIZE) -# if (CONFIG_MODEM_ALTMDM_MAX_PACKET_SIZE > CONFIG_CXD56_DMAC_SPI4_TX_MAXSIZE) -# error CONFIG_CXD56_DMAC_SPI4_TX_MAXSIZE too small -# endif -# if (CONFIG_MODEM_ALTMDM_MAX_PACKET_SIZE > CONFIG_CXD56_DMAC_SPI4_RX_MAXSIZE) -# error CONFIG_CXD56_DMAC_SPI4_RX_MAXSIZE too small +# define SPI_CH (4) +# if defined(CONFIG_CXD56_LTE_SPI4_DMAC) +# define DMA_TXCH (2) +# define DMA_RXCH (3) +# define DMA_TXCHCHG (CXD56_DMA_PERIPHERAL_SPI4_TX) +# define DMA_RXCHCFG (CXD56_DMA_PERIPHERAL_SPI4_RX) +# if !defined(CONFIG_MODEM_ALTMDM_MAX_PACKET_SIZE) +# error CONFIG_MODEM_ALTMDM_MAX_PACKET_SIZE is not set # endif # endif -#endif #elif defined(CONFIG_CXD56_LTE_SPI5) -#define SPI_CH (5) -#if defined(CONFIG_CXD56_LTE_SPI5_DMAC) -# if defined(CONFIG_MODEM_ALTMDM_MAX_PACKET_SIZE) -# if (CONFIG_MODEM_ALTMDM_MAX_PACKET_SIZE > CONFIG_CXD56_DMAC_SPI5_TX_MAXSIZE) -# error CONFIG_CXD56_DMAC_SPI5_TX_MAXSIZE too small -# endif -# if (CONFIG_MODEM_ALTMDM_MAX_PACKET_SIZE > CONFIG_CXD56_DMAC_SPI5_RX_MAXSIZE) -# error CONFIG_CXD56_DMAC_SPI5_RX_MAXSIZE too small +# define SPI_CH (5) +# if defined(CONFIG_CXD56_LTE_SPI5_DMAC) +# define DMA_TXCH (4) +# define DMA_RXCH (5) +# define DMA_TXCHCHG (CXD56_DMA_PERIPHERAL_SPI5_TX) +# define DMA_RXCHCFG (CXD56_DMA_PERIPHERAL_SPI5_RX) +# if !defined(CONFIG_MODEM_ALTMDM_MAX_PACKET_SIZE) +# error CONFIG_MODEM_ALTMDM_MAX_PACKET_SIZE is not set # endif # endif -#endif #else # error "Select LTE SPI 4 or 5" #endif @@ -110,44 +109,44 @@ static void spi_pincontrol(int bus, bool on) switch (bus) { #ifdef CONFIG_CXD56_SPI4 - case 4: - if (on) - { - CXD56_PIN_CONFIGS(PINCONFS_SPI4); - } - else - { - CXD56_PIN_CONFIGS(PINCONFS_SPI4_GPIO); - } - break; -#endif /* CONFIG_CXD56_SPI4 */ + case 4: + if (on) + { + CXD56_PIN_CONFIGS(PINCONFS_SPI4); + } + else + { + CXD56_PIN_CONFIGS(PINCONFS_SPI4_GPIO); + } + break; +#endif /* CONFIG_CXD56_SPI4 */ #ifdef CONFIG_CXD56_SPI5 - case 5: + case 5: #ifdef CONFIG_CXD56_SPI5_PINMAP_EMMC - if (on) - { - CXD56_PIN_CONFIGS(PINCONFS_EMMCA_SPI5); - } - else - { - CXD56_PIN_CONFIGS(PINCONFS_EMMCA_GPIO); - } -#endif /* CONFIG_CXD56_SPI5_PINMAP_EMMC */ + if (on) + { + CXD56_PIN_CONFIGS(PINCONFS_EMMCA_SPI5); + } + else + { + CXD56_PIN_CONFIGS(PINCONFS_EMMCA_GPIO); + } +#endif /* CONFIG_CXD56_SPI5_PINMAP_EMMC */ #ifdef CONFIG_CXD56_SPI5_PINMAP_SDIO - if (on) - { - CXD56_PIN_CONFIGS(PINCONFS_SDIOA_SPI5); - } - else - { - CXD56_PIN_CONFIGS(PINCONFS_SDIOA_GPIO); - } -#endif /* CONFIG_CXD56_SPI5_PINMAP_SDIO */ - break; -#endif /* CONFIG_CXD56_SPI5 */ - default: - break; + if (on) + { + CXD56_PIN_CONFIGS(PINCONFS_SDIOA_SPI5); + } + else + { + CXD56_PIN_CONFIGS(PINCONFS_SDIOA_GPIO); + } +#endif /* CONFIG_CXD56_SPI5_PINMAP_SDIO */ + break; +#endif /* CONFIG_CXD56_SPI5 */ + default: + break; } } @@ -166,7 +165,11 @@ static void spi_pincontrol(int bus, bool on) int board_altmdm_initialize(FAR const char *devpath) { FAR struct spi_dev_s *spi; - int spi_ch = SPI_CH; + int spi_ch = SPI_CH; +#if defined(CONFIG_CXD56_LTE_SPI4_DMAC) || defined(CONFIG_CXD56_LTE_SPI5_DMAC) + DMA_HANDLE hdl; + dma_config_t conf; +#endif m_info("Initializing ALTMDM..\n"); @@ -181,6 +184,26 @@ int board_altmdm_initialize(FAR const char *devpath) return -ENODEV; } +#if defined(CONFIG_CXD56_LTE_SPI4_DMAC) || defined(CONFIG_CXD56_LTE_SPI5_DMAC) + hdl = cxd56_dmachannel(DMA_TXCH, CONFIG_MODEM_ALTMDM_MAX_PACKET_SIZE); + if (hdl) + { + conf.channel_cfg = DMA_TXCHCHG; + conf.dest_width = CXD56_DMAC_WIDTH8; + conf.src_width = CXD56_DMAC_WIDTH8; + cxd56_spi_dmaconfig(spi_ch, CXD56_SPI_DMAC_CHTYPE_TX, hdl, &conf); + } + + hdl = cxd56_dmachannel(DMA_RXCH, CONFIG_MODEM_ALTMDM_MAX_PACKET_SIZE); + if (hdl) + { + conf.channel_cfg = DMA_RXCHCFG; + conf.dest_width = CXD56_DMAC_WIDTH8; + conf.src_width = CXD56_DMAC_WIDTH8; + cxd56_spi_dmaconfig(spi_ch, CXD56_SPI_DMAC_CHTYPE_RX, hdl, &conf); + } +#endif + spi_pincontrol(spi_ch, false); g_devhandle = altmdm_register(devpath, spi); diff --git a/boards/arm/cxd56xx/common/src/cxd56_ili9340.c b/boards/arm/cxd56xx/common/src/cxd56_ili9340.c index 9a0e4e9..1202887 100644 --- a/boards/arm/cxd56xx/common/src/cxd56_ili9340.c +++ b/boards/arm/cxd56xx/common/src/cxd56_ili9340.c @@ -334,6 +334,10 @@ int board_lcd_initialize(void) { FAR struct ili93404ws_lcd_s *priv = &g_lcddev; FAR struct spi_dev_s *spi; +#if defined(CONFIG_CXD56_DMAC) + DMA_HANDLE hdl; + dma_config_t conf; +#endif lcdinfo("Initializing lcd\n"); @@ -347,6 +351,29 @@ int board_lcd_initialize(void) } priv->spi = spi; +#if defined(CONFIG_CXD56_DMAC) + /* DMA settings */ + + hdl = cxd56_dmachannel(DISPLAY_DMA_TXCH, DISPLAY_DMA_TX_MAXSIZE); + if (hdl) + { + conf.channel_cfg = DISPLAY_DMA_TXCH_CFG; + conf.dest_width = CXD56_DMAC_WIDTH8; + conf.src_width = CXD56_DMAC_WIDTH8; + cxd56_spi_dmaconfig(DISPLAY_SPI, CXD56_SPI_DMAC_CHTYPE_TX, + hdl, &conf); + } + hdl = cxd56_dmachannel(DISPLAY_DMA_RXCH, DISPLAY_DMA_RX_MAXSIZE); + if (hdl) + { + conf.channel_cfg = DISPLAY_DMA_RXCH_CFG; + conf.dest_width = CXD56_DMAC_WIDTH8; + conf.src_width = CXD56_DMAC_WIDTH8; + cxd56_spi_dmaconfig(DISPLAY_SPI, CXD56_SPI_DMAC_CHTYPE_RX, + hdl, &conf); + } +#endif + /* Reset ILI9340 */ up_mdelay(10); diff --git a/boards/arm/cxd56xx/common/src/cxd56_lpm013m091a.c b/boards/arm/cxd56xx/common/src/cxd56_lpm013m091a.c index 9a6baa8..5052423 100644 --- a/boards/arm/cxd56xx/common/src/cxd56_lpm013m091a.c +++ b/boards/arm/cxd56xx/common/src/cxd56_lpm013m091a.c @@ -334,6 +334,10 @@ int board_lcd_initialize(void) { FAR struct lpm013m091a_lcd_s *priv = &g_lcddev; FAR struct spi_dev_s *spi; +#if defined(CONFIG_CXD56_DMAC) + DMA_HANDLE hdl; + dma_config_t conf; +#endif lcdinfo("Initializing lcd\n"); @@ -347,6 +351,29 @@ int board_lcd_initialize(void) } priv->spi = spi; +#if defined(CONFIG_CXD56_DMAC) + /* DMA settings */ + + hdl = cxd56_dmachannel(DISPLAY_DMA_TXCH, DISPLAY_DMA_TX_MAXSIZE); + if (hdl) + { + conf.channel_cfg = DISPLAY_DMA_TXCH_CFG; + conf.dest_width = CXD56_DMAC_WIDTH8; + conf.src_width = CXD56_DMAC_WIDTH8; + cxd56_spi_dmaconfig(DISPLAY_SPI, CXD56_SPI_DMAC_CHTYPE_TX, + hdl, &conf); + } + hdl = cxd56_dmachannel(DISPLAY_DMA_RXCH, DISPLAY_DMA_RX_MAXSIZE); + if (hdl) + { + conf.channel_cfg = DISPLAY_DMA_RXCH_CFG; + conf.dest_width = CXD56_DMAC_WIDTH8; + conf.src_width = CXD56_DMAC_WIDTH8; + cxd56_spi_dmaconfig(DISPLAY_SPI, CXD56_SPI_DMAC_CHTYPE_RX, + hdl, &conf); + } +#endif + /* Reset LPM013M091A */ up_mdelay(10); diff --git a/boards/arm/cxd56xx/spresense/Kconfig b/boards/arm/cxd56xx/spresense/Kconfig index 30a1001..d43655f 100644 --- a/boards/arm/cxd56xx/spresense/Kconfig +++ b/boards/arm/cxd56xx/spresense/Kconfig @@ -59,12 +59,16 @@ choice config LCD_ON_EXTENSION_BOARD bool "Extension board: SPI4" select CXD56_SPI4 + select CXD56_DMAC_SPI4_TX + select CXD56_DMAC_SPI4_RX ---help--- Display connected to extension board. config LCD_ON_MAIN_BOARD bool "Main board: SPI5" select CXD56_SPI5 + select CXD56_DMAC_SPI5_TX + select CXD56_DMAC_SPI5_RX ---help--- Display connected to main board. diff --git a/boards/arm/cxd56xx/spresense/include/board.h b/boards/arm/cxd56xx/spresense/include/board.h index a1df198..3343fea 100644 --- a/boards/arm/cxd56xx/spresense/include/board.h +++ b/boards/arm/cxd56xx/spresense/include/board.h @@ -254,6 +254,13 @@ enum board_power_device #define DISPLAY_SPI 5 +#define DISPLAY_DMA_TXCH (4) +#define DISPLAY_DMA_RXCH (5) +#define DISPLAY_DMA_TXCH_CFG CXD56_DMA_PERIPHERAL_SPI5_TX +#define DISPLAY_DMA_RXCH_CFG CXD56_DMA_PERIPHERAL_SPI5_RX +#define DISPLAY_DMA_TX_MAXSIZE (192000) +#define DISPLAY_DMA_RX_MAXSIZE (192000) + #else /* Display is connected through extension board. */ #define DISPLAY_RST PIN_SPI2_MISO @@ -261,6 +268,13 @@ enum board_power_device #define DISPLAY_SPI 4 +#define DISPLAY_DMA_TXCH (2) +#define DISPLAY_DMA_RXCH (3) +#define DISPLAY_DMA_TXCH_CFG CXD56_DMA_PERIPHERAL_SPI4_TX +#define DISPLAY_DMA_RXCH_CFG CXD56_DMA_PERIPHERAL_SPI4_RX +#define DISPLAY_DMA_TX_MAXSIZE (192000) +#define DISPLAY_DMA_RX_MAXSIZE (192000) + #endif /* Sensor device bus definitions *******************************************/ diff --git a/boards/arm/cxd56xx/spresense/src/cxd56_spi.c b/boards/arm/cxd56xx/spresense/src/cxd56_spi.c index 7435aa3..54ffba5 100644 --- a/boards/arm/cxd56xx/spresense/src/cxd56_spi.c +++ b/boards/arm/cxd56xx/spresense/src/cxd56_spi.c @@ -54,12 +54,6 @@ #include "cxd56_gpio.h" /**************************************************************************** - * Pre-processor Definitions - ****************************************************************************/ - -#define MMCSD_DETECT PIN_AP_CLK - -/**************************************************************************** * Public Functions ****************************************************************************/
