[cns3xxx]: select the right cpu
[openwrt.git] / target / linux / brcm63xx / patches-2.6.39 / 240-spi.patch
index d882c21..54bed22 100644 (file)
        [IRQ_DSL]               = BCM_6358_DSL_IRQ,
 --- /dev/null
 +++ b/arch/mips/bcm63xx/dev-spi.c
-@@ -0,0 +1,128 @@
+@@ -0,0 +1,98 @@
 +/*
 + * This file is subject to the terms and conditions of the GNU General Public
 + * License.  See the file "COPYING" in the main directory of this archive
 + * for more details.
 + *
-+ * Copyright (C) 2009 Florian Fainelli <florian@openwrt.org>
++ * Copyright (C) 2009-2011 Florian Fainelli <florian@openwrt.org>
 + * Copyright (C) 2010 Tanguy Bouzeloc <tanguy.bouzeloc@efixo.com>
 + */
 +
 + * register offsets
 + */
 +static const unsigned long bcm96338_regs_spi[] = {
-+      [SPI_CMD]               = SPI_BCM_6338_SPI_CMD,
-+      [SPI_INT_STATUS]        = SPI_BCM_6338_SPI_INT_STATUS,
-+      [SPI_INT_MASK_ST]       = SPI_BCM_6338_SPI_MASK_INT_ST,
-+      [SPI_INT_MASK]          = SPI_BCM_6338_SPI_INT_MASK,
-+      [SPI_ST]                = SPI_BCM_6338_SPI_ST,
-+      [SPI_CLK_CFG]           = SPI_BCM_6338_SPI_CLK_CFG,
-+      [SPI_FILL_BYTE]         = SPI_BCM_6338_SPI_FILL_BYTE,
-+      [SPI_MSG_TAIL]          = SPI_BCM_6338_SPI_MSG_TAIL,
-+      [SPI_RX_TAIL]           = SPI_BCM_6338_SPI_RX_TAIL,
-+      [SPI_MSG_CTL]           = SPI_BCM_6338_SPI_MSG_CTL,
-+      [SPI_MSG_DATA]          = SPI_BCM_6338_SPI_MSG_DATA,
-+      [SPI_RX_DATA]           = SPI_BCM_6338_SPI_RX_DATA,
++      __GEN_SPI_REGS_TABLE(6338)
 +};
 +
 +static const unsigned long bcm96348_regs_spi[] = {
-+      [SPI_CMD]               = SPI_BCM_6348_SPI_CMD,
-+      [SPI_INT_STATUS]        = SPI_BCM_6348_SPI_INT_STATUS,
-+      [SPI_INT_MASK_ST]       = SPI_BCM_6348_SPI_MASK_INT_ST,
-+      [SPI_INT_MASK]          = SPI_BCM_6348_SPI_INT_MASK,
-+      [SPI_ST]                = SPI_BCM_6348_SPI_ST,
-+      [SPI_CLK_CFG]           = SPI_BCM_6348_SPI_CLK_CFG,
-+      [SPI_FILL_BYTE]         = SPI_BCM_6348_SPI_FILL_BYTE,
-+      [SPI_MSG_TAIL]          = SPI_BCM_6348_SPI_MSG_TAIL,
-+      [SPI_RX_TAIL]           = SPI_BCM_6348_SPI_RX_TAIL,
-+      [SPI_MSG_CTL]           = SPI_BCM_6348_SPI_MSG_CTL,
-+      [SPI_MSG_DATA]          = SPI_BCM_6348_SPI_MSG_DATA,
-+      [SPI_RX_DATA]           = SPI_BCM_6348_SPI_RX_DATA,
++      __GEN_SPI_REGS_TABLE(6348)
 +};
 +
 +static const unsigned long bcm96358_regs_spi[] = {
-+      [SPI_CMD]               = SPI_BCM_6358_SPI_CMD,
-+      [SPI_INT_STATUS]        = SPI_BCM_6358_SPI_INT_STATUS,
-+      [SPI_INT_MASK_ST]       = SPI_BCM_6358_SPI_MASK_INT_ST,
-+      [SPI_INT_MASK]          = SPI_BCM_6358_SPI_INT_MASK,
-+      [SPI_ST]                = SPI_BCM_6358_SPI_STATUS,
-+      [SPI_CLK_CFG]           = SPI_BCM_6358_SPI_CLK_CFG,
-+      [SPI_FILL_BYTE]         = SPI_BCM_6358_SPI_FILL_BYTE,
-+      [SPI_MSG_TAIL]          = SPI_BCM_6358_SPI_MSG_TAIL,
-+      [SPI_RX_TAIL]           = SPI_BCM_6358_SPI_RX_TAIL,
-+      [SPI_MSG_CTL]           = SPI_BCM_6358_MSG_CTL,
-+      [SPI_MSG_DATA]          = SPI_BCM_6358_SPI_MSG_DATA,
-+      [SPI_RX_DATA]           = SPI_BCM_6358_SPI_RX_DATA,
++      __GEN_SPI_REGS_TABLE(6358)
 +};
 +
 +const unsigned long *bcm63xx_regs_spi;
 +      spi_resources[0].end += RSET_SPI_SIZE - 1;
 +      spi_resources[1].start = bcm63xx_get_irq_number(IRQ_SPI);
 +
