spi: move common spi_setup() functionality into core
[linux-2.6-block.git] / drivers / spi / omap2_mcspi.c
1 /*
2  * OMAP2 McSPI controller driver
3  *
4  * Copyright (C) 2005, 2006 Nokia Corporation
5  * Author:      Samuel Ortiz <samuel.ortiz@nokia.com> and
6  *              Juha Yrjölä <juha.yrjola@nokia.com>
7  *
8  * This program is free software; you can redistribute it and/or modify
9  * it under the terms of the GNU General Public License as published by
10  * the Free Software Foundation; either version 2 of the License, or
11  * (at your option) any later version.
12  *
13  * This program is distributed in the hope that it will be useful,
14  * but WITHOUT ANY WARRANTY; without even the implied warranty of
15  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  * GNU General Public License for more details.
17  *
18  * You should have received a copy of the GNU General Public License
19  * along with this program; if not, write to the Free Software
20  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
21  *
22  */
23
24 #include <linux/kernel.h>
25 #include <linux/init.h>
26 #include <linux/interrupt.h>
27 #include <linux/module.h>
28 #include <linux/device.h>
29 #include <linux/delay.h>
30 #include <linux/dma-mapping.h>
31 #include <linux/platform_device.h>
32 #include <linux/err.h>
33 #include <linux/clk.h>
34 #include <linux/io.h>
35
36 #include <linux/spi/spi.h>
37
38 #include <mach/dma.h>
39 #include <mach/clock.h>
40
41
42 #define OMAP2_MCSPI_MAX_FREQ            48000000
43
44 #define OMAP2_MCSPI_REVISION            0x00
45 #define OMAP2_MCSPI_SYSCONFIG           0x10
46 #define OMAP2_MCSPI_SYSSTATUS           0x14
47 #define OMAP2_MCSPI_IRQSTATUS           0x18
48 #define OMAP2_MCSPI_IRQENABLE           0x1c
49 #define OMAP2_MCSPI_WAKEUPENABLE        0x20
50 #define OMAP2_MCSPI_SYST                0x24
51 #define OMAP2_MCSPI_MODULCTRL           0x28
52
53 /* per-channel banks, 0x14 bytes each, first is: */
54 #define OMAP2_MCSPI_CHCONF0             0x2c
55 #define OMAP2_MCSPI_CHSTAT0             0x30
56 #define OMAP2_MCSPI_CHCTRL0             0x34
57 #define OMAP2_MCSPI_TX0                 0x38
58 #define OMAP2_MCSPI_RX0                 0x3c
59
60 /* per-register bitmasks: */
61
62 #define OMAP2_MCSPI_SYSCONFIG_AUTOIDLE  (1 << 0)
63 #define OMAP2_MCSPI_SYSCONFIG_SOFTRESET (1 << 1)
64
65 #define OMAP2_MCSPI_SYSSTATUS_RESETDONE (1 << 0)
66
67 #define OMAP2_MCSPI_MODULCTRL_SINGLE    (1 << 0)
68 #define OMAP2_MCSPI_MODULCTRL_MS        (1 << 2)
69 #define OMAP2_MCSPI_MODULCTRL_STEST     (1 << 3)
70
71 #define OMAP2_MCSPI_CHCONF_PHA          (1 << 0)
72 #define OMAP2_MCSPI_CHCONF_POL          (1 << 1)
73 #define OMAP2_MCSPI_CHCONF_CLKD_MASK    (0x0f << 2)
74 #define OMAP2_MCSPI_CHCONF_EPOL         (1 << 6)
75 #define OMAP2_MCSPI_CHCONF_WL_MASK      (0x1f << 7)
76 #define OMAP2_MCSPI_CHCONF_TRM_RX_ONLY  (0x01 << 12)
77 #define OMAP2_MCSPI_CHCONF_TRM_TX_ONLY  (0x02 << 12)
78 #define OMAP2_MCSPI_CHCONF_TRM_MASK     (0x03 << 12)
79 #define OMAP2_MCSPI_CHCONF_DMAW         (1 << 14)
80 #define OMAP2_MCSPI_CHCONF_DMAR         (1 << 15)
81 #define OMAP2_MCSPI_CHCONF_DPE0         (1 << 16)
82 #define OMAP2_MCSPI_CHCONF_DPE1         (1 << 17)
83 #define OMAP2_MCSPI_CHCONF_IS           (1 << 18)
84 #define OMAP2_MCSPI_CHCONF_TURBO        (1 << 19)
85 #define OMAP2_MCSPI_CHCONF_FORCE        (1 << 20)
86
87 #define OMAP2_MCSPI_CHSTAT_RXS          (1 << 0)
88 #define OMAP2_MCSPI_CHSTAT_TXS          (1 << 1)
89 #define OMAP2_MCSPI_CHSTAT_EOT          (1 << 2)
90
91 #define OMAP2_MCSPI_CHCTRL_EN           (1 << 0)
92
93
94 /* We have 2 DMA channels per CS, one for RX and one for TX */
95 struct omap2_mcspi_dma {
96         int dma_tx_channel;
97         int dma_rx_channel;
98
99         int dma_tx_sync_dev;
100         int dma_rx_sync_dev;
101
102         struct completion dma_tx_completion;
103         struct completion dma_rx_completion;
104 };
105
106 /* use PIO for small transfers, avoiding DMA setup/teardown overhead and
107  * cache operations; better heuristics consider wordsize and bitrate.
108  */
109 #define DMA_MIN_BYTES                   8
110
111
112 struct omap2_mcspi {
113         struct work_struct      work;
114         /* lock protects queue and registers */
115         spinlock_t              lock;
116         struct list_head        msg_queue;
117         struct spi_master       *master;
118         struct clk              *ick;
119         struct clk              *fck;
120         /* Virtual base address of the controller */
121         void __iomem            *base;
122         unsigned long           phys;
123         /* SPI1 has 4 channels, while SPI2 has 2 */
124         struct omap2_mcspi_dma  *dma_channels;
125 };
126
127 struct omap2_mcspi_cs {
128         void __iomem            *base;
129         unsigned long           phys;
130         int                     word_len;
131 };
132
133 static struct workqueue_struct *omap2_mcspi_wq;
134
135 #define MOD_REG_BIT(val, mask, set) do { \
136         if (set) \
137                 val |= mask; \
138         else \
139                 val &= ~mask; \
140 } while (0)
141
142 static inline void mcspi_write_reg(struct spi_master *master,
143                 int idx, u32 val)
144 {
145         struct omap2_mcspi *mcspi = spi_master_get_devdata(master);
146
147         __raw_writel(val, mcspi->base + idx);
148 }
149
150 static inline u32 mcspi_read_reg(struct spi_master *master, int idx)
151 {
152         struct omap2_mcspi *mcspi = spi_master_get_devdata(master);
153
154         return __raw_readl(mcspi->base + idx);
155 }
156
157 static inline void mcspi_write_cs_reg(const struct spi_device *spi,
158                 int idx, u32 val)
159 {
160         struct omap2_mcspi_cs   *cs = spi->controller_state;
161
162         __raw_writel(val, cs->base +  idx);
163 }
164
165 static inline u32 mcspi_read_cs_reg(const struct spi_device *spi, int idx)
166 {
167         struct omap2_mcspi_cs   *cs = spi->controller_state;
168
169         return __raw_readl(cs->base + idx);
170 }
171
172 static void omap2_mcspi_set_dma_req(const struct spi_device *spi,
173                 int is_read, int enable)
174 {
175         u32 l, rw;
176
177         l = mcspi_read_cs_reg(spi, OMAP2_MCSPI_CHCONF0);
178
179         if (is_read) /* 1 is read, 0 write */
180                 rw = OMAP2_MCSPI_CHCONF_DMAR;
181         else
182                 rw = OMAP2_MCSPI_CHCONF_DMAW;
183
184         MOD_REG_BIT(l, rw, enable);
185         mcspi_write_cs_reg(spi, OMAP2_MCSPI_CHCONF0, l);
186 }
187
188 static void omap2_mcspi_set_enable(const struct spi_device *spi, int enable)
189 {
190         u32 l;
191
192         l = enable ? OMAP2_MCSPI_CHCTRL_EN : 0;
193         mcspi_write_cs_reg(spi, OMAP2_MCSPI_CHCTRL0, l);
194 }
195
196 static void omap2_mcspi_force_cs(struct spi_device *spi, int cs_active)
197 {
198         u32 l;
199
200         l = mcspi_read_cs_reg(spi, OMAP2_MCSPI_CHCONF0);
201         MOD_REG_BIT(l, OMAP2_MCSPI_CHCONF_FORCE, cs_active);
202         mcspi_write_cs_reg(spi, OMAP2_MCSPI_CHCONF0, l);
203 }
204
205 static void omap2_mcspi_set_master_mode(struct spi_master *master)
206 {
207         u32 l;
208
209         /* setup when switching from (reset default) slave mode
210          * to single-channel master mode
211          */
212         l = mcspi_read_reg(master, OMAP2_MCSPI_MODULCTRL);
213         MOD_REG_BIT(l, OMAP2_MCSPI_MODULCTRL_STEST, 0);
214         MOD_REG_BIT(l, OMAP2_MCSPI_MODULCTRL_MS, 0);
215         MOD_REG_BIT(l, OMAP2_MCSPI_MODULCTRL_SINGLE, 1);
216         mcspi_write_reg(master, OMAP2_MCSPI_MODULCTRL, l);
217 }
218
219 static unsigned
220 omap2_mcspi_txrx_dma(struct spi_device *spi, struct spi_transfer *xfer)
221 {
222         struct omap2_mcspi      *mcspi;
223         struct omap2_mcspi_cs   *cs = spi->controller_state;
224         struct omap2_mcspi_dma  *mcspi_dma;
225         unsigned int            count, c;
226         unsigned long           base, tx_reg, rx_reg;
227         int                     word_len, data_type, element_count;
228         u8                      * rx;
229         const u8                * tx;
230
231         mcspi = spi_master_get_devdata(spi->master);
232         mcspi_dma = &mcspi->dma_channels[spi->chip_select];
233
234         count = xfer->len;
235         c = count;
236         word_len = cs->word_len;
237
238         base = cs->phys;
239         tx_reg = base + OMAP2_MCSPI_TX0;
240         rx_reg = base + OMAP2_MCSPI_RX0;
241         rx = xfer->rx_buf;
242         tx = xfer->tx_buf;
243
244         if (word_len <= 8) {
245                 data_type = OMAP_DMA_DATA_TYPE_S8;
246                 element_count = count;
247         } else if (word_len <= 16) {
248                 data_type = OMAP_DMA_DATA_TYPE_S16;
249                 element_count = count >> 1;
250         } else /* word_len <= 32 */ {
251                 data_type = OMAP_DMA_DATA_TYPE_S32;
252                 element_count = count >> 2;
253         }
254
255         if (tx != NULL) {
256                 omap_set_dma_transfer_params(mcspi_dma->dma_tx_channel,
257                                 data_type, element_count, 1,
258                                 OMAP_DMA_SYNC_ELEMENT,
259                                 mcspi_dma->dma_tx_sync_dev, 0);
260
261                 omap_set_dma_dest_params(mcspi_dma->dma_tx_channel, 0,
262                                 OMAP_DMA_AMODE_CONSTANT,
263                                 tx_reg, 0, 0);
264
265                 omap_set_dma_src_params(mcspi_dma->dma_tx_channel, 0,
266                                 OMAP_DMA_AMODE_POST_INC,
267                                 xfer->tx_dma, 0, 0);
268         }
269
270         if (rx != NULL) {
271                 omap_set_dma_transfer_params(mcspi_dma->dma_rx_channel,
272                                 data_type, element_count, 1,
273                                 OMAP_DMA_SYNC_ELEMENT,
274                                 mcspi_dma->dma_rx_sync_dev, 1);
275
276                 omap_set_dma_src_params(mcspi_dma->dma_rx_channel, 0,
277                                 OMAP_DMA_AMODE_CONSTANT,
278                                 rx_reg, 0, 0);
279
280                 omap_set_dma_dest_params(mcspi_dma->dma_rx_channel, 0,
281                                 OMAP_DMA_AMODE_POST_INC,
282                                 xfer->rx_dma, 0, 0);
283         }
284
285         if (tx != NULL) {
286                 omap_start_dma(mcspi_dma->dma_tx_channel);
287                 omap2_mcspi_set_dma_req(spi, 0, 1);
288         }
289
290         if (rx != NULL) {
291                 omap_start_dma(mcspi_dma->dma_rx_channel);
292                 omap2_mcspi_set_dma_req(spi, 1, 1);
293         }
294
295         if (tx != NULL) {
296                 wait_for_completion(&mcspi_dma->dma_tx_completion);
297                 dma_unmap_single(NULL, xfer->tx_dma, count, DMA_TO_DEVICE);
298         }
299
300         if (rx != NULL) {
301                 wait_for_completion(&mcspi_dma->dma_rx_completion);
302                 dma_unmap_single(NULL, xfer->rx_dma, count, DMA_FROM_DEVICE);
303         }
304         return count;
305 }
306
307 static int mcspi_wait_for_reg_bit(void __iomem *reg, unsigned long bit)
308 {
309         unsigned long timeout;
310
311         timeout = jiffies + msecs_to_jiffies(1000);
312         while (!(__raw_readl(reg) & bit)) {
313                 if (time_after(jiffies, timeout))
314                         return -1;
315                 cpu_relax();
316         }
317         return 0;
318 }
319
320 static unsigned
321 omap2_mcspi_txrx_pio(struct spi_device *spi, struct spi_transfer *xfer)
322 {
323         struct omap2_mcspi      *mcspi;
324         struct omap2_mcspi_cs   *cs = spi->controller_state;
325         unsigned int            count, c;
326         u32                     l;
327         void __iomem            *base = cs->base;
328         void __iomem            *tx_reg;
329         void __iomem            *rx_reg;
330         void __iomem            *chstat_reg;
331         int                     word_len;
332
333         mcspi = spi_master_get_devdata(spi->master);
334         count = xfer->len;
335         c = count;
336         word_len = cs->word_len;
337
338         l = mcspi_read_cs_reg(spi, OMAP2_MCSPI_CHCONF0);
339         l &= ~OMAP2_MCSPI_CHCONF_TRM_MASK;
340
341         /* We store the pre-calculated register addresses on stack to speed
342          * up the transfer loop. */
343         tx_reg          = base + OMAP2_MCSPI_TX0;
344         rx_reg          = base + OMAP2_MCSPI_RX0;
345         chstat_reg      = base + OMAP2_MCSPI_CHSTAT0;
346
347         if (word_len <= 8) {
348                 u8              *rx;
349                 const u8        *tx;
350
351                 rx = xfer->rx_buf;
352                 tx = xfer->tx_buf;
353
354                 do {
355                         c -= 1;
356                         if (tx != NULL) {
357                                 if (mcspi_wait_for_reg_bit(chstat_reg,
358                                                 OMAP2_MCSPI_CHSTAT_TXS) < 0) {
359                                         dev_err(&spi->dev, "TXS timed out\n");
360                                         goto out;
361                                 }
362 #ifdef VERBOSE
363                                 dev_dbg(&spi->dev, "write-%d %02x\n",
364                                                 word_len, *tx);
365 #endif
366                                 __raw_writel(*tx++, tx_reg);
367                         }
368                         if (rx != NULL) {
369                                 if (mcspi_wait_for_reg_bit(chstat_reg,
370                                                 OMAP2_MCSPI_CHSTAT_RXS) < 0) {
371                                         dev_err(&spi->dev, "RXS timed out\n");
372                                         goto out;
373                                 }
374                                 /* prevent last RX_ONLY read from triggering
375                                  * more word i/o: switch to rx+tx
376                                  */
377                                 if (c == 0 && tx == NULL)
378                                         mcspi_write_cs_reg(spi,
379                                                         OMAP2_MCSPI_CHCONF0, l);
380                                 *rx++ = __raw_readl(rx_reg);
381 #ifdef VERBOSE
382                                 dev_dbg(&spi->dev, "read-%d %02x\n",
383                                                 word_len, *(rx - 1));
384 #endif
385                         }
386                 } while (c);
387         } else if (word_len <= 16) {
388                 u16             *rx;
389                 const u16       *tx;
390
391                 rx = xfer->rx_buf;
392                 tx = xfer->tx_buf;
393                 do {
394                         c -= 2;
395                         if (tx != NULL) {
396                                 if (mcspi_wait_for_reg_bit(chstat_reg,
397                                                 OMAP2_MCSPI_CHSTAT_TXS) < 0) {
398                                         dev_err(&spi->dev, "TXS timed out\n");
399                                         goto out;
400                                 }
401 #ifdef VERBOSE
402                                 dev_dbg(&spi->dev, "write-%d %04x\n",
403                                                 word_len, *tx);
404 #endif
405                                 __raw_writel(*tx++, tx_reg);
406                         }
407                         if (rx != NULL) {
408                                 if (mcspi_wait_for_reg_bit(chstat_reg,
409                                                 OMAP2_MCSPI_CHSTAT_RXS) < 0) {
410                                         dev_err(&spi->dev, "RXS timed out\n");
411                                         goto out;
412                                 }
413                                 /* prevent last RX_ONLY read from triggering
414                                  * more word i/o: switch to rx+tx
415                                  */
416                                 if (c == 0 && tx == NULL)
417                                         mcspi_write_cs_reg(spi,
418                                                         OMAP2_MCSPI_CHCONF0, l);
419                                 *rx++ = __raw_readl(rx_reg);
420 #ifdef VERBOSE
421                                 dev_dbg(&spi->dev, "read-%d %04x\n",
422                                                 word_len, *(rx - 1));
423 #endif
424                         }
425                 } while (c);
426         } else if (word_len <= 32) {
427                 u32             *rx;
428                 const u32       *tx;
429
430                 rx = xfer->rx_buf;
431                 tx = xfer->tx_buf;
432                 do {
433                         c -= 4;
434                         if (tx != NULL) {
435                                 if (mcspi_wait_for_reg_bit(chstat_reg,
436                                                 OMAP2_MCSPI_CHSTAT_TXS) < 0) {
437                                         dev_err(&spi->dev, "TXS timed out\n");
438                                         goto out;
439                                 }
440 #ifdef VERBOSE
441                                 dev_dbg(&spi->dev, "write-%d %04x\n",
442                                                 word_len, *tx);
443 #endif
444                                 __raw_writel(*tx++, tx_reg);
445                         }
446                         if (rx != NULL) {
447                                 if (mcspi_wait_for_reg_bit(chstat_reg,
448                                                 OMAP2_MCSPI_CHSTAT_RXS) < 0) {
449                                         dev_err(&spi->dev, "RXS timed out\n");
450                                         goto out;
451                                 }
452                                 /* prevent last RX_ONLY read from triggering
453                                  * more word i/o: switch to rx+tx
454                                  */
455                                 if (c == 0 && tx == NULL)
456                                         mcspi_write_cs_reg(spi,
457                                                         OMAP2_MCSPI_CHCONF0, l);
458                                 *rx++ = __raw_readl(rx_reg);
459 #ifdef VERBOSE
460                                 dev_dbg(&spi->dev, "read-%d %04x\n",
461                                                 word_len, *(rx - 1));
462 #endif
463                         }
464                 } while (c);
465         }
466
467         /* for TX_ONLY mode, be sure all words have shifted out */
468         if (xfer->rx_buf == NULL) {
469                 if (mcspi_wait_for_reg_bit(chstat_reg,
470                                 OMAP2_MCSPI_CHSTAT_TXS) < 0) {
471                         dev_err(&spi->dev, "TXS timed out\n");
472                 } else if (mcspi_wait_for_reg_bit(chstat_reg,
473                                 OMAP2_MCSPI_CHSTAT_EOT) < 0)
474                         dev_err(&spi->dev, "EOT timed out\n");
475         }
476 out:
477         return count - c;
478 }
479
480 /* called only when no transfer is active to this device */
481 static int omap2_mcspi_setup_transfer(struct spi_device *spi,
482                 struct spi_transfer *t)
483 {
484         struct omap2_mcspi_cs *cs = spi->controller_state;
485         struct omap2_mcspi *mcspi;
486         u32 l = 0, div = 0;
487         u8 word_len = spi->bits_per_word;
488
489         mcspi = spi_master_get_devdata(spi->master);
490
491         if (t != NULL && t->bits_per_word)
492                 word_len = t->bits_per_word;
493
494         cs->word_len = word_len;
495
496         if (spi->max_speed_hz) {
497                 while (div <= 15 && (OMAP2_MCSPI_MAX_FREQ / (1 << div))
498                                         > spi->max_speed_hz)
499                         div++;
500         } else
501                 div = 15;
502
503         l = mcspi_read_cs_reg(spi, OMAP2_MCSPI_CHCONF0);
504
505         /* standard 4-wire master mode:  SCK, MOSI/out, MISO/in, nCS
506          * REVISIT: this controller could support SPI_3WIRE mode.
507          */
508         l &= ~(OMAP2_MCSPI_CHCONF_IS|OMAP2_MCSPI_CHCONF_DPE1);
509         l |= OMAP2_MCSPI_CHCONF_DPE0;
510
511         /* wordlength */
512         l &= ~OMAP2_MCSPI_CHCONF_WL_MASK;
513         l |= (word_len - 1) << 7;
514
515         /* set chipselect polarity; manage with FORCE */
516         if (!(spi->mode & SPI_CS_HIGH))
517                 l |= OMAP2_MCSPI_CHCONF_EPOL;   /* active-low; normal */
518         else
519                 l &= ~OMAP2_MCSPI_CHCONF_EPOL;
520
521         /* set clock divisor */
522         l &= ~OMAP2_MCSPI_CHCONF_CLKD_MASK;
523         l |= div << 2;
524
525         /* set SPI mode 0..3 */
526         if (spi->mode & SPI_CPOL)
527                 l |= OMAP2_MCSPI_CHCONF_POL;
528         else
529                 l &= ~OMAP2_MCSPI_CHCONF_POL;
530         if (spi->mode & SPI_CPHA)
531                 l |= OMAP2_MCSPI_CHCONF_PHA;
532         else
533                 l &= ~OMAP2_MCSPI_CHCONF_PHA;
534
535         mcspi_write_cs_reg(spi, OMAP2_MCSPI_CHCONF0, l);
536
537         dev_dbg(&spi->dev, "setup: speed %d, sample %s edge, clk %s\n",
538                         OMAP2_MCSPI_MAX_FREQ / (1 << div),
539                         (spi->mode & SPI_CPHA) ? "trailing" : "leading",
540                         (spi->mode & SPI_CPOL) ? "inverted" : "normal");
541
542         return 0;
543 }
544
545 static void omap2_mcspi_dma_rx_callback(int lch, u16 ch_status, void *data)
546 {
547         struct spi_device       *spi = data;
548         struct omap2_mcspi      *mcspi;
549         struct omap2_mcspi_dma  *mcspi_dma;
550
551         mcspi = spi_master_get_devdata(spi->master);
552         mcspi_dma = &(mcspi->dma_channels[spi->chip_select]);
553
554         complete(&mcspi_dma->dma_rx_completion);
555
556         /* We must disable the DMA RX request */
557         omap2_mcspi_set_dma_req(spi, 1, 0);
558 }
559
560 static void omap2_mcspi_dma_tx_callback(int lch, u16 ch_status, void *data)
561 {
562         struct spi_device       *spi = data;
563         struct omap2_mcspi      *mcspi;
564         struct omap2_mcspi_dma  *mcspi_dma;
565
566         mcspi = spi_master_get_devdata(spi->master);
567         mcspi_dma = &(mcspi->dma_channels[spi->chip_select]);
568
569         complete(&mcspi_dma->dma_tx_completion);
570
571         /* We must disable the DMA TX request */
572         omap2_mcspi_set_dma_req(spi, 0, 0);
573 }
574
575 static int omap2_mcspi_request_dma(struct spi_device *spi)
576 {
577         struct spi_master       *master = spi->master;
578         struct omap2_mcspi      *mcspi;
579         struct omap2_mcspi_dma  *mcspi_dma;
580
581         mcspi = spi_master_get_devdata(master);
582         mcspi_dma = mcspi->dma_channels + spi->chip_select;
583
584         if (omap_request_dma(mcspi_dma->dma_rx_sync_dev, "McSPI RX",
585                         omap2_mcspi_dma_rx_callback, spi,
586                         &mcspi_dma->dma_rx_channel)) {
587                 dev_err(&spi->dev, "no RX DMA channel for McSPI\n");
588                 return -EAGAIN;
589         }
590
591         if (omap_request_dma(mcspi_dma->dma_tx_sync_dev, "McSPI TX",
592                         omap2_mcspi_dma_tx_callback, spi,
593                         &mcspi_dma->dma_tx_channel)) {
594                 omap_free_dma(mcspi_dma->dma_rx_channel);
595                 mcspi_dma->dma_rx_channel = -1;
596                 dev_err(&spi->dev, "no TX DMA channel for McSPI\n");
597                 return -EAGAIN;
598         }
599
600         init_completion(&mcspi_dma->dma_rx_completion);
601         init_completion(&mcspi_dma->dma_tx_completion);
602
603         return 0;
604 }
605
606 /* the spi->mode bits understood by this driver: */
607 #define MODEBITS (SPI_CPOL | SPI_CPHA | SPI_CS_HIGH)
608
609 static int omap2_mcspi_setup(struct spi_device *spi)
610 {
611         int                     ret;
612         struct omap2_mcspi      *mcspi;
613         struct omap2_mcspi_dma  *mcspi_dma;
614         struct omap2_mcspi_cs   *cs = spi->controller_state;
615
616         if (spi->mode & ~MODEBITS) {
617                 dev_dbg(&spi->dev, "setup: unsupported mode bits %x\n",
618                         spi->mode & ~MODEBITS);
619                 return -EINVAL;
620         }
621
622         if (spi->bits_per_word < 4 || spi->bits_per_word > 32) {
623                 dev_dbg(&spi->dev, "setup: unsupported %d bit words\n",
624                         spi->bits_per_word);
625                 return -EINVAL;
626         }
627
628         mcspi = spi_master_get_devdata(spi->master);
629         mcspi_dma = &mcspi->dma_channels[spi->chip_select];
630
631         if (!cs) {
632                 cs = kzalloc(sizeof *cs, GFP_KERNEL);
633                 if (!cs)
634                         return -ENOMEM;
635                 cs->base = mcspi->base + spi->chip_select * 0x14;
636                 cs->phys = mcspi->phys + spi->chip_select * 0x14;
637                 spi->controller_state = cs;
638         }
639
640         if (mcspi_dma->dma_rx_channel == -1
641                         || mcspi_dma->dma_tx_channel == -1) {
642                 ret = omap2_mcspi_request_dma(spi);
643                 if (ret < 0)
644                         return ret;
645         }
646
647         clk_enable(mcspi->ick);
648         clk_enable(mcspi->fck);
649         ret = omap2_mcspi_setup_transfer(spi, NULL);
650         clk_disable(mcspi->fck);
651         clk_disable(mcspi->ick);
652
653         return ret;
654 }
655
656 static void omap2_mcspi_cleanup(struct spi_device *spi)
657 {
658         struct omap2_mcspi      *mcspi;
659         struct omap2_mcspi_dma  *mcspi_dma;
660
661         mcspi = spi_master_get_devdata(spi->master);
662         mcspi_dma = &mcspi->dma_channels[spi->chip_select];
663
664         kfree(spi->controller_state);
665
666         if (mcspi_dma->dma_rx_channel != -1) {
667                 omap_free_dma(mcspi_dma->dma_rx_channel);
668                 mcspi_dma->dma_rx_channel = -1;
669         }
670         if (mcspi_dma->dma_tx_channel != -1) {
671                 omap_free_dma(mcspi_dma->dma_tx_channel);
672                 mcspi_dma->dma_tx_channel = -1;
673         }
674 }
675
676 static void omap2_mcspi_work(struct work_struct *work)
677 {
678         struct omap2_mcspi      *mcspi;
679
680         mcspi = container_of(work, struct omap2_mcspi, work);
681         spin_lock_irq(&mcspi->lock);
682
683         clk_enable(mcspi->ick);
684         clk_enable(mcspi->fck);
685
686         /* We only enable one channel at a time -- the one whose message is
687          * at the head of the queue -- although this controller would gladly
688          * arbitrate among multiple channels.  This corresponds to "single
689          * channel" master mode.  As a side effect, we need to manage the
690          * chipselect with the FORCE bit ... CS != channel enable.
691          */
692         while (!list_empty(&mcspi->msg_queue)) {
693                 struct spi_message              *m;
694                 struct spi_device               *spi;
695                 struct spi_transfer             *t = NULL;
696                 int                             cs_active = 0;
697                 struct omap2_mcspi_cs           *cs;
698                 int                             par_override = 0;
699                 int                             status = 0;
700                 u32                             chconf;
701
702                 m = container_of(mcspi->msg_queue.next, struct spi_message,
703                                  queue);
704
705                 list_del_init(&m->queue);
706                 spin_unlock_irq(&mcspi->lock);
707
708                 spi = m->spi;
709                 cs = spi->controller_state;
710
711                 omap2_mcspi_set_enable(spi, 1);
712                 list_for_each_entry(t, &m->transfers, transfer_list) {
713                         if (t->tx_buf == NULL && t->rx_buf == NULL && t->len) {
714                                 status = -EINVAL;
715                                 break;
716                         }
717                         if (par_override || t->speed_hz || t->bits_per_word) {
718                                 par_override = 1;
719                                 status = omap2_mcspi_setup_transfer(spi, t);
720                                 if (status < 0)
721                                         break;
722                                 if (!t->speed_hz && !t->bits_per_word)
723                                         par_override = 0;
724                         }
725
726                         if (!cs_active) {
727                                 omap2_mcspi_force_cs(spi, 1);
728                                 cs_active = 1;
729                         }
730
731                         chconf = mcspi_read_cs_reg(spi, OMAP2_MCSPI_CHCONF0);
732                         chconf &= ~OMAP2_MCSPI_CHCONF_TRM_MASK;
733                         if (t->tx_buf == NULL)
734                                 chconf |= OMAP2_MCSPI_CHCONF_TRM_RX_ONLY;
735                         else if (t->rx_buf == NULL)
736                                 chconf |= OMAP2_MCSPI_CHCONF_TRM_TX_ONLY;
737                         mcspi_write_cs_reg(spi, OMAP2_MCSPI_CHCONF0, chconf);
738
739                         if (t->len) {
740                                 unsigned        count;
741
742                                 /* RX_ONLY mode needs dummy data in TX reg */
743                                 if (t->tx_buf == NULL)
744                                         __raw_writel(0, cs->base
745                                                         + OMAP2_MCSPI_TX0);
746
747                                 if (m->is_dma_mapped || t->len >= DMA_MIN_BYTES)
748                                         count = omap2_mcspi_txrx_dma(spi, t);
749                                 else
750                                         count = omap2_mcspi_txrx_pio(spi, t);
751                                 m->actual_length += count;
752
753                                 if (count != t->len) {
754                                         status = -EIO;
755                                         break;
756                                 }
757                         }
758
759                         if (t->delay_usecs)
760                                 udelay(t->delay_usecs);
761
762                         /* ignore the "leave it on after last xfer" hint */
763                         if (t->cs_change) {
764                                 omap2_mcspi_force_cs(spi, 0);
765                                 cs_active = 0;
766                         }
767                 }
768
769                 /* Restore defaults if they were overriden */
770                 if (par_override) {
771                         par_override = 0;
772                         status = omap2_mcspi_setup_transfer(spi, NULL);
773                 }
774
775                 if (cs_active)
776                         omap2_mcspi_force_cs(spi, 0);
777
778                 omap2_mcspi_set_enable(spi, 0);
779
780                 m->status = status;
781                 m->complete(m->context);
782
783                 spin_lock_irq(&mcspi->lock);
784         }
785
786         clk_disable(mcspi->fck);
787         clk_disable(mcspi->ick);
788
789         spin_unlock_irq(&mcspi->lock);
790 }
791
792 static int omap2_mcspi_transfer(struct spi_device *spi, struct spi_message *m)
793 {
794         struct omap2_mcspi      *mcspi;
795         unsigned long           flags;
796         struct spi_transfer     *t;
797
798         m->actual_length = 0;
799         m->status = 0;
800
801         /* reject invalid messages and transfers */
802         if (list_empty(&m->transfers) || !m->complete)
803                 return -EINVAL;
804         list_for_each_entry(t, &m->transfers, transfer_list) {
805                 const void      *tx_buf = t->tx_buf;
806                 void            *rx_buf = t->rx_buf;
807                 unsigned        len = t->len;
808
809                 if (t->speed_hz > OMAP2_MCSPI_MAX_FREQ
810                                 || (len && !(rx_buf || tx_buf))
811                                 || (t->bits_per_word &&
812                                         (  t->bits_per_word < 4
813                                         || t->bits_per_word > 32))) {
814                         dev_dbg(&spi->dev, "transfer: %d Hz, %d %s%s, %d bpw\n",
815                                         t->speed_hz,
816                                         len,
817                                         tx_buf ? "tx" : "",
818                                         rx_buf ? "rx" : "",
819                                         t->bits_per_word);
820                         return -EINVAL;
821                 }
822                 if (t->speed_hz && t->speed_hz < OMAP2_MCSPI_MAX_FREQ/(1<<16)) {
823                         dev_dbg(&spi->dev, "%d Hz max exceeds %d\n",
824                                         t->speed_hz,
825                                         OMAP2_MCSPI_MAX_FREQ/(1<<16));
826                         return -EINVAL;
827                 }
828
829                 if (m->is_dma_mapped || len < DMA_MIN_BYTES)
830                         continue;
831
832                 /* Do DMA mapping "early" for better error reporting and
833                  * dcache use.  Note that if dma_unmap_single() ever starts
834                  * to do real work on ARM, we'd need to clean up mappings
835                  * for previous transfers on *ALL* exits of this loop...
836                  */
837                 if (tx_buf != NULL) {
838                         t->tx_dma = dma_map_single(&spi->dev, (void *) tx_buf,
839                                         len, DMA_TO_DEVICE);
840                         if (dma_mapping_error(&spi->dev, t->tx_dma)) {
841                                 dev_dbg(&spi->dev, "dma %cX %d bytes error\n",
842                                                 'T', len);
843                                 return -EINVAL;
844                         }
845                 }
846                 if (rx_buf != NULL) {
847                         t->rx_dma = dma_map_single(&spi->dev, rx_buf, t->len,
848                                         DMA_FROM_DEVICE);
849                         if (dma_mapping_error(&spi->dev, t->rx_dma)) {
850                                 dev_dbg(&spi->dev, "dma %cX %d bytes error\n",
851                                                 'R', len);
852                                 if (tx_buf != NULL)
853                                         dma_unmap_single(NULL, t->tx_dma,
854                                                         len, DMA_TO_DEVICE);
855                                 return -EINVAL;
856                         }
857                 }
858         }
859
860         mcspi = spi_master_get_devdata(spi->master);
861
862         spin_lock_irqsave(&mcspi->lock, flags);
863         list_add_tail(&m->queue, &mcspi->msg_queue);
864         queue_work(omap2_mcspi_wq, &mcspi->work);
865         spin_unlock_irqrestore(&mcspi->lock, flags);
866
867         return 0;
868 }
869
870 static int __init omap2_mcspi_reset(struct omap2_mcspi *mcspi)
871 {
872         struct spi_master       *master = mcspi->master;
873         u32                     tmp;
874
875         clk_enable(mcspi->ick);
876         clk_enable(mcspi->fck);
877
878         mcspi_write_reg(master, OMAP2_MCSPI_SYSCONFIG,
879                         OMAP2_MCSPI_SYSCONFIG_SOFTRESET);
880         do {
881                 tmp = mcspi_read_reg(master, OMAP2_MCSPI_SYSSTATUS);
882         } while (!(tmp & OMAP2_MCSPI_SYSSTATUS_RESETDONE));
883
884         mcspi_write_reg(master, OMAP2_MCSPI_SYSCONFIG,
885                         /* (3 << 8) | (2 << 3) | */
886                         OMAP2_MCSPI_SYSCONFIG_AUTOIDLE);
887
888         omap2_mcspi_set_master_mode(master);
889
890         clk_disable(mcspi->fck);
891         clk_disable(mcspi->ick);
892         return 0;
893 }
894
895 static u8 __initdata spi1_rxdma_id [] = {
896         OMAP24XX_DMA_SPI1_RX0,
897         OMAP24XX_DMA_SPI1_RX1,
898         OMAP24XX_DMA_SPI1_RX2,
899         OMAP24XX_DMA_SPI1_RX3,
900 };
901
902 static u8 __initdata spi1_txdma_id [] = {
903         OMAP24XX_DMA_SPI1_TX0,
904         OMAP24XX_DMA_SPI1_TX1,
905         OMAP24XX_DMA_SPI1_TX2,
906         OMAP24XX_DMA_SPI1_TX3,
907 };
908
909 static u8 __initdata spi2_rxdma_id[] = {
910         OMAP24XX_DMA_SPI2_RX0,
911         OMAP24XX_DMA_SPI2_RX1,
912 };
913
914 static u8 __initdata spi2_txdma_id[] = {
915         OMAP24XX_DMA_SPI2_TX0,
916         OMAP24XX_DMA_SPI2_TX1,
917 };
918
919 #if defined(CONFIG_ARCH_OMAP2430) || defined(CONFIG_ARCH_OMAP34XX)
920 static u8 __initdata spi3_rxdma_id[] = {
921         OMAP24XX_DMA_SPI3_RX0,
922         OMAP24XX_DMA_SPI3_RX1,
923 };
924
925 static u8 __initdata spi3_txdma_id[] = {
926         OMAP24XX_DMA_SPI3_TX0,
927         OMAP24XX_DMA_SPI3_TX1,
928 };
929 #endif
930
931 #ifdef CONFIG_ARCH_OMAP3
932 static u8 __initdata spi4_rxdma_id[] = {
933         OMAP34XX_DMA_SPI4_RX0,
934 };
935
936 static u8 __initdata spi4_txdma_id[] = {
937         OMAP34XX_DMA_SPI4_TX0,
938 };
939 #endif
940
941 static int __init omap2_mcspi_probe(struct platform_device *pdev)
942 {
943         struct spi_master       *master;
944         struct omap2_mcspi      *mcspi;
945         struct resource         *r;
946         int                     status = 0, i;
947         const u8                *rxdma_id, *txdma_id;
948         unsigned                num_chipselect;
949
950         switch (pdev->id) {
951         case 1:
952                 rxdma_id = spi1_rxdma_id;
953                 txdma_id = spi1_txdma_id;
954                 num_chipselect = 4;
955                 break;
956         case 2:
957                 rxdma_id = spi2_rxdma_id;
958                 txdma_id = spi2_txdma_id;
959                 num_chipselect = 2;
960                 break;
961 #if defined(CONFIG_ARCH_OMAP2430) || defined(CONFIG_ARCH_OMAP3)
962         case 3:
963                 rxdma_id = spi3_rxdma_id;
964                 txdma_id = spi3_txdma_id;
965                 num_chipselect = 2;
966                 break;
967 #endif
968 #ifdef CONFIG_ARCH_OMAP3
969         case 4:
970                 rxdma_id = spi4_rxdma_id;
971                 txdma_id = spi4_txdma_id;
972                 num_chipselect = 1;
973                 break;
974 #endif
975         default:
976                 return -EINVAL;
977         }
978
979         master = spi_alloc_master(&pdev->dev, sizeof *mcspi);
980         if (master == NULL) {
981                 dev_dbg(&pdev->dev, "master allocation failed\n");
982                 return -ENOMEM;
983         }
984
985         if (pdev->id != -1)
986                 master->bus_num = pdev->id;
987
988         master->setup = omap2_mcspi_setup;
989         master->transfer = omap2_mcspi_transfer;
990         master->cleanup = omap2_mcspi_cleanup;
991         master->num_chipselect = num_chipselect;
992
993         dev_set_drvdata(&pdev->dev, master);
994
995         mcspi = spi_master_get_devdata(master);
996         mcspi->master = master;
997
998         r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
999         if (r == NULL) {
1000                 status = -ENODEV;
1001                 goto err1;
1002         }
1003         if (!request_mem_region(r->start, (r->end - r->start) + 1,
1004                         dev_name(&pdev->dev))) {
1005                 status = -EBUSY;
1006                 goto err1;
1007         }
1008
1009         mcspi->phys = r->start;
1010         mcspi->base = ioremap(r->start, r->end - r->start + 1);
1011         if (!mcspi->base) {
1012                 dev_dbg(&pdev->dev, "can't ioremap MCSPI\n");
1013                 status = -ENOMEM;
1014                 goto err1aa;
1015         }
1016
1017         INIT_WORK(&mcspi->work, omap2_mcspi_work);
1018
1019         spin_lock_init(&mcspi->lock);
1020         INIT_LIST_HEAD(&mcspi->msg_queue);
1021
1022         mcspi->ick = clk_get(&pdev->dev, "ick");
1023         if (IS_ERR(mcspi->ick)) {
1024                 dev_dbg(&pdev->dev, "can't get mcspi_ick\n");
1025                 status = PTR_ERR(mcspi->ick);
1026                 goto err1a;
1027         }
1028         mcspi->fck = clk_get(&pdev->dev, "fck");
1029         if (IS_ERR(mcspi->fck)) {
1030                 dev_dbg(&pdev->dev, "can't get mcspi_fck\n");
1031                 status = PTR_ERR(mcspi->fck);
1032                 goto err2;
1033         }
1034
1035         mcspi->dma_channels = kcalloc(master->num_chipselect,
1036                         sizeof(struct omap2_mcspi_dma),
1037                         GFP_KERNEL);
1038
1039         if (mcspi->dma_channels == NULL)
1040                 goto err3;
1041
1042         for (i = 0; i < num_chipselect; i++) {
1043                 mcspi->dma_channels[i].dma_rx_channel = -1;
1044                 mcspi->dma_channels[i].dma_rx_sync_dev = rxdma_id[i];
1045                 mcspi->dma_channels[i].dma_tx_channel = -1;
1046                 mcspi->dma_channels[i].dma_tx_sync_dev = txdma_id[i];
1047         }
1048
1049         if (omap2_mcspi_reset(mcspi) < 0)
1050                 goto err4;
1051
1052         status = spi_register_master(master);
1053         if (status < 0)
1054                 goto err4;
1055
1056         return status;
1057
1058 err4:
1059         kfree(mcspi->dma_channels);
1060 err3:
1061         clk_put(mcspi->fck);
1062 err2:
1063         clk_put(mcspi->ick);
1064 err1a:
1065         iounmap(mcspi->base);
1066 err1aa:
1067         release_mem_region(r->start, (r->end - r->start) + 1);
1068 err1:
1069         spi_master_put(master);
1070         return status;
1071 }
1072
1073 static int __exit omap2_mcspi_remove(struct platform_device *pdev)
1074 {
1075         struct spi_master       *master;
1076         struct omap2_mcspi      *mcspi;
1077         struct omap2_mcspi_dma  *dma_channels;
1078         struct resource         *r;
1079         void __iomem *base;
1080
1081         master = dev_get_drvdata(&pdev->dev);
1082         mcspi = spi_master_get_devdata(master);
1083         dma_channels = mcspi->dma_channels;
1084
1085         clk_put(mcspi->fck);
1086         clk_put(mcspi->ick);
1087
1088         r = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1089         release_mem_region(r->start, (r->end - r->start) + 1);
1090
1091         base = mcspi->base;
1092         spi_unregister_master(master);
1093         iounmap(base);
1094         kfree(dma_channels);
1095
1096         return 0;
1097 }
1098
1099 /* work with hotplug and coldplug */
1100 MODULE_ALIAS("platform:omap2_mcspi");
1101
1102 static struct platform_driver omap2_mcspi_driver = {
1103         .driver = {
1104                 .name =         "omap2_mcspi",
1105                 .owner =        THIS_MODULE,
1106         },
1107         .remove =       __exit_p(omap2_mcspi_remove),
1108 };
1109
1110
1111 static int __init omap2_mcspi_init(void)
1112 {
1113         omap2_mcspi_wq = create_singlethread_workqueue(
1114                                 omap2_mcspi_driver.driver.name);
1115         if (omap2_mcspi_wq == NULL)
1116                 return -1;
1117         return platform_driver_probe(&omap2_mcspi_driver, omap2_mcspi_probe);
1118 }
1119 subsys_initcall(omap2_mcspi_init);
1120
1121 static void __exit omap2_mcspi_exit(void)
1122 {
1123         platform_driver_unregister(&omap2_mcspi_driver);
1124
1125         destroy_workqueue(omap2_mcspi_wq);
1126 }
1127 module_exit(omap2_mcspi_exit);
1128
1129 MODULE_LICENSE("GPL");