This source file includes following definitions.
- stm32_spi_set_bits
- stm32_spi_clr_bits
- stm32h7_spi_get_fifo_size
- stm32f4_spi_get_bpw_mask
- stm32h7_spi_get_bpw_mask
- stm32_spi_prepare_mbr
- stm32h7_spi_prepare_fthlv
- stm32f4_spi_write_tx
- stm32h7_spi_write_txfifo
- stm32f4_spi_read_rx
- stm32h7_spi_read_rxfifo
- stm32_spi_enable
- stm32f4_spi_disable
- stm32h7_spi_disable
- stm32_spi_can_dma
- stm32f4_spi_irq_event
- stm32f4_spi_irq_thread
- stm32h7_spi_irq_thread
- stm32_spi_setup
- stm32_spi_prepare_msg
- stm32f4_spi_dma_tx_cb
- stm32f4_spi_dma_rx_cb
- stm32h7_spi_dma_cb
- stm32_spi_dma_config
- stm32f4_spi_transfer_one_irq
- stm32h7_spi_transfer_one_irq
- stm32f4_spi_transfer_one_dma_start
- stm32h7_spi_transfer_one_dma_start
- stm32_spi_transfer_one_dma
- stm32f4_spi_set_bpw
- stm32h7_spi_set_bpw
- stm32_spi_set_mbr
- stm32_spi_communication_type
- stm32f4_spi_set_mode
- stm32h7_spi_set_mode
- stm32h7_spi_data_idleness
- stm32h7_spi_number_of_data
- stm32_spi_transfer_one_setup
- stm32_spi_transfer_one
- stm32_spi_unprepare_msg
- stm32f4_spi_config
- stm32h7_spi_config
- stm32_spi_probe
- stm32_spi_remove
- stm32_spi_runtime_suspend
- stm32_spi_runtime_resume
- stm32_spi_suspend
- stm32_spi_resume
1
2
3
4
5
6
7
8 #include <linux/debugfs.h>
9 #include <linux/clk.h>
10 #include <linux/delay.h>
11 #include <linux/dmaengine.h>
12 #include <linux/gpio.h>
13 #include <linux/interrupt.h>
14 #include <linux/iopoll.h>
15 #include <linux/module.h>
16 #include <linux/of_platform.h>
17 #include <linux/pm_runtime.h>
18 #include <linux/reset.h>
19 #include <linux/spi/spi.h>
20
21 #define DRIVER_NAME "spi_stm32"
22
23
24 #define STM32F4_SPI_CR1 0x00
25 #define STM32F4_SPI_CR2 0x04
26 #define STM32F4_SPI_SR 0x08
27 #define STM32F4_SPI_DR 0x0C
28 #define STM32F4_SPI_I2SCFGR 0x1C
29
30
31 #define STM32F4_SPI_CR1_CPHA BIT(0)
32 #define STM32F4_SPI_CR1_CPOL BIT(1)
33 #define STM32F4_SPI_CR1_MSTR BIT(2)
34 #define STM32F4_SPI_CR1_BR_SHIFT 3
35 #define STM32F4_SPI_CR1_BR GENMASK(5, 3)
36 #define STM32F4_SPI_CR1_SPE BIT(6)
37 #define STM32F4_SPI_CR1_LSBFRST BIT(7)
38 #define STM32F4_SPI_CR1_SSI BIT(8)
39 #define STM32F4_SPI_CR1_SSM BIT(9)
40 #define STM32F4_SPI_CR1_RXONLY BIT(10)
41 #define STM32F4_SPI_CR1_DFF BIT(11)
42 #define STM32F4_SPI_CR1_CRCNEXT BIT(12)
43 #define STM32F4_SPI_CR1_CRCEN BIT(13)
44 #define STM32F4_SPI_CR1_BIDIOE BIT(14)
45 #define STM32F4_SPI_CR1_BIDIMODE BIT(15)
46 #define STM32F4_SPI_CR1_BR_MIN 0
47 #define STM32F4_SPI_CR1_BR_MAX (GENMASK(5, 3) >> 3)
48
49
50 #define STM32F4_SPI_CR2_RXDMAEN BIT(0)
51 #define STM32F4_SPI_CR2_TXDMAEN BIT(1)
52 #define STM32F4_SPI_CR2_SSOE BIT(2)
53 #define STM32F4_SPI_CR2_FRF BIT(4)
54 #define STM32F4_SPI_CR2_ERRIE BIT(5)
55 #define STM32F4_SPI_CR2_RXNEIE BIT(6)
56 #define STM32F4_SPI_CR2_TXEIE BIT(7)
57
58
59 #define STM32F4_SPI_SR_RXNE BIT(0)
60 #define STM32F4_SPI_SR_TXE BIT(1)
61 #define STM32F4_SPI_SR_CHSIDE BIT(2)
62 #define STM32F4_SPI_SR_UDR BIT(3)
63 #define STM32F4_SPI_SR_CRCERR BIT(4)
64 #define STM32F4_SPI_SR_MODF BIT(5)
65 #define STM32F4_SPI_SR_OVR BIT(6)
66 #define STM32F4_SPI_SR_BSY BIT(7)
67 #define STM32F4_SPI_SR_FRE BIT(8)
68
69
70 #define STM32F4_SPI_I2SCFGR_I2SMOD BIT(11)
71
72
73 #define STM32F4_SPI_BR_DIV_MIN (2 << STM32F4_SPI_CR1_BR_MIN)
74 #define STM32F4_SPI_BR_DIV_MAX (2 << STM32F4_SPI_CR1_BR_MAX)
75
76
77 #define STM32H7_SPI_CR1 0x00
78 #define STM32H7_SPI_CR2 0x04
79 #define STM32H7_SPI_CFG1 0x08
80 #define STM32H7_SPI_CFG2 0x0C
81 #define STM32H7_SPI_IER 0x10
82 #define STM32H7_SPI_SR 0x14
83 #define STM32H7_SPI_IFCR 0x18
84 #define STM32H7_SPI_TXDR 0x20
85 #define STM32H7_SPI_RXDR 0x30
86 #define STM32H7_SPI_I2SCFGR 0x50
87
88
89 #define STM32H7_SPI_CR1_SPE BIT(0)
90 #define STM32H7_SPI_CR1_MASRX BIT(8)
91 #define STM32H7_SPI_CR1_CSTART BIT(9)
92 #define STM32H7_SPI_CR1_CSUSP BIT(10)
93 #define STM32H7_SPI_CR1_HDDIR BIT(11)
94 #define STM32H7_SPI_CR1_SSI BIT(12)
95
96
97 #define STM32H7_SPI_CR2_TSIZE_SHIFT 0
98 #define STM32H7_SPI_CR2_TSIZE GENMASK(15, 0)
99
100
101 #define STM32H7_SPI_CFG1_DSIZE_SHIFT 0
102 #define STM32H7_SPI_CFG1_DSIZE GENMASK(4, 0)
103 #define STM32H7_SPI_CFG1_FTHLV_SHIFT 5
104 #define STM32H7_SPI_CFG1_FTHLV GENMASK(8, 5)
105 #define STM32H7_SPI_CFG1_RXDMAEN BIT(14)
106 #define STM32H7_SPI_CFG1_TXDMAEN BIT(15)
107 #define STM32H7_SPI_CFG1_MBR_SHIFT 28
108 #define STM32H7_SPI_CFG1_MBR GENMASK(30, 28)
109 #define STM32H7_SPI_CFG1_MBR_MIN 0
110 #define STM32H7_SPI_CFG1_MBR_MAX (GENMASK(30, 28) >> 28)
111
112
113 #define STM32H7_SPI_CFG2_MIDI_SHIFT 4
114 #define STM32H7_SPI_CFG2_MIDI GENMASK(7, 4)
115 #define STM32H7_SPI_CFG2_COMM_SHIFT 17
116 #define STM32H7_SPI_CFG2_COMM GENMASK(18, 17)
117 #define STM32H7_SPI_CFG2_SP_SHIFT 19
118 #define STM32H7_SPI_CFG2_SP GENMASK(21, 19)
119 #define STM32H7_SPI_CFG2_MASTER BIT(22)
120 #define STM32H7_SPI_CFG2_LSBFRST BIT(23)
121 #define STM32H7_SPI_CFG2_CPHA BIT(24)
122 #define STM32H7_SPI_CFG2_CPOL BIT(25)
123 #define STM32H7_SPI_CFG2_SSM BIT(26)
124 #define STM32H7_SPI_CFG2_AFCNTR BIT(31)
125
126
127 #define STM32H7_SPI_IER_RXPIE BIT(0)
128 #define STM32H7_SPI_IER_TXPIE BIT(1)
129 #define STM32H7_SPI_IER_DXPIE BIT(2)
130 #define STM32H7_SPI_IER_EOTIE BIT(3)
131 #define STM32H7_SPI_IER_TXTFIE BIT(4)
132 #define STM32H7_SPI_IER_OVRIE BIT(6)
133 #define STM32H7_SPI_IER_MODFIE BIT(9)
134 #define STM32H7_SPI_IER_ALL GENMASK(10, 0)
135
136
137 #define STM32H7_SPI_SR_RXP BIT(0)
138 #define STM32H7_SPI_SR_TXP BIT(1)
139 #define STM32H7_SPI_SR_EOT BIT(3)
140 #define STM32H7_SPI_SR_OVR BIT(6)
141 #define STM32H7_SPI_SR_MODF BIT(9)
142 #define STM32H7_SPI_SR_SUSP BIT(11)
143 #define STM32H7_SPI_SR_RXPLVL_SHIFT 13
144 #define STM32H7_SPI_SR_RXPLVL GENMASK(14, 13)
145 #define STM32H7_SPI_SR_RXWNE BIT(15)
146
147
148 #define STM32H7_SPI_IFCR_ALL GENMASK(11, 3)
149
150
151 #define STM32H7_SPI_I2SCFGR_I2SMOD BIT(0)
152
153
154 #define STM32H7_SPI_MBR_DIV_MIN (2 << STM32H7_SPI_CFG1_MBR_MIN)
155 #define STM32H7_SPI_MBR_DIV_MAX (2 << STM32H7_SPI_CFG1_MBR_MAX)
156
157
158 #define STM32H7_SPI_FULL_DUPLEX 0
159 #define STM32H7_SPI_SIMPLEX_TX 1
160 #define STM32H7_SPI_SIMPLEX_RX 2
161 #define STM32H7_SPI_HALF_DUPLEX 3
162
163
164 #define SPI_FULL_DUPLEX 0
165 #define SPI_SIMPLEX_TX 1
166 #define SPI_SIMPLEX_RX 2
167 #define SPI_3WIRE_TX 3
168 #define SPI_3WIRE_RX 4
169
170 #define SPI_1HZ_NS 1000000000
171
172
173
174
175
176 #define SPI_DMA_MIN_BYTES 16
177
178
179
180
181
182
183
184 struct stm32_spi_reg {
185 int reg;
186 int mask;
187 int shift;
188 };
189
190
191
192
193
194
195
196
197
198
199
200
201
202 struct stm32_spi_regspec {
203 const struct stm32_spi_reg en;
204 const struct stm32_spi_reg dma_rx_en;
205 const struct stm32_spi_reg dma_tx_en;
206 const struct stm32_spi_reg cpol;
207 const struct stm32_spi_reg cpha;
208 const struct stm32_spi_reg lsb_first;
209 const struct stm32_spi_reg br;
210 const struct stm32_spi_reg rx;
211 const struct stm32_spi_reg tx;
212 };
213
214 struct stm32_spi;
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242 struct stm32_spi_cfg {
243 const struct stm32_spi_regspec *regs;
244 int (*get_fifo_size)(struct stm32_spi *spi);
245 int (*get_bpw_mask)(struct stm32_spi *spi);
246 void (*disable)(struct stm32_spi *spi);
247 int (*config)(struct stm32_spi *spi);
248 void (*set_bpw)(struct stm32_spi *spi);
249 int (*set_mode)(struct stm32_spi *spi, unsigned int comm_type);
250 void (*set_data_idleness)(struct stm32_spi *spi, u32 length);
251 int (*set_number_of_data)(struct stm32_spi *spi, u32 length);
252 void (*transfer_one_dma_start)(struct stm32_spi *spi);
253 void (*dma_rx_cb)(void *data);
254 void (*dma_tx_cb)(void *data);
255 int (*transfer_one_irq)(struct stm32_spi *spi);
256 irqreturn_t (*irq_handler_event)(int irq, void *dev_id);
257 irqreturn_t (*irq_handler_thread)(int irq, void *dev_id);
258 unsigned int baud_rate_div_min;
259 unsigned int baud_rate_div_max;
260 bool has_fifo;
261 };
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290 struct stm32_spi {
291 struct device *dev;
292 struct spi_master *master;
293 const struct stm32_spi_cfg *cfg;
294 void __iomem *base;
295 struct clk *clk;
296 u32 clk_rate;
297 struct reset_control *rst;
298 spinlock_t lock;
299 int irq;
300 unsigned int fifo_size;
301
302 unsigned int cur_midi;
303 unsigned int cur_speed;
304 unsigned int cur_bpw;
305 unsigned int cur_fthlv;
306 unsigned int cur_comm;
307 unsigned int cur_xferlen;
308 bool cur_usedma;
309
310 const void *tx_buf;
311 void *rx_buf;
312 int tx_len;
313 int rx_len;
314 struct dma_chan *dma_tx;
315 struct dma_chan *dma_rx;
316 dma_addr_t phys_addr;
317 };
318
319 static const struct stm32_spi_regspec stm32f4_spi_regspec = {
320 .en = { STM32F4_SPI_CR1, STM32F4_SPI_CR1_SPE },
321
322 .dma_rx_en = { STM32F4_SPI_CR2, STM32F4_SPI_CR2_RXDMAEN },
323 .dma_tx_en = { STM32F4_SPI_CR2, STM32F4_SPI_CR2_TXDMAEN },
324
325 .cpol = { STM32F4_SPI_CR1, STM32F4_SPI_CR1_CPOL },
326 .cpha = { STM32F4_SPI_CR1, STM32F4_SPI_CR1_CPHA },
327 .lsb_first = { STM32F4_SPI_CR1, STM32F4_SPI_CR1_LSBFRST },
328 .br = { STM32F4_SPI_CR1, STM32F4_SPI_CR1_BR, STM32F4_SPI_CR1_BR_SHIFT },
329
330 .rx = { STM32F4_SPI_DR },
331 .tx = { STM32F4_SPI_DR },
332 };
333
334 static const struct stm32_spi_regspec stm32h7_spi_regspec = {
335
336
337
338 .en = { STM32H7_SPI_CR1, STM32H7_SPI_CR1_SPE },
339
340 .dma_rx_en = { STM32H7_SPI_CFG1, STM32H7_SPI_CFG1_RXDMAEN },
341 .dma_tx_en = { STM32H7_SPI_CFG1, STM32H7_SPI_CFG1_TXDMAEN },
342
343 .cpol = { STM32H7_SPI_CFG2, STM32H7_SPI_CFG2_CPOL },
344 .cpha = { STM32H7_SPI_CFG2, STM32H7_SPI_CFG2_CPHA },
345 .lsb_first = { STM32H7_SPI_CFG2, STM32H7_SPI_CFG2_LSBFRST },
346 .br = { STM32H7_SPI_CFG1, STM32H7_SPI_CFG1_MBR,
347 STM32H7_SPI_CFG1_MBR_SHIFT },
348
349 .rx = { STM32H7_SPI_RXDR },
350 .tx = { STM32H7_SPI_TXDR },
351 };
352
353 static inline void stm32_spi_set_bits(struct stm32_spi *spi,
354 u32 offset, u32 bits)
355 {
356 writel_relaxed(readl_relaxed(spi->base + offset) | bits,
357 spi->base + offset);
358 }
359
360 static inline void stm32_spi_clr_bits(struct stm32_spi *spi,
361 u32 offset, u32 bits)
362 {
363 writel_relaxed(readl_relaxed(spi->base + offset) & ~bits,
364 spi->base + offset);
365 }
366
367
368
369
370
371 static int stm32h7_spi_get_fifo_size(struct stm32_spi *spi)
372 {
373 unsigned long flags;
374 u32 count = 0;
375
376 spin_lock_irqsave(&spi->lock, flags);
377
378 stm32_spi_set_bits(spi, STM32H7_SPI_CR1, STM32H7_SPI_CR1_SPE);
379
380 while (readl_relaxed(spi->base + STM32H7_SPI_SR) & STM32H7_SPI_SR_TXP)
381 writeb_relaxed(++count, spi->base + STM32H7_SPI_TXDR);
382
383 stm32_spi_clr_bits(spi, STM32H7_SPI_CR1, STM32H7_SPI_CR1_SPE);
384
385 spin_unlock_irqrestore(&spi->lock, flags);
386
387 dev_dbg(spi->dev, "%d x 8-bit fifo size\n", count);
388
389 return count;
390 }
391
392
393
394
395
396 static int stm32f4_spi_get_bpw_mask(struct stm32_spi *spi)
397 {
398 dev_dbg(spi->dev, "8-bit or 16-bit data frame supported\n");
399 return SPI_BPW_MASK(8) | SPI_BPW_MASK(16);
400 }
401
402
403
404
405
406 static int stm32h7_spi_get_bpw_mask(struct stm32_spi *spi)
407 {
408 unsigned long flags;
409 u32 cfg1, max_bpw;
410
411 spin_lock_irqsave(&spi->lock, flags);
412
413
414
415
416
417 stm32_spi_set_bits(spi, STM32H7_SPI_CFG1, STM32H7_SPI_CFG1_DSIZE);
418
419 cfg1 = readl_relaxed(spi->base + STM32H7_SPI_CFG1);
420 max_bpw = (cfg1 & STM32H7_SPI_CFG1_DSIZE) >>
421 STM32H7_SPI_CFG1_DSIZE_SHIFT;
422 max_bpw += 1;
423
424 spin_unlock_irqrestore(&spi->lock, flags);
425
426 dev_dbg(spi->dev, "%d-bit maximum data frame\n", max_bpw);
427
428 return SPI_BPW_RANGE_MASK(4, max_bpw);
429 }
430
431
432
433
434
435
436
437
438
439
440 static int stm32_spi_prepare_mbr(struct stm32_spi *spi, u32 speed_hz,
441 u32 min_div, u32 max_div)
442 {
443 u32 div, mbrdiv;
444
445 div = DIV_ROUND_UP(spi->clk_rate, speed_hz);
446
447
448
449
450
451
452
453
454 if ((div < min_div) || (div > max_div))
455 return -EINVAL;
456
457
458 if (div & (div - 1))
459 mbrdiv = fls(div);
460 else
461 mbrdiv = fls(div) - 1;
462
463 spi->cur_speed = spi->clk_rate / (1 << mbrdiv);
464
465 return mbrdiv - 1;
466 }
467
468
469
470
471
472 static u32 stm32h7_spi_prepare_fthlv(struct stm32_spi *spi)
473 {
474 u32 fthlv, half_fifo;
475
476
477 half_fifo = (spi->fifo_size / 2);
478
479 if (spi->cur_bpw <= 8)
480 fthlv = half_fifo;
481 else if (spi->cur_bpw <= 16)
482 fthlv = half_fifo / 2;
483 else
484 fthlv = half_fifo / 4;
485
486
487 if (spi->cur_bpw > 8)
488 fthlv -= (fthlv % 2);
489 else
490 fthlv -= (fthlv % 4);
491
492 return fthlv;
493 }
494
495
496
497
498
499
500
501
502 static void stm32f4_spi_write_tx(struct stm32_spi *spi)
503 {
504 if ((spi->tx_len > 0) && (readl_relaxed(spi->base + STM32F4_SPI_SR) &
505 STM32F4_SPI_SR_TXE)) {
506 u32 offs = spi->cur_xferlen - spi->tx_len;
507
508 if (spi->cur_bpw == 16) {
509 const u16 *tx_buf16 = (const u16 *)(spi->tx_buf + offs);
510
511 writew_relaxed(*tx_buf16, spi->base + STM32F4_SPI_DR);
512 spi->tx_len -= sizeof(u16);
513 } else {
514 const u8 *tx_buf8 = (const u8 *)(spi->tx_buf + offs);
515
516 writeb_relaxed(*tx_buf8, spi->base + STM32F4_SPI_DR);
517 spi->tx_len -= sizeof(u8);
518 }
519 }
520
521 dev_dbg(spi->dev, "%s: %d bytes left\n", __func__, spi->tx_len);
522 }
523
524
525
526
527
528
529
530
531 static void stm32h7_spi_write_txfifo(struct stm32_spi *spi)
532 {
533 while ((spi->tx_len > 0) &&
534 (readl_relaxed(spi->base + STM32H7_SPI_SR) &
535 STM32H7_SPI_SR_TXP)) {
536 u32 offs = spi->cur_xferlen - spi->tx_len;
537
538 if (spi->tx_len >= sizeof(u32)) {
539 const u32 *tx_buf32 = (const u32 *)(spi->tx_buf + offs);
540
541 writel_relaxed(*tx_buf32, spi->base + STM32H7_SPI_TXDR);
542 spi->tx_len -= sizeof(u32);
543 } else if (spi->tx_len >= sizeof(u16)) {
544 const u16 *tx_buf16 = (const u16 *)(spi->tx_buf + offs);
545
546 writew_relaxed(*tx_buf16, spi->base + STM32H7_SPI_TXDR);
547 spi->tx_len -= sizeof(u16);
548 } else {
549 const u8 *tx_buf8 = (const u8 *)(spi->tx_buf + offs);
550
551 writeb_relaxed(*tx_buf8, spi->base + STM32H7_SPI_TXDR);
552 spi->tx_len -= sizeof(u8);
553 }
554 }
555
556 dev_dbg(spi->dev, "%s: %d bytes left\n", __func__, spi->tx_len);
557 }
558
559
560
561
562
563
564
565
566 static void stm32f4_spi_read_rx(struct stm32_spi *spi)
567 {
568 if ((spi->rx_len > 0) && (readl_relaxed(spi->base + STM32F4_SPI_SR) &
569 STM32F4_SPI_SR_RXNE)) {
570 u32 offs = spi->cur_xferlen - spi->rx_len;
571
572 if (spi->cur_bpw == 16) {
573 u16 *rx_buf16 = (u16 *)(spi->rx_buf + offs);
574
575 *rx_buf16 = readw_relaxed(spi->base + STM32F4_SPI_DR);
576 spi->rx_len -= sizeof(u16);
577 } else {
578 u8 *rx_buf8 = (u8 *)(spi->rx_buf + offs);
579
580 *rx_buf8 = readb_relaxed(spi->base + STM32F4_SPI_DR);
581 spi->rx_len -= sizeof(u8);
582 }
583 }
584
585 dev_dbg(spi->dev, "%s: %d bytes left\n", __func__, spi->rx_len);
586 }
587
588
589
590
591
592
593
594
595 static void stm32h7_spi_read_rxfifo(struct stm32_spi *spi, bool flush)
596 {
597 u32 sr = readl_relaxed(spi->base + STM32H7_SPI_SR);
598 u32 rxplvl = (sr & STM32H7_SPI_SR_RXPLVL) >>
599 STM32H7_SPI_SR_RXPLVL_SHIFT;
600
601 while ((spi->rx_len > 0) &&
602 ((sr & STM32H7_SPI_SR_RXP) ||
603 (flush && ((sr & STM32H7_SPI_SR_RXWNE) || (rxplvl > 0))))) {
604 u32 offs = spi->cur_xferlen - spi->rx_len;
605
606 if ((spi->rx_len >= sizeof(u32)) ||
607 (flush && (sr & STM32H7_SPI_SR_RXWNE))) {
608 u32 *rx_buf32 = (u32 *)(spi->rx_buf + offs);
609
610 *rx_buf32 = readl_relaxed(spi->base + STM32H7_SPI_RXDR);
611 spi->rx_len -= sizeof(u32);
612 } else if ((spi->rx_len >= sizeof(u16)) ||
613 (flush && (rxplvl >= 2 || spi->cur_bpw > 8))) {
614 u16 *rx_buf16 = (u16 *)(spi->rx_buf + offs);
615
616 *rx_buf16 = readw_relaxed(spi->base + STM32H7_SPI_RXDR);
617 spi->rx_len -= sizeof(u16);
618 } else {
619 u8 *rx_buf8 = (u8 *)(spi->rx_buf + offs);
620
621 *rx_buf8 = readb_relaxed(spi->base + STM32H7_SPI_RXDR);
622 spi->rx_len -= sizeof(u8);
623 }
624
625 sr = readl_relaxed(spi->base + STM32H7_SPI_SR);
626 rxplvl = (sr & STM32H7_SPI_SR_RXPLVL) >>
627 STM32H7_SPI_SR_RXPLVL_SHIFT;
628 }
629
630 dev_dbg(spi->dev, "%s%s: %d bytes left\n", __func__,
631 flush ? "(flush)" : "", spi->rx_len);
632 }
633
634
635
636
637
638 static void stm32_spi_enable(struct stm32_spi *spi)
639 {
640 dev_dbg(spi->dev, "enable controller\n");
641
642 stm32_spi_set_bits(spi, spi->cfg->regs->en.reg,
643 spi->cfg->regs->en.mask);
644 }
645
646
647
648
649
650 static void stm32f4_spi_disable(struct stm32_spi *spi)
651 {
652 unsigned long flags;
653 u32 sr;
654
655 dev_dbg(spi->dev, "disable controller\n");
656
657 spin_lock_irqsave(&spi->lock, flags);
658
659 if (!(readl_relaxed(spi->base + STM32F4_SPI_CR1) &
660 STM32F4_SPI_CR1_SPE)) {
661 spin_unlock_irqrestore(&spi->lock, flags);
662 return;
663 }
664
665
666 stm32_spi_clr_bits(spi, STM32F4_SPI_CR2, STM32F4_SPI_CR2_TXEIE |
667 STM32F4_SPI_CR2_RXNEIE |
668 STM32F4_SPI_CR2_ERRIE);
669
670
671 if (readl_relaxed_poll_timeout_atomic(spi->base + STM32F4_SPI_SR,
672 sr, !(sr & STM32F4_SPI_SR_BSY),
673 10, 100000) < 0) {
674 dev_warn(spi->dev, "disabling condition timeout\n");
675 }
676
677 if (spi->cur_usedma && spi->dma_tx)
678 dmaengine_terminate_all(spi->dma_tx);
679 if (spi->cur_usedma && spi->dma_rx)
680 dmaengine_terminate_all(spi->dma_rx);
681
682 stm32_spi_clr_bits(spi, STM32F4_SPI_CR1, STM32F4_SPI_CR1_SPE);
683
684 stm32_spi_clr_bits(spi, STM32F4_SPI_CR2, STM32F4_SPI_CR2_TXDMAEN |
685 STM32F4_SPI_CR2_RXDMAEN);
686
687
688 readl_relaxed(spi->base + STM32F4_SPI_DR);
689 readl_relaxed(spi->base + STM32F4_SPI_SR);
690
691 spin_unlock_irqrestore(&spi->lock, flags);
692 }
693
694
695
696
697
698
699
700
701
702
703
704
705
706 static void stm32h7_spi_disable(struct stm32_spi *spi)
707 {
708 unsigned long flags;
709 u32 cr1, sr;
710
711 dev_dbg(spi->dev, "disable controller\n");
712
713 spin_lock_irqsave(&spi->lock, flags);
714
715 cr1 = readl_relaxed(spi->base + STM32H7_SPI_CR1);
716
717 if (!(cr1 & STM32H7_SPI_CR1_SPE)) {
718 spin_unlock_irqrestore(&spi->lock, flags);
719 return;
720 }
721
722
723 if (readl_relaxed_poll_timeout_atomic(spi->base + STM32H7_SPI_SR,
724 sr, !(sr & STM32H7_SPI_SR_EOT),
725 10, 100000) < 0) {
726 if (cr1 & STM32H7_SPI_CR1_CSTART) {
727 writel_relaxed(cr1 | STM32H7_SPI_CR1_CSUSP,
728 spi->base + STM32H7_SPI_CR1);
729 if (readl_relaxed_poll_timeout_atomic(
730 spi->base + STM32H7_SPI_SR,
731 sr, !(sr & STM32H7_SPI_SR_SUSP),
732 10, 100000) < 0)
733 dev_warn(spi->dev,
734 "Suspend request timeout\n");
735 }
736 }
737
738 if (!spi->cur_usedma && spi->rx_buf && (spi->rx_len > 0))
739 stm32h7_spi_read_rxfifo(spi, true);
740
741 if (spi->cur_usedma && spi->dma_tx)
742 dmaengine_terminate_all(spi->dma_tx);
743 if (spi->cur_usedma && spi->dma_rx)
744 dmaengine_terminate_all(spi->dma_rx);
745
746 stm32_spi_clr_bits(spi, STM32H7_SPI_CR1, STM32H7_SPI_CR1_SPE);
747
748 stm32_spi_clr_bits(spi, STM32H7_SPI_CFG1, STM32H7_SPI_CFG1_TXDMAEN |
749 STM32H7_SPI_CFG1_RXDMAEN);
750
751
752 writel_relaxed(0, spi->base + STM32H7_SPI_IER);
753 writel_relaxed(STM32H7_SPI_IFCR_ALL, spi->base + STM32H7_SPI_IFCR);
754
755 spin_unlock_irqrestore(&spi->lock, flags);
756 }
757
758
759
760
761
762
763
764 static bool stm32_spi_can_dma(struct spi_master *master,
765 struct spi_device *spi_dev,
766 struct spi_transfer *transfer)
767 {
768 unsigned int dma_size;
769 struct stm32_spi *spi = spi_master_get_devdata(master);
770
771 if (spi->cfg->has_fifo)
772 dma_size = spi->fifo_size;
773 else
774 dma_size = SPI_DMA_MIN_BYTES;
775
776 dev_dbg(spi->dev, "%s: %s\n", __func__,
777 (transfer->len > dma_size) ? "true" : "false");
778
779 return (transfer->len > dma_size);
780 }
781
782
783
784
785
786
787 static irqreturn_t stm32f4_spi_irq_event(int irq, void *dev_id)
788 {
789 struct spi_master *master = dev_id;
790 struct stm32_spi *spi = spi_master_get_devdata(master);
791 u32 sr, mask = 0;
792 unsigned long flags;
793 bool end = false;
794
795 spin_lock_irqsave(&spi->lock, flags);
796
797 sr = readl_relaxed(spi->base + STM32F4_SPI_SR);
798
799
800
801
802 sr &= ~STM32F4_SPI_SR_BSY;
803
804 if (!spi->cur_usedma && (spi->cur_comm == SPI_SIMPLEX_TX ||
805 spi->cur_comm == SPI_3WIRE_TX)) {
806
807 sr &= ~STM32F4_SPI_SR_OVR | STM32F4_SPI_SR_RXNE;
808 mask |= STM32F4_SPI_SR_TXE;
809 }
810
811 if (!spi->cur_usedma && spi->cur_comm == SPI_FULL_DUPLEX) {
812
813 sr &= ~STM32F4_SPI_SR_TXE;
814 mask |= STM32F4_SPI_SR_RXNE | STM32F4_SPI_SR_OVR;
815 }
816
817 if (!(sr & mask)) {
818 dev_dbg(spi->dev, "spurious IT (sr=0x%08x)\n", sr);
819 spin_unlock_irqrestore(&spi->lock, flags);
820 return IRQ_NONE;
821 }
822
823 if (sr & STM32F4_SPI_SR_OVR) {
824 dev_warn(spi->dev, "Overrun: received value discarded\n");
825
826
827 readl_relaxed(spi->base + STM32F4_SPI_DR);
828 readl_relaxed(spi->base + STM32F4_SPI_SR);
829
830
831
832
833
834
835 end = true;
836 goto end_irq;
837 }
838
839 if (sr & STM32F4_SPI_SR_TXE) {
840 if (spi->tx_buf)
841 stm32f4_spi_write_tx(spi);
842 if (spi->tx_len == 0)
843 end = true;
844 }
845
846 if (sr & STM32F4_SPI_SR_RXNE) {
847 stm32f4_spi_read_rx(spi);
848 if (spi->rx_len == 0)
849 end = true;
850 else
851 stm32f4_spi_write_tx(spi);
852 }
853
854 end_irq:
855 if (end) {
856
857 stm32_spi_clr_bits(spi, STM32F4_SPI_CR2,
858 STM32F4_SPI_CR2_TXEIE |
859 STM32F4_SPI_CR2_RXNEIE |
860 STM32F4_SPI_CR2_ERRIE);
861 spin_unlock_irqrestore(&spi->lock, flags);
862 return IRQ_WAKE_THREAD;
863 }
864
865 spin_unlock_irqrestore(&spi->lock, flags);
866 return IRQ_HANDLED;
867 }
868
869
870
871
872
873
874 static irqreturn_t stm32f4_spi_irq_thread(int irq, void *dev_id)
875 {
876 struct spi_master *master = dev_id;
877 struct stm32_spi *spi = spi_master_get_devdata(master);
878
879 spi_finalize_current_transfer(master);
880 stm32f4_spi_disable(spi);
881
882 return IRQ_HANDLED;
883 }
884
885
886
887
888
889
890 static irqreturn_t stm32h7_spi_irq_thread(int irq, void *dev_id)
891 {
892 struct spi_master *master = dev_id;
893 struct stm32_spi *spi = spi_master_get_devdata(master);
894 u32 sr, ier, mask;
895 unsigned long flags;
896 bool end = false;
897
898 spin_lock_irqsave(&spi->lock, flags);
899
900 sr = readl_relaxed(spi->base + STM32H7_SPI_SR);
901 ier = readl_relaxed(spi->base + STM32H7_SPI_IER);
902
903 mask = ier;
904
905 mask |= STM32H7_SPI_SR_SUSP;
906
907
908
909
910
911 if (spi->rx_buf && !spi->cur_usedma)
912 mask |= STM32H7_SPI_SR_RXP;
913
914 if (!(sr & mask)) {
915 dev_dbg(spi->dev, "spurious IT (sr=0x%08x, ier=0x%08x)\n",
916 sr, ier);
917 spin_unlock_irqrestore(&spi->lock, flags);
918 return IRQ_NONE;
919 }
920
921 if (sr & STM32H7_SPI_SR_SUSP) {
922 dev_warn(spi->dev, "Communication suspended\n");
923 if (!spi->cur_usedma && (spi->rx_buf && (spi->rx_len > 0)))
924 stm32h7_spi_read_rxfifo(spi, false);
925
926
927
928
929 if (spi->cur_usedma)
930 end = true;
931 }
932
933 if (sr & STM32H7_SPI_SR_MODF) {
934 dev_warn(spi->dev, "Mode fault: transfer aborted\n");
935 end = true;
936 }
937
938 if (sr & STM32H7_SPI_SR_OVR) {
939 dev_warn(spi->dev, "Overrun: received value discarded\n");
940 if (!spi->cur_usedma && (spi->rx_buf && (spi->rx_len > 0)))
941 stm32h7_spi_read_rxfifo(spi, false);
942
943
944
945
946 if (spi->cur_usedma)
947 end = true;
948 }
949
950 if (sr & STM32H7_SPI_SR_EOT) {
951 if (!spi->cur_usedma && (spi->rx_buf && (spi->rx_len > 0)))
952 stm32h7_spi_read_rxfifo(spi, true);
953 end = true;
954 }
955
956 if (sr & STM32H7_SPI_SR_TXP)
957 if (!spi->cur_usedma && (spi->tx_buf && (spi->tx_len > 0)))
958 stm32h7_spi_write_txfifo(spi);
959
960 if (sr & STM32H7_SPI_SR_RXP)
961 if (!spi->cur_usedma && (spi->rx_buf && (spi->rx_len > 0)))
962 stm32h7_spi_read_rxfifo(spi, false);
963
964 writel_relaxed(mask, spi->base + STM32H7_SPI_IFCR);
965
966 spin_unlock_irqrestore(&spi->lock, flags);
967
968 if (end) {
969 spi_finalize_current_transfer(master);
970 stm32h7_spi_disable(spi);
971 }
972
973 return IRQ_HANDLED;
974 }
975
976
977
978
979 static int stm32_spi_setup(struct spi_device *spi_dev)
980 {
981 int ret = 0;
982
983 if (!gpio_is_valid(spi_dev->cs_gpio)) {
984 dev_err(&spi_dev->dev, "%d is not a valid gpio\n",
985 spi_dev->cs_gpio);
986 return -EINVAL;
987 }
988
989 dev_dbg(&spi_dev->dev, "%s: set gpio%d output %s\n", __func__,
990 spi_dev->cs_gpio,
991 (spi_dev->mode & SPI_CS_HIGH) ? "low" : "high");
992
993 ret = gpio_direction_output(spi_dev->cs_gpio,
994 !(spi_dev->mode & SPI_CS_HIGH));
995
996 return ret;
997 }
998
999
1000
1001
1002 static int stm32_spi_prepare_msg(struct spi_master *master,
1003 struct spi_message *msg)
1004 {
1005 struct stm32_spi *spi = spi_master_get_devdata(master);
1006 struct spi_device *spi_dev = msg->spi;
1007 struct device_node *np = spi_dev->dev.of_node;
1008 unsigned long flags;
1009 u32 clrb = 0, setb = 0;
1010
1011
1012 spi->cur_midi = 0;
1013 if (np && !of_property_read_u32(np, "st,spi-midi-ns", &spi->cur_midi))
1014 dev_dbg(spi->dev, "%dns inter-data idleness\n", spi->cur_midi);
1015
1016 if (spi_dev->mode & SPI_CPOL)
1017 setb |= spi->cfg->regs->cpol.mask;
1018 else
1019 clrb |= spi->cfg->regs->cpol.mask;
1020
1021 if (spi_dev->mode & SPI_CPHA)
1022 setb |= spi->cfg->regs->cpha.mask;
1023 else
1024 clrb |= spi->cfg->regs->cpha.mask;
1025
1026 if (spi_dev->mode & SPI_LSB_FIRST)
1027 setb |= spi->cfg->regs->lsb_first.mask;
1028 else
1029 clrb |= spi->cfg->regs->lsb_first.mask;
1030
1031 dev_dbg(spi->dev, "cpol=%d cpha=%d lsb_first=%d cs_high=%d\n",
1032 spi_dev->mode & SPI_CPOL,
1033 spi_dev->mode & SPI_CPHA,
1034 spi_dev->mode & SPI_LSB_FIRST,
1035 spi_dev->mode & SPI_CS_HIGH);
1036
1037 spin_lock_irqsave(&spi->lock, flags);
1038
1039
1040 if (clrb || setb)
1041 writel_relaxed(
1042 (readl_relaxed(spi->base + spi->cfg->regs->cpol.reg) &
1043 ~clrb) | setb,
1044 spi->base + spi->cfg->regs->cpol.reg);
1045
1046 spin_unlock_irqrestore(&spi->lock, flags);
1047
1048 return 0;
1049 }
1050
1051
1052
1053
1054
1055
1056 static void stm32f4_spi_dma_tx_cb(void *data)
1057 {
1058 struct stm32_spi *spi = data;
1059
1060 if (spi->cur_comm == SPI_SIMPLEX_TX || spi->cur_comm == SPI_3WIRE_TX) {
1061 spi_finalize_current_transfer(spi->master);
1062 stm32f4_spi_disable(spi);
1063 }
1064 }
1065
1066
1067
1068
1069
1070
1071 static void stm32f4_spi_dma_rx_cb(void *data)
1072 {
1073 struct stm32_spi *spi = data;
1074
1075 spi_finalize_current_transfer(spi->master);
1076 stm32f4_spi_disable(spi);
1077 }
1078
1079
1080
1081
1082
1083
1084
1085 static void stm32h7_spi_dma_cb(void *data)
1086 {
1087 struct stm32_spi *spi = data;
1088 unsigned long flags;
1089 u32 sr;
1090
1091 spin_lock_irqsave(&spi->lock, flags);
1092
1093 sr = readl_relaxed(spi->base + STM32H7_SPI_SR);
1094
1095 spin_unlock_irqrestore(&spi->lock, flags);
1096
1097 if (!(sr & STM32H7_SPI_SR_EOT))
1098 dev_warn(spi->dev, "DMA error (sr=0x%08x)\n", sr);
1099
1100
1101 }
1102
1103
1104
1105
1106
1107 static void stm32_spi_dma_config(struct stm32_spi *spi,
1108 struct dma_slave_config *dma_conf,
1109 enum dma_transfer_direction dir)
1110 {
1111 enum dma_slave_buswidth buswidth;
1112 u32 maxburst;
1113
1114 if (spi->cur_bpw <= 8)
1115 buswidth = DMA_SLAVE_BUSWIDTH_1_BYTE;
1116 else if (spi->cur_bpw <= 16)
1117 buswidth = DMA_SLAVE_BUSWIDTH_2_BYTES;
1118 else
1119 buswidth = DMA_SLAVE_BUSWIDTH_4_BYTES;
1120
1121 if (spi->cfg->has_fifo) {
1122
1123 if (spi->cur_fthlv == 2)
1124 maxburst = 1;
1125 else
1126 maxburst = spi->cur_fthlv;
1127 } else {
1128 maxburst = 1;
1129 }
1130
1131 memset(dma_conf, 0, sizeof(struct dma_slave_config));
1132 dma_conf->direction = dir;
1133 if (dma_conf->direction == DMA_DEV_TO_MEM) {
1134 dma_conf->src_addr = spi->phys_addr + spi->cfg->regs->rx.reg;
1135 dma_conf->src_addr_width = buswidth;
1136 dma_conf->src_maxburst = maxburst;
1137
1138 dev_dbg(spi->dev, "Rx DMA config buswidth=%d, maxburst=%d\n",
1139 buswidth, maxburst);
1140 } else if (dma_conf->direction == DMA_MEM_TO_DEV) {
1141 dma_conf->dst_addr = spi->phys_addr + spi->cfg->regs->tx.reg;
1142 dma_conf->dst_addr_width = buswidth;
1143 dma_conf->dst_maxburst = maxburst;
1144
1145 dev_dbg(spi->dev, "Tx DMA config buswidth=%d, maxburst=%d\n",
1146 buswidth, maxburst);
1147 }
1148 }
1149
1150
1151
1152
1153
1154
1155
1156
1157 static int stm32f4_spi_transfer_one_irq(struct stm32_spi *spi)
1158 {
1159 unsigned long flags;
1160 u32 cr2 = 0;
1161
1162
1163 if (spi->cur_comm == SPI_SIMPLEX_TX || spi->cur_comm == SPI_3WIRE_TX) {
1164 cr2 |= STM32F4_SPI_CR2_TXEIE;
1165 } else if (spi->cur_comm == SPI_FULL_DUPLEX) {
1166
1167
1168
1169
1170 cr2 |= STM32F4_SPI_CR2_RXNEIE | STM32F4_SPI_CR2_ERRIE;
1171 } else {
1172 return -EINVAL;
1173 }
1174
1175 spin_lock_irqsave(&spi->lock, flags);
1176
1177 stm32_spi_set_bits(spi, STM32F4_SPI_CR2, cr2);
1178
1179 stm32_spi_enable(spi);
1180
1181
1182 if (spi->tx_buf)
1183 stm32f4_spi_write_tx(spi);
1184
1185 spin_unlock_irqrestore(&spi->lock, flags);
1186
1187 return 1;
1188 }
1189
1190
1191
1192
1193
1194
1195
1196
1197 static int stm32h7_spi_transfer_one_irq(struct stm32_spi *spi)
1198 {
1199 unsigned long flags;
1200 u32 ier = 0;
1201
1202
1203 if (spi->tx_buf && spi->rx_buf)
1204 ier |= STM32H7_SPI_IER_DXPIE;
1205 else if (spi->tx_buf)
1206 ier |= STM32H7_SPI_IER_TXPIE;
1207 else if (spi->rx_buf)
1208 ier |= STM32H7_SPI_IER_RXPIE;
1209
1210
1211 ier |= STM32H7_SPI_IER_EOTIE | STM32H7_SPI_IER_TXTFIE |
1212 STM32H7_SPI_IER_OVRIE | STM32H7_SPI_IER_MODFIE;
1213
1214 spin_lock_irqsave(&spi->lock, flags);
1215
1216 stm32_spi_enable(spi);
1217
1218
1219 if (spi->tx_buf)
1220 stm32h7_spi_write_txfifo(spi);
1221
1222 stm32_spi_set_bits(spi, STM32H7_SPI_CR1, STM32H7_SPI_CR1_CSTART);
1223
1224 writel_relaxed(ier, spi->base + STM32H7_SPI_IER);
1225
1226 spin_unlock_irqrestore(&spi->lock, flags);
1227
1228 return 1;
1229 }
1230
1231
1232
1233
1234
1235 static void stm32f4_spi_transfer_one_dma_start(struct stm32_spi *spi)
1236 {
1237
1238 if (spi->cur_comm == SPI_SIMPLEX_RX || spi->cur_comm == SPI_3WIRE_RX ||
1239 spi->cur_comm == SPI_FULL_DUPLEX) {
1240
1241
1242
1243
1244
1245 stm32_spi_set_bits(spi, STM32F4_SPI_CR2, STM32F4_SPI_CR2_ERRIE);
1246 }
1247
1248 stm32_spi_enable(spi);
1249 }
1250
1251
1252
1253
1254
1255 static void stm32h7_spi_transfer_one_dma_start(struct stm32_spi *spi)
1256 {
1257
1258 stm32_spi_set_bits(spi, STM32H7_SPI_IER, STM32H7_SPI_IER_EOTIE |
1259 STM32H7_SPI_IER_TXTFIE |
1260 STM32H7_SPI_IER_OVRIE |
1261 STM32H7_SPI_IER_MODFIE);
1262
1263 stm32_spi_enable(spi);
1264
1265 stm32_spi_set_bits(spi, STM32H7_SPI_CR1, STM32H7_SPI_CR1_CSTART);
1266 }
1267
1268
1269
1270
1271
1272
1273
1274 static int stm32_spi_transfer_one_dma(struct stm32_spi *spi,
1275 struct spi_transfer *xfer)
1276 {
1277 struct dma_slave_config tx_dma_conf, rx_dma_conf;
1278 struct dma_async_tx_descriptor *tx_dma_desc, *rx_dma_desc;
1279 unsigned long flags;
1280
1281 spin_lock_irqsave(&spi->lock, flags);
1282
1283 rx_dma_desc = NULL;
1284 if (spi->rx_buf && spi->dma_rx) {
1285 stm32_spi_dma_config(spi, &rx_dma_conf, DMA_DEV_TO_MEM);
1286 dmaengine_slave_config(spi->dma_rx, &rx_dma_conf);
1287
1288
1289 stm32_spi_set_bits(spi, spi->cfg->regs->dma_rx_en.reg,
1290 spi->cfg->regs->dma_rx_en.mask);
1291
1292 rx_dma_desc = dmaengine_prep_slave_sg(
1293 spi->dma_rx, xfer->rx_sg.sgl,
1294 xfer->rx_sg.nents,
1295 rx_dma_conf.direction,
1296 DMA_PREP_INTERRUPT);
1297 }
1298
1299 tx_dma_desc = NULL;
1300 if (spi->tx_buf && spi->dma_tx) {
1301 stm32_spi_dma_config(spi, &tx_dma_conf, DMA_MEM_TO_DEV);
1302 dmaengine_slave_config(spi->dma_tx, &tx_dma_conf);
1303
1304 tx_dma_desc = dmaengine_prep_slave_sg(
1305 spi->dma_tx, xfer->tx_sg.sgl,
1306 xfer->tx_sg.nents,
1307 tx_dma_conf.direction,
1308 DMA_PREP_INTERRUPT);
1309 }
1310
1311 if ((spi->tx_buf && spi->dma_tx && !tx_dma_desc) ||
1312 (spi->rx_buf && spi->dma_rx && !rx_dma_desc))
1313 goto dma_desc_error;
1314
1315 if (spi->cur_comm == SPI_FULL_DUPLEX && (!tx_dma_desc || !rx_dma_desc))
1316 goto dma_desc_error;
1317
1318 if (rx_dma_desc) {
1319 rx_dma_desc->callback = spi->cfg->dma_rx_cb;
1320 rx_dma_desc->callback_param = spi;
1321
1322 if (dma_submit_error(dmaengine_submit(rx_dma_desc))) {
1323 dev_err(spi->dev, "Rx DMA submit failed\n");
1324 goto dma_desc_error;
1325 }
1326
1327 dma_async_issue_pending(spi->dma_rx);
1328 }
1329
1330 if (tx_dma_desc) {
1331 if (spi->cur_comm == SPI_SIMPLEX_TX ||
1332 spi->cur_comm == SPI_3WIRE_TX) {
1333 tx_dma_desc->callback = spi->cfg->dma_tx_cb;
1334 tx_dma_desc->callback_param = spi;
1335 }
1336
1337 if (dma_submit_error(dmaengine_submit(tx_dma_desc))) {
1338 dev_err(spi->dev, "Tx DMA submit failed\n");
1339 goto dma_submit_error;
1340 }
1341
1342 dma_async_issue_pending(spi->dma_tx);
1343
1344
1345 stm32_spi_set_bits(spi, spi->cfg->regs->dma_tx_en.reg,
1346 spi->cfg->regs->dma_tx_en.mask);
1347 }
1348
1349 spi->cfg->transfer_one_dma_start(spi);
1350
1351 spin_unlock_irqrestore(&spi->lock, flags);
1352
1353 return 1;
1354
1355 dma_submit_error:
1356 if (spi->dma_rx)
1357 dmaengine_terminate_all(spi->dma_rx);
1358
1359 dma_desc_error:
1360 stm32_spi_clr_bits(spi, spi->cfg->regs->dma_rx_en.reg,
1361 spi->cfg->regs->dma_rx_en.mask);
1362
1363 spin_unlock_irqrestore(&spi->lock, flags);
1364
1365 dev_info(spi->dev, "DMA issue: fall back to irq transfer\n");
1366
1367 spi->cur_usedma = false;
1368 return spi->cfg->transfer_one_irq(spi);
1369 }
1370
1371
1372
1373
1374
1375 static void stm32f4_spi_set_bpw(struct stm32_spi *spi)
1376 {
1377 if (spi->cur_bpw == 16)
1378 stm32_spi_set_bits(spi, STM32F4_SPI_CR1, STM32F4_SPI_CR1_DFF);
1379 else
1380 stm32_spi_clr_bits(spi, STM32F4_SPI_CR1, STM32F4_SPI_CR1_DFF);
1381 }
1382
1383
1384
1385
1386
1387 static void stm32h7_spi_set_bpw(struct stm32_spi *spi)
1388 {
1389 u32 bpw, fthlv;
1390 u32 cfg1_clrb = 0, cfg1_setb = 0;
1391
1392 bpw = spi->cur_bpw - 1;
1393
1394 cfg1_clrb |= STM32H7_SPI_CFG1_DSIZE;
1395 cfg1_setb |= (bpw << STM32H7_SPI_CFG1_DSIZE_SHIFT) &
1396 STM32H7_SPI_CFG1_DSIZE;
1397
1398 spi->cur_fthlv = stm32h7_spi_prepare_fthlv(spi);
1399 fthlv = spi->cur_fthlv - 1;
1400
1401 cfg1_clrb |= STM32H7_SPI_CFG1_FTHLV;
1402 cfg1_setb |= (fthlv << STM32H7_SPI_CFG1_FTHLV_SHIFT) &
1403 STM32H7_SPI_CFG1_FTHLV;
1404
1405 writel_relaxed(
1406 (readl_relaxed(spi->base + STM32H7_SPI_CFG1) &
1407 ~cfg1_clrb) | cfg1_setb,
1408 spi->base + STM32H7_SPI_CFG1);
1409 }
1410
1411
1412
1413
1414
1415
1416 static void stm32_spi_set_mbr(struct stm32_spi *spi, u32 mbrdiv)
1417 {
1418 u32 clrb = 0, setb = 0;
1419
1420 clrb |= spi->cfg->regs->br.mask;
1421 setb |= ((u32)mbrdiv << spi->cfg->regs->br.shift) &
1422 spi->cfg->regs->br.mask;
1423
1424 writel_relaxed((readl_relaxed(spi->base + spi->cfg->regs->br.reg) &
1425 ~clrb) | setb,
1426 spi->base + spi->cfg->regs->br.reg);
1427 }
1428
1429
1430
1431
1432
1433
1434 static unsigned int stm32_spi_communication_type(struct spi_device *spi_dev,
1435 struct spi_transfer *transfer)
1436 {
1437 unsigned int type = SPI_FULL_DUPLEX;
1438
1439 if (spi_dev->mode & SPI_3WIRE) {
1440
1441
1442
1443
1444
1445
1446 if (!transfer->tx_buf)
1447 type = SPI_3WIRE_RX;
1448 else
1449 type = SPI_3WIRE_TX;
1450 } else {
1451 if (!transfer->tx_buf)
1452 type = SPI_SIMPLEX_RX;
1453 else if (!transfer->rx_buf)
1454 type = SPI_SIMPLEX_TX;
1455 }
1456
1457 return type;
1458 }
1459
1460
1461
1462
1463
1464
1465 static int stm32f4_spi_set_mode(struct stm32_spi *spi, unsigned int comm_type)
1466 {
1467 if (comm_type == SPI_3WIRE_TX || comm_type == SPI_SIMPLEX_TX) {
1468 stm32_spi_set_bits(spi, STM32F4_SPI_CR1,
1469 STM32F4_SPI_CR1_BIDIMODE |
1470 STM32F4_SPI_CR1_BIDIOE);
1471 } else if (comm_type == SPI_FULL_DUPLEX) {
1472 stm32_spi_clr_bits(spi, STM32F4_SPI_CR1,
1473 STM32F4_SPI_CR1_BIDIMODE |
1474 STM32F4_SPI_CR1_BIDIOE);
1475 } else {
1476 return -EINVAL;
1477 }
1478
1479 return 0;
1480 }
1481
1482
1483
1484
1485
1486
1487 static int stm32h7_spi_set_mode(struct stm32_spi *spi, unsigned int comm_type)
1488 {
1489 u32 mode;
1490 u32 cfg2_clrb = 0, cfg2_setb = 0;
1491
1492 if (comm_type == SPI_3WIRE_RX) {
1493 mode = STM32H7_SPI_HALF_DUPLEX;
1494 stm32_spi_clr_bits(spi, STM32H7_SPI_CR1, STM32H7_SPI_CR1_HDDIR);
1495 } else if (comm_type == SPI_3WIRE_TX) {
1496 mode = STM32H7_SPI_HALF_DUPLEX;
1497 stm32_spi_set_bits(spi, STM32H7_SPI_CR1, STM32H7_SPI_CR1_HDDIR);
1498 } else if (comm_type == SPI_SIMPLEX_RX) {
1499 mode = STM32H7_SPI_SIMPLEX_RX;
1500 } else if (comm_type == SPI_SIMPLEX_TX) {
1501 mode = STM32H7_SPI_SIMPLEX_TX;
1502 } else {
1503 mode = STM32H7_SPI_FULL_DUPLEX;
1504 }
1505
1506 cfg2_clrb |= STM32H7_SPI_CFG2_COMM;
1507 cfg2_setb |= (mode << STM32H7_SPI_CFG2_COMM_SHIFT) &
1508 STM32H7_SPI_CFG2_COMM;
1509
1510 writel_relaxed(
1511 (readl_relaxed(spi->base + STM32H7_SPI_CFG2) &
1512 ~cfg2_clrb) | cfg2_setb,
1513 spi->base + STM32H7_SPI_CFG2);
1514
1515 return 0;
1516 }
1517
1518
1519
1520
1521
1522
1523
1524 static void stm32h7_spi_data_idleness(struct stm32_spi *spi, u32 len)
1525 {
1526 u32 cfg2_clrb = 0, cfg2_setb = 0;
1527
1528 cfg2_clrb |= STM32H7_SPI_CFG2_MIDI;
1529 if ((len > 1) && (spi->cur_midi > 0)) {
1530 u32 sck_period_ns = DIV_ROUND_UP(SPI_1HZ_NS, spi->cur_speed);
1531 u32 midi = min((u32)DIV_ROUND_UP(spi->cur_midi, sck_period_ns),
1532 (u32)STM32H7_SPI_CFG2_MIDI >>
1533 STM32H7_SPI_CFG2_MIDI_SHIFT);
1534
1535 dev_dbg(spi->dev, "period=%dns, midi=%d(=%dns)\n",
1536 sck_period_ns, midi, midi * sck_period_ns);
1537 cfg2_setb |= (midi << STM32H7_SPI_CFG2_MIDI_SHIFT) &
1538 STM32H7_SPI_CFG2_MIDI;
1539 }
1540
1541 writel_relaxed((readl_relaxed(spi->base + STM32H7_SPI_CFG2) &
1542 ~cfg2_clrb) | cfg2_setb,
1543 spi->base + STM32H7_SPI_CFG2);
1544 }
1545
1546
1547
1548
1549
1550
1551 static int stm32h7_spi_number_of_data(struct stm32_spi *spi, u32 nb_words)
1552 {
1553 u32 cr2_clrb = 0, cr2_setb = 0;
1554
1555 if (nb_words <= (STM32H7_SPI_CR2_TSIZE >>
1556 STM32H7_SPI_CR2_TSIZE_SHIFT)) {
1557 cr2_clrb |= STM32H7_SPI_CR2_TSIZE;
1558 cr2_setb = nb_words << STM32H7_SPI_CR2_TSIZE_SHIFT;
1559 writel_relaxed((readl_relaxed(spi->base + STM32H7_SPI_CR2) &
1560 ~cr2_clrb) | cr2_setb,
1561 spi->base + STM32H7_SPI_CR2);
1562 } else {
1563 return -EMSGSIZE;
1564 }
1565
1566 return 0;
1567 }
1568
1569
1570
1571
1572
1573
1574 static int stm32_spi_transfer_one_setup(struct stm32_spi *spi,
1575 struct spi_device *spi_dev,
1576 struct spi_transfer *transfer)
1577 {
1578 unsigned long flags;
1579 unsigned int comm_type;
1580 int nb_words, ret = 0;
1581
1582 spin_lock_irqsave(&spi->lock, flags);
1583
1584 if (spi->cur_bpw != transfer->bits_per_word) {
1585 spi->cur_bpw = transfer->bits_per_word;
1586 spi->cfg->set_bpw(spi);
1587 }
1588
1589 if (spi->cur_speed != transfer->speed_hz) {
1590 int mbr;
1591
1592
1593 mbr = stm32_spi_prepare_mbr(spi, transfer->speed_hz,
1594 spi->cfg->baud_rate_div_min,
1595 spi->cfg->baud_rate_div_max);
1596 if (mbr < 0) {
1597 ret = mbr;
1598 goto out;
1599 }
1600
1601 transfer->speed_hz = spi->cur_speed;
1602 stm32_spi_set_mbr(spi, mbr);
1603 }
1604
1605 comm_type = stm32_spi_communication_type(spi_dev, transfer);
1606 if (spi->cur_comm != comm_type) {
1607 ret = spi->cfg->set_mode(spi, comm_type);
1608
1609 if (ret < 0)
1610 goto out;
1611
1612 spi->cur_comm = comm_type;
1613 }
1614
1615 if (spi->cfg->set_data_idleness)
1616 spi->cfg->set_data_idleness(spi, transfer->len);
1617
1618 if (spi->cur_bpw <= 8)
1619 nb_words = transfer->len;
1620 else if (spi->cur_bpw <= 16)
1621 nb_words = DIV_ROUND_UP(transfer->len * 8, 16);
1622 else
1623 nb_words = DIV_ROUND_UP(transfer->len * 8, 32);
1624
1625 if (spi->cfg->set_number_of_data) {
1626 ret = spi->cfg->set_number_of_data(spi, nb_words);
1627 if (ret < 0)
1628 goto out;
1629 }
1630
1631 spi->cur_xferlen = transfer->len;
1632
1633 dev_dbg(spi->dev, "transfer communication mode set to %d\n",
1634 spi->cur_comm);
1635 dev_dbg(spi->dev,
1636 "data frame of %d-bit, data packet of %d data frames\n",
1637 spi->cur_bpw, spi->cur_fthlv);
1638 dev_dbg(spi->dev, "speed set to %dHz\n", spi->cur_speed);
1639 dev_dbg(spi->dev, "transfer of %d bytes (%d data frames)\n",
1640 spi->cur_xferlen, nb_words);
1641 dev_dbg(spi->dev, "dma %s\n",
1642 (spi->cur_usedma) ? "enabled" : "disabled");
1643
1644 out:
1645 spin_unlock_irqrestore(&spi->lock, flags);
1646
1647 return ret;
1648 }
1649
1650
1651
1652
1653
1654
1655
1656 static int stm32_spi_transfer_one(struct spi_master *master,
1657 struct spi_device *spi_dev,
1658 struct spi_transfer *transfer)
1659 {
1660 struct stm32_spi *spi = spi_master_get_devdata(master);
1661 int ret;
1662
1663 spi->tx_buf = transfer->tx_buf;
1664 spi->rx_buf = transfer->rx_buf;
1665 spi->tx_len = spi->tx_buf ? transfer->len : 0;
1666 spi->rx_len = spi->rx_buf ? transfer->len : 0;
1667
1668 spi->cur_usedma = (master->can_dma &&
1669 master->can_dma(master, spi_dev, transfer));
1670
1671 ret = stm32_spi_transfer_one_setup(spi, spi_dev, transfer);
1672 if (ret) {
1673 dev_err(spi->dev, "SPI transfer setup failed\n");
1674 return ret;
1675 }
1676
1677 if (spi->cur_usedma)
1678 return stm32_spi_transfer_one_dma(spi, transfer);
1679 else
1680 return spi->cfg->transfer_one_irq(spi);
1681 }
1682
1683
1684
1685
1686 static int stm32_spi_unprepare_msg(struct spi_master *master,
1687 struct spi_message *msg)
1688 {
1689 struct stm32_spi *spi = spi_master_get_devdata(master);
1690
1691 spi->cfg->disable(spi);
1692
1693 return 0;
1694 }
1695
1696
1697
1698
1699 static int stm32f4_spi_config(struct stm32_spi *spi)
1700 {
1701 unsigned long flags;
1702
1703 spin_lock_irqsave(&spi->lock, flags);
1704
1705
1706 stm32_spi_clr_bits(spi, STM32F4_SPI_I2SCFGR,
1707 STM32F4_SPI_I2SCFGR_I2SMOD);
1708
1709
1710
1711
1712
1713
1714
1715
1716 stm32_spi_set_bits(spi, STM32F4_SPI_CR1, STM32F4_SPI_CR1_SSI |
1717 STM32F4_SPI_CR1_BIDIOE |
1718 STM32F4_SPI_CR1_MSTR |
1719 STM32F4_SPI_CR1_SSM);
1720
1721 spin_unlock_irqrestore(&spi->lock, flags);
1722
1723 return 0;
1724 }
1725
1726
1727
1728
1729 static int stm32h7_spi_config(struct stm32_spi *spi)
1730 {
1731 unsigned long flags;
1732
1733 spin_lock_irqsave(&spi->lock, flags);
1734
1735
1736 stm32_spi_clr_bits(spi, STM32H7_SPI_I2SCFGR,
1737 STM32H7_SPI_I2SCFGR_I2SMOD);
1738
1739
1740
1741
1742
1743
1744 stm32_spi_set_bits(spi, STM32H7_SPI_CR1, STM32H7_SPI_CR1_SSI |
1745 STM32H7_SPI_CR1_HDDIR |
1746 STM32H7_SPI_CR1_MASRX);
1747
1748
1749
1750
1751
1752
1753
1754 stm32_spi_set_bits(spi, STM32H7_SPI_CFG2, STM32H7_SPI_CFG2_MASTER |
1755 STM32H7_SPI_CFG2_SSM |
1756 STM32H7_SPI_CFG2_AFCNTR);
1757
1758 spin_unlock_irqrestore(&spi->lock, flags);
1759
1760 return 0;
1761 }
1762
1763 static const struct stm32_spi_cfg stm32f4_spi_cfg = {
1764 .regs = &stm32f4_spi_regspec,
1765 .get_bpw_mask = stm32f4_spi_get_bpw_mask,
1766 .disable = stm32f4_spi_disable,
1767 .config = stm32f4_spi_config,
1768 .set_bpw = stm32f4_spi_set_bpw,
1769 .set_mode = stm32f4_spi_set_mode,
1770 .transfer_one_dma_start = stm32f4_spi_transfer_one_dma_start,
1771 .dma_tx_cb = stm32f4_spi_dma_tx_cb,
1772 .dma_rx_cb = stm32f4_spi_dma_rx_cb,
1773 .transfer_one_irq = stm32f4_spi_transfer_one_irq,
1774 .irq_handler_event = stm32f4_spi_irq_event,
1775 .irq_handler_thread = stm32f4_spi_irq_thread,
1776 .baud_rate_div_min = STM32F4_SPI_BR_DIV_MIN,
1777 .baud_rate_div_max = STM32F4_SPI_BR_DIV_MAX,
1778 .has_fifo = false,
1779 };
1780
1781 static const struct stm32_spi_cfg stm32h7_spi_cfg = {
1782 .regs = &stm32h7_spi_regspec,
1783 .get_fifo_size = stm32h7_spi_get_fifo_size,
1784 .get_bpw_mask = stm32h7_spi_get_bpw_mask,
1785 .disable = stm32h7_spi_disable,
1786 .config = stm32h7_spi_config,
1787 .set_bpw = stm32h7_spi_set_bpw,
1788 .set_mode = stm32h7_spi_set_mode,
1789 .set_data_idleness = stm32h7_spi_data_idleness,
1790 .set_number_of_data = stm32h7_spi_number_of_data,
1791 .transfer_one_dma_start = stm32h7_spi_transfer_one_dma_start,
1792 .dma_rx_cb = stm32h7_spi_dma_cb,
1793 .dma_tx_cb = stm32h7_spi_dma_cb,
1794 .transfer_one_irq = stm32h7_spi_transfer_one_irq,
1795 .irq_handler_thread = stm32h7_spi_irq_thread,
1796 .baud_rate_div_min = STM32H7_SPI_MBR_DIV_MIN,
1797 .baud_rate_div_max = STM32H7_SPI_MBR_DIV_MAX,
1798 .has_fifo = true,
1799 };
1800
1801 static const struct of_device_id stm32_spi_of_match[] = {
1802 { .compatible = "st,stm32h7-spi", .data = (void *)&stm32h7_spi_cfg },
1803 { .compatible = "st,stm32f4-spi", .data = (void *)&stm32f4_spi_cfg },
1804 {},
1805 };
1806 MODULE_DEVICE_TABLE(of, stm32_spi_of_match);
1807
1808 static int stm32_spi_probe(struct platform_device *pdev)
1809 {
1810 struct spi_master *master;
1811 struct stm32_spi *spi;
1812 struct resource *res;
1813 int i, ret;
1814
1815 master = spi_alloc_master(&pdev->dev, sizeof(struct stm32_spi));
1816 if (!master) {
1817 dev_err(&pdev->dev, "spi master allocation failed\n");
1818 return -ENOMEM;
1819 }
1820 platform_set_drvdata(pdev, master);
1821
1822 spi = spi_master_get_devdata(master);
1823 spi->dev = &pdev->dev;
1824 spi->master = master;
1825 spin_lock_init(&spi->lock);
1826
1827 spi->cfg = (const struct stm32_spi_cfg *)
1828 of_match_device(pdev->dev.driver->of_match_table,
1829 &pdev->dev)->data;
1830
1831 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1832 spi->base = devm_ioremap_resource(&pdev->dev, res);
1833 if (IS_ERR(spi->base)) {
1834 ret = PTR_ERR(spi->base);
1835 goto err_master_put;
1836 }
1837
1838 spi->phys_addr = (dma_addr_t)res->start;
1839
1840 spi->irq = platform_get_irq(pdev, 0);
1841 if (spi->irq <= 0) {
1842 ret = spi->irq;
1843 if (ret != -EPROBE_DEFER)
1844 dev_err(&pdev->dev, "failed to get irq: %d\n", ret);
1845 goto err_master_put;
1846 }
1847 ret = devm_request_threaded_irq(&pdev->dev, spi->irq,
1848 spi->cfg->irq_handler_event,
1849 spi->cfg->irq_handler_thread,
1850 IRQF_ONESHOT, pdev->name, master);
1851 if (ret) {
1852 dev_err(&pdev->dev, "irq%d request failed: %d\n", spi->irq,
1853 ret);
1854 goto err_master_put;
1855 }
1856
1857 spi->clk = devm_clk_get(&pdev->dev, NULL);
1858 if (IS_ERR(spi->clk)) {
1859 ret = PTR_ERR(spi->clk);
1860 dev_err(&pdev->dev, "clk get failed: %d\n", ret);
1861 goto err_master_put;
1862 }
1863
1864 ret = clk_prepare_enable(spi->clk);
1865 if (ret) {
1866 dev_err(&pdev->dev, "clk enable failed: %d\n", ret);
1867 goto err_master_put;
1868 }
1869 spi->clk_rate = clk_get_rate(spi->clk);
1870 if (!spi->clk_rate) {
1871 dev_err(&pdev->dev, "clk rate = 0\n");
1872 ret = -EINVAL;
1873 goto err_clk_disable;
1874 }
1875
1876 spi->rst = devm_reset_control_get_exclusive(&pdev->dev, NULL);
1877 if (!IS_ERR(spi->rst)) {
1878 reset_control_assert(spi->rst);
1879 udelay(2);
1880 reset_control_deassert(spi->rst);
1881 }
1882
1883 if (spi->cfg->has_fifo)
1884 spi->fifo_size = spi->cfg->get_fifo_size(spi);
1885
1886 ret = spi->cfg->config(spi);
1887 if (ret) {
1888 dev_err(&pdev->dev, "controller configuration failed: %d\n",
1889 ret);
1890 goto err_clk_disable;
1891 }
1892
1893 master->dev.of_node = pdev->dev.of_node;
1894 master->auto_runtime_pm = true;
1895 master->bus_num = pdev->id;
1896 master->mode_bits = SPI_CPHA | SPI_CPOL | SPI_CS_HIGH | SPI_LSB_FIRST |
1897 SPI_3WIRE;
1898 master->bits_per_word_mask = spi->cfg->get_bpw_mask(spi);
1899 master->max_speed_hz = spi->clk_rate / spi->cfg->baud_rate_div_min;
1900 master->min_speed_hz = spi->clk_rate / spi->cfg->baud_rate_div_max;
1901 master->setup = stm32_spi_setup;
1902 master->prepare_message = stm32_spi_prepare_msg;
1903 master->transfer_one = stm32_spi_transfer_one;
1904 master->unprepare_message = stm32_spi_unprepare_msg;
1905
1906 spi->dma_tx = dma_request_slave_channel(spi->dev, "tx");
1907 if (!spi->dma_tx)
1908 dev_warn(&pdev->dev, "failed to request tx dma channel\n");
1909 else
1910 master->dma_tx = spi->dma_tx;
1911
1912 spi->dma_rx = dma_request_slave_channel(spi->dev, "rx");
1913 if (!spi->dma_rx)
1914 dev_warn(&pdev->dev, "failed to request rx dma channel\n");
1915 else
1916 master->dma_rx = spi->dma_rx;
1917
1918 if (spi->dma_tx || spi->dma_rx)
1919 master->can_dma = stm32_spi_can_dma;
1920
1921 pm_runtime_set_active(&pdev->dev);
1922 pm_runtime_enable(&pdev->dev);
1923
1924 ret = devm_spi_register_master(&pdev->dev, master);
1925 if (ret) {
1926 dev_err(&pdev->dev, "spi master registration failed: %d\n",
1927 ret);
1928 goto err_dma_release;
1929 }
1930
1931 if (!master->cs_gpios) {
1932 dev_err(&pdev->dev, "no CS gpios available\n");
1933 ret = -EINVAL;
1934 goto err_dma_release;
1935 }
1936
1937 for (i = 0; i < master->num_chipselect; i++) {
1938 if (!gpio_is_valid(master->cs_gpios[i])) {
1939 dev_err(&pdev->dev, "%i is not a valid gpio\n",
1940 master->cs_gpios[i]);
1941 ret = -EINVAL;
1942 goto err_dma_release;
1943 }
1944
1945 ret = devm_gpio_request(&pdev->dev, master->cs_gpios[i],
1946 DRIVER_NAME);
1947 if (ret) {
1948 dev_err(&pdev->dev, "can't get CS gpio %i\n",
1949 master->cs_gpios[i]);
1950 goto err_dma_release;
1951 }
1952 }
1953
1954 dev_info(&pdev->dev, "driver initialized\n");
1955
1956 return 0;
1957
1958 err_dma_release:
1959 if (spi->dma_tx)
1960 dma_release_channel(spi->dma_tx);
1961 if (spi->dma_rx)
1962 dma_release_channel(spi->dma_rx);
1963
1964 pm_runtime_disable(&pdev->dev);
1965 err_clk_disable:
1966 clk_disable_unprepare(spi->clk);
1967 err_master_put:
1968 spi_master_put(master);
1969
1970 return ret;
1971 }
1972
1973 static int stm32_spi_remove(struct platform_device *pdev)
1974 {
1975 struct spi_master *master = platform_get_drvdata(pdev);
1976 struct stm32_spi *spi = spi_master_get_devdata(master);
1977
1978 spi->cfg->disable(spi);
1979
1980 if (master->dma_tx)
1981 dma_release_channel(master->dma_tx);
1982 if (master->dma_rx)
1983 dma_release_channel(master->dma_rx);
1984
1985 clk_disable_unprepare(spi->clk);
1986
1987 pm_runtime_disable(&pdev->dev);
1988
1989 return 0;
1990 }
1991
1992 #ifdef CONFIG_PM
1993 static int stm32_spi_runtime_suspend(struct device *dev)
1994 {
1995 struct spi_master *master = dev_get_drvdata(dev);
1996 struct stm32_spi *spi = spi_master_get_devdata(master);
1997
1998 clk_disable_unprepare(spi->clk);
1999
2000 return 0;
2001 }
2002
2003 static int stm32_spi_runtime_resume(struct device *dev)
2004 {
2005 struct spi_master *master = dev_get_drvdata(dev);
2006 struct stm32_spi *spi = spi_master_get_devdata(master);
2007
2008 return clk_prepare_enable(spi->clk);
2009 }
2010 #endif
2011
2012 #ifdef CONFIG_PM_SLEEP
2013 static int stm32_spi_suspend(struct device *dev)
2014 {
2015 struct spi_master *master = dev_get_drvdata(dev);
2016 int ret;
2017
2018 ret = spi_master_suspend(master);
2019 if (ret)
2020 return ret;
2021
2022 return pm_runtime_force_suspend(dev);
2023 }
2024
2025 static int stm32_spi_resume(struct device *dev)
2026 {
2027 struct spi_master *master = dev_get_drvdata(dev);
2028 struct stm32_spi *spi = spi_master_get_devdata(master);
2029 int ret;
2030
2031 ret = pm_runtime_force_resume(dev);
2032 if (ret)
2033 return ret;
2034
2035 ret = spi_master_resume(master);
2036 if (ret)
2037 clk_disable_unprepare(spi->clk);
2038
2039 return ret;
2040 }
2041 #endif
2042
2043 static const struct dev_pm_ops stm32_spi_pm_ops = {
2044 SET_SYSTEM_SLEEP_PM_OPS(stm32_spi_suspend, stm32_spi_resume)
2045 SET_RUNTIME_PM_OPS(stm32_spi_runtime_suspend,
2046 stm32_spi_runtime_resume, NULL)
2047 };
2048
2049 static struct platform_driver stm32_spi_driver = {
2050 .probe = stm32_spi_probe,
2051 .remove = stm32_spi_remove,
2052 .driver = {
2053 .name = DRIVER_NAME,
2054 .pm = &stm32_spi_pm_ops,
2055 .of_match_table = stm32_spi_of_match,
2056 },
2057 };
2058
2059 module_platform_driver(stm32_spi_driver);
2060
2061 MODULE_ALIAS("platform:" DRIVER_NAME);
2062 MODULE_DESCRIPTION("STMicroelectronics STM32 SPI Controller driver");
2063 MODULE_AUTHOR("Amelie Delaunay <amelie.delaunay@st.com>");
2064 MODULE_LICENSE("GPL v2");