]> git.karo-electronics.de Git - karo-tx-linux.git/blob - drivers/spi/spi-sh-msiof.c
spi: sh-msiof: Convert to spi core auto_runtime_pm framework
[karo-tx-linux.git] / drivers / spi / spi-sh-msiof.c
1 /*
2  * SuperH MSIOF SPI Master Interface
3  *
4  * Copyright (c) 2009 Magnus Damm
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License version 2 as
8  * published by the Free Software Foundation.
9  *
10  */
11
12 #include <linux/bitmap.h>
13 #include <linux/clk.h>
14 #include <linux/completion.h>
15 #include <linux/delay.h>
16 #include <linux/err.h>
17 #include <linux/gpio.h>
18 #include <linux/init.h>
19 #include <linux/interrupt.h>
20 #include <linux/io.h>
21 #include <linux/kernel.h>
22 #include <linux/module.h>
23 #include <linux/of.h>
24 #include <linux/of_device.h>
25 #include <linux/platform_device.h>
26 #include <linux/pm_runtime.h>
27
28 #include <linux/spi/sh_msiof.h>
29 #include <linux/spi/spi.h>
30
31 #include <asm/unaligned.h>
32
33
34 struct sh_msiof_chipdata {
35         u16 tx_fifo_size;
36         u16 rx_fifo_size;
37         u16 master_flags;
38 };
39
40 struct sh_msiof_spi_priv {
41         void __iomem *mapbase;
42         struct clk *clk;
43         struct platform_device *pdev;
44         const struct sh_msiof_chipdata *chipdata;
45         struct sh_msiof_spi_info *info;
46         struct completion done;
47         int tx_fifo_size;
48         int rx_fifo_size;
49 };
50
51 #define TMDR1   0x00    /* Transmit Mode Register 1 */
52 #define TMDR2   0x04    /* Transmit Mode Register 2 */
53 #define TMDR3   0x08    /* Transmit Mode Register 3 */
54 #define RMDR1   0x10    /* Receive Mode Register 1 */
55 #define RMDR2   0x14    /* Receive Mode Register 2 */
56 #define RMDR3   0x18    /* Receive Mode Register 3 */
57 #define TSCR    0x20    /* Transmit Clock Select Register */
58 #define RSCR    0x22    /* Receive Clock Select Register (SH, A1, APE6) */
59 #define CTR     0x28    /* Control Register */
60 #define FCTR    0x30    /* FIFO Control Register */
61 #define STR     0x40    /* Status Register */
62 #define IER     0x44    /* Interrupt Enable Register */
63 #define TDR1    0x48    /* Transmit Control Data Register 1 (SH, A1) */
64 #define TDR2    0x4c    /* Transmit Control Data Register 2 (SH, A1) */
65 #define TFDR    0x50    /* Transmit FIFO Data Register */
66 #define RDR1    0x58    /* Receive Control Data Register 1 (SH, A1) */
67 #define RDR2    0x5c    /* Receive Control Data Register 2 (SH, A1) */
68 #define RFDR    0x60    /* Receive FIFO Data Register */
69
70 /* TMDR1 and RMDR1 */
71 #define MDR1_TRMD        0x80000000 /* Transfer Mode (1 = Master mode) */
72 #define MDR1_SYNCMD_MASK 0x30000000 /* SYNC Mode */
73 #define MDR1_SYNCMD_SPI  0x20000000 /*   Level mode/SPI */
74 #define MDR1_SYNCMD_LR   0x30000000 /*   L/R mode */
75 #define MDR1_SYNCAC_SHIFT        25 /* Sync Polarity (1 = Active-low) */
76 #define MDR1_BITLSB_SHIFT        24 /* MSB/LSB First (1 = LSB first) */
77 #define MDR1_FLD_MASK    0x000000c0 /* Frame Sync Signal Interval (0-3) */
78 #define MDR1_FLD_SHIFT            2
79 #define MDR1_XXSTP       0x00000001 /* Transmission/Reception Stop on FIFO */
80 /* TMDR1 */
81 #define TMDR1_PCON       0x40000000 /* Transfer Signal Connection */
82
83 /* TMDR2 and RMDR2 */
84 #define MDR2_BITLEN1(i) (((i) - 1) << 24) /* Data Size (8-32 bits) */
85 #define MDR2_WDLEN1(i)  (((i) - 1) << 16) /* Word Count (1-64/256 (SH, A1))) */
86 #define MDR2_GRPMASK1   0x00000001 /* Group Output Mask 1 (SH, A1) */
87
88 /* TSCR and RSCR */
89 #define SCR_BRPS_MASK       0x1f00 /* Prescaler Setting (1-32) */
90 #define SCR_BRPS(i)     (((i) - 1) << 8)
91 #define SCR_BRDV_MASK       0x0007 /* Baud Rate Generator's Division Ratio */
92 #define SCR_BRDV_DIV_2      0x0000
93 #define SCR_BRDV_DIV_4      0x0001
94 #define SCR_BRDV_DIV_8      0x0002
95 #define SCR_BRDV_DIV_16     0x0003
96 #define SCR_BRDV_DIV_32     0x0004
97 #define SCR_BRDV_DIV_1      0x0007
98
99 /* CTR */
100 #define CTR_TSCKIZ_MASK 0xc0000000 /* Transmit Clock I/O Polarity Select */
101 #define CTR_TSCKIZ_SCK  0x80000000 /*   Disable SCK when TX disabled */
102 #define CTR_TSCKIZ_POL_SHIFT    30 /*   Transmit Clock Polarity */
103 #define CTR_RSCKIZ_MASK 0x30000000 /* Receive Clock Polarity Select */
104 #define CTR_RSCKIZ_SCK  0x20000000 /*   Must match CTR_TSCKIZ_SCK */
105 #define CTR_RSCKIZ_POL_SHIFT    28 /*   Receive Clock Polarity */
106 #define CTR_TEDG_SHIFT          27 /* Transmit Timing (1 = falling edge) */
107 #define CTR_REDG_SHIFT          26 /* Receive Timing (1 = falling edge) */
108 #define CTR_TXDIZ_MASK  0x00c00000 /* Pin Output When TX is Disabled */
109 #define CTR_TXDIZ_LOW   0x00000000 /*   0 */
110 #define CTR_TXDIZ_HIGH  0x00400000 /*   1 */
111 #define CTR_TXDIZ_HIZ   0x00800000 /*   High-impedance */
112 #define CTR_TSCKE       0x00008000 /* Transmit Serial Clock Output Enable */
113 #define CTR_TFSE        0x00004000 /* Transmit Frame Sync Signal Output Enable */
114 #define CTR_TXE         0x00000200 /* Transmit Enable */
115 #define CTR_RXE         0x00000100 /* Receive Enable */
116
117 /* STR and IER */
118 #define STR_TEOF        0x00800000 /* Frame Transmission End */
119 #define STR_REOF        0x00000080 /* Frame Reception End */
120
121
122 static u32 sh_msiof_read(struct sh_msiof_spi_priv *p, int reg_offs)
123 {
124         switch (reg_offs) {
125         case TSCR:
126         case RSCR:
127                 return ioread16(p->mapbase + reg_offs);
128         default:
129                 return ioread32(p->mapbase + reg_offs);
130         }
131 }
132
133 static void sh_msiof_write(struct sh_msiof_spi_priv *p, int reg_offs,
134                            u32 value)
135 {
136         switch (reg_offs) {
137         case TSCR:
138         case RSCR:
139                 iowrite16(value, p->mapbase + reg_offs);
140                 break;
141         default:
142                 iowrite32(value, p->mapbase + reg_offs);
143                 break;
144         }
145 }
146
147 static int sh_msiof_modify_ctr_wait(struct sh_msiof_spi_priv *p,
148                                     u32 clr, u32 set)
149 {
150         u32 mask = clr | set;
151         u32 data;
152         int k;
153
154         data = sh_msiof_read(p, CTR);
155         data &= ~clr;
156         data |= set;
157         sh_msiof_write(p, CTR, data);
158
159         for (k = 100; k > 0; k--) {
160                 if ((sh_msiof_read(p, CTR) & mask) == set)
161                         break;
162
163                 udelay(10);
164         }
165
166         return k > 0 ? 0 : -ETIMEDOUT;
167 }
168
169 static irqreturn_t sh_msiof_spi_irq(int irq, void *data)
170 {
171         struct sh_msiof_spi_priv *p = data;
172
173         /* just disable the interrupt and wake up */
174         sh_msiof_write(p, IER, 0);
175         complete(&p->done);
176
177         return IRQ_HANDLED;
178 }
179
180 static struct {
181         unsigned short div;
182         unsigned short scr;
183 } const sh_msiof_spi_clk_table[] = {
184         { 1,    SCR_BRPS( 1) | SCR_BRDV_DIV_1 },
185         { 2,    SCR_BRPS( 1) | SCR_BRDV_DIV_2 },
186         { 4,    SCR_BRPS( 1) | SCR_BRDV_DIV_4 },
187         { 8,    SCR_BRPS( 1) | SCR_BRDV_DIV_8 },
188         { 16,   SCR_BRPS( 1) | SCR_BRDV_DIV_16 },
189         { 32,   SCR_BRPS( 1) | SCR_BRDV_DIV_32 },
190         { 64,   SCR_BRPS(32) | SCR_BRDV_DIV_2 },
191         { 128,  SCR_BRPS(32) | SCR_BRDV_DIV_4 },
192         { 256,  SCR_BRPS(32) | SCR_BRDV_DIV_8 },
193         { 512,  SCR_BRPS(32) | SCR_BRDV_DIV_16 },
194         { 1024, SCR_BRPS(32) | SCR_BRDV_DIV_32 },
195 };
196
197 static void sh_msiof_spi_set_clk_regs(struct sh_msiof_spi_priv *p,
198                                       unsigned long parent_rate, u32 spi_hz)
199 {
200         unsigned long div = 1024;
201         size_t k;
202
203         if (!WARN_ON(!spi_hz || !parent_rate))
204                 div = DIV_ROUND_UP(parent_rate, spi_hz);
205
206         /* TODO: make more fine grained */
207
208         for (k = 0; k < ARRAY_SIZE(sh_msiof_spi_clk_table); k++) {
209                 if (sh_msiof_spi_clk_table[k].div >= div)
210                         break;
211         }
212
213         k = min_t(int, k, ARRAY_SIZE(sh_msiof_spi_clk_table) - 1);
214
215         sh_msiof_write(p, TSCR, sh_msiof_spi_clk_table[k].scr);
216         if (!(p->chipdata->master_flags & SPI_MASTER_MUST_TX))
217                 sh_msiof_write(p, RSCR, sh_msiof_spi_clk_table[k].scr);
218 }
219
220 static void sh_msiof_spi_set_pin_regs(struct sh_msiof_spi_priv *p,
221                                       u32 cpol, u32 cpha,
222                                       u32 tx_hi_z, u32 lsb_first, u32 cs_high)
223 {
224         u32 tmp;
225         int edge;
226
227         /*
228          * CPOL CPHA     TSCKIZ RSCKIZ TEDG REDG
229          *    0    0         10     10    1    1
230          *    0    1         10     10    0    0
231          *    1    0         11     11    0    0
232          *    1    1         11     11    1    1
233          */
234         sh_msiof_write(p, FCTR, 0);
235
236         tmp = MDR1_SYNCMD_SPI | 1 << MDR1_FLD_SHIFT | MDR1_XXSTP;
237         tmp |= !cs_high << MDR1_SYNCAC_SHIFT;
238         tmp |= lsb_first << MDR1_BITLSB_SHIFT;
239         sh_msiof_write(p, TMDR1, tmp | MDR1_TRMD | TMDR1_PCON);
240         if (p->chipdata->master_flags & SPI_MASTER_MUST_TX) {
241                 /* These bits are reserved if RX needs TX */
242                 tmp &= ~0x0000ffff;
243         }
244         sh_msiof_write(p, RMDR1, tmp);
245
246         tmp = 0;
247         tmp |= CTR_TSCKIZ_SCK | cpol << CTR_TSCKIZ_POL_SHIFT;
248         tmp |= CTR_RSCKIZ_SCK | cpol << CTR_RSCKIZ_POL_SHIFT;
249
250         edge = cpol ^ !cpha;
251
252         tmp |= edge << CTR_TEDG_SHIFT;
253         tmp |= edge << CTR_REDG_SHIFT;
254         tmp |= tx_hi_z ? CTR_TXDIZ_HIZ : CTR_TXDIZ_LOW;
255         sh_msiof_write(p, CTR, tmp);
256 }
257
258 static void sh_msiof_spi_set_mode_regs(struct sh_msiof_spi_priv *p,
259                                        const void *tx_buf, void *rx_buf,
260                                        u32 bits, u32 words)
261 {
262         u32 dr2 = MDR2_BITLEN1(bits) | MDR2_WDLEN1(words);
263
264         if (tx_buf || (p->chipdata->master_flags & SPI_MASTER_MUST_TX))
265                 sh_msiof_write(p, TMDR2, dr2);
266         else
267                 sh_msiof_write(p, TMDR2, dr2 | MDR2_GRPMASK1);
268
269         if (rx_buf)
270                 sh_msiof_write(p, RMDR2, dr2);
271
272         sh_msiof_write(p, IER, STR_TEOF | STR_REOF);
273 }
274
275 static void sh_msiof_reset_str(struct sh_msiof_spi_priv *p)
276 {
277         sh_msiof_write(p, STR, sh_msiof_read(p, STR));
278 }
279
280 static void sh_msiof_spi_write_fifo_8(struct sh_msiof_spi_priv *p,
281                                       const void *tx_buf, int words, int fs)
282 {
283         const u8 *buf_8 = tx_buf;
284         int k;
285
286         for (k = 0; k < words; k++)
287                 sh_msiof_write(p, TFDR, buf_8[k] << fs);
288 }
289
290 static void sh_msiof_spi_write_fifo_16(struct sh_msiof_spi_priv *p,
291                                        const void *tx_buf, int words, int fs)
292 {
293         const u16 *buf_16 = tx_buf;
294         int k;
295
296         for (k = 0; k < words; k++)
297                 sh_msiof_write(p, TFDR, buf_16[k] << fs);
298 }
299
300 static void sh_msiof_spi_write_fifo_16u(struct sh_msiof_spi_priv *p,
301                                         const void *tx_buf, int words, int fs)
302 {
303         const u16 *buf_16 = tx_buf;
304         int k;
305
306         for (k = 0; k < words; k++)
307                 sh_msiof_write(p, TFDR, get_unaligned(&buf_16[k]) << fs);
308 }
309
310 static void sh_msiof_spi_write_fifo_32(struct sh_msiof_spi_priv *p,
311                                        const void *tx_buf, int words, int fs)
312 {
313         const u32 *buf_32 = tx_buf;
314         int k;
315
316         for (k = 0; k < words; k++)
317                 sh_msiof_write(p, TFDR, buf_32[k] << fs);
318 }
319
320 static void sh_msiof_spi_write_fifo_32u(struct sh_msiof_spi_priv *p,
321                                         const void *tx_buf, int words, int fs)
322 {
323         const u32 *buf_32 = tx_buf;
324         int k;
325
326         for (k = 0; k < words; k++)
327                 sh_msiof_write(p, TFDR, get_unaligned(&buf_32[k]) << fs);
328 }
329
330 static void sh_msiof_spi_write_fifo_s32(struct sh_msiof_spi_priv *p,
331                                         const void *tx_buf, int words, int fs)
332 {
333         const u32 *buf_32 = tx_buf;
334         int k;
335
336         for (k = 0; k < words; k++)
337                 sh_msiof_write(p, TFDR, swab32(buf_32[k] << fs));
338 }
339
340 static void sh_msiof_spi_write_fifo_s32u(struct sh_msiof_spi_priv *p,
341                                          const void *tx_buf, int words, int fs)
342 {
343         const u32 *buf_32 = tx_buf;
344         int k;
345
346         for (k = 0; k < words; k++)
347                 sh_msiof_write(p, TFDR, swab32(get_unaligned(&buf_32[k]) << fs));
348 }
349
350 static void sh_msiof_spi_read_fifo_8(struct sh_msiof_spi_priv *p,
351                                      void *rx_buf, int words, int fs)
352 {
353         u8 *buf_8 = rx_buf;
354         int k;
355
356         for (k = 0; k < words; k++)
357                 buf_8[k] = sh_msiof_read(p, RFDR) >> fs;
358 }
359
360 static void sh_msiof_spi_read_fifo_16(struct sh_msiof_spi_priv *p,
361                                       void *rx_buf, int words, int fs)
362 {
363         u16 *buf_16 = rx_buf;
364         int k;
365
366         for (k = 0; k < words; k++)
367                 buf_16[k] = sh_msiof_read(p, RFDR) >> fs;
368 }
369
370 static void sh_msiof_spi_read_fifo_16u(struct sh_msiof_spi_priv *p,
371                                        void *rx_buf, int words, int fs)
372 {
373         u16 *buf_16 = rx_buf;
374         int k;
375
376         for (k = 0; k < words; k++)
377                 put_unaligned(sh_msiof_read(p, RFDR) >> fs, &buf_16[k]);
378 }
379
380 static void sh_msiof_spi_read_fifo_32(struct sh_msiof_spi_priv *p,
381                                       void *rx_buf, int words, int fs)
382 {
383         u32 *buf_32 = rx_buf;
384         int k;
385
386         for (k = 0; k < words; k++)
387                 buf_32[k] = sh_msiof_read(p, RFDR) >> fs;
388 }
389
390 static void sh_msiof_spi_read_fifo_32u(struct sh_msiof_spi_priv *p,
391                                        void *rx_buf, int words, int fs)
392 {
393         u32 *buf_32 = rx_buf;
394         int k;
395
396         for (k = 0; k < words; k++)
397                 put_unaligned(sh_msiof_read(p, RFDR) >> fs, &buf_32[k]);
398 }
399
400 static void sh_msiof_spi_read_fifo_s32(struct sh_msiof_spi_priv *p,
401                                        void *rx_buf, int words, int fs)
402 {
403         u32 *buf_32 = rx_buf;
404         int k;
405
406         for (k = 0; k < words; k++)
407                 buf_32[k] = swab32(sh_msiof_read(p, RFDR) >> fs);
408 }
409
410 static void sh_msiof_spi_read_fifo_s32u(struct sh_msiof_spi_priv *p,
411                                        void *rx_buf, int words, int fs)
412 {
413         u32 *buf_32 = rx_buf;
414         int k;
415
416         for (k = 0; k < words; k++)
417                 put_unaligned(swab32(sh_msiof_read(p, RFDR) >> fs), &buf_32[k]);
418 }
419
420 static int sh_msiof_spi_setup(struct spi_device *spi)
421 {
422         struct device_node      *np = spi->master->dev.of_node;
423         struct sh_msiof_spi_priv *p = spi_master_get_devdata(spi->master);
424
425         if (!np) {
426                 /*
427                  * Use spi->controller_data for CS (same strategy as spi_gpio),
428                  * if any. otherwise let HW control CS
429                  */
430                 spi->cs_gpio = (uintptr_t)spi->controller_data;
431         }
432
433         /* Configure pins before deasserting CS */
434         sh_msiof_spi_set_pin_regs(p, !!(spi->mode & SPI_CPOL),
435                                   !!(spi->mode & SPI_CPHA),
436                                   !!(spi->mode & SPI_3WIRE),
437                                   !!(spi->mode & SPI_LSB_FIRST),
438                                   !!(spi->mode & SPI_CS_HIGH));
439
440         if (spi->cs_gpio >= 0)
441                 gpio_set_value(spi->cs_gpio, !(spi->mode & SPI_CS_HIGH));
442
443         return 0;
444 }
445
446 static int sh_msiof_prepare_message(struct spi_master *master,
447                                     struct spi_message *msg)
448 {
449         struct sh_msiof_spi_priv *p = spi_master_get_devdata(master);
450         const struct spi_device *spi = msg->spi;
451
452         /* Configure pins before asserting CS */
453         sh_msiof_spi_set_pin_regs(p, !!(spi->mode & SPI_CPOL),
454                                   !!(spi->mode & SPI_CPHA),
455                                   !!(spi->mode & SPI_3WIRE),
456                                   !!(spi->mode & SPI_LSB_FIRST),
457                                   !!(spi->mode & SPI_CS_HIGH));
458         return 0;
459 }
460
461 static int sh_msiof_spi_txrx_once(struct sh_msiof_spi_priv *p,
462                                   void (*tx_fifo)(struct sh_msiof_spi_priv *,
463                                                   const void *, int, int),
464                                   void (*rx_fifo)(struct sh_msiof_spi_priv *,
465                                                   void *, int, int),
466                                   const void *tx_buf, void *rx_buf,
467                                   int words, int bits)
468 {
469         int fifo_shift;
470         int ret;
471
472         /* limit maximum word transfer to rx/tx fifo size */
473         if (tx_buf)
474                 words = min_t(int, words, p->tx_fifo_size);
475         if (rx_buf)
476                 words = min_t(int, words, p->rx_fifo_size);
477
478         /* the fifo contents need shifting */
479         fifo_shift = 32 - bits;
480
481         /* setup msiof transfer mode registers */
482         sh_msiof_spi_set_mode_regs(p, tx_buf, rx_buf, bits, words);
483
484         /* write tx fifo */
485         if (tx_buf)
486                 tx_fifo(p, tx_buf, words, fifo_shift);
487
488         /* setup clock and rx/tx signals */
489         ret = sh_msiof_modify_ctr_wait(p, 0, CTR_TSCKE);
490         if (rx_buf)
491                 ret = ret ? ret : sh_msiof_modify_ctr_wait(p, 0, CTR_RXE);
492         ret = ret ? ret : sh_msiof_modify_ctr_wait(p, 0, CTR_TXE);
493
494         /* start by setting frame bit */
495         reinit_completion(&p->done);
496         ret = ret ? ret : sh_msiof_modify_ctr_wait(p, 0, CTR_TFSE);
497         if (ret) {
498                 dev_err(&p->pdev->dev, "failed to start hardware\n");
499                 goto err;
500         }
501
502         /* wait for tx fifo to be emptied / rx fifo to be filled */
503         wait_for_completion(&p->done);
504
505         /* read rx fifo */
506         if (rx_buf)
507                 rx_fifo(p, rx_buf, words, fifo_shift);
508
509         /* clear status bits */
510         sh_msiof_reset_str(p);
511
512         /* shut down frame, rx/tx and clock signals */
513         ret = sh_msiof_modify_ctr_wait(p, CTR_TFSE, 0);
514         ret = ret ? ret : sh_msiof_modify_ctr_wait(p, CTR_TXE, 0);
515         if (rx_buf)
516                 ret = ret ? ret : sh_msiof_modify_ctr_wait(p, CTR_RXE, 0);
517         ret = ret ? ret : sh_msiof_modify_ctr_wait(p, CTR_TSCKE, 0);
518         if (ret) {
519                 dev_err(&p->pdev->dev, "failed to shut down hardware\n");
520                 goto err;
521         }
522
523         return words;
524
525  err:
526         sh_msiof_write(p, IER, 0);
527         return ret;
528 }
529
530 static int sh_msiof_transfer_one(struct spi_master *master,
531                                  struct spi_device *spi,
532                                  struct spi_transfer *t)
533 {
534         struct sh_msiof_spi_priv *p = spi_master_get_devdata(master);
535         void (*tx_fifo)(struct sh_msiof_spi_priv *, const void *, int, int);
536         void (*rx_fifo)(struct sh_msiof_spi_priv *, void *, int, int);
537         int bits;
538         int bytes_per_word;
539         int bytes_done;
540         int words;
541         int n;
542         bool swab;
543
544         bits = t->bits_per_word;
545
546         if (bits <= 8 && t->len > 15 && !(t->len & 3)) {
547                 bits = 32;
548                 swab = true;
549         } else {
550                 swab = false;
551         }
552
553         /* setup bytes per word and fifo read/write functions */
554         if (bits <= 8) {
555                 bytes_per_word = 1;
556                 tx_fifo = sh_msiof_spi_write_fifo_8;
557                 rx_fifo = sh_msiof_spi_read_fifo_8;
558         } else if (bits <= 16) {
559                 bytes_per_word = 2;
560                 if ((unsigned long)t->tx_buf & 0x01)
561                         tx_fifo = sh_msiof_spi_write_fifo_16u;
562                 else
563                         tx_fifo = sh_msiof_spi_write_fifo_16;
564
565                 if ((unsigned long)t->rx_buf & 0x01)
566                         rx_fifo = sh_msiof_spi_read_fifo_16u;
567                 else
568                         rx_fifo = sh_msiof_spi_read_fifo_16;
569         } else if (swab) {
570                 bytes_per_word = 4;
571                 if ((unsigned long)t->tx_buf & 0x03)
572                         tx_fifo = sh_msiof_spi_write_fifo_s32u;
573                 else
574                         tx_fifo = sh_msiof_spi_write_fifo_s32;
575
576                 if ((unsigned long)t->rx_buf & 0x03)
577                         rx_fifo = sh_msiof_spi_read_fifo_s32u;
578                 else
579                         rx_fifo = sh_msiof_spi_read_fifo_s32;
580         } else {
581                 bytes_per_word = 4;
582                 if ((unsigned long)t->tx_buf & 0x03)
583                         tx_fifo = sh_msiof_spi_write_fifo_32u;
584                 else
585                         tx_fifo = sh_msiof_spi_write_fifo_32;
586
587                 if ((unsigned long)t->rx_buf & 0x03)
588                         rx_fifo = sh_msiof_spi_read_fifo_32u;
589                 else
590                         rx_fifo = sh_msiof_spi_read_fifo_32;
591         }
592
593         /* setup clocks (clock already enabled in chipselect()) */
594         sh_msiof_spi_set_clk_regs(p, clk_get_rate(p->clk), t->speed_hz);
595
596         /* transfer in fifo sized chunks */
597         words = t->len / bytes_per_word;
598         bytes_done = 0;
599
600         while (bytes_done < t->len) {
601                 void *rx_buf = t->rx_buf ? t->rx_buf + bytes_done : NULL;
602                 const void *tx_buf = t->tx_buf ? t->tx_buf + bytes_done : NULL;
603                 n = sh_msiof_spi_txrx_once(p, tx_fifo, rx_fifo,
604                                            tx_buf,
605                                            rx_buf,
606                                            words, bits);
607                 if (n < 0)
608                         break;
609
610                 bytes_done += n * bytes_per_word;
611                 words -= n;
612         }
613
614         return 0;
615 }
616
617 static const struct sh_msiof_chipdata sh_data = {
618         .tx_fifo_size = 64,
619         .rx_fifo_size = 64,
620         .master_flags = 0,
621 };
622
623 static const struct sh_msiof_chipdata r8a779x_data = {
624         .tx_fifo_size = 64,
625         .rx_fifo_size = 256,
626         .master_flags = SPI_MASTER_MUST_TX,
627 };
628
629 static const struct of_device_id sh_msiof_match[] = {
630         { .compatible = "renesas,sh-msiof",        .data = &sh_data },
631         { .compatible = "renesas,sh-mobile-msiof", .data = &sh_data },
632         { .compatible = "renesas,msiof-r8a7790",   .data = &r8a779x_data },
633         { .compatible = "renesas,msiof-r8a7791",   .data = &r8a779x_data },
634         {},
635 };
636 MODULE_DEVICE_TABLE(of, sh_msiof_match);
637
638 #ifdef CONFIG_OF
639 static struct sh_msiof_spi_info *sh_msiof_spi_parse_dt(struct device *dev)
640 {
641         struct sh_msiof_spi_info *info;
642         struct device_node *np = dev->of_node;
643         u32 num_cs = 1;
644
645         info = devm_kzalloc(dev, sizeof(struct sh_msiof_spi_info), GFP_KERNEL);
646         if (!info) {
647                 dev_err(dev, "failed to allocate setup data\n");
648                 return NULL;
649         }
650
651         /* Parse the MSIOF properties */
652         of_property_read_u32(np, "num-cs", &num_cs);
653         of_property_read_u32(np, "renesas,tx-fifo-size",
654                                         &info->tx_fifo_override);
655         of_property_read_u32(np, "renesas,rx-fifo-size",
656                                         &info->rx_fifo_override);
657
658         info->num_chipselect = num_cs;
659
660         return info;
661 }
662 #else
663 static struct sh_msiof_spi_info *sh_msiof_spi_parse_dt(struct device *dev)
664 {
665         return NULL;
666 }
667 #endif
668
669 static int sh_msiof_spi_probe(struct platform_device *pdev)
670 {
671         struct resource *r;
672         struct spi_master *master;
673         const struct of_device_id *of_id;
674         struct sh_msiof_spi_priv *p;
675         int i;
676         int ret;
677
678         master = spi_alloc_master(&pdev->dev, sizeof(struct sh_msiof_spi_priv));
679         if (master == NULL) {
680                 dev_err(&pdev->dev, "failed to allocate spi master\n");
681                 return -ENOMEM;
682         }
683
684         p = spi_master_get_devdata(master);
685
686         platform_set_drvdata(pdev, p);
687
688         of_id = of_match_device(sh_msiof_match, &pdev->dev);
689         if (of_id) {
690                 p->chipdata = of_id->data;
691                 p->info = sh_msiof_spi_parse_dt(&pdev->dev);
692         } else {
693                 p->chipdata = (const void *)pdev->id_entry->driver_data;
694                 p->info = dev_get_platdata(&pdev->dev);
695         }
696
697         if (!p->info) {
698                 dev_err(&pdev->dev, "failed to obtain device info\n");
699                 ret = -ENXIO;
700                 goto err1;
701         }
702
703         init_completion(&p->done);
704
705         p->clk = devm_clk_get(&pdev->dev, NULL);
706         if (IS_ERR(p->clk)) {
707                 dev_err(&pdev->dev, "cannot get clock\n");
708                 ret = PTR_ERR(p->clk);
709                 goto err1;
710         }
711
712         i = platform_get_irq(pdev, 0);
713         if (i < 0) {
714                 dev_err(&pdev->dev, "cannot get platform IRQ\n");
715                 ret = -ENOENT;
716                 goto err1;
717         }
718
719         r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
720         p->mapbase = devm_ioremap_resource(&pdev->dev, r);
721         if (IS_ERR(p->mapbase)) {
722                 ret = PTR_ERR(p->mapbase);
723                 goto err1;
724         }
725
726         ret = devm_request_irq(&pdev->dev, i, sh_msiof_spi_irq, 0,
727                                dev_name(&pdev->dev), p);
728         if (ret) {
729                 dev_err(&pdev->dev, "unable to request irq\n");
730                 goto err1;
731         }
732
733         p->pdev = pdev;
734         pm_runtime_enable(&pdev->dev);
735
736         /* Platform data may override FIFO sizes */
737         p->tx_fifo_size = p->chipdata->tx_fifo_size;
738         p->rx_fifo_size = p->chipdata->rx_fifo_size;
739         if (p->info->tx_fifo_override)
740                 p->tx_fifo_size = p->info->tx_fifo_override;
741         if (p->info->rx_fifo_override)
742                 p->rx_fifo_size = p->info->rx_fifo_override;
743
744         /* init master code */
745         master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH;
746         master->mode_bits |= SPI_LSB_FIRST | SPI_3WIRE;
747         master->flags = p->chipdata->master_flags;
748         master->bus_num = pdev->id;
749         master->dev.of_node = pdev->dev.of_node;
750         master->num_chipselect = p->info->num_chipselect;
751         master->setup = sh_msiof_spi_setup;
752         master->prepare_message = sh_msiof_prepare_message;
753         master->bits_per_word_mask = SPI_BPW_RANGE_MASK(8, 32);
754         master->auto_runtime_pm = true;
755         master->transfer_one = sh_msiof_transfer_one;
756
757         ret = devm_spi_register_master(&pdev->dev, master);
758         if (ret < 0) {
759                 dev_err(&pdev->dev, "spi_register_master error.\n");
760                 goto err2;
761         }
762
763         return 0;
764
765  err2:
766         pm_runtime_disable(&pdev->dev);
767  err1:
768         spi_master_put(master);
769         return ret;
770 }
771
772 static int sh_msiof_spi_remove(struct platform_device *pdev)
773 {
774         pm_runtime_disable(&pdev->dev);
775         return 0;
776 }
777
778 static struct platform_device_id spi_driver_ids[] = {
779         { "spi_sh_msiof",       (kernel_ulong_t)&sh_data },
780         { "spi_r8a7790_msiof",  (kernel_ulong_t)&r8a779x_data },
781         { "spi_r8a7791_msiof",  (kernel_ulong_t)&r8a779x_data },
782         {},
783 };
784 MODULE_DEVICE_TABLE(platform, spi_driver_ids);
785
786 static struct platform_driver sh_msiof_spi_drv = {
787         .probe          = sh_msiof_spi_probe,
788         .remove         = sh_msiof_spi_remove,
789         .id_table       = spi_driver_ids,
790         .driver         = {
791                 .name           = "spi_sh_msiof",
792                 .owner          = THIS_MODULE,
793                 .of_match_table = of_match_ptr(sh_msiof_match),
794         },
795 };
796 module_platform_driver(sh_msiof_spi_drv);
797
798 MODULE_DESCRIPTION("SuperH MSIOF SPI Master Interface Driver");
799 MODULE_AUTHOR("Magnus Damm");
800 MODULE_LICENSE("GPL v2");
801 MODULE_ALIAS("platform:spi_sh_msiof");