Merge tag 'rproc-v6.6' of git://git.kernel.org/pub/scm/linux/kernel/git/remoteproc...
[linux-2.6-block.git] / drivers / spi / spi-rzv2m-csi.c
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
3  * Renesas RZ/V2M Clocked Serial Interface (CSI) driver
4  *
5  * Copyright (C) 2023 Renesas Electronics Corporation
6  */
7
8 #include <linux/bits.h>
9 #include <linux/clk.h>
10 #include <linux/count_zeros.h>
11 #include <linux/interrupt.h>
12 #include <linux/iopoll.h>
13 #include <linux/log2.h>
14 #include <linux/platform_device.h>
15 #include <linux/property.h>
16 #include <linux/reset.h>
17 #include <linux/spi/spi.h>
18 #include <linux/units.h>
19
20 /* Registers */
21 #define CSI_MODE                0x00    /* CSI mode control */
22 #define CSI_CLKSEL              0x04    /* CSI clock select */
23 #define CSI_CNT                 0x08    /* CSI control */
24 #define CSI_INT                 0x0C    /* CSI interrupt status */
25 #define CSI_IFIFOL              0x10    /* CSI receive FIFO level display */
26 #define CSI_OFIFOL              0x14    /* CSI transmit FIFO level display */
27 #define CSI_IFIFO               0x18    /* CSI receive window */
28 #define CSI_OFIFO               0x1C    /* CSI transmit window */
29 #define CSI_FIFOTRG             0x20    /* CSI FIFO trigger level */
30
31 /* CSI_MODE */
32 #define CSI_MODE_CSIE           BIT(7)
33 #define CSI_MODE_TRMD           BIT(6)
34 #define CSI_MODE_CCL            BIT(5)
35 #define CSI_MODE_DIR            BIT(4)
36 #define CSI_MODE_CSOT           BIT(0)
37
38 #define CSI_MODE_SETUP          0x00000040
39
40 /* CSI_CLKSEL */
41 #define CSI_CLKSEL_CKP          BIT(17)
42 #define CSI_CLKSEL_DAP          BIT(16)
43 #define CSI_CLKSEL_MODE         (CSI_CLKSEL_CKP|CSI_CLKSEL_DAP)
44 #define CSI_CLKSEL_SLAVE        BIT(15)
45 #define CSI_CLKSEL_CKS          GENMASK(14, 1)
46
47 /* CSI_CNT */
48 #define CSI_CNT_CSIRST          BIT(28)
49 #define CSI_CNT_R_TRGEN         BIT(19)
50 #define CSI_CNT_UNDER_E         BIT(13)
51 #define CSI_CNT_OVERF_E         BIT(12)
52 #define CSI_CNT_TREND_E         BIT(9)
53 #define CSI_CNT_CSIEND_E        BIT(8)
54 #define CSI_CNT_T_TRGR_E        BIT(4)
55 #define CSI_CNT_R_TRGR_E        BIT(0)
56
57 /* CSI_INT */
58 #define CSI_INT_UNDER           BIT(13)
59 #define CSI_INT_OVERF           BIT(12)
60 #define CSI_INT_TREND           BIT(9)
61 #define CSI_INT_CSIEND          BIT(8)
62 #define CSI_INT_T_TRGR          BIT(4)
63 #define CSI_INT_R_TRGR          BIT(0)
64
65 /* CSI_FIFOTRG */
66 #define CSI_FIFOTRG_R_TRG       GENMASK(2, 0)
67
68 #define CSI_FIFO_SIZE_BYTES     32U
69 #define CSI_FIFO_HALF_SIZE      16U
70 #define CSI_EN_DIS_TIMEOUT_US   100
71 /*
72  * Clock "csiclk" gets divided by 2 * CSI_CLKSEL_CKS in order to generate the
73  * serial clock (output from master), with CSI_CLKSEL_CKS ranging from 0x1 (that
74  * means "csiclk" is divided by 2) to 0x3FFF ("csiclk" is divided by 32766).
75  */
76 #define CSI_CKS_MAX             GENMASK(13, 0)
77
78 #define UNDERRUN_ERROR          BIT(0)
79 #define OVERFLOW_ERROR          BIT(1)
80 #define TX_TIMEOUT_ERROR        BIT(2)
81 #define RX_TIMEOUT_ERROR        BIT(3)
82
83 #define CSI_MAX_SPI_SCKO        (8 * HZ_PER_MHZ)
84
85 struct rzv2m_csi_priv {
86         void __iomem *base;
87         struct clk *csiclk;
88         struct clk *pclk;
89         struct device *dev;
90         struct spi_controller *controller;
91         const void *txbuf;
92         void *rxbuf;
93         unsigned int buffer_len;
94         unsigned int bytes_sent;
95         unsigned int bytes_received;
96         unsigned int bytes_to_transfer;
97         unsigned int words_to_transfer;
98         unsigned int bytes_per_word;
99         wait_queue_head_t wait;
100         u32 errors;
101         u32 status;
102 };
103
104 static void rzv2m_csi_reg_write_bit(const struct rzv2m_csi_priv *csi,
105                                     int reg_offs, int bit_mask, u32 value)
106 {
107         int nr_zeros;
108         u32 tmp;
109
110         nr_zeros = count_trailing_zeros(bit_mask);
111         value <<= nr_zeros;
112
113         tmp = (readl(csi->base + reg_offs) & ~bit_mask) | value;
114         writel(tmp, csi->base + reg_offs);
115 }
116
117 static int rzv2m_csi_sw_reset(struct rzv2m_csi_priv *csi, int assert)
118 {
119         u32 reg;
120
121         rzv2m_csi_reg_write_bit(csi, CSI_CNT, CSI_CNT_CSIRST, assert);
122
123         if (!assert)
124                 return 0;
125
126         return readl_poll_timeout(csi->base + CSI_MODE, reg,
127                                   !(reg & CSI_MODE_CSOT), 0,
128                                   CSI_EN_DIS_TIMEOUT_US);
129 }
130
131 static int rzv2m_csi_start_stop_operation(const struct rzv2m_csi_priv *csi,
132                                           int enable, bool wait)
133 {
134         u32 reg;
135
136         rzv2m_csi_reg_write_bit(csi, CSI_MODE, CSI_MODE_CSIE, enable);
137
138         if (enable || !wait)
139                 return 0;
140
141         return readl_poll_timeout(csi->base + CSI_MODE, reg,
142                                   !(reg & CSI_MODE_CSOT), 0,
143                                   CSI_EN_DIS_TIMEOUT_US);
144 }
145
146 static int rzv2m_csi_fill_txfifo(struct rzv2m_csi_priv *csi)
147 {
148         unsigned int i;
149
150         if (readl(csi->base + CSI_OFIFOL))
151                 return -EIO;
152
153         if (csi->bytes_per_word == 2) {
154                 const u16 *buf = csi->txbuf;
155
156                 for (i = 0; i < csi->words_to_transfer; i++)
157                         writel(buf[i], csi->base + CSI_OFIFO);
158         } else {
159                 const u8 *buf = csi->txbuf;
160
161                 for (i = 0; i < csi->words_to_transfer; i++)
162                         writel(buf[i], csi->base + CSI_OFIFO);
163         }
164
165         csi->txbuf += csi->bytes_to_transfer;
166         csi->bytes_sent += csi->bytes_to_transfer;
167
168         return 0;
169 }
170
171 static int rzv2m_csi_read_rxfifo(struct rzv2m_csi_priv *csi)
172 {
173         unsigned int i;
174
175         if (readl(csi->base + CSI_IFIFOL) != csi->bytes_to_transfer)
176                 return -EIO;
177
178         if (csi->bytes_per_word == 2) {
179                 u16 *buf = csi->rxbuf;
180
181                 for (i = 0; i < csi->words_to_transfer; i++)
182                         buf[i] = (u16)readl(csi->base + CSI_IFIFO);
183         } else {
184                 u8 *buf = csi->rxbuf;
185
186                 for (i = 0; i < csi->words_to_transfer; i++)
187                         buf[i] = (u8)readl(csi->base + CSI_IFIFO);
188         }
189
190         csi->rxbuf += csi->bytes_to_transfer;
191         csi->bytes_received += csi->bytes_to_transfer;
192
193         return 0;
194 }
195
196 static inline void rzv2m_csi_calc_current_transfer(struct rzv2m_csi_priv *csi)
197 {
198         unsigned int bytes_transferred = max(csi->bytes_received, csi->bytes_sent);
199         unsigned int bytes_remaining = csi->buffer_len - bytes_transferred;
200         unsigned int to_transfer;
201
202         if (csi->txbuf)
203                 /*
204                  * Leaving a little bit of headroom in the FIFOs makes it very
205                  * hard to raise an overflow error (which is only possible
206                  * when IP transmits and receives at the same time).
207                  */
208                 to_transfer = min(CSI_FIFO_HALF_SIZE, bytes_remaining);
209         else
210                 to_transfer = min(CSI_FIFO_SIZE_BYTES, bytes_remaining);
211
212         if (csi->bytes_per_word == 2)
213                 to_transfer >>= 1;
214
215         /*
216          * We can only choose a trigger level from a predefined set of values.
217          * This will pick a value that is the greatest possible integer that's
218          * less than or equal to the number of bytes we need to transfer.
219          * This may result in multiple smaller transfers.
220          */
221         csi->words_to_transfer = rounddown_pow_of_two(to_transfer);
222
223         if (csi->bytes_per_word == 2)
224                 csi->bytes_to_transfer = csi->words_to_transfer << 1;
225         else
226                 csi->bytes_to_transfer = csi->words_to_transfer;
227 }
228
229 static inline void rzv2m_csi_set_rx_fifo_trigger_level(struct rzv2m_csi_priv *csi)
230 {
231         rzv2m_csi_reg_write_bit(csi, CSI_FIFOTRG, CSI_FIFOTRG_R_TRG,
232                                 ilog2(csi->words_to_transfer));
233 }
234
235 static inline void rzv2m_csi_enable_rx_trigger(struct rzv2m_csi_priv *csi,
236                                                bool enable)
237 {
238         rzv2m_csi_reg_write_bit(csi, CSI_CNT, CSI_CNT_R_TRGEN, enable);
239 }
240
241 static void rzv2m_csi_disable_irqs(const struct rzv2m_csi_priv *csi,
242                                    u32 enable_bits)
243 {
244         u32 cnt = readl(csi->base + CSI_CNT);
245
246         writel(cnt & ~enable_bits, csi->base + CSI_CNT);
247 }
248
249 static void rzv2m_csi_disable_all_irqs(struct rzv2m_csi_priv *csi)
250 {
251         rzv2m_csi_disable_irqs(csi, CSI_CNT_R_TRGR_E | CSI_CNT_T_TRGR_E |
252                                CSI_CNT_CSIEND_E | CSI_CNT_TREND_E |
253                                CSI_CNT_OVERF_E | CSI_CNT_UNDER_E);
254 }
255
256 static inline void rzv2m_csi_clear_irqs(struct rzv2m_csi_priv *csi, u32 irqs)
257 {
258         writel(irqs, csi->base + CSI_INT);
259 }
260
261 static void rzv2m_csi_clear_all_irqs(struct rzv2m_csi_priv *csi)
262 {
263         rzv2m_csi_clear_irqs(csi, CSI_INT_UNDER | CSI_INT_OVERF |
264                              CSI_INT_TREND | CSI_INT_CSIEND |  CSI_INT_T_TRGR |
265                              CSI_INT_R_TRGR);
266 }
267
268 static void rzv2m_csi_enable_irqs(struct rzv2m_csi_priv *csi, u32 enable_bits)
269 {
270         u32 cnt = readl(csi->base + CSI_CNT);
271
272         writel(cnt | enable_bits, csi->base + CSI_CNT);
273 }
274
275 static int rzv2m_csi_wait_for_interrupt(struct rzv2m_csi_priv *csi,
276                                         u32 wait_mask, u32 enable_bits)
277 {
278         int ret;
279
280         rzv2m_csi_enable_irqs(csi, enable_bits);
281
282         ret = wait_event_timeout(csi->wait,
283                                  ((csi->status & wait_mask) == wait_mask) ||
284                                  csi->errors, HZ);
285
286         rzv2m_csi_disable_irqs(csi, enable_bits);
287
288         if (csi->errors)
289                 return -EIO;
290
291         if (!ret)
292                 return -ETIMEDOUT;
293
294         return 0;
295 }
296
297 static int rzv2m_csi_wait_for_tx_empty(struct rzv2m_csi_priv *csi)
298 {
299         int ret;
300
301         if (readl(csi->base + CSI_OFIFOL) == 0)
302                 return 0;
303
304         ret = rzv2m_csi_wait_for_interrupt(csi, CSI_INT_TREND, CSI_CNT_TREND_E);
305         if (ret == -ETIMEDOUT)
306                 csi->errors |= TX_TIMEOUT_ERROR;
307
308         return ret;
309 }
310
311 static inline int rzv2m_csi_wait_for_rx_ready(struct rzv2m_csi_priv *csi)
312 {
313         int ret;
314
315         if (readl(csi->base + CSI_IFIFOL) == csi->bytes_to_transfer)
316                 return 0;
317
318         ret = rzv2m_csi_wait_for_interrupt(csi, CSI_INT_R_TRGR,
319                                            CSI_CNT_R_TRGR_E);
320         if (ret == -ETIMEDOUT)
321                 csi->errors |= RX_TIMEOUT_ERROR;
322
323         return ret;
324 }
325
326 static irqreturn_t rzv2m_csi_irq_handler(int irq, void *data)
327 {
328         struct rzv2m_csi_priv *csi = data;
329
330         csi->status = readl(csi->base + CSI_INT);
331         rzv2m_csi_disable_irqs(csi, csi->status);
332
333         if (csi->status & CSI_INT_OVERF)
334                 csi->errors |= OVERFLOW_ERROR;
335         if (csi->status & CSI_INT_UNDER)
336                 csi->errors |= UNDERRUN_ERROR;
337
338         wake_up(&csi->wait);
339
340         return IRQ_HANDLED;
341 }
342
343 static void rzv2m_csi_setup_clock(struct rzv2m_csi_priv *csi, u32 spi_hz)
344 {
345         unsigned long csiclk_rate = clk_get_rate(csi->csiclk);
346         unsigned long pclk_rate = clk_get_rate(csi->pclk);
347         unsigned long csiclk_rate_limit = pclk_rate >> 1;
348         u32 cks;
349
350         /*
351          * There is a restriction on the frequency of CSICLK, it has to be <=
352          * PCLK / 2.
353          */
354         if (csiclk_rate > csiclk_rate_limit) {
355                 clk_set_rate(csi->csiclk, csiclk_rate >> 1);
356                 csiclk_rate = clk_get_rate(csi->csiclk);
357         } else if ((csiclk_rate << 1) <= csiclk_rate_limit) {
358                 clk_set_rate(csi->csiclk, csiclk_rate << 1);
359                 csiclk_rate = clk_get_rate(csi->csiclk);
360         }
361
362         spi_hz = spi_hz > CSI_MAX_SPI_SCKO ? CSI_MAX_SPI_SCKO : spi_hz;
363
364         cks = DIV_ROUND_UP(csiclk_rate, spi_hz << 1);
365         if (cks > CSI_CKS_MAX)
366                 cks = CSI_CKS_MAX;
367
368         dev_dbg(csi->dev, "SPI clk rate is %ldHz\n", csiclk_rate / (cks << 1));
369
370         rzv2m_csi_reg_write_bit(csi, CSI_CLKSEL, CSI_CLKSEL_CKS, cks);
371 }
372
373 static void rzv2m_csi_setup_operating_mode(struct rzv2m_csi_priv *csi,
374                                            struct spi_transfer *t)
375 {
376         if (t->rx_buf && !t->tx_buf)
377                 /* Reception-only mode */
378                 rzv2m_csi_reg_write_bit(csi, CSI_MODE, CSI_MODE_TRMD, 0);
379         else
380                 /* Send and receive mode */
381                 rzv2m_csi_reg_write_bit(csi, CSI_MODE, CSI_MODE_TRMD, 1);
382
383         csi->bytes_per_word = t->bits_per_word / 8;
384         rzv2m_csi_reg_write_bit(csi, CSI_MODE, CSI_MODE_CCL,
385                                 csi->bytes_per_word == 2);
386 }
387
388 static int rzv2m_csi_setup(struct spi_device *spi)
389 {
390         struct rzv2m_csi_priv *csi = spi_controller_get_devdata(spi->controller);
391         int ret;
392
393         rzv2m_csi_sw_reset(csi, 0);
394
395         writel(CSI_MODE_SETUP, csi->base + CSI_MODE);
396
397         /* Setup clock polarity and phase timing */
398         rzv2m_csi_reg_write_bit(csi, CSI_CLKSEL, CSI_CLKSEL_MODE,
399                                 ~spi->mode & SPI_MODE_X_MASK);
400
401         /* Setup serial data order */
402         rzv2m_csi_reg_write_bit(csi, CSI_MODE, CSI_MODE_DIR,
403                                 !!(spi->mode & SPI_LSB_FIRST));
404
405         /* Set the operation mode as master */
406         rzv2m_csi_reg_write_bit(csi, CSI_CLKSEL, CSI_CLKSEL_SLAVE, 0);
407
408         /* Give the IP a SW reset */
409         ret = rzv2m_csi_sw_reset(csi, 1);
410         if (ret)
411                 return ret;
412         rzv2m_csi_sw_reset(csi, 0);
413
414         /*
415          * We need to enable the communication so that the clock will settle
416          * for the right polarity before enabling the CS.
417          */
418         rzv2m_csi_start_stop_operation(csi, 1, false);
419         udelay(10);
420         rzv2m_csi_start_stop_operation(csi, 0, false);
421
422         return 0;
423 }
424
425 static int rzv2m_csi_pio_transfer(struct rzv2m_csi_priv *csi)
426 {
427         bool tx_completed = !csi->txbuf;
428         bool rx_completed = !csi->rxbuf;
429         int ret = 0;
430
431         /* Make sure the TX FIFO is empty */
432         writel(0, csi->base + CSI_OFIFOL);
433
434         csi->bytes_sent = 0;
435         csi->bytes_received = 0;
436         csi->errors = 0;
437
438         rzv2m_csi_disable_all_irqs(csi);
439         rzv2m_csi_clear_all_irqs(csi);
440         rzv2m_csi_enable_rx_trigger(csi, true);
441
442         while (!tx_completed || !rx_completed) {
443                 /*
444                  * Decide how many words we are going to transfer during
445                  * this cycle (for both TX and RX), then set the RX FIFO trigger
446                  * level accordingly. No need to set a trigger level for the
447                  * TX FIFO, as this IP comes with an interrupt that fires when
448                  * the TX FIFO is empty.
449                  */
450                 rzv2m_csi_calc_current_transfer(csi);
451                 rzv2m_csi_set_rx_fifo_trigger_level(csi);
452
453                 rzv2m_csi_enable_irqs(csi, CSI_INT_OVERF | CSI_INT_UNDER);
454
455                 /* Make sure the RX FIFO is empty */
456                 writel(0, csi->base + CSI_IFIFOL);
457
458                 writel(readl(csi->base + CSI_INT), csi->base + CSI_INT);
459                 csi->status = 0;
460
461                 rzv2m_csi_start_stop_operation(csi, 1, false);
462
463                 /* TX */
464                 if (csi->txbuf) {
465                         ret = rzv2m_csi_fill_txfifo(csi);
466                         if (ret)
467                                 break;
468
469                         ret = rzv2m_csi_wait_for_tx_empty(csi);
470                         if (ret)
471                                 break;
472
473                         if (csi->bytes_sent == csi->buffer_len)
474                                 tx_completed = true;
475                 }
476
477                 /*
478                  * Make sure the RX FIFO contains the desired number of words.
479                  * We then either flush its content, or we copy it onto
480                  * csi->rxbuf.
481                  */
482                 ret = rzv2m_csi_wait_for_rx_ready(csi);
483                 if (ret)
484                         break;
485
486                 /* RX */
487                 if (csi->rxbuf) {
488                         rzv2m_csi_start_stop_operation(csi, 0, false);
489
490                         ret = rzv2m_csi_read_rxfifo(csi);
491                         if (ret)
492                                 break;
493
494                         if (csi->bytes_received == csi->buffer_len)
495                                 rx_completed = true;
496                 }
497
498                 ret = rzv2m_csi_start_stop_operation(csi, 0, true);
499                 if (ret)
500                         goto pio_quit;
501
502                 if (csi->errors) {
503                         ret = -EIO;
504                         goto pio_quit;
505                 }
506         }
507
508         rzv2m_csi_start_stop_operation(csi, 0, true);
509
510 pio_quit:
511         rzv2m_csi_disable_all_irqs(csi);
512         rzv2m_csi_enable_rx_trigger(csi, false);
513         rzv2m_csi_clear_all_irqs(csi);
514
515         return ret;
516 }
517
518 static int rzv2m_csi_transfer_one(struct spi_controller *controller,
519                                   struct spi_device *spi,
520                                   struct spi_transfer *transfer)
521 {
522         struct rzv2m_csi_priv *csi = spi_controller_get_devdata(controller);
523         struct device *dev = csi->dev;
524         int ret;
525
526         csi->txbuf = transfer->tx_buf;
527         csi->rxbuf = transfer->rx_buf;
528         csi->buffer_len = transfer->len;
529
530         rzv2m_csi_setup_operating_mode(csi, transfer);
531
532         rzv2m_csi_setup_clock(csi, transfer->speed_hz);
533
534         ret = rzv2m_csi_pio_transfer(csi);
535         if (ret) {
536                 if (csi->errors & UNDERRUN_ERROR)
537                         dev_err(dev, "Underrun error\n");
538                 if (csi->errors & OVERFLOW_ERROR)
539                         dev_err(dev, "Overflow error\n");
540                 if (csi->errors & TX_TIMEOUT_ERROR)
541                         dev_err(dev, "TX timeout error\n");
542                 if (csi->errors & RX_TIMEOUT_ERROR)
543                         dev_err(dev, "RX timeout error\n");
544         }
545
546         return ret;
547 }
548
549 static int rzv2m_csi_probe(struct platform_device *pdev)
550 {
551         struct spi_controller *controller;
552         struct device *dev = &pdev->dev;
553         struct rzv2m_csi_priv *csi;
554         struct reset_control *rstc;
555         int irq;
556         int ret;
557
558         controller = devm_spi_alloc_host(dev, sizeof(*csi));
559         if (!controller)
560                 return -ENOMEM;
561
562         csi = spi_controller_get_devdata(controller);
563         platform_set_drvdata(pdev, csi);
564
565         csi->dev = dev;
566         csi->controller = controller;
567
568         csi->base = devm_platform_ioremap_resource(pdev, 0);
569         if (IS_ERR(csi->base))
570                 return PTR_ERR(csi->base);
571
572         irq = platform_get_irq(pdev, 0);
573         if (irq < 0)
574                 return irq;
575
576         csi->csiclk = devm_clk_get(dev, "csiclk");
577         if (IS_ERR(csi->csiclk))
578                 return dev_err_probe(dev, PTR_ERR(csi->csiclk),
579                                      "could not get csiclk\n");
580
581         csi->pclk = devm_clk_get(dev, "pclk");
582         if (IS_ERR(csi->pclk))
583                 return dev_err_probe(dev, PTR_ERR(csi->pclk),
584                                      "could not get pclk\n");
585
586         rstc = devm_reset_control_get_shared(dev, NULL);
587         if (IS_ERR(rstc))
588                 return dev_err_probe(dev, PTR_ERR(rstc), "Missing reset ctrl\n");
589
590         init_waitqueue_head(&csi->wait);
591
592         controller->mode_bits = SPI_CPOL | SPI_CPHA | SPI_LSB_FIRST;
593         controller->bits_per_word_mask = SPI_BPW_MASK(16) | SPI_BPW_MASK(8);
594         controller->setup = rzv2m_csi_setup;
595         controller->transfer_one = rzv2m_csi_transfer_one;
596         controller->use_gpio_descriptors = true;
597
598         device_set_node(&controller->dev, dev_fwnode(dev));
599
600         ret = devm_request_irq(dev, irq, rzv2m_csi_irq_handler, 0,
601                                dev_name(dev), csi);
602         if (ret)
603                 return dev_err_probe(dev, ret, "cannot request IRQ\n");
604
605         /*
606          * The reset also affects other HW that is not under the control
607          * of Linux. Therefore, all we can do is make sure the reset is
608          * deasserted.
609          */
610         reset_control_deassert(rstc);
611
612         /* Make sure the IP is in SW reset state */
613         ret = rzv2m_csi_sw_reset(csi, 1);
614         if (ret)
615                 return ret;
616
617         ret = clk_prepare_enable(csi->csiclk);
618         if (ret)
619                 return dev_err_probe(dev, ret, "could not enable csiclk\n");
620
621         ret = spi_register_controller(controller);
622         if (ret) {
623                 clk_disable_unprepare(csi->csiclk);
624                 return dev_err_probe(dev, ret, "register controller failed\n");
625         }
626
627         return 0;
628 }
629
630 static void rzv2m_csi_remove(struct platform_device *pdev)
631 {
632         struct rzv2m_csi_priv *csi = platform_get_drvdata(pdev);
633
634         spi_unregister_controller(csi->controller);
635         rzv2m_csi_sw_reset(csi, 1);
636         clk_disable_unprepare(csi->csiclk);
637 }
638
639 static const struct of_device_id rzv2m_csi_match[] = {
640         { .compatible = "renesas,rzv2m-csi" },
641         { /* sentinel */ }
642 };
643 MODULE_DEVICE_TABLE(of, rzv2m_csi_match);
644
645 static struct platform_driver rzv2m_csi_drv = {
646         .probe = rzv2m_csi_probe,
647         .remove_new = rzv2m_csi_remove,
648         .driver = {
649                 .name = "rzv2m_csi",
650                 .of_match_table = rzv2m_csi_match,
651         },
652 };
653 module_platform_driver(rzv2m_csi_drv);
654
655 MODULE_LICENSE("GPL");
656 MODULE_AUTHOR("Fabrizio Castro <castro.fabrizio.jz@renesas.com>");
657 MODULE_DESCRIPTION("Clocked Serial Interface Driver");