2 * OMAP2 McSPI controller driver
4 * Copyright (C) 2005, 2006 Nokia Corporation
5 * Author: Samuel Ortiz <samuel.ortiz@nokia.com> and
6 * Juha Yrj�l� <juha.yrjola@nokia.com>
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.
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.
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
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>
35 #include <linux/slab.h>
36 #include <linux/pm_runtime.h>
38 #include <linux/of_device.h>
40 #include <linux/spi/spi.h>
43 #include <plat/clock.h>
44 #include <plat/mcspi.h>
46 #define OMAP2_MCSPI_MAX_FREQ 48000000
48 /* OMAP2 has 3 SPI controllers, while OMAP3 has 4 */
49 #define OMAP2_MCSPI_MAX_CTRL 4
51 #define OMAP2_MCSPI_REVISION 0x00
52 #define OMAP2_MCSPI_SYSSTATUS 0x14
53 #define OMAP2_MCSPI_IRQSTATUS 0x18
54 #define OMAP2_MCSPI_IRQENABLE 0x1c
55 #define OMAP2_MCSPI_WAKEUPENABLE 0x20
56 #define OMAP2_MCSPI_SYST 0x24
57 #define OMAP2_MCSPI_MODULCTRL 0x28
59 /* per-channel banks, 0x14 bytes each, first is: */
60 #define OMAP2_MCSPI_CHCONF0 0x2c
61 #define OMAP2_MCSPI_CHSTAT0 0x30
62 #define OMAP2_MCSPI_CHCTRL0 0x34
63 #define OMAP2_MCSPI_TX0 0x38
64 #define OMAP2_MCSPI_RX0 0x3c
66 /* per-register bitmasks: */
68 #define OMAP2_MCSPI_MODULCTRL_SINGLE BIT(0)
69 #define OMAP2_MCSPI_MODULCTRL_MS BIT(2)
70 #define OMAP2_MCSPI_MODULCTRL_STEST BIT(3)
72 #define OMAP2_MCSPI_CHCONF_PHA BIT(0)
73 #define OMAP2_MCSPI_CHCONF_POL BIT(1)
74 #define OMAP2_MCSPI_CHCONF_CLKD_MASK (0x0f << 2)
75 #define OMAP2_MCSPI_CHCONF_EPOL BIT(6)
76 #define OMAP2_MCSPI_CHCONF_WL_MASK (0x1f << 7)
77 #define OMAP2_MCSPI_CHCONF_TRM_RX_ONLY BIT(12)
78 #define OMAP2_MCSPI_CHCONF_TRM_TX_ONLY BIT(13)
79 #define OMAP2_MCSPI_CHCONF_TRM_MASK (0x03 << 12)
80 #define OMAP2_MCSPI_CHCONF_DMAW BIT(14)
81 #define OMAP2_MCSPI_CHCONF_DMAR BIT(15)
82 #define OMAP2_MCSPI_CHCONF_DPE0 BIT(16)
83 #define OMAP2_MCSPI_CHCONF_DPE1 BIT(17)
84 #define OMAP2_MCSPI_CHCONF_IS BIT(18)
85 #define OMAP2_MCSPI_CHCONF_TURBO BIT(19)
86 #define OMAP2_MCSPI_CHCONF_FORCE BIT(20)
88 #define OMAP2_MCSPI_CHSTAT_RXS BIT(0)
89 #define OMAP2_MCSPI_CHSTAT_TXS BIT(1)
90 #define OMAP2_MCSPI_CHSTAT_EOT BIT(2)
92 #define OMAP2_MCSPI_CHCTRL_EN BIT(0)
94 #define OMAP2_MCSPI_WAKEUPENABLE_WKEN BIT(0)
96 /* We have 2 DMA channels per CS, one for RX and one for TX */
97 struct omap2_mcspi_dma
{
104 struct completion dma_tx_completion
;
105 struct completion dma_rx_completion
;
108 /* use PIO for small transfers, avoiding DMA setup/teardown overhead and
109 * cache operations; better heuristics consider wordsize and bitrate.
111 #define DMA_MIN_BYTES 160
115 struct work_struct work
;
116 /* lock protects queue and registers */
118 struct list_head msg_queue
;
119 struct spi_master
*master
;
120 /* Virtual base address of the controller */
123 /* SPI1 has 4 channels, while SPI2 has 2 */
124 struct omap2_mcspi_dma
*dma_channels
;
126 struct workqueue_struct
*wq
;
129 struct omap2_mcspi_cs
{
133 struct list_head node
;
134 /* Context save and restore shadow register */
138 /* used for context save and restore, structure members to be updated whenever
139 * corresponding registers are modified.
141 struct omap2_mcspi_regs
{
147 static struct omap2_mcspi_regs omap2_mcspi_ctx
[OMAP2_MCSPI_MAX_CTRL
];
149 #define MOD_REG_BIT(val, mask, set) do { \
156 static inline void mcspi_write_reg(struct spi_master
*master
,
159 struct omap2_mcspi
*mcspi
= spi_master_get_devdata(master
);
161 __raw_writel(val
, mcspi
->base
+ idx
);
164 static inline u32
mcspi_read_reg(struct spi_master
*master
, int idx
)
166 struct omap2_mcspi
*mcspi
= spi_master_get_devdata(master
);
168 return __raw_readl(mcspi
->base
+ idx
);
171 static inline void mcspi_write_cs_reg(const struct spi_device
*spi
,
174 struct omap2_mcspi_cs
*cs
= spi
->controller_state
;
176 __raw_writel(val
, cs
->base
+ idx
);
179 static inline u32
mcspi_read_cs_reg(const struct spi_device
*spi
, int idx
)
181 struct omap2_mcspi_cs
*cs
= spi
->controller_state
;
183 return __raw_readl(cs
->base
+ idx
);
186 static inline u32
mcspi_cached_chconf0(const struct spi_device
*spi
)
188 struct omap2_mcspi_cs
*cs
= spi
->controller_state
;
193 static inline void mcspi_write_chconf0(const struct spi_device
*spi
, u32 val
)
195 struct omap2_mcspi_cs
*cs
= spi
->controller_state
;
198 mcspi_write_cs_reg(spi
, OMAP2_MCSPI_CHCONF0
, val
);
199 mcspi_read_cs_reg(spi
, OMAP2_MCSPI_CHCONF0
);
202 static void omap2_mcspi_set_dma_req(const struct spi_device
*spi
,
203 int is_read
, int enable
)
207 l
= mcspi_cached_chconf0(spi
);
209 if (is_read
) /* 1 is read, 0 write */
210 rw
= OMAP2_MCSPI_CHCONF_DMAR
;
212 rw
= OMAP2_MCSPI_CHCONF_DMAW
;
214 MOD_REG_BIT(l
, rw
, enable
);
215 mcspi_write_chconf0(spi
, l
);
218 static void omap2_mcspi_set_enable(const struct spi_device
*spi
, int enable
)
222 l
= enable
? OMAP2_MCSPI_CHCTRL_EN
: 0;
223 mcspi_write_cs_reg(spi
, OMAP2_MCSPI_CHCTRL0
, l
);
224 /* Flash post-writes */
225 mcspi_read_cs_reg(spi
, OMAP2_MCSPI_CHCTRL0
);
228 static void omap2_mcspi_force_cs(struct spi_device
*spi
, int cs_active
)
232 l
= mcspi_cached_chconf0(spi
);
233 MOD_REG_BIT(l
, OMAP2_MCSPI_CHCONF_FORCE
, cs_active
);
234 mcspi_write_chconf0(spi
, l
);
237 static void omap2_mcspi_set_master_mode(struct spi_master
*master
)
241 /* setup when switching from (reset default) slave mode
242 * to single-channel master mode
244 l
= mcspi_read_reg(master
, OMAP2_MCSPI_MODULCTRL
);
245 MOD_REG_BIT(l
, OMAP2_MCSPI_MODULCTRL_STEST
, 0);
246 MOD_REG_BIT(l
, OMAP2_MCSPI_MODULCTRL_MS
, 0);
247 MOD_REG_BIT(l
, OMAP2_MCSPI_MODULCTRL_SINGLE
, 1);
248 mcspi_write_reg(master
, OMAP2_MCSPI_MODULCTRL
, l
);
250 omap2_mcspi_ctx
[master
->bus_num
- 1].modulctrl
= l
;
253 static void omap2_mcspi_restore_ctx(struct omap2_mcspi
*mcspi
)
255 struct spi_master
*spi_cntrl
;
256 struct omap2_mcspi_cs
*cs
;
257 spi_cntrl
= mcspi
->master
;
259 /* McSPI: context restore */
260 mcspi_write_reg(spi_cntrl
, OMAP2_MCSPI_MODULCTRL
,
261 omap2_mcspi_ctx
[spi_cntrl
->bus_num
- 1].modulctrl
);
263 mcspi_write_reg(spi_cntrl
, OMAP2_MCSPI_WAKEUPENABLE
,
264 omap2_mcspi_ctx
[spi_cntrl
->bus_num
- 1].wakeupenable
);
266 list_for_each_entry(cs
, &omap2_mcspi_ctx
[spi_cntrl
->bus_num
- 1].cs
,
268 __raw_writel(cs
->chconf0
, cs
->base
+ OMAP2_MCSPI_CHCONF0
);
270 static void omap2_mcspi_disable_clocks(struct omap2_mcspi
*mcspi
)
272 pm_runtime_put_sync(mcspi
->dev
);
275 static int omap2_mcspi_enable_clocks(struct omap2_mcspi
*mcspi
)
277 return pm_runtime_get_sync(mcspi
->dev
);
280 static int mcspi_wait_for_reg_bit(void __iomem
*reg
, unsigned long bit
)
282 unsigned long timeout
;
284 timeout
= jiffies
+ msecs_to_jiffies(1000);
285 while (!(__raw_readl(reg
) & bit
)) {
286 if (time_after(jiffies
, timeout
))
294 omap2_mcspi_txrx_dma(struct spi_device
*spi
, struct spi_transfer
*xfer
)
296 struct omap2_mcspi
*mcspi
;
297 struct omap2_mcspi_cs
*cs
= spi
->controller_state
;
298 struct omap2_mcspi_dma
*mcspi_dma
;
299 unsigned int count
, c
;
300 unsigned long base
, tx_reg
, rx_reg
;
301 int word_len
, data_type
, element_count
;
306 void __iomem
*chstat_reg
;
308 mcspi
= spi_master_get_devdata(spi
->master
);
309 mcspi_dma
= &mcspi
->dma_channels
[spi
->chip_select
];
310 l
= mcspi_cached_chconf0(spi
);
312 chstat_reg
= cs
->base
+ OMAP2_MCSPI_CHSTAT0
;
316 word_len
= cs
->word_len
;
319 tx_reg
= base
+ OMAP2_MCSPI_TX0
;
320 rx_reg
= base
+ OMAP2_MCSPI_RX0
;
325 data_type
= OMAP_DMA_DATA_TYPE_S8
;
326 element_count
= count
;
327 } else if (word_len
<= 16) {
328 data_type
= OMAP_DMA_DATA_TYPE_S16
;
329 element_count
= count
>> 1;
330 } else /* word_len <= 32 */ {
331 data_type
= OMAP_DMA_DATA_TYPE_S32
;
332 element_count
= count
>> 2;
336 omap_set_dma_transfer_params(mcspi_dma
->dma_tx_channel
,
337 data_type
, element_count
, 1,
338 OMAP_DMA_SYNC_ELEMENT
,
339 mcspi_dma
->dma_tx_sync_dev
, 0);
341 omap_set_dma_dest_params(mcspi_dma
->dma_tx_channel
, 0,
342 OMAP_DMA_AMODE_CONSTANT
,
345 omap_set_dma_src_params(mcspi_dma
->dma_tx_channel
, 0,
346 OMAP_DMA_AMODE_POST_INC
,
351 elements
= element_count
- 1;
352 if (l
& OMAP2_MCSPI_CHCONF_TURBO
)
355 omap_set_dma_transfer_params(mcspi_dma
->dma_rx_channel
,
356 data_type
, elements
, 1,
357 OMAP_DMA_SYNC_ELEMENT
,
358 mcspi_dma
->dma_rx_sync_dev
, 1);
360 omap_set_dma_src_params(mcspi_dma
->dma_rx_channel
, 0,
361 OMAP_DMA_AMODE_CONSTANT
,
364 omap_set_dma_dest_params(mcspi_dma
->dma_rx_channel
, 0,
365 OMAP_DMA_AMODE_POST_INC
,
370 omap_start_dma(mcspi_dma
->dma_tx_channel
);
371 omap2_mcspi_set_dma_req(spi
, 0, 1);
375 omap_start_dma(mcspi_dma
->dma_rx_channel
);
376 omap2_mcspi_set_dma_req(spi
, 1, 1);
380 wait_for_completion(&mcspi_dma
->dma_tx_completion
);
381 dma_unmap_single(&spi
->dev
, xfer
->tx_dma
, count
, DMA_TO_DEVICE
);
383 /* for TX_ONLY mode, be sure all words have shifted out */
385 if (mcspi_wait_for_reg_bit(chstat_reg
,
386 OMAP2_MCSPI_CHSTAT_TXS
) < 0)
387 dev_err(&spi
->dev
, "TXS timed out\n");
388 else if (mcspi_wait_for_reg_bit(chstat_reg
,
389 OMAP2_MCSPI_CHSTAT_EOT
) < 0)
390 dev_err(&spi
->dev
, "EOT timed out\n");
395 wait_for_completion(&mcspi_dma
->dma_rx_completion
);
396 dma_unmap_single(&spi
->dev
, xfer
->rx_dma
, count
, DMA_FROM_DEVICE
);
397 omap2_mcspi_set_enable(spi
, 0);
399 if (l
& OMAP2_MCSPI_CHCONF_TURBO
) {
401 if (likely(mcspi_read_cs_reg(spi
, OMAP2_MCSPI_CHSTAT0
)
402 & OMAP2_MCSPI_CHSTAT_RXS
)) {
405 w
= mcspi_read_cs_reg(spi
, OMAP2_MCSPI_RX0
);
407 ((u8
*)xfer
->rx_buf
)[elements
++] = w
;
408 else if (word_len
<= 16)
409 ((u16
*)xfer
->rx_buf
)[elements
++] = w
;
410 else /* word_len <= 32 */
411 ((u32
*)xfer
->rx_buf
)[elements
++] = w
;
414 "DMA RX penultimate word empty");
415 count
-= (word_len
<= 8) ? 2 :
416 (word_len
<= 16) ? 4 :
417 /* word_len <= 32 */ 8;
418 omap2_mcspi_set_enable(spi
, 1);
423 if (likely(mcspi_read_cs_reg(spi
, OMAP2_MCSPI_CHSTAT0
)
424 & OMAP2_MCSPI_CHSTAT_RXS
)) {
427 w
= mcspi_read_cs_reg(spi
, OMAP2_MCSPI_RX0
);
429 ((u8
*)xfer
->rx_buf
)[elements
] = w
;
430 else if (word_len
<= 16)
431 ((u16
*)xfer
->rx_buf
)[elements
] = w
;
432 else /* word_len <= 32 */
433 ((u32
*)xfer
->rx_buf
)[elements
] = w
;
435 dev_err(&spi
->dev
, "DMA RX last word empty");
436 count
-= (word_len
<= 8) ? 1 :
437 (word_len
<= 16) ? 2 :
438 /* word_len <= 32 */ 4;
440 omap2_mcspi_set_enable(spi
, 1);
446 omap2_mcspi_txrx_pio(struct spi_device
*spi
, struct spi_transfer
*xfer
)
448 struct omap2_mcspi
*mcspi
;
449 struct omap2_mcspi_cs
*cs
= spi
->controller_state
;
450 unsigned int count
, c
;
452 void __iomem
*base
= cs
->base
;
453 void __iomem
*tx_reg
;
454 void __iomem
*rx_reg
;
455 void __iomem
*chstat_reg
;
458 mcspi
= spi_master_get_devdata(spi
->master
);
461 word_len
= cs
->word_len
;
463 l
= mcspi_cached_chconf0(spi
);
465 /* We store the pre-calculated register addresses on stack to speed
466 * up the transfer loop. */
467 tx_reg
= base
+ OMAP2_MCSPI_TX0
;
468 rx_reg
= base
+ OMAP2_MCSPI_RX0
;
469 chstat_reg
= base
+ OMAP2_MCSPI_CHSTAT0
;
471 if (c
< (word_len
>>3))
484 if (mcspi_wait_for_reg_bit(chstat_reg
,
485 OMAP2_MCSPI_CHSTAT_TXS
) < 0) {
486 dev_err(&spi
->dev
, "TXS timed out\n");
489 dev_vdbg(&spi
->dev
, "write-%d %02x\n",
491 __raw_writel(*tx
++, tx_reg
);
494 if (mcspi_wait_for_reg_bit(chstat_reg
,
495 OMAP2_MCSPI_CHSTAT_RXS
) < 0) {
496 dev_err(&spi
->dev
, "RXS timed out\n");
500 if (c
== 1 && tx
== NULL
&&
501 (l
& OMAP2_MCSPI_CHCONF_TURBO
)) {
502 omap2_mcspi_set_enable(spi
, 0);
503 *rx
++ = __raw_readl(rx_reg
);
504 dev_vdbg(&spi
->dev
, "read-%d %02x\n",
505 word_len
, *(rx
- 1));
506 if (mcspi_wait_for_reg_bit(chstat_reg
,
507 OMAP2_MCSPI_CHSTAT_RXS
) < 0) {
513 } else if (c
== 0 && tx
== NULL
) {
514 omap2_mcspi_set_enable(spi
, 0);
517 *rx
++ = __raw_readl(rx_reg
);
518 dev_vdbg(&spi
->dev
, "read-%d %02x\n",
519 word_len
, *(rx
- 1));
522 } else if (word_len
<= 16) {
531 if (mcspi_wait_for_reg_bit(chstat_reg
,
532 OMAP2_MCSPI_CHSTAT_TXS
) < 0) {
533 dev_err(&spi
->dev
, "TXS timed out\n");
536 dev_vdbg(&spi
->dev
, "write-%d %04x\n",
538 __raw_writel(*tx
++, tx_reg
);
541 if (mcspi_wait_for_reg_bit(chstat_reg
,
542 OMAP2_MCSPI_CHSTAT_RXS
) < 0) {
543 dev_err(&spi
->dev
, "RXS timed out\n");
547 if (c
== 2 && tx
== NULL
&&
548 (l
& OMAP2_MCSPI_CHCONF_TURBO
)) {
549 omap2_mcspi_set_enable(spi
, 0);
550 *rx
++ = __raw_readl(rx_reg
);
551 dev_vdbg(&spi
->dev
, "read-%d %04x\n",
552 word_len
, *(rx
- 1));
553 if (mcspi_wait_for_reg_bit(chstat_reg
,
554 OMAP2_MCSPI_CHSTAT_RXS
) < 0) {
560 } else if (c
== 0 && tx
== NULL
) {
561 omap2_mcspi_set_enable(spi
, 0);
564 *rx
++ = __raw_readl(rx_reg
);
565 dev_vdbg(&spi
->dev
, "read-%d %04x\n",
566 word_len
, *(rx
- 1));
569 } else if (word_len
<= 32) {
578 if (mcspi_wait_for_reg_bit(chstat_reg
,
579 OMAP2_MCSPI_CHSTAT_TXS
) < 0) {
580 dev_err(&spi
->dev
, "TXS timed out\n");
583 dev_vdbg(&spi
->dev
, "write-%d %08x\n",
585 __raw_writel(*tx
++, tx_reg
);
588 if (mcspi_wait_for_reg_bit(chstat_reg
,
589 OMAP2_MCSPI_CHSTAT_RXS
) < 0) {
590 dev_err(&spi
->dev
, "RXS timed out\n");
594 if (c
== 4 && tx
== NULL
&&
595 (l
& OMAP2_MCSPI_CHCONF_TURBO
)) {
596 omap2_mcspi_set_enable(spi
, 0);
597 *rx
++ = __raw_readl(rx_reg
);
598 dev_vdbg(&spi
->dev
, "read-%d %08x\n",
599 word_len
, *(rx
- 1));
600 if (mcspi_wait_for_reg_bit(chstat_reg
,
601 OMAP2_MCSPI_CHSTAT_RXS
) < 0) {
607 } else if (c
== 0 && tx
== NULL
) {
608 omap2_mcspi_set_enable(spi
, 0);
611 *rx
++ = __raw_readl(rx_reg
);
612 dev_vdbg(&spi
->dev
, "read-%d %08x\n",
613 word_len
, *(rx
- 1));
618 /* for TX_ONLY mode, be sure all words have shifted out */
619 if (xfer
->rx_buf
== NULL
) {
620 if (mcspi_wait_for_reg_bit(chstat_reg
,
621 OMAP2_MCSPI_CHSTAT_TXS
) < 0) {
622 dev_err(&spi
->dev
, "TXS timed out\n");
623 } else if (mcspi_wait_for_reg_bit(chstat_reg
,
624 OMAP2_MCSPI_CHSTAT_EOT
) < 0)
625 dev_err(&spi
->dev
, "EOT timed out\n");
627 /* disable chan to purge rx datas received in TX_ONLY transfer,
628 * otherwise these rx datas will affect the direct following
631 omap2_mcspi_set_enable(spi
, 0);
634 omap2_mcspi_set_enable(spi
, 1);
638 static u32
omap2_mcspi_calc_divisor(u32 speed_hz
)
642 for (div
= 0; div
< 15; div
++)
643 if (speed_hz
>= (OMAP2_MCSPI_MAX_FREQ
>> div
))
649 /* called only when no transfer is active to this device */
650 static int omap2_mcspi_setup_transfer(struct spi_device
*spi
,
651 struct spi_transfer
*t
)
653 struct omap2_mcspi_cs
*cs
= spi
->controller_state
;
654 struct omap2_mcspi
*mcspi
;
655 struct spi_master
*spi_cntrl
;
657 u8 word_len
= spi
->bits_per_word
;
658 u32 speed_hz
= spi
->max_speed_hz
;
660 mcspi
= spi_master_get_devdata(spi
->master
);
661 spi_cntrl
= mcspi
->master
;
663 if (t
!= NULL
&& t
->bits_per_word
)
664 word_len
= t
->bits_per_word
;
666 cs
->word_len
= word_len
;
668 if (t
&& t
->speed_hz
)
669 speed_hz
= t
->speed_hz
;
671 speed_hz
= min_t(u32
, speed_hz
, OMAP2_MCSPI_MAX_FREQ
);
672 div
= omap2_mcspi_calc_divisor(speed_hz
);
674 l
= mcspi_cached_chconf0(spi
);
676 /* standard 4-wire master mode: SCK, MOSI/out, MISO/in, nCS
677 * REVISIT: this controller could support SPI_3WIRE mode.
679 l
&= ~(OMAP2_MCSPI_CHCONF_IS
|OMAP2_MCSPI_CHCONF_DPE1
);
680 l
|= OMAP2_MCSPI_CHCONF_DPE0
;
683 l
&= ~OMAP2_MCSPI_CHCONF_WL_MASK
;
684 l
|= (word_len
- 1) << 7;
686 /* set chipselect polarity; manage with FORCE */
687 if (!(spi
->mode
& SPI_CS_HIGH
))
688 l
|= OMAP2_MCSPI_CHCONF_EPOL
; /* active-low; normal */
690 l
&= ~OMAP2_MCSPI_CHCONF_EPOL
;
692 /* set clock divisor */
693 l
&= ~OMAP2_MCSPI_CHCONF_CLKD_MASK
;
696 /* set SPI mode 0..3 */
697 if (spi
->mode
& SPI_CPOL
)
698 l
|= OMAP2_MCSPI_CHCONF_POL
;
700 l
&= ~OMAP2_MCSPI_CHCONF_POL
;
701 if (spi
->mode
& SPI_CPHA
)
702 l
|= OMAP2_MCSPI_CHCONF_PHA
;
704 l
&= ~OMAP2_MCSPI_CHCONF_PHA
;
706 mcspi_write_chconf0(spi
, l
);
708 dev_dbg(&spi
->dev
, "setup: speed %d, sample %s edge, clk %s\n",
709 OMAP2_MCSPI_MAX_FREQ
>> div
,
710 (spi
->mode
& SPI_CPHA
) ? "trailing" : "leading",
711 (spi
->mode
& SPI_CPOL
) ? "inverted" : "normal");
716 static void omap2_mcspi_dma_rx_callback(int lch
, u16 ch_status
, void *data
)
718 struct spi_device
*spi
= data
;
719 struct omap2_mcspi
*mcspi
;
720 struct omap2_mcspi_dma
*mcspi_dma
;
722 mcspi
= spi_master_get_devdata(spi
->master
);
723 mcspi_dma
= &(mcspi
->dma_channels
[spi
->chip_select
]);
725 complete(&mcspi_dma
->dma_rx_completion
);
727 /* We must disable the DMA RX request */
728 omap2_mcspi_set_dma_req(spi
, 1, 0);
731 static void omap2_mcspi_dma_tx_callback(int lch
, u16 ch_status
, void *data
)
733 struct spi_device
*spi
= data
;
734 struct omap2_mcspi
*mcspi
;
735 struct omap2_mcspi_dma
*mcspi_dma
;
737 mcspi
= spi_master_get_devdata(spi
->master
);
738 mcspi_dma
= &(mcspi
->dma_channels
[spi
->chip_select
]);
740 complete(&mcspi_dma
->dma_tx_completion
);
742 /* We must disable the DMA TX request */
743 omap2_mcspi_set_dma_req(spi
, 0, 0);
746 static int omap2_mcspi_request_dma(struct spi_device
*spi
)
748 struct spi_master
*master
= spi
->master
;
749 struct omap2_mcspi
*mcspi
;
750 struct omap2_mcspi_dma
*mcspi_dma
;
752 mcspi
= spi_master_get_devdata(master
);
753 mcspi_dma
= mcspi
->dma_channels
+ spi
->chip_select
;
755 if (omap_request_dma(mcspi_dma
->dma_rx_sync_dev
, "McSPI RX",
756 omap2_mcspi_dma_rx_callback
, spi
,
757 &mcspi_dma
->dma_rx_channel
)) {
758 dev_err(&spi
->dev
, "no RX DMA channel for McSPI\n");
762 if (omap_request_dma(mcspi_dma
->dma_tx_sync_dev
, "McSPI TX",
763 omap2_mcspi_dma_tx_callback
, spi
,
764 &mcspi_dma
->dma_tx_channel
)) {
765 omap_free_dma(mcspi_dma
->dma_rx_channel
);
766 mcspi_dma
->dma_rx_channel
= -1;
767 dev_err(&spi
->dev
, "no TX DMA channel for McSPI\n");
771 init_completion(&mcspi_dma
->dma_rx_completion
);
772 init_completion(&mcspi_dma
->dma_tx_completion
);
777 static int omap2_mcspi_setup(struct spi_device
*spi
)
780 struct omap2_mcspi
*mcspi
;
781 struct omap2_mcspi_dma
*mcspi_dma
;
782 struct omap2_mcspi_cs
*cs
= spi
->controller_state
;
784 if (spi
->bits_per_word
< 4 || spi
->bits_per_word
> 32) {
785 dev_dbg(&spi
->dev
, "setup: unsupported %d bit words\n",
790 mcspi
= spi_master_get_devdata(spi
->master
);
791 mcspi_dma
= &mcspi
->dma_channels
[spi
->chip_select
];
794 cs
= kzalloc(sizeof *cs
, GFP_KERNEL
);
797 cs
->base
= mcspi
->base
+ spi
->chip_select
* 0x14;
798 cs
->phys
= mcspi
->phys
+ spi
->chip_select
* 0x14;
800 spi
->controller_state
= cs
;
801 /* Link this to context save list */
802 list_add_tail(&cs
->node
,
803 &omap2_mcspi_ctx
[mcspi
->master
->bus_num
- 1].cs
);
806 if (mcspi_dma
->dma_rx_channel
== -1
807 || mcspi_dma
->dma_tx_channel
== -1) {
808 ret
= omap2_mcspi_request_dma(spi
);
813 ret
= omap2_mcspi_enable_clocks(mcspi
);
817 ret
= omap2_mcspi_setup_transfer(spi
, NULL
);
818 omap2_mcspi_disable_clocks(mcspi
);
823 static void omap2_mcspi_cleanup(struct spi_device
*spi
)
825 struct omap2_mcspi
*mcspi
;
826 struct omap2_mcspi_dma
*mcspi_dma
;
827 struct omap2_mcspi_cs
*cs
;
829 mcspi
= spi_master_get_devdata(spi
->master
);
831 if (spi
->controller_state
) {
832 /* Unlink controller state from context save list */
833 cs
= spi
->controller_state
;
836 kfree(spi
->controller_state
);
839 if (spi
->chip_select
< spi
->master
->num_chipselect
) {
840 mcspi_dma
= &mcspi
->dma_channels
[spi
->chip_select
];
842 if (mcspi_dma
->dma_rx_channel
!= -1) {
843 omap_free_dma(mcspi_dma
->dma_rx_channel
);
844 mcspi_dma
->dma_rx_channel
= -1;
846 if (mcspi_dma
->dma_tx_channel
!= -1) {
847 omap_free_dma(mcspi_dma
->dma_tx_channel
);
848 mcspi_dma
->dma_tx_channel
= -1;
853 static void omap2_mcspi_work(struct work_struct
*work
)
855 struct omap2_mcspi
*mcspi
;
857 mcspi
= container_of(work
, struct omap2_mcspi
, work
);
859 if (omap2_mcspi_enable_clocks(mcspi
) < 0)
862 spin_lock_irq(&mcspi
->lock
);
864 /* We only enable one channel at a time -- the one whose message is
865 * at the head of the queue -- although this controller would gladly
866 * arbitrate among multiple channels. This corresponds to "single
867 * channel" master mode. As a side effect, we need to manage the
868 * chipselect with the FORCE bit ... CS != channel enable.
870 while (!list_empty(&mcspi
->msg_queue
)) {
871 struct spi_message
*m
;
872 struct spi_device
*spi
;
873 struct spi_transfer
*t
= NULL
;
875 struct omap2_mcspi_cs
*cs
;
876 struct omap2_mcspi_device_config
*cd
;
877 int par_override
= 0;
881 m
= container_of(mcspi
->msg_queue
.next
, struct spi_message
,
884 list_del_init(&m
->queue
);
885 spin_unlock_irq(&mcspi
->lock
);
888 cs
= spi
->controller_state
;
889 cd
= spi
->controller_data
;
891 omap2_mcspi_set_enable(spi
, 1);
892 list_for_each_entry(t
, &m
->transfers
, transfer_list
) {
893 if (t
->tx_buf
== NULL
&& t
->rx_buf
== NULL
&& t
->len
) {
897 if (par_override
|| t
->speed_hz
|| t
->bits_per_word
) {
899 status
= omap2_mcspi_setup_transfer(spi
, t
);
902 if (!t
->speed_hz
&& !t
->bits_per_word
)
907 omap2_mcspi_force_cs(spi
, 1);
911 chconf
= mcspi_cached_chconf0(spi
);
912 chconf
&= ~OMAP2_MCSPI_CHCONF_TRM_MASK
;
913 chconf
&= ~OMAP2_MCSPI_CHCONF_TURBO
;
915 if (t
->tx_buf
== NULL
)
916 chconf
|= OMAP2_MCSPI_CHCONF_TRM_RX_ONLY
;
917 else if (t
->rx_buf
== NULL
)
918 chconf
|= OMAP2_MCSPI_CHCONF_TRM_TX_ONLY
;
920 if (cd
&& cd
->turbo_mode
&& t
->tx_buf
== NULL
) {
921 /* Turbo mode is for more than one word */
922 if (t
->len
> ((cs
->word_len
+ 7) >> 3))
923 chconf
|= OMAP2_MCSPI_CHCONF_TURBO
;
926 mcspi_write_chconf0(spi
, chconf
);
931 /* RX_ONLY mode needs dummy data in TX reg */
932 if (t
->tx_buf
== NULL
)
933 __raw_writel(0, cs
->base
936 if (m
->is_dma_mapped
|| t
->len
>= DMA_MIN_BYTES
)
937 count
= omap2_mcspi_txrx_dma(spi
, t
);
939 count
= omap2_mcspi_txrx_pio(spi
, t
);
940 m
->actual_length
+= count
;
942 if (count
!= t
->len
) {
949 udelay(t
->delay_usecs
);
951 /* ignore the "leave it on after last xfer" hint */
953 omap2_mcspi_force_cs(spi
, 0);
958 /* Restore defaults if they were overriden */
961 status
= omap2_mcspi_setup_transfer(spi
, NULL
);
965 omap2_mcspi_force_cs(spi
, 0);
967 omap2_mcspi_set_enable(spi
, 0);
970 m
->complete(m
->context
);
972 spin_lock_irq(&mcspi
->lock
);
975 spin_unlock_irq(&mcspi
->lock
);
977 omap2_mcspi_disable_clocks(mcspi
);
980 static int omap2_mcspi_transfer(struct spi_device
*spi
, struct spi_message
*m
)
982 struct omap2_mcspi
*mcspi
;
984 struct spi_transfer
*t
;
986 m
->actual_length
= 0;
989 /* reject invalid messages and transfers */
990 if (list_empty(&m
->transfers
) || !m
->complete
)
992 list_for_each_entry(t
, &m
->transfers
, transfer_list
) {
993 const void *tx_buf
= t
->tx_buf
;
994 void *rx_buf
= t
->rx_buf
;
995 unsigned len
= t
->len
;
997 if (t
->speed_hz
> OMAP2_MCSPI_MAX_FREQ
998 || (len
&& !(rx_buf
|| tx_buf
))
999 || (t
->bits_per_word
&&
1000 ( t
->bits_per_word
< 4
1001 || t
->bits_per_word
> 32))) {
1002 dev_dbg(&spi
->dev
, "transfer: %d Hz, %d %s%s, %d bpw\n",
1010 if (t
->speed_hz
&& t
->speed_hz
< (OMAP2_MCSPI_MAX_FREQ
>> 15)) {
1011 dev_dbg(&spi
->dev
, "speed_hz %d below minimum %d Hz\n",
1013 OMAP2_MCSPI_MAX_FREQ
>> 15);
1017 if (m
->is_dma_mapped
|| len
< DMA_MIN_BYTES
)
1020 if (tx_buf
!= NULL
) {
1021 t
->tx_dma
= dma_map_single(&spi
->dev
, (void *) tx_buf
,
1022 len
, DMA_TO_DEVICE
);
1023 if (dma_mapping_error(&spi
->dev
, t
->tx_dma
)) {
1024 dev_dbg(&spi
->dev
, "dma %cX %d bytes error\n",
1029 if (rx_buf
!= NULL
) {
1030 t
->rx_dma
= dma_map_single(&spi
->dev
, rx_buf
, t
->len
,
1032 if (dma_mapping_error(&spi
->dev
, t
->rx_dma
)) {
1033 dev_dbg(&spi
->dev
, "dma %cX %d bytes error\n",
1036 dma_unmap_single(&spi
->dev
, t
->tx_dma
,
1037 len
, DMA_TO_DEVICE
);
1043 mcspi
= spi_master_get_devdata(spi
->master
);
1045 spin_lock_irqsave(&mcspi
->lock
, flags
);
1046 list_add_tail(&m
->queue
, &mcspi
->msg_queue
);
1047 queue_work(mcspi
->wq
, &mcspi
->work
);
1048 spin_unlock_irqrestore(&mcspi
->lock
, flags
);
1053 static int __init
omap2_mcspi_master_setup(struct omap2_mcspi
*mcspi
)
1055 struct spi_master
*master
= mcspi
->master
;
1059 ret
= omap2_mcspi_enable_clocks(mcspi
);
1063 tmp
= OMAP2_MCSPI_WAKEUPENABLE_WKEN
;
1064 mcspi_write_reg(master
, OMAP2_MCSPI_WAKEUPENABLE
, tmp
);
1065 omap2_mcspi_ctx
[master
->bus_num
- 1].wakeupenable
= tmp
;
1067 omap2_mcspi_set_master_mode(master
);
1068 omap2_mcspi_disable_clocks(mcspi
);
1072 static int omap_mcspi_runtime_resume(struct device
*dev
)
1074 struct omap2_mcspi
*mcspi
;
1075 struct spi_master
*master
;
1077 master
= dev_get_drvdata(dev
);
1078 mcspi
= spi_master_get_devdata(master
);
1079 omap2_mcspi_restore_ctx(mcspi
);
1084 static struct omap2_mcspi_platform_config omap2_pdata
= {
1088 static struct omap2_mcspi_platform_config omap4_pdata
= {
1089 .regs_offset
= OMAP4_MCSPI_REG_OFFSET
,
1092 static const struct of_device_id omap_mcspi_of_match
[] = {
1094 .compatible
= "ti,omap2-mcspi",
1095 .data
= &omap2_pdata
,
1098 .compatible
= "ti,omap4-mcspi",
1099 .data
= &omap4_pdata
,
1103 MODULE_DEVICE_TABLE(of
, omap_mcspi_of_match
);
1105 static int __init
omap2_mcspi_probe(struct platform_device
*pdev
)
1107 struct spi_master
*master
;
1108 struct omap2_mcspi_platform_config
*pdata
;
1109 struct omap2_mcspi
*mcspi
;
1113 u32 regs_offset
= 0;
1114 static int bus_num
= 1;
1115 struct device_node
*node
= pdev
->dev
.of_node
;
1116 const struct of_device_id
*match
;
1118 master
= spi_alloc_master(&pdev
->dev
, sizeof *mcspi
);
1119 if (master
== NULL
) {
1120 dev_dbg(&pdev
->dev
, "master allocation failed\n");
1124 /* the spi->mode bits understood by this driver: */
1125 master
->mode_bits
= SPI_CPOL
| SPI_CPHA
| SPI_CS_HIGH
;
1127 master
->setup
= omap2_mcspi_setup
;
1128 master
->transfer
= omap2_mcspi_transfer
;
1129 master
->cleanup
= omap2_mcspi_cleanup
;
1130 master
->dev
.of_node
= node
;
1132 match
= of_match_device(omap_mcspi_of_match
, &pdev
->dev
);
1134 u32 num_cs
= 1; /* default number of chipselect */
1135 pdata
= match
->data
;
1137 of_property_read_u32(node
, "ti,spi-num-cs", &num_cs
);
1138 master
->num_chipselect
= num_cs
;
1139 master
->bus_num
= bus_num
++;
1141 pdata
= pdev
->dev
.platform_data
;
1142 master
->num_chipselect
= pdata
->num_cs
;
1144 master
->bus_num
= pdev
->id
;
1146 regs_offset
= pdata
->regs_offset
;
1148 dev_set_drvdata(&pdev
->dev
, master
);
1150 mcspi
= spi_master_get_devdata(master
);
1151 mcspi
->master
= master
;
1153 sprintf(wq_name
, "omap2_mcspi/%d", master
->bus_num
);
1154 mcspi
->wq
= alloc_workqueue(wq_name
, WQ_MEM_RECLAIM
, 1);
1155 if (mcspi
->wq
== NULL
) {
1160 r
= platform_get_resource(pdev
, IORESOURCE_MEM
, 0);
1166 r
->start
+= regs_offset
;
1167 r
->end
+= regs_offset
;
1168 mcspi
->phys
= r
->start
;
1169 if (!request_mem_region(r
->start
, resource_size(r
),
1170 dev_name(&pdev
->dev
))) {
1175 mcspi
->base
= ioremap(r
->start
, resource_size(r
));
1177 dev_dbg(&pdev
->dev
, "can't ioremap MCSPI\n");
1179 goto release_region
;
1182 mcspi
->dev
= &pdev
->dev
;
1183 INIT_WORK(&mcspi
->work
, omap2_mcspi_work
);
1185 spin_lock_init(&mcspi
->lock
);
1186 INIT_LIST_HEAD(&mcspi
->msg_queue
);
1187 INIT_LIST_HEAD(&omap2_mcspi_ctx
[master
->bus_num
- 1].cs
);
1189 mcspi
->dma_channels
= kcalloc(master
->num_chipselect
,
1190 sizeof(struct omap2_mcspi_dma
),
1193 if (mcspi
->dma_channels
== NULL
)
1196 for (i
= 0; i
< master
->num_chipselect
; i
++) {
1197 char dma_ch_name
[14];
1198 struct resource
*dma_res
;
1200 sprintf(dma_ch_name
, "rx%d", i
);
1201 dma_res
= platform_get_resource_byname(pdev
, IORESOURCE_DMA
,
1204 dev_dbg(&pdev
->dev
, "cannot get DMA RX channel\n");
1209 mcspi
->dma_channels
[i
].dma_rx_channel
= -1;
1210 mcspi
->dma_channels
[i
].dma_rx_sync_dev
= dma_res
->start
;
1211 sprintf(dma_ch_name
, "tx%d", i
);
1212 dma_res
= platform_get_resource_byname(pdev
, IORESOURCE_DMA
,
1215 dev_dbg(&pdev
->dev
, "cannot get DMA TX channel\n");
1220 mcspi
->dma_channels
[i
].dma_tx_channel
= -1;
1221 mcspi
->dma_channels
[i
].dma_tx_sync_dev
= dma_res
->start
;
1227 pm_runtime_enable(&pdev
->dev
);
1229 if (status
|| omap2_mcspi_master_setup(mcspi
) < 0)
1232 status
= spi_register_master(master
);
1234 goto err_spi_register
;
1239 spi_master_put(master
);
1241 pm_runtime_disable(&pdev
->dev
);
1243 kfree(mcspi
->dma_channels
);
1245 iounmap(mcspi
->base
);
1247 release_mem_region(r
->start
, resource_size(r
));
1250 platform_set_drvdata(pdev
, NULL
);
1254 static int __exit
omap2_mcspi_remove(struct platform_device
*pdev
)
1256 struct spi_master
*master
;
1257 struct omap2_mcspi
*mcspi
;
1258 struct omap2_mcspi_dma
*dma_channels
;
1262 master
= dev_get_drvdata(&pdev
->dev
);
1263 mcspi
= spi_master_get_devdata(master
);
1264 dma_channels
= mcspi
->dma_channels
;
1266 omap2_mcspi_disable_clocks(mcspi
);
1267 pm_runtime_disable(&pdev
->dev
);
1268 r
= platform_get_resource(pdev
, IORESOURCE_MEM
, 0);
1269 release_mem_region(r
->start
, resource_size(r
));
1272 spi_unregister_master(master
);
1274 kfree(dma_channels
);
1275 destroy_workqueue(mcspi
->wq
);
1276 platform_set_drvdata(pdev
, NULL
);
1281 /* work with hotplug and coldplug */
1282 MODULE_ALIAS("platform:omap2_mcspi");
1284 #ifdef CONFIG_SUSPEND
1286 * When SPI wake up from off-mode, CS is in activate state. If it was in
1287 * unactive state when driver was suspend, then force it to unactive state at
1290 static int omap2_mcspi_resume(struct device
*dev
)
1292 struct spi_master
*master
= dev_get_drvdata(dev
);
1293 struct omap2_mcspi
*mcspi
= spi_master_get_devdata(master
);
1294 struct omap2_mcspi_cs
*cs
;
1296 omap2_mcspi_enable_clocks(mcspi
);
1297 list_for_each_entry(cs
, &omap2_mcspi_ctx
[master
->bus_num
- 1].cs
,
1299 if ((cs
->chconf0
& OMAP2_MCSPI_CHCONF_FORCE
) == 0) {
1302 * We need to toggle CS state for OMAP take this
1303 * change in account.
1305 MOD_REG_BIT(cs
->chconf0
, OMAP2_MCSPI_CHCONF_FORCE
, 1);
1306 __raw_writel(cs
->chconf0
, cs
->base
+ OMAP2_MCSPI_CHCONF0
);
1307 MOD_REG_BIT(cs
->chconf0
, OMAP2_MCSPI_CHCONF_FORCE
, 0);
1308 __raw_writel(cs
->chconf0
, cs
->base
+ OMAP2_MCSPI_CHCONF0
);
1311 omap2_mcspi_disable_clocks(mcspi
);
1315 #define omap2_mcspi_resume NULL
1318 static const struct dev_pm_ops omap2_mcspi_pm_ops
= {
1319 .resume
= omap2_mcspi_resume
,
1320 .runtime_resume
= omap_mcspi_runtime_resume
,
1323 static struct platform_driver omap2_mcspi_driver
= {
1325 .name
= "omap2_mcspi",
1326 .owner
= THIS_MODULE
,
1327 .pm
= &omap2_mcspi_pm_ops
,
1328 .of_match_table
= omap_mcspi_of_match
,
1330 .remove
= __exit_p(omap2_mcspi_remove
),
1334 static int __init
omap2_mcspi_init(void)
1336 return platform_driver_probe(&omap2_mcspi_driver
, omap2_mcspi_probe
);
1338 subsys_initcall(omap2_mcspi_init
);
1340 static void __exit
omap2_mcspi_exit(void)
1342 platform_driver_unregister(&omap2_mcspi_driver
);
1345 module_exit(omap2_mcspi_exit
);
1347 MODULE_LICENSE("GPL");