PIC32MX SPI: Fix typos in Kconfig; Move constant SPI config data to ROM-able const structure
This commit is contained in:
parent
da2319a27f
commit
a3464c54bd
@ -142,32 +142,32 @@ config PIC32MZ_I2C5
|
||||
config PIC32MZ_SPI1
|
||||
bool "SPI1"
|
||||
default n
|
||||
select PIC32MX_SPI
|
||||
select PIC32MZ_SPI
|
||||
|
||||
config PIC32MZ_SPI2
|
||||
bool "SPI2"
|
||||
default n
|
||||
select PIC32MX_SPI
|
||||
select PIC32MZ_SPI
|
||||
|
||||
config PIC32MZ_SPI3
|
||||
bool "SPI3"
|
||||
default n
|
||||
select PIC32MX_SPI
|
||||
select PIC32MZ_SPI
|
||||
|
||||
config PIC32MZ_SPI4
|
||||
bool "SPI4"
|
||||
default n
|
||||
select PIC32MX_SPI
|
||||
select PIC32MZ_SPI
|
||||
|
||||
config PIC32MZ_SPI5
|
||||
bool "SPI5"
|
||||
default n
|
||||
select PIC32MX_SPI
|
||||
select PIC32MZ_SPI
|
||||
|
||||
config PIC32MZ_SPI6
|
||||
bool "SPI6"
|
||||
default n
|
||||
select PIC32MX_SPI
|
||||
select PIC32MZ_SPI
|
||||
|
||||
config PIC32MZ_UART1
|
||||
bool "UART1"
|
||||
|
@ -66,17 +66,7 @@
|
||||
|
||||
#define BOARD_PBCLOCK BOARD_PBCLK2
|
||||
|
||||
/* Enables non-standard debug output from this file.
|
||||
*
|
||||
* CONFIG_SPI_DEBUG && CONFIG_DEBUG - Define to enable basic SPI debug
|
||||
* CONFIG_DEBUG_VERBOSE - Define to enable verbose SPI debug
|
||||
*/
|
||||
|
||||
#ifndef CONFIG_DEBUG
|
||||
# undef CONFIG_DEBUG_SPI
|
||||
# undef CONFIG_DEBUG_VERBOSE
|
||||
# undef CONFIG_SPI_REGDEBUG
|
||||
#endif
|
||||
/* Debug */
|
||||
|
||||
#ifdef CONFIG_DEBUG_SPI
|
||||
# define spidbg lldbg
|
||||
@ -93,12 +83,12 @@
|
||||
/****************************************************************************
|
||||
* Private Types
|
||||
****************************************************************************/
|
||||
/* This structure describes the fixed (ROM-able) configuration of the SPI
|
||||
* peripheral.
|
||||
*/
|
||||
|
||||
/* This structure describes the state of the SSP driver */
|
||||
|
||||
struct pic32mz_dev_s
|
||||
struct pic32mz_config_s
|
||||
{
|
||||
struct spi_dev_s spidev; /* Externally visible part of the SPI interface */
|
||||
uint32_t base; /* SPI register base address */
|
||||
#ifdef CONFIG_PIC32MZ_SPI_INTERRUPTS
|
||||
uint8_t firq; /* SPI fault interrupt number */
|
||||
@ -108,6 +98,15 @@ struct pic32mz_dev_s
|
||||
uint8_t sdipps; /* SDI peripheral pin selection */
|
||||
uint8_t sdopps; /* SDO peripheral pin selection */
|
||||
uintptr_t sdoreg; /* SDO peripheral pin configuration register */
|
||||
};
|
||||
|
||||
/* This structure describes the state of the SPI driver */
|
||||
|
||||
struct pic32mz_dev_s
|
||||
{
|
||||
struct spi_dev_s spidev; /* Externally visible part of the SPI interface */
|
||||
FAR const struct pic32mz_config_s *config;
|
||||
|
||||
#ifndef CONFIG_SPI_OWNBUS
|
||||
sem_t exclsem; /* Held while chip is selected for mutual exclusion */
|
||||
uint32_t frequency; /* Requested clock frequency */
|
||||
@ -168,9 +167,8 @@ static const struct spi_ops_s g_spi1ops =
|
||||
#endif
|
||||
};
|
||||
|
||||
static struct pic32mz_dev_s g_spi1dev =
|
||||
static const struct pic32mz_config_s g_spi1config =
|
||||
{
|
||||
.spidev = { &g_spi1ops },
|
||||
.base = PIC32MZ_SPI1_K1BASE,
|
||||
#ifdef CONFIG_PIC32MZ_SPI_INTERRUPTS
|
||||
.firq = PIC32MZ_IRQ_SPI1F,
|
||||
@ -181,6 +179,12 @@ static struct pic32mz_dev_s g_spi1dev =
|
||||
.sdopps = PPS_OUTPUT_REGVAL(BOARD_SDO1_PPS),
|
||||
.sdoreg = PPS_OUTPUT_REGADDR(BOARD_SDO1_PPS),
|
||||
};
|
||||
|
||||
static struct pic32mz_dev_s g_spi1dev =
|
||||
{
|
||||
.spidev = { &g_spi1ops },
|
||||
.config = &g_spi1config,
|
||||
};
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_PIC32MZ_SPI2
|
||||
@ -207,9 +211,8 @@ static const struct spi_ops_s g_spi2ops =
|
||||
#endif
|
||||
};
|
||||
|
||||
static struct pic32mz_dev_s g_spi2dev =
|
||||
static const struct pic32mz_config_s g_spi2config =
|
||||
{
|
||||
.spidev = { &g_spi2ops },
|
||||
.base = PIC32MZ_SPI2_K1BASE,
|
||||
#ifdef CONFIG_PIC32MZ_SPI_INTERRUPTS
|
||||
.firq = PIC32MZ_IRQ_SPI2F,
|
||||
@ -220,6 +223,12 @@ static struct pic32mz_dev_s g_spi2dev =
|
||||
.sdopps = PPS_OUTPUT_REGVAL(BOARD_SDO2_PPS),
|
||||
.sdoreg = PPS_OUTPUT_REGADDR(BOARD_SDO2_PPS),
|
||||
};
|
||||
|
||||
static struct pic32mz_dev_s g_spi2dev =
|
||||
{
|
||||
.spidev = { &g_spi2ops },
|
||||
.config = &g_spi2config,
|
||||
};
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_PIC32MZ_SPI3
|
||||
@ -246,9 +255,8 @@ static const struct spi_ops_s g_spi3ops =
|
||||
#endif
|
||||
};
|
||||
|
||||
static struct pic32mz_dev_s g_spi3dev =
|
||||
static const struct pic32mz_config_s g_spi3config =
|
||||
{
|
||||
.spidev = { &g_spi3ops },
|
||||
.base = PIC32MZ_SPI3_K1BASE,
|
||||
#ifdef CONFIG_PIC32MZ_SPI_INTERRUPTS
|
||||
.firq = PIC32MZ_IRQ_SPI3F,
|
||||
@ -259,6 +267,12 @@ static struct pic32mz_dev_s g_spi3dev =
|
||||
.sdopps = PPS_OUTPUT_REGVAL(BOARD_SDO3_PPS),
|
||||
.sdoreg = PPS_OUTPUT_REGADDR(BOARD_SDO3_PPS),
|
||||
};
|
||||
|
||||
static struct pic32mz_dev_s g_spi3dev =
|
||||
{
|
||||
.spidev = { &g_spi3ops },
|
||||
.config = &g_spi3config,
|
||||
};
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_PIC32MZ_SPI4
|
||||
@ -285,9 +299,8 @@ static const struct spi_ops_s g_spi4ops =
|
||||
#endif
|
||||
};
|
||||
|
||||
static struct pic32mz_dev_s g_spi4dev =
|
||||
static const struct pic32mz_config_s g_spi4config =
|
||||
{
|
||||
.spidev = { &g_spi4ops },
|
||||
.base = PIC32MZ_SPI4_K1BASE,
|
||||
#ifdef CONFIG_PIC32MZ_SPI_INTERRUPTS
|
||||
.firq = PIC32MZ_IRQ_SPI4F,
|
||||
@ -298,6 +311,12 @@ static struct pic32mz_dev_s g_spi4dev =
|
||||
.sdopps = PPS_OUTPUT_REGVAL(BOARD_SDO4_PPS),
|
||||
.sdoreg = PPS_OUTPUT_REGADDR(BOARD_SDO4_PPS),
|
||||
};
|
||||
|
||||
static struct pic32mz_dev_s g_spi4dev =
|
||||
{
|
||||
.spidev = { &g_spi4ops },
|
||||
.config = &g_spi4config,
|
||||
};
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_PIC32MZ_SPI5
|
||||
@ -324,9 +343,8 @@ static const struct spi_ops_s g_spi5ops =
|
||||
#endif
|
||||
};
|
||||
|
||||
static struct pic32mz_dev_s g_spi5dev =
|
||||
static const struct pic32mz_config_s g_spi5config =
|
||||
{
|
||||
.spidev = { &g_spi5ops },
|
||||
.base = PIC32MZ_SPI5_K1BASE,
|
||||
#ifdef CONFIG_PIC32MZ_SPI_INTERRUPTS
|
||||
.firq = PIC32MZ_IRQ_SPI5F,
|
||||
@ -337,6 +355,12 @@ static struct pic32mz_dev_s g_spi5dev =
|
||||
.sdopps = PPS_OUTPUT_REGVAL(BOARD_SDO5_PPS),
|
||||
.sdoreg = PPS_OUTPUT_REGADDR(BOARD_SDO5_PPS),
|
||||
};
|
||||
|
||||
static struct pic32mz_dev_s g_spi5dev =
|
||||
{
|
||||
.spidev = { &g_spi5ops },
|
||||
.config = &g_spi5config,
|
||||
};
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_PIC32MZ_SPI6
|
||||
@ -363,9 +387,8 @@ static const struct spi_ops_s g_spi6ops =
|
||||
#endif
|
||||
};
|
||||
|
||||
static struct pic32mz_dev_s g_spi6dev =
|
||||
static const struct pic32mz_config_s g_spi6config =
|
||||
{
|
||||
.spidev = { &g_spi6ops },
|
||||
.base = PIC32MZ_SPI6_K1BASE,
|
||||
#ifdef CONFIG_PIC32MZ_SPI_INTERRUPTS
|
||||
.firq = PIC32MZ_IRQ_SPI6F,
|
||||
@ -376,6 +399,12 @@ static struct pic32mz_dev_s g_spi6dev =
|
||||
.sdopps = PPS_OUTPUT_REGVAL(BOARD_SDO6_PPS),
|
||||
.sdoreg = PPS_OUTPUT_REGADDR(BOARD_SDO6_PPS),
|
||||
};
|
||||
|
||||
static struct pic32mz_dev_s g_spi6dev =
|
||||
{
|
||||
.spidev = { &g_spi6ops },
|
||||
.config = &g_spi6config,
|
||||
};
|
||||
#endif
|
||||
|
||||
/****************************************************************************
|
||||
@ -417,7 +446,7 @@ static uint32_t spi_getreg(FAR struct pic32mz_dev_s *priv, unsigned int offset)
|
||||
|
||||
/* Read the value from the register */
|
||||
|
||||
addr = priv->base + offset;
|
||||
addr = priv->config->base + offset;
|
||||
value = getreg32(addr);
|
||||
|
||||
/* Is this the same value that we read from the same register last time?
|
||||
@ -464,7 +493,7 @@ static uint32_t spi_getreg(FAR struct pic32mz_dev_s *priv, unsigned int offset)
|
||||
#else
|
||||
static uint32_t spi_getreg(FAR struct pic32mz_dev_s *priv, unsigned int offset)
|
||||
{
|
||||
return getreg32(priv->base + offset);
|
||||
return getreg32(priv->config->base + offset);
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -492,7 +521,7 @@ static void spi_putreg(FAR struct pic32mz_dev_s *priv, unsigned int offset,
|
||||
|
||||
/* Get the address to write to */
|
||||
|
||||
addr = priv->base + offset;
|
||||
addr = priv->config->base + offset;
|
||||
|
||||
/* Show the register value being written */
|
||||
|
||||
@ -506,7 +535,7 @@ static void spi_putreg(FAR struct pic32mz_dev_s *priv, unsigned int offset,
|
||||
static void spi_putreg(FAR struct pic32mz_dev_s *priv, unsigned int offset,
|
||||
uint32_t value)
|
||||
{
|
||||
putreg32(value, priv->base + offset);
|
||||
putreg32(value, priv->config->base + offset);
|
||||
}
|
||||
#endif
|
||||
|
||||
@ -1051,9 +1080,9 @@ FAR struct spi_dev_s *up_spiinitialize(int port)
|
||||
|
||||
flags = irqsave();
|
||||
#ifdef CONFIG_PIC32MZ_SPI_INTERRUPTS
|
||||
up_disable_irq(priv->firq);
|
||||
up_disable_irq(priv->txirq);
|
||||
up_disable_irq(priv->rxirq);
|
||||
up_disable_irq(priv->config->firq);
|
||||
up_disable_irq(priv->config->rxirq);
|
||||
up_disable_irq(priv->config->txirq);
|
||||
#endif
|
||||
|
||||
/* Stop and reset the SPI module by clearing the ON bit in the CON register. */
|
||||
@ -1068,32 +1097,35 @@ FAR struct spi_dev_s *up_spiinitialize(int port)
|
||||
* managed as GPIOs; CLK (output) pins are not selectable.
|
||||
*/
|
||||
|
||||
putreg32((uint32_t)priv->sdipps, regaddr);
|
||||
putreg32((uint32_t)priv->sdopps, priv->sdoreg);
|
||||
putreg32((uint32_t)priv->config->sdipps, regaddr);
|
||||
putreg32((uint32_t)priv->config->sdopps, priv->config->sdoreg);
|
||||
|
||||
#ifdef CONFIG_PIC32MZ_SPI_INTERRUPTS
|
||||
/* Attach the interrupt handlers. We do this early to make sure that the
|
||||
* resources are available.
|
||||
*/
|
||||
|
||||
ret = irq_attach(priv->rxirq, spi_interrupt);
|
||||
ret = irq_attach(priv->config->rxirq, spi_interrupt);
|
||||
if (ret < 0)
|
||||
{
|
||||
spidbg("Failed to attach RX interrupt: %d port: %d\n", priv->rxirq, port);
|
||||
spidbg("Failed to attach RX interrupt: %d port: %d\n",
|
||||
priv->config->rxirq, port);
|
||||
goto errout;
|
||||
}
|
||||
|
||||
ret = irq_attach(priv->txirq, spi_interrupt);
|
||||
ret = irq_attach(priv->config->txirq, spi_interrupt);
|
||||
if (ret < 0)
|
||||
{
|
||||
spidbg("Failed to attach TX interrupt: %d port: %d\n", priv->txirq, port);
|
||||
spidbg("Failed to attach TX interrupt: %d port: %d\n",
|
||||
priv->tconfig->xirq, port);
|
||||
goto errout_with_rxirq;
|
||||
}
|
||||
|
||||
ret = irq_attach(priv->firq, spi_interrupt);
|
||||
ret = irq_attach(priv->config->firq, spi_interrupt);
|
||||
if (ret < 0)
|
||||
{
|
||||
spidbg("Failed to attach fault interrupt: %d port: %d\n", priv->firq, port);
|
||||
spidbg("Failed to attach fault interrupt: %d port: %d\n",
|
||||
priv->config->firq, port);
|
||||
goto errout_with_txirq;
|
||||
}
|
||||
#endif
|
||||
@ -1137,9 +1169,9 @@ FAR struct spi_dev_s *up_spiinitialize(int port)
|
||||
#ifdef CONFIG_PIC32MZ_SPI_INTERRUPTS
|
||||
/* Enable interrupts at the SPI controller */
|
||||
|
||||
up_enable_irq(priv->firq);
|
||||
up_enable_irq(priv->txirq);
|
||||
up_enable_irq(priv->rxirq);
|
||||
up_enable_irq(priv->config->firq);
|
||||
up_enable_irq(priv->config->rxirq);
|
||||
up_enable_irq(priv->config->txirq);
|
||||
#endif
|
||||
|
||||
/* Enable interrupts at the interrupt controller */
|
||||
@ -1149,9 +1181,9 @@ FAR struct spi_dev_s *up_spiinitialize(int port)
|
||||
|
||||
#ifdef CONFIG_PIC32MZ_SPI_INTERRUPTS
|
||||
errout_with_txirq:
|
||||
irq_detatch(priv->txirq);
|
||||
irq_detatch(priv->config->txirq);
|
||||
errout_with_rxirq:
|
||||
irq_detatch(priv->rxirq);
|
||||
irq_detatch(priv->config->rxirq);
|
||||
errout:
|
||||
irqrestore(flags);
|
||||
return NULL;
|
||||
|
Loading…
Reference in New Issue
Block a user