bcm63xx_dev_spi.h 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. #ifndef BCM63XX_DEV_SPI_H
  2. #define BCM63XX_DEV_SPI_H
  3. #include <linux/types.h>
  4. #include <bcm63xx_io.h>
  5. #include <bcm63xx_regs.h>
  6. int __init bcm63xx_spi_register(void);
  7. struct bcm63xx_spi_pdata {
  8. unsigned int fifo_size;
  9. unsigned int msg_type_shift;
  10. unsigned int msg_ctl_width;
  11. int bus_num;
  12. int num_chipselect;
  13. u32 speed_hz;
  14. };
  15. enum bcm63xx_regs_spi {
  16. SPI_CMD,
  17. SPI_INT_STATUS,
  18. SPI_INT_MASK_ST,
  19. SPI_INT_MASK,
  20. SPI_ST,
  21. SPI_CLK_CFG,
  22. SPI_FILL_BYTE,
  23. SPI_MSG_TAIL,
  24. SPI_RX_TAIL,
  25. SPI_MSG_CTL,
  26. SPI_MSG_DATA,
  27. SPI_RX_DATA,
  28. };
  29. #define __GEN_SPI_RSET_BASE(__cpu, __rset) \
  30. case SPI_## __rset: \
  31. return SPI_## __cpu ##_## __rset;
  32. #define __GEN_SPI_RSET(__cpu) \
  33. switch (reg) { \
  34. __GEN_SPI_RSET_BASE(__cpu, CMD) \
  35. __GEN_SPI_RSET_BASE(__cpu, INT_STATUS) \
  36. __GEN_SPI_RSET_BASE(__cpu, INT_MASK_ST) \
  37. __GEN_SPI_RSET_BASE(__cpu, INT_MASK) \
  38. __GEN_SPI_RSET_BASE(__cpu, ST) \
  39. __GEN_SPI_RSET_BASE(__cpu, CLK_CFG) \
  40. __GEN_SPI_RSET_BASE(__cpu, FILL_BYTE) \
  41. __GEN_SPI_RSET_BASE(__cpu, MSG_TAIL) \
  42. __GEN_SPI_RSET_BASE(__cpu, RX_TAIL) \
  43. __GEN_SPI_RSET_BASE(__cpu, MSG_CTL) \
  44. __GEN_SPI_RSET_BASE(__cpu, MSG_DATA) \
  45. __GEN_SPI_RSET_BASE(__cpu, RX_DATA) \
  46. }
  47. #define __GEN_SPI_REGS_TABLE(__cpu) \
  48. [SPI_CMD] = SPI_## __cpu ##_CMD, \
  49. [SPI_INT_STATUS] = SPI_## __cpu ##_INT_STATUS, \
  50. [SPI_INT_MASK_ST] = SPI_## __cpu ##_INT_MASK_ST, \
  51. [SPI_INT_MASK] = SPI_## __cpu ##_INT_MASK, \
  52. [SPI_ST] = SPI_## __cpu ##_ST, \
  53. [SPI_CLK_CFG] = SPI_## __cpu ##_CLK_CFG, \
  54. [SPI_FILL_BYTE] = SPI_## __cpu ##_FILL_BYTE, \
  55. [SPI_MSG_TAIL] = SPI_## __cpu ##_MSG_TAIL, \
  56. [SPI_RX_TAIL] = SPI_## __cpu ##_RX_TAIL, \
  57. [SPI_MSG_CTL] = SPI_## __cpu ##_MSG_CTL, \
  58. [SPI_MSG_DATA] = SPI_## __cpu ##_MSG_DATA, \
  59. [SPI_RX_DATA] = SPI_## __cpu ##_RX_DATA,
  60. static inline unsigned long bcm63xx_spireg(enum bcm63xx_regs_spi reg)
  61. {
  62. #ifdef BCMCPU_RUNTIME_DETECT
  63. extern const unsigned long *bcm63xx_regs_spi;
  64. return bcm63xx_regs_spi[reg];
  65. #else
  66. #ifdef CONFIG_BCM63XX_CPU_6338
  67. __GEN_SPI_RSET(6338)
  68. #endif
  69. #ifdef CONFIG_BCM63XX_CPU_6348
  70. __GEN_SPI_RSET(6348)
  71. #endif
  72. #ifdef CONFIG_BCM63XX_CPU_6358
  73. __GEN_SPI_RSET(6358)
  74. #endif
  75. #ifdef CONFIG_BCM63XX_CPU_6368
  76. __GEN_SPI_RSET(6368)
  77. #endif
  78. #endif
  79. return 0;
  80. }
  81. #endif /* BCM63XX_DEV_SPI_H */