1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22#include <linux/clk.h>
23#include <linux/delay.h>
24#include <linux/dmaengine.h>
25#include <linux/dma-mapping.h>
26#include <linux/err.h>
27#include <linux/interrupt.h>
28#include <linux/io.h>
29#include <linux/i2c.h>
30#include <linux/kernel.h>
31#include <linux/module.h>
32#include <linux/of_device.h>
33#include <linux/platform_device.h>
34#include <linux/pm_runtime.h>
35#include <linux/slab.h>
36
37
38#define ICSCR 0x00
39#define ICMCR 0x04
40#define ICSSR 0x08
41#define ICMSR 0x0C
42#define ICSIER 0x10
43#define ICMIER 0x14
44#define ICCCR 0x18
45#define ICSAR 0x1C
46#define ICMAR 0x20
47#define ICRXTX 0x24
48#define ICDMAER 0x3c
49#define ICFBSCR 0x38
50
51
52#define SDBS (1 << 3)
53#define SIE (1 << 2)
54#define GCAE (1 << 1)
55#define FNA (1 << 0)
56
57
58#define MDBS (1 << 7)
59#define FSCL (1 << 6)
60#define FSDA (1 << 5)
61#define OBPC (1 << 4)
62#define MIE (1 << 3)
63#define TSBE (1 << 2)
64#define FSB (1 << 1)
65#define ESG (1 << 0)
66
67
68#define GCAR (1 << 6)
69#define STM (1 << 5)
70#define SSR (1 << 4)
71#define SDE (1 << 3)
72#define SDT (1 << 2)
73#define SDR (1 << 1)
74#define SAR (1 << 0)
75
76
77#define MNR (1 << 6)
78#define MAL (1 << 5)
79#define MST (1 << 4)
80#define MDE (1 << 3)
81#define MDT (1 << 2)
82#define MDR (1 << 1)
83#define MAT (1 << 0)
84
85
86#define RSDMAE (1 << 3)
87#define TSDMAE (1 << 2)
88#define RMDMAE (1 << 1)
89#define TMDMAE (1 << 0)
90
91
92#define TCYC06 0x04
93#define TCYC17 0x0f
94
95
96#define RCAR_BUS_PHASE_START (MDBS | MIE | ESG)
97#define RCAR_BUS_PHASE_DATA (MDBS | MIE)
98#define RCAR_BUS_MASK_DATA (~(ESG | FSB) & 0xFF)
99#define RCAR_BUS_PHASE_STOP (MDBS | MIE | FSB)
100
101#define RCAR_IRQ_SEND (MNR | MAL | MST | MAT | MDE)
102#define RCAR_IRQ_RECV (MNR | MAL | MST | MAT | MDR)
103#define RCAR_IRQ_STOP (MST)
104
105#define RCAR_IRQ_ACK_SEND (~(MAT | MDE) & 0x7F)
106#define RCAR_IRQ_ACK_RECV (~(MAT | MDR) & 0x7F)
107
108#define ID_LAST_MSG (1 << 0)
109#define ID_FIRST_MSG (1 << 1)
110#define ID_DONE (1 << 2)
111#define ID_ARBLOST (1 << 3)
112#define ID_NACK (1 << 4)
113
114#define ID_P_PM_BLOCKED (1 << 31)
115#define ID_P_MASK ID_P_PM_BLOCKED
116
117enum rcar_i2c_type {
118 I2C_RCAR_GEN1,
119 I2C_RCAR_GEN2,
120 I2C_RCAR_GEN3,
121};
122
123struct rcar_i2c_priv {
124 void __iomem *io;
125 struct i2c_adapter adap;
126 struct i2c_msg *msg;
127 int msgs_left;
128 struct clk *clk;
129
130 wait_queue_head_t wait;
131
132 int pos;
133 u32 icccr;
134 u32 flags;
135 u8 recovery_icmcr;
136 enum rcar_i2c_type devtype;
137 struct i2c_client *slave;
138
139 struct resource *res;
140 struct dma_chan *dma_tx;
141 struct dma_chan *dma_rx;
142 struct scatterlist sg;
143 enum dma_data_direction dma_direction;
144};
145
146#define rcar_i2c_priv_to_dev(p) ((p)->adap.dev.parent)
147#define rcar_i2c_is_recv(p) ((p)->msg->flags & I2C_M_RD)
148
149#define LOOP_TIMEOUT 1024
150
151
152static void rcar_i2c_write(struct rcar_i2c_priv *priv, int reg, u32 val)
153{
154 writel(val, priv->io + reg);
155}
156
157static u32 rcar_i2c_read(struct rcar_i2c_priv *priv, int reg)
158{
159 return readl(priv->io + reg);
160}
161
162static int rcar_i2c_get_scl(struct i2c_adapter *adap)
163{
164 struct rcar_i2c_priv *priv = i2c_get_adapdata(adap);
165
166 return !!(rcar_i2c_read(priv, ICMCR) & FSCL);
167
168};
169
170static void rcar_i2c_set_scl(struct i2c_adapter *adap, int val)
171{
172 struct rcar_i2c_priv *priv = i2c_get_adapdata(adap);
173
174 if (val)
175 priv->recovery_icmcr |= FSCL;
176 else
177 priv->recovery_icmcr &= ~FSCL;
178
179 rcar_i2c_write(priv, ICMCR, priv->recovery_icmcr);
180};
181
182
183
184static void rcar_i2c_set_sda(struct i2c_adapter *adap, int val)
185{
186 struct rcar_i2c_priv *priv = i2c_get_adapdata(adap);
187
188 if (val)
189 priv->recovery_icmcr |= FSDA;
190 else
191 priv->recovery_icmcr &= ~FSDA;
192
193 rcar_i2c_write(priv, ICMCR, priv->recovery_icmcr);
194};
195
196static struct i2c_bus_recovery_info rcar_i2c_bri = {
197 .get_scl = rcar_i2c_get_scl,
198 .set_scl = rcar_i2c_set_scl,
199 .set_sda = rcar_i2c_set_sda,
200 .recover_bus = i2c_generic_scl_recovery,
201};
202static void rcar_i2c_init(struct rcar_i2c_priv *priv)
203{
204
205 rcar_i2c_write(priv, ICMIER, 0);
206 rcar_i2c_write(priv, ICMCR, MDBS);
207 rcar_i2c_write(priv, ICMSR, 0);
208
209 rcar_i2c_write(priv, ICCCR, priv->icccr);
210}
211
212static int rcar_i2c_bus_barrier(struct rcar_i2c_priv *priv)
213{
214 int i, ret;
215
216 for (i = 0; i < LOOP_TIMEOUT; i++) {
217
218 if (!(rcar_i2c_read(priv, ICMCR) & FSDA))
219 return 0;
220 udelay(1);
221 }
222
223
224 priv->recovery_icmcr = MDBS | OBPC | FSDA | FSCL;
225 ret = i2c_recover_bus(&priv->adap);
226
227
228 if (ret == 0)
229 ret = (rcar_i2c_read(priv, ICMCR) & FSDA) ? -EBUSY : 0;
230
231 return ret;
232}
233
234static int rcar_i2c_clock_calculate(struct rcar_i2c_priv *priv, struct i2c_timings *t)
235{
236 u32 scgd, cdf, round, ick, sum, scl, cdf_width;
237 unsigned long rate;
238 struct device *dev = rcar_i2c_priv_to_dev(priv);
239
240
241 t->bus_freq_hz = t->bus_freq_hz ?: 100000;
242 t->scl_fall_ns = t->scl_fall_ns ?: 35;
243 t->scl_rise_ns = t->scl_rise_ns ?: 200;
244 t->scl_int_delay_ns = t->scl_int_delay_ns ?: 50;
245
246 switch (priv->devtype) {
247 case I2C_RCAR_GEN1:
248 cdf_width = 2;
249 break;
250 case I2C_RCAR_GEN2:
251 case I2C_RCAR_GEN3:
252 cdf_width = 3;
253 break;
254 default:
255 dev_err(dev, "device type error\n");
256 return -EIO;
257 }
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274 rate = clk_get_rate(priv->clk);
275 cdf = rate / 20000000;
276 if (cdf >= 1U << cdf_width) {
277 dev_err(dev, "Input clock %lu too high\n", rate);
278 return -EIO;
279 }
280 ick = rate / (cdf + 1);
281
282
283
284
285
286
287
288
289
290 sum = t->scl_fall_ns + t->scl_rise_ns + t->scl_int_delay_ns;
291 round = (ick + 500000) / 1000000 * sum;
292 round = (round + 500) / 1000;
293
294
295
296
297
298
299
300
301
302
303
304
305
306 for (scgd = 0; scgd < 0x40; scgd++) {
307 scl = ick / (20 + (scgd * 8) + round);
308 if (scl <= t->bus_freq_hz)
309 goto scgd_find;
310 }
311 dev_err(dev, "it is impossible to calculate best SCL\n");
312 return -EIO;
313
314scgd_find:
315 dev_dbg(dev, "clk %d/%d(%lu), round %u, CDF:0x%x, SCGD: 0x%x\n",
316 scl, t->bus_freq_hz, clk_get_rate(priv->clk), round, cdf, scgd);
317
318
319 priv->icccr = scgd << cdf_width | cdf;
320
321 return 0;
322}
323
324static void rcar_i2c_prepare_msg(struct rcar_i2c_priv *priv)
325{
326 int read = !!rcar_i2c_is_recv(priv);
327
328 priv->pos = 0;
329 if (priv->msgs_left == 1)
330 priv->flags |= ID_LAST_MSG;
331
332 rcar_i2c_write(priv, ICMAR, (priv->msg->addr << 1) | read);
333
334
335
336
337
338 if (priv->flags & ID_FIRST_MSG) {
339 rcar_i2c_write(priv, ICMSR, 0);
340 rcar_i2c_write(priv, ICMCR, RCAR_BUS_PHASE_START);
341 } else {
342 rcar_i2c_write(priv, ICMCR, RCAR_BUS_PHASE_START);
343 rcar_i2c_write(priv, ICMSR, 0);
344 }
345 rcar_i2c_write(priv, ICMIER, read ? RCAR_IRQ_RECV : RCAR_IRQ_SEND);
346}
347
348static void rcar_i2c_next_msg(struct rcar_i2c_priv *priv)
349{
350 priv->msg++;
351 priv->msgs_left--;
352 priv->flags &= ID_P_MASK;
353 rcar_i2c_prepare_msg(priv);
354}
355
356
357
358
359static void rcar_i2c_dma_unmap(struct rcar_i2c_priv *priv)
360{
361 struct dma_chan *chan = priv->dma_direction == DMA_FROM_DEVICE
362 ? priv->dma_rx : priv->dma_tx;
363
364
365 rcar_i2c_write(priv, ICDMAER, 0);
366
367
368 rcar_i2c_write(priv, ICFBSCR, TCYC06);
369
370 dma_unmap_single(chan->device->dev, sg_dma_address(&priv->sg),
371 sg_dma_len(&priv->sg), priv->dma_direction);
372
373 priv->dma_direction = DMA_NONE;
374}
375
376static void rcar_i2c_cleanup_dma(struct rcar_i2c_priv *priv)
377{
378 if (priv->dma_direction == DMA_NONE)
379 return;
380 else if (priv->dma_direction == DMA_FROM_DEVICE)
381 dmaengine_terminate_all(priv->dma_rx);
382 else if (priv->dma_direction == DMA_TO_DEVICE)
383 dmaengine_terminate_all(priv->dma_tx);
384
385 rcar_i2c_dma_unmap(priv);
386}
387
388static void rcar_i2c_dma_callback(void *data)
389{
390 struct rcar_i2c_priv *priv = data;
391
392 priv->pos += sg_dma_len(&priv->sg);
393
394 rcar_i2c_dma_unmap(priv);
395}
396
397static void rcar_i2c_dma(struct rcar_i2c_priv *priv)
398{
399 struct device *dev = rcar_i2c_priv_to_dev(priv);
400 struct i2c_msg *msg = priv->msg;
401 bool read = msg->flags & I2C_M_RD;
402 enum dma_data_direction dir = read ? DMA_FROM_DEVICE : DMA_TO_DEVICE;
403 struct dma_chan *chan = read ? priv->dma_rx : priv->dma_tx;
404 struct dma_async_tx_descriptor *txdesc;
405 dma_addr_t dma_addr;
406 dma_cookie_t cookie;
407 unsigned char *buf;
408 int len;
409
410
411 if (IS_ERR(chan) || msg->len < 8 || !(msg->flags & I2C_M_DMA_SAFE))
412 return;
413
414 if (read) {
415
416
417
418
419 buf = priv->msg->buf;
420 len = priv->msg->len - 2;
421 } else {
422
423
424
425 buf = priv->msg->buf + 1;
426 len = priv->msg->len - 1;
427 }
428
429 dma_addr = dma_map_single(chan->device->dev, buf, len, dir);
430 if (dma_mapping_error(chan->device->dev, dma_addr)) {
431 dev_dbg(dev, "dma map failed, using PIO\n");
432 return;
433 }
434
435 sg_dma_len(&priv->sg) = len;
436 sg_dma_address(&priv->sg) = dma_addr;
437
438 priv->dma_direction = dir;
439
440 txdesc = dmaengine_prep_slave_sg(chan, &priv->sg, 1,
441 read ? DMA_DEV_TO_MEM : DMA_MEM_TO_DEV,
442 DMA_PREP_INTERRUPT | DMA_CTRL_ACK);
443 if (!txdesc) {
444 dev_dbg(dev, "dma prep slave sg failed, using PIO\n");
445 rcar_i2c_cleanup_dma(priv);
446 return;
447 }
448
449 txdesc->callback = rcar_i2c_dma_callback;
450 txdesc->callback_param = priv;
451
452 cookie = dmaengine_submit(txdesc);
453 if (dma_submit_error(cookie)) {
454 dev_dbg(dev, "submitting dma failed, using PIO\n");
455 rcar_i2c_cleanup_dma(priv);
456 return;
457 }
458
459
460 rcar_i2c_write(priv, ICFBSCR, TCYC17);
461
462
463 if (read)
464 rcar_i2c_write(priv, ICDMAER, RMDMAE);
465 else
466 rcar_i2c_write(priv, ICDMAER, TMDMAE);
467
468 dma_async_issue_pending(chan);
469}
470
471static void rcar_i2c_irq_send(struct rcar_i2c_priv *priv, u32 msr)
472{
473 struct i2c_msg *msg = priv->msg;
474
475
476 if (!(msr & MDE))
477 return;
478
479 if (priv->pos < msg->len) {
480
481
482
483
484
485
486
487 rcar_i2c_write(priv, ICRXTX, msg->buf[priv->pos]);
488 priv->pos++;
489
490
491
492
493
494 if (msr & MAT)
495 rcar_i2c_dma(priv);
496 } else {
497
498
499
500
501
502
503
504
505 if (priv->flags & ID_LAST_MSG) {
506
507
508
509
510
511 rcar_i2c_write(priv, ICMCR, RCAR_BUS_PHASE_STOP);
512 } else {
513 rcar_i2c_next_msg(priv);
514 return;
515 }
516 }
517
518 rcar_i2c_write(priv, ICMSR, RCAR_IRQ_ACK_SEND);
519}
520
521static void rcar_i2c_irq_recv(struct rcar_i2c_priv *priv, u32 msr)
522{
523 struct i2c_msg *msg = priv->msg;
524
525
526 if (!(msr & MDR))
527 return;
528
529 if (msr & MAT) {
530
531
532
533
534 rcar_i2c_dma(priv);
535 } else if (priv->pos < msg->len) {
536
537 msg->buf[priv->pos] = rcar_i2c_read(priv, ICRXTX);
538 priv->pos++;
539 }
540
541
542
543
544
545
546 if (priv->pos + 1 >= msg->len)
547 rcar_i2c_write(priv, ICMCR, RCAR_BUS_PHASE_STOP);
548
549 if (priv->pos == msg->len && !(priv->flags & ID_LAST_MSG))
550 rcar_i2c_next_msg(priv);
551 else
552 rcar_i2c_write(priv, ICMSR, RCAR_IRQ_ACK_RECV);
553}
554
555static bool rcar_i2c_slave_irq(struct rcar_i2c_priv *priv)
556{
557 u32 ssr_raw, ssr_filtered;
558 u8 value;
559
560 ssr_raw = rcar_i2c_read(priv, ICSSR) & 0xff;
561 ssr_filtered = ssr_raw & rcar_i2c_read(priv, ICSIER);
562
563 if (!ssr_filtered)
564 return false;
565
566
567 if (ssr_filtered & SAR) {
568
569 if (ssr_raw & STM) {
570 i2c_slave_event(priv->slave, I2C_SLAVE_READ_REQUESTED, &value);
571 rcar_i2c_write(priv, ICRXTX, value);
572 rcar_i2c_write(priv, ICSIER, SDE | SSR | SAR);
573 } else {
574 i2c_slave_event(priv->slave, I2C_SLAVE_WRITE_REQUESTED, &value);
575 rcar_i2c_read(priv, ICRXTX);
576 rcar_i2c_write(priv, ICSIER, SDR | SSR | SAR);
577 }
578
579 rcar_i2c_write(priv, ICSSR, ~SAR & 0xff);
580 }
581
582
583 if (ssr_filtered & SSR) {
584 i2c_slave_event(priv->slave, I2C_SLAVE_STOP, &value);
585 rcar_i2c_write(priv, ICSIER, SAR | SSR);
586 rcar_i2c_write(priv, ICSSR, ~SSR & 0xff);
587 }
588
589
590 if (ssr_filtered & SDR) {
591 int ret;
592
593 value = rcar_i2c_read(priv, ICRXTX);
594 ret = i2c_slave_event(priv->slave, I2C_SLAVE_WRITE_RECEIVED, &value);
595
596 rcar_i2c_write(priv, ICSCR, SIE | SDBS | (ret < 0 ? FNA : 0));
597 rcar_i2c_write(priv, ICSSR, ~SDR & 0xff);
598 }
599
600
601 if (ssr_filtered & SDE) {
602 i2c_slave_event(priv->slave, I2C_SLAVE_READ_PROCESSED, &value);
603 rcar_i2c_write(priv, ICRXTX, value);
604 rcar_i2c_write(priv, ICSSR, ~SDE & 0xff);
605 }
606
607 return true;
608}
609
610static irqreturn_t rcar_i2c_irq(int irq, void *ptr)
611{
612 struct rcar_i2c_priv *priv = ptr;
613 u32 msr, val;
614
615
616 val = rcar_i2c_read(priv, ICMCR);
617 rcar_i2c_write(priv, ICMCR, val & RCAR_BUS_MASK_DATA);
618
619 msr = rcar_i2c_read(priv, ICMSR);
620
621
622 msr &= rcar_i2c_read(priv, ICMIER);
623 if (!msr) {
624 if (rcar_i2c_slave_irq(priv))
625 return IRQ_HANDLED;
626
627 return IRQ_NONE;
628 }
629
630
631 if (msr & MAL) {
632 priv->flags |= ID_DONE | ID_ARBLOST;
633 goto out;
634 }
635
636
637 if (msr & MNR) {
638
639 rcar_i2c_write(priv, ICMIER, RCAR_IRQ_STOP);
640 priv->flags |= ID_NACK;
641 goto out;
642 }
643
644
645 if (msr & MST) {
646 priv->msgs_left--;
647 priv->flags |= ID_DONE;
648 goto out;
649 }
650
651 if (rcar_i2c_is_recv(priv))
652 rcar_i2c_irq_recv(priv, msr);
653 else
654 rcar_i2c_irq_send(priv, msr);
655
656out:
657 if (priv->flags & ID_DONE) {
658 rcar_i2c_write(priv, ICMIER, 0);
659 rcar_i2c_write(priv, ICMSR, 0);
660 wake_up(&priv->wait);
661 }
662
663 return IRQ_HANDLED;
664}
665
666static struct dma_chan *rcar_i2c_request_dma_chan(struct device *dev,
667 enum dma_transfer_direction dir,
668 dma_addr_t port_addr)
669{
670 struct dma_chan *chan;
671 struct dma_slave_config cfg;
672 char *chan_name = dir == DMA_MEM_TO_DEV ? "tx" : "rx";
673 int ret;
674
675 chan = dma_request_chan(dev, chan_name);
676 if (IS_ERR(chan)) {
677 dev_dbg(dev, "request_channel failed for %s (%ld)\n",
678 chan_name, PTR_ERR(chan));
679 return chan;
680 }
681
682 memset(&cfg, 0, sizeof(cfg));
683 cfg.direction = dir;
684 if (dir == DMA_MEM_TO_DEV) {
685 cfg.dst_addr = port_addr;
686 cfg.dst_addr_width = DMA_SLAVE_BUSWIDTH_1_BYTE;
687 } else {
688 cfg.src_addr = port_addr;
689 cfg.src_addr_width = DMA_SLAVE_BUSWIDTH_1_BYTE;
690 }
691
692 ret = dmaengine_slave_config(chan, &cfg);
693 if (ret) {
694 dev_dbg(dev, "slave_config failed for %s (%d)\n",
695 chan_name, ret);
696 dma_release_channel(chan);
697 return ERR_PTR(ret);
698 }
699
700 dev_dbg(dev, "got DMA channel for %s\n", chan_name);
701 return chan;
702}
703
704static void rcar_i2c_request_dma(struct rcar_i2c_priv *priv,
705 struct i2c_msg *msg)
706{
707 struct device *dev = rcar_i2c_priv_to_dev(priv);
708 bool read;
709 struct dma_chan *chan;
710 enum dma_transfer_direction dir;
711
712 read = msg->flags & I2C_M_RD;
713
714 chan = read ? priv->dma_rx : priv->dma_tx;
715 if (PTR_ERR(chan) != -EPROBE_DEFER)
716 return;
717
718 dir = read ? DMA_DEV_TO_MEM : DMA_MEM_TO_DEV;
719 chan = rcar_i2c_request_dma_chan(dev, dir, priv->res->start + ICRXTX);
720
721 if (read)
722 priv->dma_rx = chan;
723 else
724 priv->dma_tx = chan;
725}
726
727static void rcar_i2c_release_dma(struct rcar_i2c_priv *priv)
728{
729 if (!IS_ERR(priv->dma_tx)) {
730 dma_release_channel(priv->dma_tx);
731 priv->dma_tx = ERR_PTR(-EPROBE_DEFER);
732 }
733
734 if (!IS_ERR(priv->dma_rx)) {
735 dma_release_channel(priv->dma_rx);
736 priv->dma_rx = ERR_PTR(-EPROBE_DEFER);
737 }
738}
739
740static int rcar_i2c_master_xfer(struct i2c_adapter *adap,
741 struct i2c_msg *msgs,
742 int num)
743{
744 struct rcar_i2c_priv *priv = i2c_get_adapdata(adap);
745 struct device *dev = rcar_i2c_priv_to_dev(priv);
746 int i, ret;
747 long time_left;
748
749 pm_runtime_get_sync(dev);
750
751 rcar_i2c_init(priv);
752
753 ret = rcar_i2c_bus_barrier(priv);
754 if (ret < 0)
755 goto out;
756
757 for (i = 0; i < num; i++) {
758
759 if (msgs[i].len == 0) {
760 ret = -EOPNOTSUPP;
761 goto out;
762 }
763 rcar_i2c_request_dma(priv, msgs + i);
764 }
765
766
767 priv->msg = msgs;
768 priv->msgs_left = num;
769 priv->flags = (priv->flags & ID_P_MASK) | ID_FIRST_MSG;
770 rcar_i2c_prepare_msg(priv);
771
772 time_left = wait_event_timeout(priv->wait, priv->flags & ID_DONE,
773 num * adap->timeout);
774 if (!time_left) {
775 rcar_i2c_cleanup_dma(priv);
776 rcar_i2c_init(priv);
777 ret = -ETIMEDOUT;
778 } else if (priv->flags & ID_NACK) {
779 ret = -ENXIO;
780 } else if (priv->flags & ID_ARBLOST) {
781 ret = -EAGAIN;
782 } else {
783 ret = num - priv->msgs_left;
784 }
785out:
786 pm_runtime_put(dev);
787
788 if (ret < 0 && ret != -ENXIO)
789 dev_err(dev, "error %d : %x\n", ret, priv->flags);
790
791 return ret;
792}
793
794static int rcar_reg_slave(struct i2c_client *slave)
795{
796 struct rcar_i2c_priv *priv = i2c_get_adapdata(slave->adapter);
797
798 if (priv->slave)
799 return -EBUSY;
800
801 if (slave->flags & I2C_CLIENT_TEN)
802 return -EAFNOSUPPORT;
803
804
805 pm_runtime_get_sync(rcar_i2c_priv_to_dev(priv));
806
807 priv->slave = slave;
808 rcar_i2c_write(priv, ICSAR, slave->addr);
809 rcar_i2c_write(priv, ICSSR, 0);
810 rcar_i2c_write(priv, ICSIER, SAR | SSR);
811 rcar_i2c_write(priv, ICSCR, SIE | SDBS);
812
813 return 0;
814}
815
816static int rcar_unreg_slave(struct i2c_client *slave)
817{
818 struct rcar_i2c_priv *priv = i2c_get_adapdata(slave->adapter);
819
820 WARN_ON(!priv->slave);
821
822 rcar_i2c_write(priv, ICSIER, 0);
823 rcar_i2c_write(priv, ICSCR, 0);
824
825 priv->slave = NULL;
826
827 pm_runtime_put(rcar_i2c_priv_to_dev(priv));
828
829 return 0;
830}
831
832static u32 rcar_i2c_func(struct i2c_adapter *adap)
833{
834
835
836
837
838
839
840 return I2C_FUNC_I2C | I2C_FUNC_SLAVE |
841 (I2C_FUNC_SMBUS_EMUL & ~I2C_FUNC_SMBUS_QUICK);
842}
843
844static const struct i2c_algorithm rcar_i2c_algo = {
845 .master_xfer = rcar_i2c_master_xfer,
846 .functionality = rcar_i2c_func,
847 .reg_slave = rcar_reg_slave,
848 .unreg_slave = rcar_unreg_slave,
849};
850
851static const struct of_device_id rcar_i2c_dt_ids[] = {
852 { .compatible = "renesas,i2c-r8a7778", .data = (void *)I2C_RCAR_GEN1 },
853 { .compatible = "renesas,i2c-r8a7779", .data = (void *)I2C_RCAR_GEN1 },
854 { .compatible = "renesas,i2c-r8a7790", .data = (void *)I2C_RCAR_GEN2 },
855 { .compatible = "renesas,i2c-r8a7791", .data = (void *)I2C_RCAR_GEN2 },
856 { .compatible = "renesas,i2c-r8a7792", .data = (void *)I2C_RCAR_GEN2 },
857 { .compatible = "renesas,i2c-r8a7793", .data = (void *)I2C_RCAR_GEN2 },
858 { .compatible = "renesas,i2c-r8a7794", .data = (void *)I2C_RCAR_GEN2 },
859 { .compatible = "renesas,i2c-r8a7795", .data = (void *)I2C_RCAR_GEN3 },
860 { .compatible = "renesas,i2c-r8a7796", .data = (void *)I2C_RCAR_GEN3 },
861 { .compatible = "renesas,i2c-rcar", .data = (void *)I2C_RCAR_GEN1 },
862 { .compatible = "renesas,rcar-gen1-i2c", .data = (void *)I2C_RCAR_GEN1 },
863 { .compatible = "renesas,rcar-gen2-i2c", .data = (void *)I2C_RCAR_GEN2 },
864 { .compatible = "renesas,rcar-gen3-i2c", .data = (void *)I2C_RCAR_GEN3 },
865 {},
866};
867MODULE_DEVICE_TABLE(of, rcar_i2c_dt_ids);
868
869static int rcar_i2c_probe(struct platform_device *pdev)
870{
871 struct rcar_i2c_priv *priv;
872 struct i2c_adapter *adap;
873 struct device *dev = &pdev->dev;
874 struct i2c_timings i2c_t;
875 int irq, ret;
876
877 priv = devm_kzalloc(dev, sizeof(struct rcar_i2c_priv), GFP_KERNEL);
878 if (!priv)
879 return -ENOMEM;
880
881 priv->clk = devm_clk_get(dev, NULL);
882 if (IS_ERR(priv->clk)) {
883 dev_err(dev, "cannot get clock\n");
884 return PTR_ERR(priv->clk);
885 }
886
887 priv->res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
888
889 priv->io = devm_ioremap_resource(dev, priv->res);
890 if (IS_ERR(priv->io))
891 return PTR_ERR(priv->io);
892
893 priv->devtype = (enum rcar_i2c_type)of_device_get_match_data(dev);
894 init_waitqueue_head(&priv->wait);
895
896 adap = &priv->adap;
897 adap->nr = pdev->id;
898 adap->algo = &rcar_i2c_algo;
899 adap->class = I2C_CLASS_DEPRECATED;
900 adap->retries = 3;
901 adap->dev.parent = dev;
902 adap->dev.of_node = dev->of_node;
903 adap->bus_recovery_info = &rcar_i2c_bri;
904 i2c_set_adapdata(adap, priv);
905 strlcpy(adap->name, pdev->name, sizeof(adap->name));
906
907 i2c_parse_fw_timings(dev, &i2c_t, false);
908
909
910 sg_init_table(&priv->sg, 1);
911 priv->dma_direction = DMA_NONE;
912 priv->dma_rx = priv->dma_tx = ERR_PTR(-EPROBE_DEFER);
913
914
915 pm_runtime_enable(dev);
916 pm_runtime_get_sync(dev);
917 ret = rcar_i2c_clock_calculate(priv, &i2c_t);
918 if (ret < 0)
919 goto out_pm_put;
920
921
922 if (of_property_read_bool(dev->of_node, "multi-master"))
923 priv->flags |= ID_P_PM_BLOCKED;
924 else
925 pm_runtime_put(dev);
926
927
928 irq = platform_get_irq(pdev, 0);
929 ret = devm_request_irq(dev, irq, rcar_i2c_irq, 0, dev_name(dev), priv);
930 if (ret < 0) {
931 dev_err(dev, "cannot get irq %d\n", irq);
932 goto out_pm_disable;
933 }
934
935 platform_set_drvdata(pdev, priv);
936
937 ret = i2c_add_numbered_adapter(adap);
938 if (ret < 0)
939 goto out_pm_disable;
940
941 dev_info(dev, "probed\n");
942
943 return 0;
944
945 out_pm_put:
946 pm_runtime_put(dev);
947 out_pm_disable:
948 pm_runtime_disable(dev);
949 return ret;
950}
951
952static int rcar_i2c_remove(struct platform_device *pdev)
953{
954 struct rcar_i2c_priv *priv = platform_get_drvdata(pdev);
955 struct device *dev = &pdev->dev;
956
957 i2c_del_adapter(&priv->adap);
958 rcar_i2c_release_dma(priv);
959 if (priv->flags & ID_P_PM_BLOCKED)
960 pm_runtime_put(dev);
961 pm_runtime_disable(dev);
962
963 return 0;
964}
965
966static struct platform_driver rcar_i2c_driver = {
967 .driver = {
968 .name = "i2c-rcar",
969 .of_match_table = rcar_i2c_dt_ids,
970 },
971 .probe = rcar_i2c_probe,
972 .remove = rcar_i2c_remove,
973};
974
975module_platform_driver(rcar_i2c_driver);
976
977MODULE_LICENSE("GPL v2");
978MODULE_DESCRIPTION("Renesas R-Car I2C bus driver");
979MODULE_AUTHOR("Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>");
980