++      if (BCMCPU_IS_6345())
++              return -ENODEV;
++
 +      /* Fill in platform data */
 +      if (BCMCPU_IS_6338() || BCMCPU_IS_6348())
 +              spi_pdata.fifo_size = SPI_BCM_6338_SPI_MSG_DATA_SIZE;
 +/* BCM 6338 SPI core */
 +#define SPI_BCM_6338_SPI_CMD          0x00    /* 16-bits register */
 +#define SPI_BCM_6338_SPI_INT_STATUS   0x02
-+#define SPI_BCM_6338_SPI_MASK_INT_ST  0x03
++#define SPI_BCM_6338_SPI_INT_MASK_ST  0x03
 +#define SPI_BCM_6338_SPI_INT_MASK     0x04
 +#define SPI_BCM_6338_SPI_ST           0x05
 +#define SPI_BCM_6338_SPI_CLK_CFG      0x06
 +#define SPI_BCM_6338_SPI_RX_DATA_SIZE 0x3f
 +
 +/* BCM 6348 SPI core */
-+#define SPI_BCM_6348_SPI_MASK_INT_ST  0x00
++#define SPI_BCM_6348_SPI_INT_MASK_ST  0x00
 +#define SPI_BCM_6348_SPI_INT_STATUS   0x01
 +#define SPI_BCM_6348_SPI_CMD          0x02    /* 16-bits register */
 +#define SPI_BCM_6348_SPI_FILL_BYTE    0x04
 +#define SPI_BCM_6348_SPI_RX_DATA_SIZE 0x3f
 +
 +/* BCM 6358 SPI core */
-+#define SPI_BCM_6358_MSG_CTL          0x00    /* 16-bits register */
++#define SPI_BCM_6358_SPI_MSG_CTL      0x00    /* 16-bits register */
 +
 +#define SPI_BCM_6358_SPI_MSG_DATA     0x02
 +#define SPI_BCM_6358_SPI_MSG_DATA_SIZE        0x21e
 +#define SPI_BCM_6358_SPI_CMD          0x700   /* 16-bits register */
 +
 +#define SPI_BCM_6358_SPI_INT_STATUS   0x702
-+#define SPI_BCM_6358_SPI_MASK_INT_ST  0x703
++#define SPI_BCM_6358_SPI_INT_MASK_ST  0x703
 +
 +#define SPI_BCM_6358_SPI_INT_MASK     0x704
 +
-+#define SPI_BCM_6358_SPI_STATUS               0x705
++#define SPI_BCM_6358_SPI_ST           0x705
 +
 +#define SPI_BCM_6358_SPI_CLK_CFG      0x706
 +
  spi_s3c24xx_hw-y                      := spi_s3c24xx.o
 --- /dev/null
 +++ b/arch/mips/include/asm/mach-bcm63xx/bcm63xx_dev_spi.h
-@@ -0,0 +1,126 @@
+@@ -0,0 +1,85 @@
 +#ifndef BCM63XX_DEV_SPI_H
 +#define BCM63XX_DEV_SPI_H
 +
 +        SPI_RX_DATA,
 +};
 +
