2 * drivers/spi/spi-fsl-dspi.c
4 * Copyright 2013 Freescale Semiconductor, Inc.
6 * Freescale DSPI driver
7 * This file contains a driver for the Freescale DSPI
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2 of the License, or
12 * (at your option) any later version.
16 #include <linux/clk.h>
17 #include <linux/delay.h>
18 #include <linux/err.h>
19 #include <linux/errno.h>
20 #include <linux/interrupt.h>
22 #include <linux/kernel.h>
23 #include <linux/module.h>
25 #include <linux/of_device.h>
26 #include <linux/platform_device.h>
27 #include <linux/pm_runtime.h>
28 #include <linux/regmap.h>
29 #include <linux/sched.h>
30 #include <linux/spi/spi.h>
31 #include <linux/spi/spi_bitbang.h>
33 #define DRIVER_NAME "fsl-dspi"
35 #define TRAN_STATE_RX_VOID 0x01
36 #define TRAN_STATE_TX_VOID 0x02
37 #define TRAN_STATE_WORD_ODD_NUM 0x04
39 #define DSPI_FIFO_SIZE 4
42 #define SPI_MCR_MASTER (1 << 31)
43 #define SPI_MCR_PCSIS (0x3F << 16)
44 #define SPI_MCR_CLR_TXF (1 << 11)
45 #define SPI_MCR_CLR_RXF (1 << 10)
49 #define SPI_CTAR(x) (0x0c + (((x) & 0x3) * 4))
50 #define SPI_CTAR_FMSZ(x) (((x) & 0x0000000f) << 27)
51 #define SPI_CTAR_CPOL(x) ((x) << 26)
52 #define SPI_CTAR_CPHA(x) ((x) << 25)
53 #define SPI_CTAR_LSBFE(x) ((x) << 24)
54 #define SPI_CTAR_PCSSCR(x) (((x) & 0x00000003) << 22)
55 #define SPI_CTAR_PASC(x) (((x) & 0x00000003) << 20)
56 #define SPI_CTAR_PDT(x) (((x) & 0x00000003) << 18)
57 #define SPI_CTAR_PBR(x) (((x) & 0x00000003) << 16)
58 #define SPI_CTAR_CSSCK(x) (((x) & 0x0000000f) << 12)
59 #define SPI_CTAR_ASC(x) (((x) & 0x0000000f) << 8)
60 #define SPI_CTAR_DT(x) (((x) & 0x0000000f) << 4)
61 #define SPI_CTAR_BR(x) ((x) & 0x0000000f)
63 #define SPI_CTAR0_SLAVE 0x0c
66 #define SPI_SR_EOQF 0x10000000
69 #define SPI_RSER_EOQFE 0x10000000
71 #define SPI_PUSHR 0x34
72 #define SPI_PUSHR_CONT (1 << 31)
73 #define SPI_PUSHR_CTAS(x) (((x) & 0x00000003) << 28)
74 #define SPI_PUSHR_EOQ (1 << 27)
75 #define SPI_PUSHR_CTCNT (1 << 26)
76 #define SPI_PUSHR_PCS(x) (((1 << x) & 0x0000003f) << 16)
77 #define SPI_PUSHR_TXDATA(x) ((x) & 0x0000ffff)
79 #define SPI_PUSHR_SLAVE 0x34
82 #define SPI_POPR_RXDATA(x) ((x) & 0x0000ffff)
84 #define SPI_TXFR0 0x3c
85 #define SPI_TXFR1 0x40
86 #define SPI_TXFR2 0x44
87 #define SPI_TXFR3 0x48
88 #define SPI_RXFR0 0x7c
89 #define SPI_RXFR1 0x80
90 #define SPI_RXFR2 0x84
91 #define SPI_RXFR3 0x88
93 #define SPI_FRAME_BITS(bits) SPI_CTAR_FMSZ((bits) - 1)
94 #define SPI_FRAME_BITS_MASK SPI_CTAR_FMSZ(0xf)
95 #define SPI_FRAME_BITS_16 SPI_CTAR_FMSZ(0xf)
96 #define SPI_FRAME_BITS_8 SPI_CTAR_FMSZ(0x7)
98 #define SPI_CS_INIT 0x01
99 #define SPI_CS_ASSERT 0x02
100 #define SPI_CS_DROP 0x04
109 struct spi_master
*master
;
110 struct platform_device
*pdev
;
112 struct regmap
*regmap
;
116 struct spi_transfer
*cur_transfer
;
117 struct spi_message
*cur_msg
;
118 struct chip_data
*cur_chip
;
129 wait_queue_head_t waitq
;
133 static inline int is_double_byte_mode(struct fsl_dspi
*dspi
)
137 regmap_read(dspi
->regmap
, SPI_CTAR(dspi
->cs
), &val
);
139 return ((val
& SPI_FRAME_BITS_MASK
) == SPI_FRAME_BITS(8)) ? 0 : 1;
142 static void hz_to_spi_baud(char *pbr
, char *br
, int speed_hz
,
143 unsigned long clkrate
)
145 /* Valid baud rate pre-scaler values */
146 int pbr_tbl
[4] = {2, 3, 5, 7};
147 int brs
[16] = { 2, 4, 6, 8,
149 256, 512, 1024, 2048,
150 4096, 8192, 16384, 32768 };
151 int temp
, i
= 0, j
= 0;
153 temp
= clkrate
/ 2 / speed_hz
;
155 for (i
= 0; i
< ARRAY_SIZE(pbr_tbl
); i
++)
156 for (j
= 0; j
< ARRAY_SIZE(brs
); j
++) {
157 if (pbr_tbl
[i
] * brs
[j
] >= temp
) {
164 pr_warn("Can not find valid baud rate,speed_hz is %d,clkrate is %ld\
165 ,we use the max prescaler value.\n", speed_hz
, clkrate
);
166 *pbr
= ARRAY_SIZE(pbr_tbl
) - 1;
167 *br
= ARRAY_SIZE(brs
) - 1;
170 static int dspi_transfer_write(struct fsl_dspi
*dspi
)
179 tx_word
= is_double_byte_mode(dspi
);
181 /* If we are in word mode, but only have a single byte to transfer
182 * then switch to byte mode temporarily. Will switch back at the
183 * end of the transfer.
185 if (tx_word
&& (dspi
->len
== 1)) {
186 dspi
->dataflags
|= TRAN_STATE_WORD_ODD_NUM
;
187 regmap_update_bits(dspi
->regmap
, SPI_CTAR(dspi
->cs
),
188 SPI_FRAME_BITS_MASK
, SPI_FRAME_BITS(8));
192 while (dspi
->len
&& (tx_count
< DSPI_FIFO_SIZE
)) {
197 if (!(dspi
->dataflags
& TRAN_STATE_TX_VOID
)) {
198 d16
= *(u16
*)dspi
->tx
;
201 d16
= dspi
->void_write_data
;
204 dspi_pushr
= SPI_PUSHR_TXDATA(d16
) |
205 SPI_PUSHR_PCS(dspi
->cs
) |
206 SPI_PUSHR_CTAS(dspi
->cs
) |
211 if (!(dspi
->dataflags
& TRAN_STATE_TX_VOID
)) {
213 d8
= *(u8
*)dspi
->tx
;
216 d8
= (u8
)dspi
->void_write_data
;
219 dspi_pushr
= SPI_PUSHR_TXDATA(d8
) |
220 SPI_PUSHR_PCS(dspi
->cs
) |
221 SPI_PUSHR_CTAS(dspi
->cs
) |
227 if (dspi
->len
== 0 || tx_count
== DSPI_FIFO_SIZE
- 1) {
228 /* last transfer in the transfer */
229 dspi_pushr
|= SPI_PUSHR_EOQ
;
230 if ((dspi
->cs_change
) && (!dspi
->len
))
231 dspi_pushr
&= ~SPI_PUSHR_CONT
;
232 } else if (tx_word
&& (dspi
->len
== 1))
233 dspi_pushr
|= SPI_PUSHR_EOQ
;
237 dspi_pushr
|= SPI_PUSHR_CTCNT
; /* clear counter */
240 regmap_write(dspi
->regmap
, SPI_PUSHR
, dspi_pushr
);
245 return tx_count
* (tx_word
+ 1);
248 static int dspi_transfer_read(struct fsl_dspi
*dspi
)
251 int rx_word
= is_double_byte_mode(dspi
);
254 while ((dspi
->rx
< dspi
->rx_end
)
255 && (rx_count
< DSPI_FIFO_SIZE
)) {
259 if ((dspi
->rx_end
- dspi
->rx
) == 1)
262 regmap_read(dspi
->regmap
, SPI_POPR
, &val
);
263 d
= SPI_POPR_RXDATA(val
);
265 if (!(dspi
->dataflags
& TRAN_STATE_RX_VOID
))
266 *(u16
*)dspi
->rx
= d
;
272 regmap_read(dspi
->regmap
, SPI_POPR
, &val
);
273 d
= SPI_POPR_RXDATA(val
);
274 if (!(dspi
->dataflags
& TRAN_STATE_RX_VOID
))
284 static int dspi_transfer_one_message(struct spi_master
*master
,
285 struct spi_message
*message
)
287 struct fsl_dspi
*dspi
= spi_master_get_devdata(master
);
288 struct spi_device
*spi
= message
->spi
;
289 struct spi_transfer
*transfer
;
291 message
->actual_length
= 0;
293 list_for_each_entry(transfer
, &message
->transfers
, transfer_list
) {
294 dspi
->cur_transfer
= transfer
;
295 dspi
->cur_msg
= message
;
296 dspi
->cur_chip
= spi_get_ctldata(spi
);
297 dspi
->cs
= spi
->chip_select
;
298 if (dspi
->cur_transfer
->transfer_list
.next
299 == &dspi
->cur_msg
->transfers
)
300 transfer
->cs_change
= 1;
301 dspi
->cs_change
= transfer
->cs_change
;
302 dspi
->void_write_data
= dspi
->cur_chip
->void_write_data
;
305 dspi
->tx
= (void *)transfer
->tx_buf
;
306 dspi
->tx_end
= dspi
->tx
+ transfer
->len
;
307 dspi
->rx
= transfer
->rx_buf
;
308 dspi
->rx_end
= dspi
->rx
+ transfer
->len
;
309 dspi
->len
= transfer
->len
;
312 dspi
->dataflags
|= TRAN_STATE_RX_VOID
;
315 dspi
->dataflags
|= TRAN_STATE_TX_VOID
;
317 regmap_write(dspi
->regmap
, SPI_MCR
, dspi
->cur_chip
->mcr_val
);
318 regmap_update_bits(dspi
->regmap
, SPI_MCR
,
319 SPI_MCR_CLR_TXF
| SPI_MCR_CLR_RXF
,
320 SPI_MCR_CLR_TXF
| SPI_MCR_CLR_RXF
);
321 regmap_write(dspi
->regmap
, SPI_CTAR(dspi
->cs
),
322 dspi
->cur_chip
->ctar_val
);
323 if (transfer
->speed_hz
)
324 regmap_write(dspi
->regmap
, SPI_CTAR(dspi
->cs
),
325 dspi
->cur_chip
->ctar_val
);
327 regmap_write(dspi
->regmap
, SPI_RSER
, SPI_RSER_EOQFE
);
328 message
->actual_length
+= dspi_transfer_write(dspi
);
330 if (wait_event_interruptible(dspi
->waitq
, dspi
->waitflags
))
331 dev_err(&dspi
->pdev
->dev
, "wait transfer complete fail!\n");
334 if (transfer
->delay_usecs
)
335 udelay(transfer
->delay_usecs
);
338 message
->status
= status
;
339 spi_finalize_current_message(master
);
344 static int dspi_setup(struct spi_device
*spi
)
346 struct chip_data
*chip
;
347 struct fsl_dspi
*dspi
= spi_master_get_devdata(spi
->master
);
348 unsigned char br
= 0, pbr
= 0, fmsz
= 0;
350 if ((spi
->bits_per_word
>= 4) && (spi
->bits_per_word
<= 16)) {
351 fmsz
= spi
->bits_per_word
- 1;
353 pr_err("Invalid wordsize\n");
357 /* Only alloc on first setup */
358 chip
= spi_get_ctldata(spi
);
360 chip
= kzalloc(sizeof(struct chip_data
), GFP_KERNEL
);
365 chip
->mcr_val
= SPI_MCR_MASTER
| SPI_MCR_PCSIS
|
366 SPI_MCR_CLR_TXF
| SPI_MCR_CLR_RXF
;
368 chip
->void_write_data
= 0;
370 hz_to_spi_baud(&pbr
, &br
,
371 spi
->max_speed_hz
, clk_get_rate(dspi
->clk
));
373 chip
->ctar_val
= SPI_CTAR_FMSZ(fmsz
)
374 | SPI_CTAR_CPOL(spi
->mode
& SPI_CPOL
? 1 : 0)
375 | SPI_CTAR_CPHA(spi
->mode
& SPI_CPHA
? 1 : 0)
376 | SPI_CTAR_LSBFE(spi
->mode
& SPI_LSB_FIRST
? 1 : 0)
380 spi_set_ctldata(spi
, chip
);
385 static void dspi_cleanup(struct spi_device
*spi
)
387 struct chip_data
*chip
= spi_get_ctldata((struct spi_device
*)spi
);
389 dev_dbg(&spi
->dev
, "spi_device %u.%u cleanup\n",
390 spi
->master
->bus_num
, spi
->chip_select
);
395 static irqreturn_t
dspi_interrupt(int irq
, void *dev_id
)
397 struct fsl_dspi
*dspi
= (struct fsl_dspi
*)dev_id
;
399 struct spi_message
*msg
= dspi
->cur_msg
;
401 regmap_write(dspi
->regmap
, SPI_SR
, SPI_SR_EOQF
);
402 dspi_transfer_read(dspi
);
405 if (dspi
->dataflags
& TRAN_STATE_WORD_ODD_NUM
)
406 regmap_update_bits(dspi
->regmap
, SPI_CTAR(dspi
->cs
),
407 SPI_FRAME_BITS_MASK
, SPI_FRAME_BITS(16));
410 wake_up_interruptible(&dspi
->waitq
);
412 msg
->actual_length
+= dspi_transfer_write(dspi
);
417 static const struct of_device_id fsl_dspi_dt_ids
[] = {
418 { .compatible
= "fsl,vf610-dspi", .data
= NULL
, },
421 MODULE_DEVICE_TABLE(of
, fsl_dspi_dt_ids
);
423 #ifdef CONFIG_PM_SLEEP
424 static int dspi_suspend(struct device
*dev
)
426 struct spi_master
*master
= dev_get_drvdata(dev
);
427 struct fsl_dspi
*dspi
= spi_master_get_devdata(master
);
429 spi_master_suspend(master
);
430 clk_disable_unprepare(dspi
->clk
);
435 static int dspi_resume(struct device
*dev
)
437 struct spi_master
*master
= dev_get_drvdata(dev
);
438 struct fsl_dspi
*dspi
= spi_master_get_devdata(master
);
440 clk_prepare_enable(dspi
->clk
);
441 spi_master_resume(master
);
445 #endif /* CONFIG_PM_SLEEP */
447 static SIMPLE_DEV_PM_OPS(dspi_pm
, dspi_suspend
, dspi_resume
);
449 static const struct regmap_config dspi_regmap_config
= {
453 .max_register
= 0x88,
456 static int dspi_probe(struct platform_device
*pdev
)
458 struct device_node
*np
= pdev
->dev
.of_node
;
459 struct spi_master
*master
;
460 struct fsl_dspi
*dspi
;
461 struct resource
*res
;
463 int ret
= 0, cs_num
, bus_num
;
465 master
= spi_alloc_master(&pdev
->dev
, sizeof(struct fsl_dspi
));
469 dspi
= spi_master_get_devdata(master
);
471 dspi
->master
= master
;
473 master
->transfer
= NULL
;
474 master
->setup
= dspi_setup
;
475 master
->transfer_one_message
= dspi_transfer_one_message
;
476 master
->dev
.of_node
= pdev
->dev
.of_node
;
478 master
->cleanup
= dspi_cleanup
;
479 master
->mode_bits
= SPI_CPOL
| SPI_CPHA
;
480 master
->bits_per_word_mask
= SPI_BPW_MASK(4) | SPI_BPW_MASK(8) |
483 ret
= of_property_read_u32(np
, "spi-num-chipselects", &cs_num
);
485 dev_err(&pdev
->dev
, "can't get spi-num-chipselects\n");
488 master
->num_chipselect
= cs_num
;
490 ret
= of_property_read_u32(np
, "bus-num", &bus_num
);
492 dev_err(&pdev
->dev
, "can't get bus-num\n");
495 master
->bus_num
= bus_num
;
497 res
= platform_get_resource(pdev
, IORESOURCE_MEM
, 0);
498 base
= devm_ioremap_resource(&pdev
->dev
, res
);
504 dspi
->regmap
= devm_regmap_init_mmio_clk(&pdev
->dev
, "dspi", base
,
505 &dspi_regmap_config
);
506 if (IS_ERR(dspi
->regmap
)) {
507 dev_err(&pdev
->dev
, "failed to init regmap: %ld\n",
508 PTR_ERR(dspi
->regmap
));
509 return PTR_ERR(dspi
->regmap
);
512 dspi
->irq
= platform_get_irq(pdev
, 0);
514 dev_err(&pdev
->dev
, "can't get platform irq\n");
519 ret
= devm_request_irq(&pdev
->dev
, dspi
->irq
, dspi_interrupt
, 0,
522 dev_err(&pdev
->dev
, "Unable to attach DSPI interrupt\n");
526 dspi
->clk
= devm_clk_get(&pdev
->dev
, "dspi");
527 if (IS_ERR(dspi
->clk
)) {
528 ret
= PTR_ERR(dspi
->clk
);
529 dev_err(&pdev
->dev
, "unable to get clock\n");
532 clk_prepare_enable(dspi
->clk
);
534 init_waitqueue_head(&dspi
->waitq
);
535 platform_set_drvdata(pdev
, master
);
537 ret
= spi_register_master(master
);
539 dev_err(&pdev
->dev
, "Problem registering DSPI master\n");
546 clk_disable_unprepare(dspi
->clk
);
548 spi_master_put(master
);
553 static int dspi_remove(struct platform_device
*pdev
)
555 struct spi_master
*master
= platform_get_drvdata(pdev
);
556 struct fsl_dspi
*dspi
= spi_master_get_devdata(master
);
558 /* Disconnect from the SPI framework */
559 clk_disable_unprepare(dspi
->clk
);
560 spi_unregister_master(dspi
->master
);
561 spi_master_put(dspi
->master
);
566 static struct platform_driver fsl_dspi_driver
= {
567 .driver
.name
= DRIVER_NAME
,
568 .driver
.of_match_table
= fsl_dspi_dt_ids
,
569 .driver
.owner
= THIS_MODULE
,
570 .driver
.pm
= &dspi_pm
,
572 .remove
= dspi_remove
,
574 module_platform_driver(fsl_dspi_driver
);
576 MODULE_DESCRIPTION("Freescale DSPI Controller Driver");
577 MODULE_LICENSE("GPL");
578 MODULE_ALIAS("platform:" DRIVER_NAME
);