Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

spi: sh-msiof: Add more register documentation

Signed-off-by: Geert Uytterhoeven <geert+renesas@linux-m68k.org>
Signed-off-by: Mark Brown <broonie@linaro.org>

authored by

Geert Uytterhoeven and committed by
Mark Brown
01cfef57 6a85fc5a

+98 -50
+98 -50
drivers/spi/spi-sh-msiof.c
··· 42 42 int rx_fifo_size; 43 43 }; 44 44 45 - #define TMDR1 0x00 46 - #define TMDR2 0x04 47 - #define TMDR3 0x08 48 - #define RMDR1 0x10 49 - #define RMDR2 0x14 50 - #define RMDR3 0x18 51 - #define TSCR 0x20 52 - #define RSCR 0x22 53 - #define CTR 0x28 54 - #define FCTR 0x30 55 - #define STR 0x40 56 - #define IER 0x44 57 - #define TDR1 0x48 58 - #define TDR2 0x4c 59 - #define TFDR 0x50 60 - #define RDR1 0x58 61 - #define RDR2 0x5c 62 - #define RFDR 0x60 45 + #define TMDR1 0x00 /* Transmit Mode Register 1 */ 46 + #define TMDR2 0x04 /* Transmit Mode Register 2 */ 47 + #define TMDR3 0x08 /* Transmit Mode Register 3 */ 48 + #define RMDR1 0x10 /* Receive Mode Register 1 */ 49 + #define RMDR2 0x14 /* Receive Mode Register 2 */ 50 + #define RMDR3 0x18 /* Receive Mode Register 3 */ 51 + #define TSCR 0x20 /* Transmit Clock Select Register */ 52 + #define RSCR 0x22 /* Receive Clock Select Register (SH, A1, APE6) */ 53 + #define CTR 0x28 /* Control Register */ 54 + #define FCTR 0x30 /* FIFO Control Register */ 55 + #define STR 0x40 /* Status Register */ 56 + #define IER 0x44 /* Interrupt Enable Register */ 57 + #define TDR1 0x48 /* Transmit Control Data Register 1 (SH, A1) */ 58 + #define TDR2 0x4c /* Transmit Control Data Register 2 (SH, A1) */ 59 + #define TFDR 0x50 /* Transmit FIFO Data Register */ 60 + #define RDR1 0x58 /* Receive Control Data Register 1 (SH, A1) */ 61 + #define RDR2 0x5c /* Receive Control Data Register 2 (SH, A1) */ 62 + #define RFDR 0x60 /* Receive FIFO Data Register */ 63 63 64 - #define CTR_TSCKE (1 << 15) 65 - #define CTR_TFSE (1 << 14) 66 - #define CTR_TXE (1 << 9) 67 - #define CTR_RXE (1 << 8) 64 + /* TMDR1 and RMDR1 */ 65 + #define MDR1_TRMD 0x80000000 /* Transfer Mode (1 = Master mode) */ 66 + #define MDR1_SYNCMD_MASK 0x30000000 /* SYNC Mode */ 67 + #define MDR1_SYNCMD_SPI 0x20000000 /* Level mode/SPI */ 68 + #define MDR1_SYNCMD_LR 0x30000000 /* L/R mode */ 69 + #define MDR1_SYNCAC_SHIFT 25 /* Sync Polarity (1 = Active-low) */ 70 + #define MDR1_BITLSB_SHIFT 24 /* MSB/LSB First (1 = LSB first) */ 71 + #define MDR1_FLD_MASK 0x000000c0 /* Frame Sync Signal Interval (0-3) */ 72 + #define MDR1_FLD_SHIFT 2 73 + #define MDR1_XXSTP 0x00000001 /* Transmission/Reception Stop on FIFO */ 74 + /* TMDR1 */ 75 + #define TMDR1_PCON 0x40000000 /* Transfer Signal Connection */ 68 76 69 - #define STR_TEOF (1 << 23) 70 - #define STR_REOF (1 << 7) 77 + /* TMDR2 and RMDR2 */ 78 + #define MDR2_BITLEN1(i) (((i) - 1) << 24) /* Data Size (8-32 bits) */ 79 + #define MDR2_WDLEN1(i) (((i) - 1) << 16) /* Word Count (1-64/256 (SH, A1))) */ 80 + #define MDR2_GRPMASK1 0x00000001 /* Group Output Mask 1 (SH, A1) */ 81 + 82 + /* TSCR and RSCR */ 83 + #define SCR_BRPS_MASK 0x1f00 /* Prescaler Setting (1-32) */ 84 + #define SCR_BRPS(i) (((i) - 1) << 8) 85 + #define SCR_BRDV_MASK 0x0007 /* Baud Rate Generator's Division Ratio */ 86 + #define SCR_BRDV_DIV_2 0x0000 87 + #define SCR_BRDV_DIV_4 0x0001 88 + #define SCR_BRDV_DIV_8 0x0002 89 + #define SCR_BRDV_DIV_16 0x0003 90 + #define SCR_BRDV_DIV_32 0x0004 91 + #define SCR_BRDV_DIV_1 0x0007 92 + 93 + /* CTR */ 94 + #define CTR_TSCKIZ_MASK 0xc0000000 /* Transmit Clock I/O Polarity Select */ 95 + #define CTR_TSCKIZ_SCK 0x80000000 /* Disable SCK when TX disabled */ 96 + #define CTR_TSCKIZ_POL_SHIFT 30 /* Transmit Clock Polarity */ 97 + #define CTR_RSCKIZ_MASK 0x30000000 /* Receive Clock Polarity Select */ 98 + #define CTR_RSCKIZ_SCK 0x20000000 /* Must match CTR_TSCKIZ_SCK */ 99 + #define CTR_RSCKIZ_POL_SHIFT 28 /* Receive Clock Polarity */ 100 + #define CTR_TEDG_SHIFT 27 /* Transmit Timing (1 = falling edge) */ 101 + #define CTR_REDG_SHIFT 26 /* Receive Timing (1 = falling edge) */ 102 + #define CTR_TXDIZ_MASK 0x00c00000 /* Pin Output When TX is Disabled */ 103 + #define CTR_TXDIZ_LOW 0x00000000 /* 0 */ 104 + #define CTR_TXDIZ_HIGH 0x00400000 /* 1 */ 105 + #define CTR_TXDIZ_HIZ 0x00800000 /* High-impedance */ 106 + #define CTR_TSCKE 0x00008000 /* Transmit Serial Clock Output Enable */ 107 + #define CTR_TFSE 0x00004000 /* Transmit Frame Sync Signal Output Enable */ 108 + #define CTR_TXE 0x00000200 /* Transmit Enable */ 109 + #define CTR_RXE 0x00000100 /* Receive Enable */ 110 + 111 + /* STR and IER */ 112 + #define STR_TEOF 0x00800000 /* Frame Transmission End */ 113 + #define STR_REOF 0x00000080 /* Frame Reception End */ 114 + 115 + 116 + #define DEFAULT_TX_FIFO_SIZE 64 117 + #define DEFAULT_RX_FIFO_SIZE 64 118 + 71 119 72 120 static u32 sh_msiof_read(struct sh_msiof_spi_priv *p, int reg_offs) 73 121 { ··· 179 131 unsigned short div; 180 132 unsigned short scr; 181 133 } const sh_msiof_spi_clk_table[] = { 182 - { 1, 0x0007 }, 183 - { 2, 0x0000 }, 184 - { 4, 0x0001 }, 185 - { 8, 0x0002 }, 186 - { 16, 0x0003 }, 187 - { 32, 0x0004 }, 188 - { 64, 0x1f00 }, 189 - { 128, 0x1f01 }, 190 - { 256, 0x1f02 }, 191 - { 512, 0x1f03 }, 192 - { 1024, 0x1f04 }, 134 + { 1, SCR_BRPS( 1) | SCR_BRDV_DIV_1 }, 135 + { 2, SCR_BRPS( 1) | SCR_BRDV_DIV_2 }, 136 + { 4, SCR_BRPS( 1) | SCR_BRDV_DIV_4 }, 137 + { 8, SCR_BRPS( 1) | SCR_BRDV_DIV_8 }, 138 + { 16, SCR_BRPS( 1) | SCR_BRDV_DIV_16 }, 139 + { 32, SCR_BRPS( 1) | SCR_BRDV_DIV_32 }, 140 + { 64, SCR_BRPS(32) | SCR_BRDV_DIV_2 }, 141 + { 128, SCR_BRPS(32) | SCR_BRDV_DIV_4 }, 142 + { 256, SCR_BRPS(32) | SCR_BRDV_DIV_8 }, 143 + { 512, SCR_BRPS(32) | SCR_BRDV_DIV_16 }, 144 + { 1024, SCR_BRPS(32) | SCR_BRDV_DIV_32 }, 193 145 }; 194 146 195 147 static void sh_msiof_spi_set_clk_regs(struct sh_msiof_spi_priv *p, ··· 230 182 */ 231 183 sh_msiof_write(p, FCTR, 0); 232 184 233 - tmp = 0; 234 - tmp |= !cs_high << 25; 235 - tmp |= lsb_first << 24; 236 - sh_msiof_write(p, TMDR1, 0xe0000005 | tmp); 237 - sh_msiof_write(p, RMDR1, 0x20000005 | tmp); 185 + tmp = MDR1_SYNCMD_SPI | 1 << MDR1_FLD_SHIFT | MDR1_XXSTP; 186 + tmp |= !cs_high << MDR1_SYNCAC_SHIFT; 187 + tmp |= lsb_first << MDR1_BITLSB_SHIFT; 188 + sh_msiof_write(p, TMDR1, tmp | MDR1_TRMD | TMDR1_PCON); 189 + sh_msiof_write(p, RMDR1, tmp); 238 190 239 - tmp = 0xa0000000; 240 - tmp |= cpol << 30; /* TSCKIZ */ 241 - tmp |= cpol << 28; /* RSCKIZ */ 191 + tmp = 0; 192 + tmp |= CTR_TSCKIZ_SCK | cpol << CTR_TSCKIZ_POL_SHIFT; 193 + tmp |= CTR_RSCKIZ_SCK | cpol << CTR_RSCKIZ_POL_SHIFT; 242 194 243 195 edge = cpol ^ !cpha; 244 196 245 - tmp |= edge << 27; /* TEDG */ 246 - tmp |= edge << 26; /* REDG */ 247 - tmp |= (tx_hi_z ? 2 : 0) << 22; /* TXDIZ */ 197 + tmp |= edge << CTR_TEDG_SHIFT; 198 + tmp |= edge << CTR_REDG_SHIFT; 199 + tmp |= tx_hi_z ? CTR_TXDIZ_HIZ : CTR_TXDIZ_LOW; 248 200 sh_msiof_write(p, CTR, tmp); 249 201 } 250 202 ··· 252 204 const void *tx_buf, void *rx_buf, 253 205 u32 bits, u32 words) 254 206 { 255 - u32 dr2 = ((bits - 1) << 24) | ((words - 1) << 16); 207 + u32 dr2 = MDR2_BITLEN1(bits) | MDR2_WDLEN1(words); 256 208 257 209 if (tx_buf) 258 210 sh_msiof_write(p, TMDR2, dr2); 259 211 else 260 - sh_msiof_write(p, TMDR2, dr2 | 1); 212 + sh_msiof_write(p, TMDR2, dr2 | MDR2_GRPMASK1); 261 213 262 214 if (rx_buf) 263 215 sh_msiof_write(p, RMDR2, dr2); ··· 743 695 pm_runtime_enable(&pdev->dev); 744 696 745 697 /* The standard version of MSIOF use 64 word FIFOs */ 746 - p->tx_fifo_size = 64; 747 - p->rx_fifo_size = 64; 698 + p->tx_fifo_size = DEFAULT_TX_FIFO_SIZE; 699 + p->rx_fifo_size = DEFAULT_RX_FIFO_SIZE; 748 700 749 701 /* Platform data may override FIFO sizes */ 750 702 if (p->info->tx_fifo_override)