summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/soc/rockchip/common/spi.c33
1 files changed, 30 insertions, 3 deletions
diff --git a/src/soc/rockchip/common/spi.c b/src/soc/rockchip/common/spi.c
index 814f0b5515..6784f5b975 100644
--- a/src/soc/rockchip/common/spi.c
+++ b/src/soc/rockchip/common/spi.c
@@ -35,7 +35,7 @@ struct rockchip_spi_slave {
#define SPI_SRCCLK_HZ (99*MHz)
#define SPI_FIFO_DEPTH 32
-static struct rockchip_spi_slave rockchip_spi_slaves[3] = {
+static struct rockchip_spi_slave rockchip_spi_slaves[] = {
{
.slave = {
.bus = 0,
@@ -54,7 +54,33 @@ static struct rockchip_spi_slave rockchip_spi_slaves[3] = {
},
.regs = (void *)SPI2_BASE,
},
-
+#ifdef SPI3_BASE
+ {
+ .slave = {
+ .bus = 3,
+ .rw = SPI_READ_FLAG | SPI_WRITE_FLAG,
+ },
+ .regs = (void *)SPI3_BASE,
+ },
+#ifdef SPI4_BASE
+ {
+ .slave = {
+ .bus = 4,
+ .rw = SPI_READ_FLAG | SPI_WRITE_FLAG,
+ },
+ .regs = (void *)SPI4_BASE,
+ },
+#ifdef SPI5_BASE
+ {
+ .slave = {
+ .bus = 5,
+ .rw = SPI_READ_FLAG | SPI_WRITE_FLAG,
+ },
+ .regs = (void *)SPI5_BASE,
+ },
+#endif
+#endif
+#endif
};
static struct rockchip_spi_slave *to_rockchip_spi(struct spi_slave *slave)
@@ -64,7 +90,7 @@ static struct rockchip_spi_slave *to_rockchip_spi(struct spi_slave *slave)
struct spi_slave *spi_setup_slave(unsigned int bus, unsigned int cs)
{
- assert(bus >= 0 && bus < 3);
+ assert(bus >= 0 && bus < ARRAY_SIZE(rockchip_spi_slaves));
return &(rockchip_spi_slaves[bus].slave);
}
@@ -97,6 +123,7 @@ static void rockchip_spi_set_clk(struct rockchip_spi *regs, unsigned int hz)
void rockchip_spi_init(unsigned int bus, unsigned int speed_hz)
{
+ assert(bus >= 0 && bus < ARRAY_SIZE(rockchip_spi_slaves));
struct rockchip_spi *regs = rockchip_spi_slaves[bus].regs;
unsigned int ctrlr0 = 0;