++#define __GEN_SPI_RSET_BASE(__cpu, __rset)                            \
++      case SPI_## __rset:                                             \
++              return SPI_BCM_## __cpu ##_SPI_## __rset ##;
++
++#define __GEN_SPI_RSET(__cpu)                                         \
++      switch (reg) {                                                  \
++      __GEN_SPI_RSET_BASE(__cpu, CMD)                                 \
++      __GEN_SPI_RSET_BASE(__cpu, INT_STATUS)                          \
++      __GEN_SPI_RSET_BASE(__cpu, INT_MASK_ST)                         \
++      __GEN_SPI_RSET_BASE(__cpu, INT_MASK)                            \
++      __GEN_SPI_RSET_BASE(__cpu, ST)                                  \
++      __GEN_SPI_RSET_BASE(__cpu, CLK_CFG)                             \
++      __GEN_SPI_RSET_BASE(__cpu, FILL_BYTE)                           \
++      __GEN_SPI_RSET_BASE(__cpu, MSG_TAIL)                            \
++      __GEN_SPI_RSET_BASE(__cpu, RX_TAIL)                             \
++      __GEN_SPI_RSET_BASE(__cpu, MSG_CTL)                             \
++      __GEN_SPI_RSET_BASE(__cpu, MSG_DATA)                            \
++      __GEN_SPI_RSET_BASE(__cpu, RX_DATA)                             \
++      }
++
++#define __GEN_SPI_REGS_TABLE(__cpu)                                   \
++      [SPI_CMD]               = SPI_BCM_## __cpu ##_SPI_CMD,          \
++      [SPI_INT_STATUS]        = SPI_BCM_## __cpu ##_SPI_INT_STATUS,   \
++      [SPI_INT_MASK_ST]       = SPI_BCM_## __cpu ##_SPI_INT_MASK_ST,  \
++      [SPI_INT_MASK]          = SPI_BCM_## __cpu ##_SPI_INT_MASK,     \
++      [SPI_ST]                = SPI_BCM_## __cpu ##_SPI_ST,           \
++      [SPI_CLK_CFG]           = SPI_BCM_## __cpu ##_SPI_CLK_CFG,      \
++      [SPI_FILL_BYTE]         = SPI_BCM_## __cpu ##_SPI_FILL_BYTE,    \
++      [SPI_MSG_TAIL]          = SPI_BCM_## __cpu ##_SPI_MSG_TAIL,     \
++      [SPI_RX_TAIL]           = SPI_BCM_## __cpu ##_SPI_RX_TAIL,      \
++      [SPI_MSG_CTL]           = SPI_BCM_## __cpu ##_SPI_MSG_CTL,      \
++      [SPI_MSG_DATA]          = SPI_BCM_## __cpu ##_SPI_MSG_DATA,     \
++      [SPI_RX_DATA]           = SPI_BCM_## __cpu ##_SPI_RX_DATA,
++
 +static inline unsigned long bcm63xx_spireg(enum bcm63xx_regs_spi reg)
 +{
 +#ifdef BCMCPU_RUNTIME_DETECT
 +        return bcm63xx_regs_spi[reg];
 +#else
 +#ifdef CONFIG_BCM63XX_CPU_6338
-+switch (reg) {
-+      case SPI_CMD:
-+              return SPI_BCM_6338_SPI_CMD;
-+      case SPI_INT_STATUS:
-+              return SPI_BCM_6338_SPI_INT_STATUS;
-+      case SPI_INT_MASK_ST:
-+              return SPI_BCM_6338_SPI_MASK_INT_ST;
-+      case SPI_INT_MASK:
-+              return SPI_BCM_6338_SPI_INT_MASK;
-+      case SPI_ST:
-+              return SPI_BCM_6338_SPI_ST;
-+      case SPI_CLK_CFG:
-+              return SPI_BCM_6338_SPI_CLK_CFG;
-+      case SPI_FILL_BYTE:
-+              return SPI_BCM_6338_SPI_FILL_BYTE;
-+      case SPI_MSG_TAIL:
-+              return SPI_BCM_6338_SPI_MSG_TAIL;
-+      case SPI_RX_TAIL:
-+              return SPI_BCM_6338_SPI_RX_TAIL;
-+      case SPI_MSG_CTL:
-+              return SPI_BCM_6338_SPI_MSG_CTL;
-+      case SPI_MSG_DATA:
-+              return SPI_BCM_6338_SPI_MSG_DATA;
-+      case SPI_RX_DATA:
-+              return SPI_BCM_6338_SPI_RX_DATA;
-+}
++      __GEN_SPI_RSET(6338)
 +#endif
 +#ifdef CONFIG_BCM63XX_CPU_6348
-+switch (reg) {
-+      case SPI_CMD:
-+              return SPI_BCM_6348_SPI_CMD;
-+      case SPI_INT_MASK_ST:
-+              return SPI_BCM_6348_SPI_MASK_INT_ST;
-+      case SPI_INT_MASK:
-+              return SPI_BCM_6348_SPI_INT_MASK;
-+      case SPI_INT_STATUS:
-+              return SPI_BCM_6348_SPI_INT_STATUS;
-+      case SPI_ST:
-+              return SPI_BCM_6348_SPI_ST;
-+      case SPI_CLK_CFG:
-+              return SPI_BCM_6348_SPI_CLK_CFG;
-+      case SPI_FILL_BYTE:
-+              return SPI_BCM_6348_SPI_FILL_BYTE;
-+      case SPI_MSG_TAIL:
-+              return SPI_BCM_6348_SPI_MSG_TAIL;
-+      case SPI_RX_TAIL:
-+              return SPI_BCM_6348_SPI_RX_TAIL;
-+      case SPI_MSG_CTL:
-+              return SPI_BCM_6348_SPI_MSG_CTL;
-+      case SPI_MSG_DATA:
-+              return SPI_BCM_6348_SPI_MSG_DATA;
-+      case SPI_RX_DATA:
-+              return SPI_BCM_6348_SPI_RX_DATA;
-+}
++      __GEN_SPI_RSET(6348)
 +#endif
 +#ifdef CONFIG_BCM63XX_CPU_6358
-+switch (reg) {
-+      case SPI_CMD:
-+              return SPI_BCM_6358_SPI_CMD;
-+      case SPI_INT_STATUS:
-+              return SPI_BCM_6358_SPI_INT_STATUS;
-+      case SPI_INT_MASK_ST:
-+              return SPI_BCM_6358_SPI_MASK_INT_ST;
-+      case SPI_INT_MASK:
-+              return SPI_BCM_6358_SPI_INT_MASK;
-+      case SPI_ST:
-+              return SPI_BCM_6358_SPI_STATUS;
-+      case SPI_CLK_CFG:
-+              return SPI_BCM_6358_SPI_CLK_CFG;
-+      case SPI_FILL_BYTE:
-+              return SPI_BCM_6358_SPI_FILL_BYTE;
-+      case SPI_MSG_TAIL:
-+              return SPI_BCM_6358_SPI_MSG_TAIL;
-+      case SPI_RX_TAIL:
-+              return SPI_BCM_6358_SPI_RX_TAIL;
-+      case SPI_MSG_CTL:
-+              return SPI_BCM_6358_MSG_CTL;
-+      case SPI_MSG_DATA:
-+              return SPI_BCM_6358_SPI_MSG_DATA;
-+      case SPI_RX_DATA:
-+              return SPI_BCM_6358_SPI_RX_DATA;
-+}
++      __GEN_SPI_RSET(6358)
 +#endif
 +#endif
 +      return 0;
  #include <board_bcm963xx.h>
  
  #define PFX   "board_bcm963xx: "
-@@ -931,6 +932,9 @@ int __init board_register_devices(void)
+@@ -927,6 +928,8 @@ int __init board_register_devices(void)
        if (board.num_spis)
                spi_register_board_info(board.spis, board.num_spis);
  
-+      if (!BCMCPU_IS_6345())
-+              bcm63xx_spi_register();
++      bcm63xx_spi_register();
 +
        /* read base address of boot chip select (0) */
        if (BCMCPU_IS_6345())
This page took 0.029227 seconds and 4 git commands to generate.