mirror of
https://github.com/apache/nuttx.git
synced 2026-09-22 14:41:29 +08:00
boards/risc-v/esp32p4: Add LPSPI and SPI3 board support
Add LPSPI and SPI3 board support for esp32[-p4] Signed-off-by: Eren Terzioglu <eren.terzioglu@espressif.com>
This commit is contained in:
committed by
Xiang Xiao
parent
6497d57c30
commit
87b63402a7
@@ -1783,7 +1783,7 @@ config ESPRESSIF_SPI_SLAVE
|
||||
|
||||
config ESPRESSIF_SPI_PERIPH
|
||||
bool
|
||||
depends on ESPRESSIF_SPI2
|
||||
depends on ESPRESSIF_SPI2 || ESPRESSIF_SPI3 || ESPRESSIF_LPSPI0
|
||||
default n
|
||||
|
||||
config ESPRESSIF_SPI2
|
||||
@@ -1802,7 +1802,7 @@ config ESPRESSIF_SPI3
|
||||
select ESPRESSIF_SPI_PERIPH
|
||||
|
||||
config ESPRESSIF_LPSPI0
|
||||
bool "LP SPI"
|
||||
bool "LP SPI0"
|
||||
depends on ARCH_CHIP_ESP32P4
|
||||
default n
|
||||
select ESPRESSIF_SPI
|
||||
|
||||
@@ -67,7 +67,8 @@ extern "C"
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
#if defined(CONFIG_ESPRESSIF_SPI2) || defined(CONFIG_ESPRESSIF_SPI_BITBANG)
|
||||
#if defined(CONFIG_ESPRESSIF_SPI2) || defined(CONFIG_ESPRESSIF_SPI_BITBANG) \
|
||||
|| defined(CONFIG_ESPRESSIF_SPI3) || defined(CONFIG_ESPRESSIF_LPSPI0)
|
||||
int board_spidev_initialize(int bus);
|
||||
#endif
|
||||
|
||||
|
||||
@@ -57,6 +57,17 @@ uint8_t esp_spi2_status(struct spi_dev_s *dev, uint32_t devid)
|
||||
|
||||
#endif
|
||||
|
||||
/****************************************************************************
|
||||
* Name: esp_spi2_select
|
||||
****************************************************************************/
|
||||
|
||||
#if defined(CONFIG_ESPRESSIF_SPI2) && defined(CONFIG_ESPRESSIF_SPI_UDCS)
|
||||
void esp_spi2_select(struct spi_dev_s *dev, uint32_t devid, bool select)
|
||||
{
|
||||
esp_gpiowrite(CONFIG_ESPRESSIF_SPI2_CSPIN, !select);
|
||||
}
|
||||
#endif
|
||||
|
||||
/****************************************************************************
|
||||
* Name: esp_spi2_cmddata
|
||||
****************************************************************************/
|
||||
@@ -83,3 +94,56 @@ int esp_spi2_cmddata(struct spi_dev_s *dev, uint32_t devid, bool cmd)
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_ESPRESSIF_SPI3
|
||||
|
||||
/****************************************************************************
|
||||
* Name: esp_spi3_status
|
||||
****************************************************************************/
|
||||
|
||||
uint8_t esp_spi3_status(struct spi_dev_s *dev, uint32_t devid)
|
||||
{
|
||||
uint8_t status = 0;
|
||||
|
||||
return status;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/****************************************************************************
|
||||
* Name: esp_spi2_select
|
||||
****************************************************************************/
|
||||
|
||||
#if defined(CONFIG_ESPRESSIF_SPI3) && defined(CONFIG_ESPRESSIF_SPI_UDCS)
|
||||
void esp_spi3_select(struct spi_dev_s *dev, uint32_t devid, bool select)
|
||||
{
|
||||
esp_gpiowrite(CONFIG_ESPRESSIF_SPI3_CSPIN, !select);
|
||||
}
|
||||
#endif
|
||||
|
||||
/****************************************************************************
|
||||
* Name: esp_spi3_cmddata
|
||||
****************************************************************************/
|
||||
|
||||
#if defined(CONFIG_ESPRESSIF_SPI3) && defined(CONFIG_SPI_CMDDATA)
|
||||
|
||||
int esp_spi3_cmddata(struct spi_dev_s *dev, uint32_t devid, bool cmd)
|
||||
{
|
||||
if (devid == SPIDEV_DISPLAY(0))
|
||||
{
|
||||
/* This is the Data/Command control pad which determines whether the
|
||||
* data bits are data or a command.
|
||||
*/
|
||||
|
||||
esp_gpiowrite(CONFIG_ESPRESSIF_SPI3_MISOPIN, !cmd);
|
||||
|
||||
return OK;
|
||||
}
|
||||
|
||||
spiinfo("devid: %" PRIu32 " CMD: %s\n", devid, cmd ? "command" :
|
||||
"data");
|
||||
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
@@ -122,6 +122,15 @@ static int spi_driver_init(int port)
|
||||
return -ENODEV;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_ESPRESSIF_LPSPI0
|
||||
/* LP SPI cannot be used on HP core due to common layer driver */
|
||||
|
||||
if (port == ESPRESSIF_LPSPI0)
|
||||
{
|
||||
return OK;
|
||||
}
|
||||
#endif
|
||||
|
||||
ret = spi_register(spi, port);
|
||||
if (ret < 0)
|
||||
{
|
||||
@@ -170,6 +179,18 @@ int board_spidev_initialize(int port)
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_ESPRESSIF_SPI3
|
||||
case ESPRESSIF_SPI3:
|
||||
{
|
||||
ret = spi_driver_init(ESPRESSIF_SPI3);
|
||||
if (ret != OK)
|
||||
{
|
||||
return ret;
|
||||
}
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_ESPRESSIF_SPI_BITBANG
|
||||
case ESPRESSIF_SPI_BITBANG:
|
||||
{
|
||||
@@ -182,6 +203,18 @@ int board_spidev_initialize(int port)
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_ESPRESSIF_LPSPI0
|
||||
case ESPRESSIF_LPSPI0:
|
||||
{
|
||||
ret = spi_driver_init(ESPRESSIF_LPSPI0);
|
||||
if (ret != OK)
|
||||
{
|
||||
return ret;
|
||||
}
|
||||
break;
|
||||
}
|
||||
#endif
|
||||
|
||||
default:
|
||||
{
|
||||
wderr("ERROR: unsupported SPI %d\n", port);
|
||||
|
||||
@@ -258,14 +258,14 @@ int esp_bringup(void)
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_ESPRESSIF_SPI
|
||||
# ifdef CONFIG_ESPRESSIF_SPI_SLAVE
|
||||
# if defined(CONFIG_ESPRESSIF_SPI2_SLAVE) && defined(CONFIG_ESPRESSIF_SPI2)
|
||||
ret = board_spislavedev_initialize(ESPRESSIF_SPI2);
|
||||
if (ret < 0)
|
||||
{
|
||||
syslog(LOG_ERR, "Failed to initialize SPI%d Slave driver: %d\n",
|
||||
ESPRESSIF_SPI2, ret);
|
||||
}
|
||||
# else
|
||||
# elif defined(CONFIG_ESPRESSIF_SPI2)
|
||||
ret = board_spidev_initialize(ESPRESSIF_SPI2);
|
||||
if (ret < 0)
|
||||
{
|
||||
@@ -273,6 +273,21 @@ int esp_bringup(void)
|
||||
}
|
||||
# endif
|
||||
|
||||
# if defined(CONFIG_ESPRESSIF_SPI3_SLAVE) && defined(CONFIG_ESPRESSIF_SPI3)
|
||||
ret = board_spislavedev_initialize(ESPRESSIF_SPI3);
|
||||
if (ret < 0)
|
||||
{
|
||||
syslog(LOG_ERR, "Failed to initialize SPI%d Slave driver: %d\n",
|
||||
ESPRESSIF_SPI3, ret);
|
||||
}
|
||||
# elif defined(CONFIG_ESPRESSIF_SPI3)
|
||||
ret = board_spidev_initialize(ESPRESSIF_SPI3);
|
||||
if (ret < 0)
|
||||
{
|
||||
syslog(LOG_ERR, "ERROR: Failed to init spidev 3: %d\n", ret);
|
||||
}
|
||||
# endif
|
||||
|
||||
# ifdef CONFIG_ESPRESSIF_SPI_BITBANG
|
||||
ret = board_spidev_initialize(ESPRESSIF_SPI_BITBANG);
|
||||
if (ret < 0)
|
||||
@@ -280,6 +295,14 @@ int esp_bringup(void)
|
||||
syslog(LOG_ERR, "ERROR: Failed to init spidev 3: %d\n", ret);
|
||||
}
|
||||
# endif /* CONFIG_ESPRESSIF_SPI_BITBANG */
|
||||
|
||||
# ifdef CONFIG_ESPRESSIF_LPSPI0
|
||||
ret = board_spidev_initialize(ESPRESSIF_LPSPI0);
|
||||
if (ret < 0)
|
||||
{
|
||||
syslog(LOG_ERR, "ERROR: Failed to init lpspi: %d\n", ret);
|
||||
}
|
||||
# endif
|
||||
#endif /* CONFIG_ESPRESSIF_SPI */
|
||||
|
||||
#ifdef CONFIG_ESPRESSIF_SPIFLASH
|
||||
|
||||
Reference in New Issue
Block a user