2 * MPC83xx SPI controller driver.
4 * Maintainer: Kumar Gala
6 * Copyright (C) 2006 Polycom, Inc.
8 * This program is free software; you can redistribute it and/or modify it
9 * under the terms of the GNU General Public License as published by the
10 * Free Software Foundation; either version 2 of the License, or (at your
11 * option) any later version.
13 #include <linux/module.h>
14 #include <linux/init.h>
15 #include <linux/types.h>
16 #include <linux/kernel.h>
17 #include <linux/completion.h>
18 #include <linux/interrupt.h>
19 #include <linux/delay.h>
20 #include <linux/irq.h>
21 #include <linux/device.h>
22 #include <linux/spi/spi.h>
23 #include <linux/spi/spi_bitbang.h>
24 #include <linux/platform_device.h>
25 #include <linux/fsl_devices.h>
30 /* SPI Controller registers */
31 struct mpc83xx_spi_reg
{
41 /* SPI Controller mode register definitions */
42 #define SPMODE_LOOP (1 << 30)
43 #define SPMODE_CI_INACTIVEHIGH (1 << 29)
44 #define SPMODE_CP_BEGIN_EDGECLK (1 << 28)
45 #define SPMODE_DIV16 (1 << 27)
46 #define SPMODE_REV (1 << 26)
47 #define SPMODE_MS (1 << 25)
48 #define SPMODE_ENABLE (1 << 24)
49 #define SPMODE_LEN(x) ((x) << 20)
50 #define SPMODE_PM(x) ((x) << 16)
51 #define SPMODE_OP (1 << 14)
54 * Default for SPI Mode:
55 * SPI MODE 0 (inactive low, phase middle, MSB, 8-bit length, slow clk
57 #define SPMODE_INIT_VAL (SPMODE_CI_INACTIVEHIGH | SPMODE_DIV16 | SPMODE_REV | \
58 SPMODE_MS | SPMODE_LEN(7) | SPMODE_PM(0xf))
60 /* SPIE register values */
61 #define SPIE_NE 0x00000200 /* Not empty */
62 #define SPIE_NF 0x00000100 /* Not full */
64 /* SPIM register values */
65 #define SPIM_NE 0x00000200 /* Not empty */
66 #define SPIM_NF 0x00000100 /* Not full */
68 /* SPI Controller driver's private data. */
70 /* bitbang has to be first */
71 struct spi_bitbang bitbang
;
72 struct completion done
;
74 struct mpc83xx_spi_reg __iomem
*base
;
76 /* rx & tx bufs from the spi_transfer */
80 /* functions to deal with different sized buffers */
81 void (*get_rx
) (u32 rx_data
, struct mpc83xx_spi
*);
82 u32(*get_tx
) (struct mpc83xx_spi
*);
87 unsigned nsecs
; /* (clock cycle time)/2 */
89 u32 spibrg
; /* SPIBRG input clock */
90 u32 rx_shift
; /* RX data reg shift when in qe mode */
91 u32 tx_shift
; /* TX data reg shift when in qe mode */
95 void (*activate_cs
) (u8 cs
, u8 polarity
);
96 void (*deactivate_cs
) (u8 cs
, u8 polarity
);
99 static inline void mpc83xx_spi_write_reg(__be32 __iomem
* reg
, u32 val
)
104 static inline u32
mpc83xx_spi_read_reg(__be32 __iomem
* reg
)
109 #define MPC83XX_SPI_RX_BUF(type) \
110 void mpc83xx_spi_rx_buf_##type(u32 data, struct mpc83xx_spi *mpc83xx_spi) \
112 type * rx = mpc83xx_spi->rx; \
113 *rx++ = (type)(data >> mpc83xx_spi->rx_shift); \
114 mpc83xx_spi->rx = rx; \
117 #define MPC83XX_SPI_TX_BUF(type) \
118 u32 mpc83xx_spi_tx_buf_##type(struct mpc83xx_spi *mpc83xx_spi) \
121 const type * tx = mpc83xx_spi->tx; \
124 data = *tx++ << mpc83xx_spi->tx_shift; \
125 mpc83xx_spi->tx = tx; \
129 MPC83XX_SPI_RX_BUF(u8
)
130 MPC83XX_SPI_RX_BUF(u16
)
131 MPC83XX_SPI_RX_BUF(u32
)
132 MPC83XX_SPI_TX_BUF(u8
)
133 MPC83XX_SPI_TX_BUF(u16
)
134 MPC83XX_SPI_TX_BUF(u32
)
136 static void mpc83xx_spi_chipselect(struct spi_device
*spi
, int value
)
138 struct mpc83xx_spi
*mpc83xx_spi
;
139 u8 pol
= spi
->mode
& SPI_CS_HIGH
? 1 : 0;
141 mpc83xx_spi
= spi_master_get_devdata(spi
->master
);
143 if (value
== BITBANG_CS_INACTIVE
) {
144 if (mpc83xx_spi
->deactivate_cs
)
145 mpc83xx_spi
->deactivate_cs(spi
->chip_select
, pol
);
148 if (value
== BITBANG_CS_ACTIVE
) {
149 u32 regval
= mpc83xx_spi_read_reg(&mpc83xx_spi
->base
->mode
);
150 u32 len
= spi
->bits_per_word
;
158 /* mask out bits we are going to set */
159 regval
&= ~(SPMODE_CP_BEGIN_EDGECLK
| SPMODE_CI_INACTIVEHIGH
160 | SPMODE_LEN(0xF) | SPMODE_DIV16
161 | SPMODE_PM(0xF) | SPMODE_REV
| SPMODE_LOOP
);
163 if (spi
->mode
& SPI_CPHA
)
164 regval
|= SPMODE_CP_BEGIN_EDGECLK
;
165 if (spi
->mode
& SPI_CPOL
)
166 regval
|= SPMODE_CI_INACTIVEHIGH
;
167 if (!(spi
->mode
& SPI_LSB_FIRST
))
168 regval
|= SPMODE_REV
;
169 if (spi
->mode
& SPI_LOOP
)
170 regval
|= SPMODE_LOOP
;
172 regval
|= SPMODE_LEN(len
);
174 if ((mpc83xx_spi
->spibrg
/ spi
->max_speed_hz
) >= 64) {
175 pm
= mpc83xx_spi
->spibrg
/ (spi
->max_speed_hz
* 64) - 1;
177 dev_err(&spi
->dev
, "Requested speed is too "
178 "low: %d Hz. Will use %d Hz instead.\n",
180 mpc83xx_spi
->spibrg
/ 1024);
183 regval
|= SPMODE_PM(pm
) | SPMODE_DIV16
;
185 pm
= mpc83xx_spi
->spibrg
/ (spi
->max_speed_hz
* 4);
188 regval
|= SPMODE_PM(pm
);
191 /* Turn off SPI unit prior changing mode */
192 mpc83xx_spi_write_reg(&mpc83xx_spi
->base
->mode
, 0);
193 mpc83xx_spi_write_reg(&mpc83xx_spi
->base
->mode
, regval
);
194 if (mpc83xx_spi
->activate_cs
)
195 mpc83xx_spi
->activate_cs(spi
->chip_select
, pol
);
200 int mpc83xx_spi_setup_transfer(struct spi_device
*spi
, struct spi_transfer
*t
)
202 struct mpc83xx_spi
*mpc83xx_spi
;
207 mpc83xx_spi
= spi_master_get_devdata(spi
->master
);
210 bits_per_word
= t
->bits_per_word
;
217 /* spi_transfer level calls that work per-word */
219 bits_per_word
= spi
->bits_per_word
;
221 /* Make sure its a bit width we support [4..16, 32] */
222 if ((bits_per_word
< 4)
223 || ((bits_per_word
> 16) && (bits_per_word
!= 32)))
226 mpc83xx_spi
->rx_shift
= 0;
227 mpc83xx_spi
->tx_shift
= 0;
228 if (bits_per_word
<= 8) {
229 mpc83xx_spi
->get_rx
= mpc83xx_spi_rx_buf_u8
;
230 mpc83xx_spi
->get_tx
= mpc83xx_spi_tx_buf_u8
;
231 if (mpc83xx_spi
->qe_mode
) {
232 mpc83xx_spi
->rx_shift
= 16;
233 mpc83xx_spi
->tx_shift
= 24;
235 } else if (bits_per_word
<= 16) {
236 mpc83xx_spi
->get_rx
= mpc83xx_spi_rx_buf_u16
;
237 mpc83xx_spi
->get_tx
= mpc83xx_spi_tx_buf_u16
;
238 if (mpc83xx_spi
->qe_mode
) {
239 mpc83xx_spi
->rx_shift
= 16;
240 mpc83xx_spi
->tx_shift
= 16;
242 } else if (bits_per_word
<= 32) {
243 mpc83xx_spi
->get_rx
= mpc83xx_spi_rx_buf_u32
;
244 mpc83xx_spi
->get_tx
= mpc83xx_spi_tx_buf_u32
;
248 if (mpc83xx_spi
->qe_mode
&& spi
->mode
& SPI_LSB_FIRST
) {
249 mpc83xx_spi
->tx_shift
= 0;
250 if (bits_per_word
<= 8)
251 mpc83xx_spi
->rx_shift
= 8;
253 mpc83xx_spi
->rx_shift
= 0;
256 /* nsecs = (clock period)/2 */
258 hz
= spi
->max_speed_hz
;
259 mpc83xx_spi
->nsecs
= (1000000000 / 2) / hz
;
260 if (mpc83xx_spi
->nsecs
> MAX_UDELAY_MS
* 1000)
263 if (bits_per_word
== 32)
266 bits_per_word
= bits_per_word
- 1;
268 regval
= mpc83xx_spi_read_reg(&mpc83xx_spi
->base
->mode
);
270 /* mask out bits we are going to set */
271 regval
&= ~(SPMODE_LEN(0xF) | SPMODE_REV
);
272 regval
|= SPMODE_LEN(bits_per_word
);
273 if (!(spi
->mode
& SPI_LSB_FIRST
))
274 regval
|= SPMODE_REV
;
276 /* Turn off SPI unit prior changing mode */
277 mpc83xx_spi_write_reg(&mpc83xx_spi
->base
->mode
, 0);
278 mpc83xx_spi_write_reg(&mpc83xx_spi
->base
->mode
, regval
);
283 /* the spi->mode bits understood by this driver: */
284 #define MODEBITS (SPI_CPOL | SPI_CPHA | SPI_CS_HIGH \
285 | SPI_LSB_FIRST | SPI_LOOP)
287 static int mpc83xx_spi_setup(struct spi_device
*spi
)
289 struct spi_bitbang
*bitbang
;
290 struct mpc83xx_spi
*mpc83xx_spi
;
293 if (spi
->mode
& ~MODEBITS
) {
294 dev_dbg(&spi
->dev
, "setup: unsupported mode bits %x\n",
295 spi
->mode
& ~MODEBITS
);
299 if (!spi
->max_speed_hz
)
302 bitbang
= spi_master_get_devdata(spi
->master
);
303 mpc83xx_spi
= spi_master_get_devdata(spi
->master
);
305 if (!spi
->bits_per_word
)
306 spi
->bits_per_word
= 8;
308 retval
= mpc83xx_spi_setup_transfer(spi
, NULL
);
312 dev_dbg(&spi
->dev
, "%s, mode %d, %u bits/w, %u nsec\n",
313 __func__
, spi
->mode
& (SPI_CPOL
| SPI_CPHA
),
314 spi
->bits_per_word
, 2 * mpc83xx_spi
->nsecs
);
316 /* NOTE we _need_ to call chipselect() early, ideally with adapter
317 * setup, unless the hardware defaults cooperate to avoid confusion
318 * between normal (active low) and inverted chipselects.
321 /* deselect chip (low or high) */
322 spin_lock(&bitbang
->lock
);
323 if (!bitbang
->busy
) {
324 bitbang
->chipselect(spi
, BITBANG_CS_INACTIVE
);
325 ndelay(mpc83xx_spi
->nsecs
);
327 spin_unlock(&bitbang
->lock
);
332 static int mpc83xx_spi_bufs(struct spi_device
*spi
, struct spi_transfer
*t
)
334 struct mpc83xx_spi
*mpc83xx_spi
;
337 mpc83xx_spi
= spi_master_get_devdata(spi
->master
);
339 mpc83xx_spi
->tx
= t
->tx_buf
;
340 mpc83xx_spi
->rx
= t
->rx_buf
;
341 mpc83xx_spi
->count
= t
->len
;
342 INIT_COMPLETION(mpc83xx_spi
->done
);
345 mpc83xx_spi_write_reg(&mpc83xx_spi
->base
->mask
, SPIM_NE
);
348 word
= mpc83xx_spi
->get_tx(mpc83xx_spi
);
349 mpc83xx_spi_write_reg(&mpc83xx_spi
->base
->transmit
, word
);
351 wait_for_completion(&mpc83xx_spi
->done
);
353 /* disable rx ints */
354 mpc83xx_spi_write_reg(&mpc83xx_spi
->base
->mask
, 0);
356 return t
->len
- mpc83xx_spi
->count
;
359 irqreturn_t
mpc83xx_spi_irq(s32 irq
, void *context_data
)
361 struct mpc83xx_spi
*mpc83xx_spi
= context_data
;
363 irqreturn_t ret
= IRQ_NONE
;
365 /* Get interrupt events(tx/rx) */
366 event
= mpc83xx_spi_read_reg(&mpc83xx_spi
->base
->event
);
368 /* We need handle RX first */
369 if (event
& SPIE_NE
) {
370 u32 rx_data
= mpc83xx_spi_read_reg(&mpc83xx_spi
->base
->receive
);
373 mpc83xx_spi
->get_rx(rx_data
, mpc83xx_spi
);
378 if ((event
& SPIE_NF
) == 0)
379 /* spin until TX is done */
381 mpc83xx_spi_read_reg(&mpc83xx_spi
->base
->event
)) &
385 mpc83xx_spi
->count
-= 1;
386 if (mpc83xx_spi
->count
) {
387 u32 word
= mpc83xx_spi
->get_tx(mpc83xx_spi
);
388 mpc83xx_spi_write_reg(&mpc83xx_spi
->base
->transmit
, word
);
390 complete(&mpc83xx_spi
->done
);
393 /* Clear the events */
394 mpc83xx_spi_write_reg(&mpc83xx_spi
->base
->event
, event
);
399 static int __init
mpc83xx_spi_probe(struct platform_device
*dev
)
401 struct spi_master
*master
;
402 struct mpc83xx_spi
*mpc83xx_spi
;
403 struct fsl_spi_platform_data
*pdata
;
408 /* Get resources(memory, IRQ) associated with the device */
409 master
= spi_alloc_master(&dev
->dev
, sizeof(struct mpc83xx_spi
));
411 if (master
== NULL
) {
416 platform_set_drvdata(dev
, master
);
417 pdata
= dev
->dev
.platform_data
;
424 r
= platform_get_resource(dev
, IORESOURCE_MEM
, 0);
429 mpc83xx_spi
= spi_master_get_devdata(master
);
430 mpc83xx_spi
->bitbang
.master
= spi_master_get(master
);
431 mpc83xx_spi
->bitbang
.chipselect
= mpc83xx_spi_chipselect
;
432 mpc83xx_spi
->bitbang
.setup_transfer
= mpc83xx_spi_setup_transfer
;
433 mpc83xx_spi
->bitbang
.txrx_bufs
= mpc83xx_spi_bufs
;
434 mpc83xx_spi
->activate_cs
= pdata
->activate_cs
;
435 mpc83xx_spi
->deactivate_cs
= pdata
->deactivate_cs
;
436 mpc83xx_spi
->qe_mode
= pdata
->qe_mode
;
437 mpc83xx_spi
->get_rx
= mpc83xx_spi_rx_buf_u8
;
438 mpc83xx_spi
->get_tx
= mpc83xx_spi_tx_buf_u8
;
439 mpc83xx_spi
->spibrg
= pdata
->sysclk
;
441 mpc83xx_spi
->rx_shift
= 0;
442 mpc83xx_spi
->tx_shift
= 0;
443 if (mpc83xx_spi
->qe_mode
) {
444 mpc83xx_spi
->rx_shift
= 16;
445 mpc83xx_spi
->tx_shift
= 24;
448 mpc83xx_spi
->bitbang
.master
->setup
= mpc83xx_spi_setup
;
449 init_completion(&mpc83xx_spi
->done
);
451 mpc83xx_spi
->base
= ioremap(r
->start
, r
->end
- r
->start
+ 1);
452 if (mpc83xx_spi
->base
== NULL
) {
457 mpc83xx_spi
->irq
= platform_get_irq(dev
, 0);
459 if (mpc83xx_spi
->irq
< 0) {
464 /* Register for SPI Interrupt */
465 ret
= request_irq(mpc83xx_spi
->irq
, mpc83xx_spi_irq
,
466 0, "mpc83xx_spi", mpc83xx_spi
);
471 master
->bus_num
= pdata
->bus_num
;
472 master
->num_chipselect
= pdata
->max_chipselect
;
474 /* SPI controller initializations */
475 mpc83xx_spi_write_reg(&mpc83xx_spi
->base
->mode
, 0);
476 mpc83xx_spi_write_reg(&mpc83xx_spi
->base
->mask
, 0);
477 mpc83xx_spi_write_reg(&mpc83xx_spi
->base
->command
, 0);
478 mpc83xx_spi_write_reg(&mpc83xx_spi
->base
->event
, 0xffffffff);
480 /* Enable SPI interface */
481 regval
= pdata
->initial_spmode
| SPMODE_INIT_VAL
| SPMODE_ENABLE
;
485 mpc83xx_spi_write_reg(&mpc83xx_spi
->base
->mode
, regval
);
487 ret
= spi_bitbang_start(&mpc83xx_spi
->bitbang
);
493 "%s: MPC83xx SPI Controller driver at 0x%p (irq = %d)\n",
494 dev
->dev
.bus_id
, mpc83xx_spi
->base
, mpc83xx_spi
->irq
);
499 free_irq(mpc83xx_spi
->irq
, mpc83xx_spi
);
501 iounmap(mpc83xx_spi
->base
);
503 spi_master_put(master
);
510 static int __exit
mpc83xx_spi_remove(struct platform_device
*dev
)
512 struct mpc83xx_spi
*mpc83xx_spi
;
513 struct spi_master
*master
;
515 master
= platform_get_drvdata(dev
);
516 mpc83xx_spi
= spi_master_get_devdata(master
);
518 spi_bitbang_stop(&mpc83xx_spi
->bitbang
);
519 free_irq(mpc83xx_spi
->irq
, mpc83xx_spi
);
520 iounmap(mpc83xx_spi
->base
);
521 spi_master_put(mpc83xx_spi
->bitbang
.master
);
526 MODULE_ALIAS("platform:mpc83xx_spi");
527 static struct platform_driver mpc83xx_spi_driver
= {
528 .remove
= __exit_p(mpc83xx_spi_remove
),
530 .name
= "mpc83xx_spi",
531 .owner
= THIS_MODULE
,
535 static int __init
mpc83xx_spi_init(void)
537 return platform_driver_probe(&mpc83xx_spi_driver
, mpc83xx_spi_probe
);
540 static void __exit
mpc83xx_spi_exit(void)
542 platform_driver_unregister(&mpc83xx_spi_driver
);
545 module_init(mpc83xx_spi_init
);
546 module_exit(mpc83xx_spi_exit
);
548 MODULE_AUTHOR("Kumar Gala");
549 MODULE_DESCRIPTION("Simple MPC83xx SPI Driver");
550 MODULE_LICENSE("GPL");