1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19#include <linux/kernel.h>
20#include <linux/module.h>
21
22#include <linux/i2c.h>
23#include <linux/init.h>
24#include <linux/time.h>
25#include <linux/interrupt.h>
26#include <linux/delay.h>
27#include <linux/errno.h>
28#include <linux/err.h>
29#include <linux/platform_device.h>
30#include <linux/pm_runtime.h>
31#include <linux/clk.h>
32#include <linux/cpufreq.h>
33#include <linux/slab.h>
34#include <linux/io.h>
35#include <linux/of.h>
36#include <linux/of_gpio.h>
37#include <linux/pinctrl/consumer.h>
38#include <linux/mfd/syscon.h>
39#include <linux/regmap.h>
40
41#include <asm/irq.h>
42
43#include <linux/platform_data/i2c-s3c2410.h>
44
45
46
47#define S3C2410_IICCON 0x00
48#define S3C2410_IICSTAT 0x04
49#define S3C2410_IICADD 0x08
50#define S3C2410_IICDS 0x0C
51#define S3C2440_IICLC 0x10
52
53#define S3C2410_IICCON_ACKEN (1 << 7)
54#define S3C2410_IICCON_TXDIV_16 (0 << 6)
55#define S3C2410_IICCON_TXDIV_512 (1 << 6)
56#define S3C2410_IICCON_IRQEN (1 << 5)
57#define S3C2410_IICCON_IRQPEND (1 << 4)
58#define S3C2410_IICCON_SCALE(x) ((x) & 0xf)
59#define S3C2410_IICCON_SCALEMASK (0xf)
60
61#define S3C2410_IICSTAT_MASTER_RX (2 << 6)
62#define S3C2410_IICSTAT_MASTER_TX (3 << 6)
63#define S3C2410_IICSTAT_SLAVE_RX (0 << 6)
64#define S3C2410_IICSTAT_SLAVE_TX (1 << 6)
65#define S3C2410_IICSTAT_MODEMASK (3 << 6)
66
67#define S3C2410_IICSTAT_START (1 << 5)
68#define S3C2410_IICSTAT_BUSBUSY (1 << 5)
69#define S3C2410_IICSTAT_TXRXEN (1 << 4)
70#define S3C2410_IICSTAT_ARBITR (1 << 3)
71#define S3C2410_IICSTAT_ASSLAVE (1 << 2)
72#define S3C2410_IICSTAT_ADDR0 (1 << 1)
73#define S3C2410_IICSTAT_LASTBIT (1 << 0)
74
75#define S3C2410_IICLC_SDA_DELAY0 (0 << 0)
76#define S3C2410_IICLC_SDA_DELAY5 (1 << 0)
77#define S3C2410_IICLC_SDA_DELAY10 (2 << 0)
78#define S3C2410_IICLC_SDA_DELAY15 (3 << 0)
79#define S3C2410_IICLC_SDA_DELAY_MASK (3 << 0)
80
81#define S3C2410_IICLC_FILTER_ON (1 << 2)
82
83
84#define QUIRK_S3C2440 (1 << 0)
85#define QUIRK_HDMIPHY (1 << 1)
86#define QUIRK_NO_GPIO (1 << 2)
87#define QUIRK_POLL (1 << 3)
88
89
90#define S3C2410_IDLE_TIMEOUT 5000
91
92
93#define EXYNOS5_SYS_I2C_CFG 0x0234
94
95
96enum s3c24xx_i2c_state {
97 STATE_IDLE,
98 STATE_START,
99 STATE_READ,
100 STATE_WRITE,
101 STATE_STOP
102};
103
104struct s3c24xx_i2c {
105 wait_queue_head_t wait;
106 kernel_ulong_t quirks;
107 unsigned int suspended:1;
108
109 struct i2c_msg *msg;
110 unsigned int msg_num;
111 unsigned int msg_idx;
112 unsigned int msg_ptr;
113
114 unsigned int tx_setup;
115 unsigned int irq;
116
117 enum s3c24xx_i2c_state state;
118 unsigned long clkrate;
119
120 void __iomem *regs;
121 struct clk *clk;
122 struct device *dev;
123 struct i2c_adapter adap;
124
125 struct s3c2410_platform_i2c *pdata;
126 int gpios[2];
127 struct pinctrl *pctrl;
128#if defined(CONFIG_ARM_S3C24XX_CPUFREQ)
129 struct notifier_block freq_transition;
130#endif
131 struct regmap *sysreg;
132 unsigned int sys_i2c_cfg;
133};
134
135static const struct platform_device_id s3c24xx_driver_ids[] = {
136 {
137 .name = "s3c2410-i2c",
138 .driver_data = 0,
139 }, {
140 .name = "s3c2440-i2c",
141 .driver_data = QUIRK_S3C2440,
142 }, {
143 .name = "s3c2440-hdmiphy-i2c",
144 .driver_data = QUIRK_S3C2440 | QUIRK_HDMIPHY | QUIRK_NO_GPIO,
145 }, { },
146};
147MODULE_DEVICE_TABLE(platform, s3c24xx_driver_ids);
148
149static int i2c_s3c_irq_nextbyte(struct s3c24xx_i2c *i2c, unsigned long iicstat);
150
151#ifdef CONFIG_OF
152static const struct of_device_id s3c24xx_i2c_match[] = {
153 { .compatible = "samsung,s3c2410-i2c", .data = (void *)0 },
154 { .compatible = "samsung,s3c2440-i2c", .data = (void *)QUIRK_S3C2440 },
155 { .compatible = "samsung,s3c2440-hdmiphy-i2c",
156 .data = (void *)(QUIRK_S3C2440 | QUIRK_HDMIPHY | QUIRK_NO_GPIO) },
157 { .compatible = "samsung,exynos5440-i2c",
158 .data = (void *)(QUIRK_S3C2440 | QUIRK_NO_GPIO) },
159 { .compatible = "samsung,exynos5-sata-phy-i2c",
160 .data = (void *)(QUIRK_S3C2440 | QUIRK_POLL | QUIRK_NO_GPIO) },
161 {},
162};
163MODULE_DEVICE_TABLE(of, s3c24xx_i2c_match);
164#endif
165
166
167
168
169static inline kernel_ulong_t s3c24xx_get_device_quirks(struct platform_device *pdev)
170{
171 if (pdev->dev.of_node) {
172 const struct of_device_id *match;
173
174 match = of_match_node(s3c24xx_i2c_match, pdev->dev.of_node);
175 return (kernel_ulong_t)match->data;
176 }
177
178 return platform_get_device_id(pdev)->driver_data;
179}
180
181
182
183
184
185static inline void s3c24xx_i2c_master_complete(struct s3c24xx_i2c *i2c, int ret)
186{
187 dev_dbg(i2c->dev, "master_complete %d\n", ret);
188
189 i2c->msg_ptr = 0;
190 i2c->msg = NULL;
191 i2c->msg_idx++;
192 i2c->msg_num = 0;
193 if (ret)
194 i2c->msg_idx = ret;
195
196 if (!(i2c->quirks & QUIRK_POLL))
197 wake_up(&i2c->wait);
198}
199
200static inline void s3c24xx_i2c_disable_ack(struct s3c24xx_i2c *i2c)
201{
202 unsigned long tmp;
203
204 tmp = readl(i2c->regs + S3C2410_IICCON);
205 writel(tmp & ~S3C2410_IICCON_ACKEN, i2c->regs + S3C2410_IICCON);
206}
207
208static inline void s3c24xx_i2c_enable_ack(struct s3c24xx_i2c *i2c)
209{
210 unsigned long tmp;
211
212 tmp = readl(i2c->regs + S3C2410_IICCON);
213 writel(tmp | S3C2410_IICCON_ACKEN, i2c->regs + S3C2410_IICCON);
214}
215
216
217static inline void s3c24xx_i2c_disable_irq(struct s3c24xx_i2c *i2c)
218{
219 unsigned long tmp;
220
221 tmp = readl(i2c->regs + S3C2410_IICCON);
222 writel(tmp & ~S3C2410_IICCON_IRQEN, i2c->regs + S3C2410_IICCON);
223}
224
225static inline void s3c24xx_i2c_enable_irq(struct s3c24xx_i2c *i2c)
226{
227 unsigned long tmp;
228
229 tmp = readl(i2c->regs + S3C2410_IICCON);
230 writel(tmp | S3C2410_IICCON_IRQEN, i2c->regs + S3C2410_IICCON);
231}
232
233static bool is_ack(struct s3c24xx_i2c *i2c)
234{
235 int tries;
236
237 for (tries = 50; tries; --tries) {
238 if (readl(i2c->regs + S3C2410_IICCON)
239 & S3C2410_IICCON_IRQPEND) {
240 if (!(readl(i2c->regs + S3C2410_IICSTAT)
241 & S3C2410_IICSTAT_LASTBIT))
242 return true;
243 }
244 usleep_range(1000, 2000);
245 }
246 dev_err(i2c->dev, "ack was not received\n");
247 return false;
248}
249
250
251
252
253static void s3c24xx_i2c_message_start(struct s3c24xx_i2c *i2c,
254 struct i2c_msg *msg)
255{
256 unsigned int addr = (msg->addr & 0x7f) << 1;
257 unsigned long stat;
258 unsigned long iiccon;
259
260 stat = 0;
261 stat |= S3C2410_IICSTAT_TXRXEN;
262
263 if (msg->flags & I2C_M_RD) {
264 stat |= S3C2410_IICSTAT_MASTER_RX;
265 addr |= 1;
266 } else
267 stat |= S3C2410_IICSTAT_MASTER_TX;
268
269 if (msg->flags & I2C_M_REV_DIR_ADDR)
270 addr ^= 1;
271
272
273 s3c24xx_i2c_enable_ack(i2c);
274
275 iiccon = readl(i2c->regs + S3C2410_IICCON);
276 writel(stat, i2c->regs + S3C2410_IICSTAT);
277
278 dev_dbg(i2c->dev, "START: %08lx to IICSTAT, %02x to DS\n", stat, addr);
279 writeb(addr, i2c->regs + S3C2410_IICDS);
280
281
282
283
284
285 ndelay(i2c->tx_setup);
286
287 dev_dbg(i2c->dev, "iiccon, %08lx\n", iiccon);
288 writel(iiccon, i2c->regs + S3C2410_IICCON);
289
290 stat |= S3C2410_IICSTAT_START;
291 writel(stat, i2c->regs + S3C2410_IICSTAT);
292
293 if (i2c->quirks & QUIRK_POLL) {
294 while ((i2c->msg_num != 0) && is_ack(i2c)) {
295 i2c_s3c_irq_nextbyte(i2c, stat);
296 stat = readl(i2c->regs + S3C2410_IICSTAT);
297
298 if (stat & S3C2410_IICSTAT_ARBITR)
299 dev_err(i2c->dev, "deal with arbitration loss\n");
300 }
301 }
302}
303
304static inline void s3c24xx_i2c_stop(struct s3c24xx_i2c *i2c, int ret)
305{
306 unsigned long iicstat = readl(i2c->regs + S3C2410_IICSTAT);
307
308 dev_dbg(i2c->dev, "STOP\n");
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344 if (i2c->quirks & QUIRK_HDMIPHY) {
345
346 iicstat &= ~S3C2410_IICSTAT_TXRXEN;
347 } else {
348
349 iicstat &= ~S3C2410_IICSTAT_START;
350 }
351 writel(iicstat, i2c->regs + S3C2410_IICSTAT);
352
353 i2c->state = STATE_STOP;
354
355 s3c24xx_i2c_master_complete(i2c, ret);
356 s3c24xx_i2c_disable_irq(i2c);
357}
358
359
360
361
362
363
364
365
366
367static inline int is_lastmsg(struct s3c24xx_i2c *i2c)
368{
369 return i2c->msg_idx >= (i2c->msg_num - 1);
370}
371
372
373
374
375static inline int is_msglast(struct s3c24xx_i2c *i2c)
376{
377
378
379
380
381
382 if (i2c->msg->flags & I2C_M_RECV_LEN && i2c->msg->len == 1)
383 return 0;
384
385 return i2c->msg_ptr == i2c->msg->len-1;
386}
387
388
389
390
391static inline int is_msgend(struct s3c24xx_i2c *i2c)
392{
393 return i2c->msg_ptr >= i2c->msg->len;
394}
395
396
397
398
399static int i2c_s3c_irq_nextbyte(struct s3c24xx_i2c *i2c, unsigned long iicstat)
400{
401 unsigned long tmp;
402 unsigned char byte;
403 int ret = 0;
404
405 switch (i2c->state) {
406
407 case STATE_IDLE:
408 dev_err(i2c->dev, "%s: called in STATE_IDLE\n", __func__);
409 goto out;
410
411 case STATE_STOP:
412 dev_err(i2c->dev, "%s: called in STATE_STOP\n", __func__);
413 s3c24xx_i2c_disable_irq(i2c);
414 goto out_ack;
415
416 case STATE_START:
417
418
419
420
421 if (iicstat & S3C2410_IICSTAT_LASTBIT &&
422 !(i2c->msg->flags & I2C_M_IGNORE_NAK)) {
423
424 dev_dbg(i2c->dev, "ack was not received\n");
425 s3c24xx_i2c_stop(i2c, -ENXIO);
426 goto out_ack;
427 }
428
429 if (i2c->msg->flags & I2C_M_RD)
430 i2c->state = STATE_READ;
431 else
432 i2c->state = STATE_WRITE;
433
434
435
436
437
438 if (is_lastmsg(i2c) && i2c->msg->len == 0) {
439 s3c24xx_i2c_stop(i2c, 0);
440 goto out_ack;
441 }
442
443 if (i2c->state == STATE_READ)
444 goto prepare_read;
445
446
447
448
449
450
451 case STATE_WRITE:
452
453
454
455
456 if (!(i2c->msg->flags & I2C_M_IGNORE_NAK)) {
457 if (iicstat & S3C2410_IICSTAT_LASTBIT) {
458 dev_dbg(i2c->dev, "WRITE: No Ack\n");
459
460 s3c24xx_i2c_stop(i2c, -ECONNREFUSED);
461 goto out_ack;
462 }
463 }
464
465 retry_write:
466
467 if (!is_msgend(i2c)) {
468 byte = i2c->msg->buf[i2c->msg_ptr++];
469 writeb(byte, i2c->regs + S3C2410_IICDS);
470
471
472
473
474
475
476
477
478 ndelay(i2c->tx_setup);
479
480 } else if (!is_lastmsg(i2c)) {
481
482
483 dev_dbg(i2c->dev, "WRITE: Next Message\n");
484
485 i2c->msg_ptr = 0;
486 i2c->msg_idx++;
487 i2c->msg++;
488
489
490 if (i2c->msg->flags & I2C_M_NOSTART) {
491
492 if (i2c->msg->flags & I2C_M_RD) {
493
494
495
496
497
498 s3c24xx_i2c_stop(i2c, -EINVAL);
499 }
500
501 goto retry_write;
502 } else {
503
504 s3c24xx_i2c_message_start(i2c, i2c->msg);
505 i2c->state = STATE_START;
506 }
507
508 } else {
509
510 s3c24xx_i2c_stop(i2c, 0);
511 }
512 break;
513
514 case STATE_READ:
515
516
517
518
519
520 byte = readb(i2c->regs + S3C2410_IICDS);
521 i2c->msg->buf[i2c->msg_ptr++] = byte;
522
523
524 if (i2c->msg->flags & I2C_M_RECV_LEN && i2c->msg->len == 1)
525 i2c->msg->len += byte;
526 prepare_read:
527 if (is_msglast(i2c)) {
528
529
530 if (is_lastmsg(i2c))
531 s3c24xx_i2c_disable_ack(i2c);
532
533 } else if (is_msgend(i2c)) {
534
535
536
537
538 if (is_lastmsg(i2c)) {
539
540 dev_dbg(i2c->dev, "READ: Send Stop\n");
541
542 s3c24xx_i2c_stop(i2c, 0);
543 } else {
544
545 dev_dbg(i2c->dev, "READ: Next Transfer\n");
546
547 i2c->msg_ptr = 0;
548 i2c->msg_idx++;
549 i2c->msg++;
550 }
551 }
552
553 break;
554 }
555
556
557
558 out_ack:
559 tmp = readl(i2c->regs + S3C2410_IICCON);
560 tmp &= ~S3C2410_IICCON_IRQPEND;
561 writel(tmp, i2c->regs + S3C2410_IICCON);
562 out:
563 return ret;
564}
565
566
567
568
569static irqreturn_t s3c24xx_i2c_irq(int irqno, void *dev_id)
570{
571 struct s3c24xx_i2c *i2c = dev_id;
572 unsigned long status;
573 unsigned long tmp;
574
575 status = readl(i2c->regs + S3C2410_IICSTAT);
576
577 if (status & S3C2410_IICSTAT_ARBITR) {
578
579 dev_err(i2c->dev, "deal with arbitration loss\n");
580 }
581
582 if (i2c->state == STATE_IDLE) {
583 dev_dbg(i2c->dev, "IRQ: error i2c->state == IDLE\n");
584
585 tmp = readl(i2c->regs + S3C2410_IICCON);
586 tmp &= ~S3C2410_IICCON_IRQPEND;
587 writel(tmp, i2c->regs + S3C2410_IICCON);
588 goto out;
589 }
590
591
592
593
594
595 i2c_s3c_irq_nextbyte(i2c, status);
596
597 out:
598 return IRQ_HANDLED;
599}
600
601
602
603
604
605
606
607
608
609
610static inline void s3c24xx_i2c_disable_bus(struct s3c24xx_i2c *i2c)
611{
612 unsigned long tmp;
613
614
615 tmp = readl(i2c->regs + S3C2410_IICSTAT);
616 tmp &= ~S3C2410_IICSTAT_TXRXEN;
617 writel(tmp, i2c->regs + S3C2410_IICSTAT);
618
619
620 tmp = readl(i2c->regs + S3C2410_IICCON);
621 tmp &= ~(S3C2410_IICCON_IRQEN | S3C2410_IICCON_IRQPEND |
622 S3C2410_IICCON_ACKEN);
623 writel(tmp, i2c->regs + S3C2410_IICCON);
624}
625
626
627
628
629
630static int s3c24xx_i2c_set_master(struct s3c24xx_i2c *i2c)
631{
632 unsigned long iicstat;
633 int timeout = 400;
634
635 while (timeout-- > 0) {
636 iicstat = readl(i2c->regs + S3C2410_IICSTAT);
637
638 if (!(iicstat & S3C2410_IICSTAT_BUSBUSY))
639 return 0;
640
641 msleep(1);
642 }
643
644 return -ETIMEDOUT;
645}
646
647
648
649
650static void s3c24xx_i2c_wait_idle(struct s3c24xx_i2c *i2c)
651{
652 unsigned long iicstat;
653 ktime_t start, now;
654 unsigned long delay;
655 int spins;
656
657
658
659 dev_dbg(i2c->dev, "waiting for bus idle\n");
660
661 start = now = ktime_get();
662
663
664
665
666
667
668
669
670
671 spins = 3;
672 iicstat = readl(i2c->regs + S3C2410_IICSTAT);
673 while ((iicstat & S3C2410_IICSTAT_START) && --spins) {
674 cpu_relax();
675 iicstat = readl(i2c->regs + S3C2410_IICSTAT);
676 }
677
678
679
680
681
682
683
684
685 delay = 1;
686 while ((iicstat & S3C2410_IICSTAT_START) &&
687 ktime_us_delta(now, start) < S3C2410_IDLE_TIMEOUT) {
688 usleep_range(delay, 2 * delay);
689 if (delay < S3C2410_IDLE_TIMEOUT / 10)
690 delay <<= 1;
691 now = ktime_get();
692 iicstat = readl(i2c->regs + S3C2410_IICSTAT);
693 }
694
695 if (iicstat & S3C2410_IICSTAT_START)
696 dev_warn(i2c->dev, "timeout waiting for bus idle\n");
697}
698
699
700
701
702static int s3c24xx_i2c_doxfer(struct s3c24xx_i2c *i2c,
703 struct i2c_msg *msgs, int num)
704{
705 unsigned long timeout;
706 int ret;
707
708 if (i2c->suspended)
709 return -EIO;
710
711 ret = s3c24xx_i2c_set_master(i2c);
712 if (ret != 0) {
713 dev_err(i2c->dev, "cannot get bus (error %d)\n", ret);
714 ret = -EAGAIN;
715 goto out;
716 }
717
718 i2c->msg = msgs;
719 i2c->msg_num = num;
720 i2c->msg_ptr = 0;
721 i2c->msg_idx = 0;
722 i2c->state = STATE_START;
723
724 s3c24xx_i2c_enable_irq(i2c);
725 s3c24xx_i2c_message_start(i2c, msgs);
726
727 if (i2c->quirks & QUIRK_POLL) {
728 ret = i2c->msg_idx;
729
730 if (ret != num)
731 dev_dbg(i2c->dev, "incomplete xfer (%d)\n", ret);
732
733 goto out;
734 }
735
736 timeout = wait_event_timeout(i2c->wait, i2c->msg_num == 0, HZ * 5);
737
738 ret = i2c->msg_idx;
739
740
741
742
743
744 if (timeout == 0)
745 dev_dbg(i2c->dev, "timeout\n");
746 else if (ret != num)
747 dev_dbg(i2c->dev, "incomplete xfer (%d)\n", ret);
748
749
750 if (i2c->quirks & QUIRK_HDMIPHY)
751 goto out;
752
753 s3c24xx_i2c_wait_idle(i2c);
754
755 s3c24xx_i2c_disable_bus(i2c);
756
757 out:
758 i2c->state = STATE_IDLE;
759
760 return ret;
761}
762
763
764
765
766
767static int s3c24xx_i2c_xfer(struct i2c_adapter *adap,
768 struct i2c_msg *msgs, int num)
769{
770 struct s3c24xx_i2c *i2c = (struct s3c24xx_i2c *)adap->algo_data;
771 int retry;
772 int ret;
773
774 ret = clk_enable(i2c->clk);
775 if (ret)
776 return ret;
777
778 for (retry = 0; retry < adap->retries; retry++) {
779
780 ret = s3c24xx_i2c_doxfer(i2c, msgs, num);
781
782 if (ret != -EAGAIN) {
783 clk_disable(i2c->clk);
784 return ret;
785 }
786
787 dev_dbg(i2c->dev, "Retrying transmission (%d)\n", retry);
788
789 udelay(100);
790 }
791
792 clk_disable(i2c->clk);
793 return -EREMOTEIO;
794}
795
796
797static u32 s3c24xx_i2c_func(struct i2c_adapter *adap)
798{
799 return I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL | I2C_FUNC_NOSTART |
800 I2C_FUNC_PROTOCOL_MANGLING;
801}
802
803
804static const struct i2c_algorithm s3c24xx_i2c_algorithm = {
805 .master_xfer = s3c24xx_i2c_xfer,
806 .functionality = s3c24xx_i2c_func,
807};
808
809
810
811
812static int s3c24xx_i2c_calcdivisor(unsigned long clkin, unsigned int wanted,
813 unsigned int *div1, unsigned int *divs)
814{
815 unsigned int calc_divs = clkin / wanted;
816 unsigned int calc_div1;
817
818 if (calc_divs > (16*16))
819 calc_div1 = 512;
820 else
821 calc_div1 = 16;
822
823 calc_divs += calc_div1-1;
824 calc_divs /= calc_div1;
825
826 if (calc_divs == 0)
827 calc_divs = 1;
828 if (calc_divs > 17)
829 calc_divs = 17;
830
831 *divs = calc_divs;
832 *div1 = calc_div1;
833
834 return clkin / (calc_divs * calc_div1);
835}
836
837
838
839
840
841
842static int s3c24xx_i2c_clockrate(struct s3c24xx_i2c *i2c, unsigned int *got)
843{
844 struct s3c2410_platform_i2c *pdata = i2c->pdata;
845 unsigned long clkin = clk_get_rate(i2c->clk);
846 unsigned int divs, div1;
847 unsigned long target_frequency;
848 u32 iiccon;
849 int freq;
850
851 i2c->clkrate = clkin;
852 clkin /= 1000;
853
854 dev_dbg(i2c->dev, "pdata desired frequency %lu\n", pdata->frequency);
855
856 target_frequency = pdata->frequency ? pdata->frequency : 100000;
857
858 target_frequency /= 1000;
859
860 freq = s3c24xx_i2c_calcdivisor(clkin, target_frequency, &div1, &divs);
861
862 if (freq > target_frequency) {
863 dev_err(i2c->dev,
864 "Unable to achieve desired frequency %luKHz." \
865 " Lowest achievable %dKHz\n", target_frequency, freq);
866 return -EINVAL;
867 }
868
869 *got = freq;
870
871 iiccon = readl(i2c->regs + S3C2410_IICCON);
872 iiccon &= ~(S3C2410_IICCON_SCALEMASK | S3C2410_IICCON_TXDIV_512);
873 iiccon |= (divs-1);
874
875 if (div1 == 512)
876 iiccon |= S3C2410_IICCON_TXDIV_512;
877
878 if (i2c->quirks & QUIRK_POLL)
879 iiccon |= S3C2410_IICCON_SCALE(2);
880
881 writel(iiccon, i2c->regs + S3C2410_IICCON);
882
883 if (i2c->quirks & QUIRK_S3C2440) {
884 unsigned long sda_delay;
885
886 if (pdata->sda_delay) {
887 sda_delay = clkin * pdata->sda_delay;
888 sda_delay = DIV_ROUND_UP(sda_delay, 1000000);
889 sda_delay = DIV_ROUND_UP(sda_delay, 5);
890 if (sda_delay > 3)
891 sda_delay = 3;
892 sda_delay |= S3C2410_IICLC_FILTER_ON;
893 } else
894 sda_delay = 0;
895
896 dev_dbg(i2c->dev, "IICLC=%08lx\n", sda_delay);
897 writel(sda_delay, i2c->regs + S3C2440_IICLC);
898 }
899
900 return 0;
901}
902
903#if defined(CONFIG_ARM_S3C24XX_CPUFREQ)
904
905#define freq_to_i2c(_n) container_of(_n, struct s3c24xx_i2c, freq_transition)
906
907static int s3c24xx_i2c_cpufreq_transition(struct notifier_block *nb,
908 unsigned long val, void *data)
909{
910 struct s3c24xx_i2c *i2c = freq_to_i2c(nb);
911 unsigned int got;
912 int delta_f;
913 int ret;
914
915 delta_f = clk_get_rate(i2c->clk) - i2c->clkrate;
916
917
918
919
920
921
922 if ((val == CPUFREQ_POSTCHANGE && delta_f < 0) ||
923 (val == CPUFREQ_PRECHANGE && delta_f > 0)) {
924 i2c_lock_adapter(&i2c->adap);
925 ret = s3c24xx_i2c_clockrate(i2c, &got);
926 i2c_unlock_adapter(&i2c->adap);
927
928 if (ret < 0)
929 dev_err(i2c->dev, "cannot find frequency (%d)\n", ret);
930 else
931 dev_info(i2c->dev, "setting freq %d\n", got);
932 }
933
934 return 0;
935}
936
937static inline int s3c24xx_i2c_register_cpufreq(struct s3c24xx_i2c *i2c)
938{
939 i2c->freq_transition.notifier_call = s3c24xx_i2c_cpufreq_transition;
940
941 return cpufreq_register_notifier(&i2c->freq_transition,
942 CPUFREQ_TRANSITION_NOTIFIER);
943}
944
945static inline void s3c24xx_i2c_deregister_cpufreq(struct s3c24xx_i2c *i2c)
946{
947 cpufreq_unregister_notifier(&i2c->freq_transition,
948 CPUFREQ_TRANSITION_NOTIFIER);
949}
950
951#else
952static inline int s3c24xx_i2c_register_cpufreq(struct s3c24xx_i2c *i2c)
953{
954 return 0;
955}
956
957static inline void s3c24xx_i2c_deregister_cpufreq(struct s3c24xx_i2c *i2c)
958{
959}
960#endif
961
962#ifdef CONFIG_OF
963static int s3c24xx_i2c_parse_dt_gpio(struct s3c24xx_i2c *i2c)
964{
965 int idx, gpio, ret;
966
967 if (i2c->quirks & QUIRK_NO_GPIO)
968 return 0;
969
970 for (idx = 0; idx < 2; idx++) {
971 gpio = of_get_gpio(i2c->dev->of_node, idx);
972 if (!gpio_is_valid(gpio)) {
973 dev_err(i2c->dev, "invalid gpio[%d]: %d\n", idx, gpio);
974 goto free_gpio;
975 }
976 i2c->gpios[idx] = gpio;
977
978 ret = gpio_request(gpio, "i2c-bus");
979 if (ret) {
980 dev_err(i2c->dev, "gpio [%d] request failed (%d)\n",
981 gpio, ret);
982 goto free_gpio;
983 }
984 }
985 return 0;
986
987free_gpio:
988 while (--idx >= 0)
989 gpio_free(i2c->gpios[idx]);
990 return -EINVAL;
991}
992
993static void s3c24xx_i2c_dt_gpio_free(struct s3c24xx_i2c *i2c)
994{
995 unsigned int idx;
996
997 if (i2c->quirks & QUIRK_NO_GPIO)
998 return;
999
1000 for (idx = 0; idx < 2; idx++)
1001 gpio_free(i2c->gpios[idx]);
1002}
1003#else
1004static int s3c24xx_i2c_parse_dt_gpio(struct s3c24xx_i2c *i2c)
1005{
1006 return 0;
1007}
1008
1009static void s3c24xx_i2c_dt_gpio_free(struct s3c24xx_i2c *i2c)
1010{
1011}
1012#endif
1013
1014
1015
1016
1017static int s3c24xx_i2c_init(struct s3c24xx_i2c *i2c)
1018{
1019 struct s3c2410_platform_i2c *pdata;
1020 unsigned int freq;
1021
1022
1023
1024 pdata = i2c->pdata;
1025
1026
1027
1028 writeb(pdata->slave_addr, i2c->regs + S3C2410_IICADD);
1029
1030 dev_info(i2c->dev, "slave address 0x%02x\n", pdata->slave_addr);
1031
1032 writel(0, i2c->regs + S3C2410_IICCON);
1033 writel(0, i2c->regs + S3C2410_IICSTAT);
1034
1035
1036
1037 if (s3c24xx_i2c_clockrate(i2c, &freq) != 0) {
1038 dev_err(i2c->dev, "cannot meet bus frequency required\n");
1039 return -EINVAL;
1040 }
1041
1042
1043
1044 dev_info(i2c->dev, "bus frequency set to %d KHz\n", freq);
1045 dev_dbg(i2c->dev, "S3C2410_IICCON=0x%02x\n",
1046 readl(i2c->regs + S3C2410_IICCON));
1047
1048 return 0;
1049}
1050
1051#ifdef CONFIG_OF
1052
1053
1054
1055static void
1056s3c24xx_i2c_parse_dt(struct device_node *np, struct s3c24xx_i2c *i2c)
1057{
1058 struct s3c2410_platform_i2c *pdata = i2c->pdata;
1059 int id;
1060
1061 if (!np)
1062 return;
1063
1064 pdata->bus_num = -1;
1065 of_property_read_u32(np, "samsung,i2c-sda-delay", &pdata->sda_delay);
1066 of_property_read_u32(np, "samsung,i2c-slave-addr", &pdata->slave_addr);
1067 of_property_read_u32(np, "samsung,i2c-max-bus-freq",
1068 (u32 *)&pdata->frequency);
1069
1070
1071
1072
1073
1074
1075
1076
1077 id = of_alias_get_id(np, "i2c");
1078 i2c->sysreg = syscon_regmap_lookup_by_phandle(np,
1079 "samsung,sysreg-phandle");
1080 if (IS_ERR(i2c->sysreg))
1081 return;
1082
1083 regmap_update_bits(i2c->sysreg, EXYNOS5_SYS_I2C_CFG, BIT(id), 0);
1084}
1085#else
1086static void
1087s3c24xx_i2c_parse_dt(struct device_node *np, struct s3c24xx_i2c *i2c) { }
1088#endif
1089
1090static int s3c24xx_i2c_probe(struct platform_device *pdev)
1091{
1092 struct s3c24xx_i2c *i2c;
1093 struct s3c2410_platform_i2c *pdata = NULL;
1094 struct resource *res;
1095 int ret;
1096
1097 if (!pdev->dev.of_node) {
1098 pdata = dev_get_platdata(&pdev->dev);
1099 if (!pdata) {
1100 dev_err(&pdev->dev, "no platform data\n");
1101 return -EINVAL;
1102 }
1103 }
1104
1105 i2c = devm_kzalloc(&pdev->dev, sizeof(struct s3c24xx_i2c), GFP_KERNEL);
1106 if (!i2c)
1107 return -ENOMEM;
1108
1109 i2c->pdata = devm_kzalloc(&pdev->dev, sizeof(*pdata), GFP_KERNEL);
1110 if (!i2c->pdata)
1111 return -ENOMEM;
1112
1113 i2c->quirks = s3c24xx_get_device_quirks(pdev);
1114 i2c->sysreg = ERR_PTR(-ENOENT);
1115 if (pdata)
1116 memcpy(i2c->pdata, pdata, sizeof(*pdata));
1117 else
1118 s3c24xx_i2c_parse_dt(pdev->dev.of_node, i2c);
1119
1120 strlcpy(i2c->adap.name, "s3c2410-i2c", sizeof(i2c->adap.name));
1121 i2c->adap.owner = THIS_MODULE;
1122 i2c->adap.algo = &s3c24xx_i2c_algorithm;
1123 i2c->adap.retries = 2;
1124 i2c->adap.class = I2C_CLASS_DEPRECATED;
1125 i2c->tx_setup = 50;
1126
1127 init_waitqueue_head(&i2c->wait);
1128
1129
1130 i2c->dev = &pdev->dev;
1131 i2c->clk = devm_clk_get(&pdev->dev, "i2c");
1132 if (IS_ERR(i2c->clk)) {
1133 dev_err(&pdev->dev, "cannot get clock\n");
1134 return -ENOENT;
1135 }
1136
1137 dev_dbg(&pdev->dev, "clock source %p\n", i2c->clk);
1138
1139
1140 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1141 i2c->regs = devm_ioremap_resource(&pdev->dev, res);
1142
1143 if (IS_ERR(i2c->regs))
1144 return PTR_ERR(i2c->regs);
1145
1146 dev_dbg(&pdev->dev, "registers %p (%p)\n",
1147 i2c->regs, res);
1148
1149
1150 i2c->adap.algo_data = i2c;
1151 i2c->adap.dev.parent = &pdev->dev;
1152 i2c->pctrl = devm_pinctrl_get_select_default(i2c->dev);
1153
1154
1155 if (i2c->pdata->cfg_gpio)
1156 i2c->pdata->cfg_gpio(to_platform_device(i2c->dev));
1157 else if (IS_ERR(i2c->pctrl) && s3c24xx_i2c_parse_dt_gpio(i2c))
1158 return -EINVAL;
1159
1160
1161 ret = clk_prepare_enable(i2c->clk);
1162 if (ret) {
1163 dev_err(&pdev->dev, "I2C clock enable failed\n");
1164 return ret;
1165 }
1166
1167 ret = s3c24xx_i2c_init(i2c);
1168 clk_disable(i2c->clk);
1169 if (ret != 0) {
1170 dev_err(&pdev->dev, "I2C controller init failed\n");
1171 clk_unprepare(i2c->clk);
1172 return ret;
1173 }
1174
1175
1176
1177
1178
1179 if (!(i2c->quirks & QUIRK_POLL)) {
1180 i2c->irq = ret = platform_get_irq(pdev, 0);
1181 if (ret <= 0) {
1182 dev_err(&pdev->dev, "cannot find IRQ\n");
1183 clk_unprepare(i2c->clk);
1184 return ret;
1185 }
1186
1187 ret = devm_request_irq(&pdev->dev, i2c->irq, s3c24xx_i2c_irq,
1188 0, dev_name(&pdev->dev), i2c);
1189 if (ret != 0) {
1190 dev_err(&pdev->dev, "cannot claim IRQ %d\n", i2c->irq);
1191 clk_unprepare(i2c->clk);
1192 return ret;
1193 }
1194 }
1195
1196 ret = s3c24xx_i2c_register_cpufreq(i2c);
1197 if (ret < 0) {
1198 dev_err(&pdev->dev, "failed to register cpufreq notifier\n");
1199 clk_unprepare(i2c->clk);
1200 return ret;
1201 }
1202
1203
1204
1205
1206
1207
1208
1209 i2c->adap.nr = i2c->pdata->bus_num;
1210 i2c->adap.dev.of_node = pdev->dev.of_node;
1211
1212 platform_set_drvdata(pdev, i2c);
1213
1214 pm_runtime_enable(&pdev->dev);
1215
1216 ret = i2c_add_numbered_adapter(&i2c->adap);
1217 if (ret < 0) {
1218 pm_runtime_disable(&pdev->dev);
1219 s3c24xx_i2c_deregister_cpufreq(i2c);
1220 clk_unprepare(i2c->clk);
1221 return ret;
1222 }
1223
1224 dev_info(&pdev->dev, "%s: S3C I2C adapter\n", dev_name(&i2c->adap.dev));
1225 return 0;
1226}
1227
1228static int s3c24xx_i2c_remove(struct platform_device *pdev)
1229{
1230 struct s3c24xx_i2c *i2c = platform_get_drvdata(pdev);
1231
1232 clk_unprepare(i2c->clk);
1233
1234 pm_runtime_disable(&pdev->dev);
1235
1236 s3c24xx_i2c_deregister_cpufreq(i2c);
1237
1238 i2c_del_adapter(&i2c->adap);
1239
1240 if (pdev->dev.of_node && IS_ERR(i2c->pctrl))
1241 s3c24xx_i2c_dt_gpio_free(i2c);
1242
1243 return 0;
1244}
1245
1246#ifdef CONFIG_PM_SLEEP
1247static int s3c24xx_i2c_suspend_noirq(struct device *dev)
1248{
1249 struct platform_device *pdev = to_platform_device(dev);
1250 struct s3c24xx_i2c *i2c = platform_get_drvdata(pdev);
1251
1252 i2c->suspended = 1;
1253
1254 if (!IS_ERR(i2c->sysreg))
1255 regmap_read(i2c->sysreg, EXYNOS5_SYS_I2C_CFG, &i2c->sys_i2c_cfg);
1256
1257 return 0;
1258}
1259
1260static int s3c24xx_i2c_resume_noirq(struct device *dev)
1261{
1262 struct platform_device *pdev = to_platform_device(dev);
1263 struct s3c24xx_i2c *i2c = platform_get_drvdata(pdev);
1264 int ret;
1265
1266 if (!IS_ERR(i2c->sysreg))
1267 regmap_write(i2c->sysreg, EXYNOS5_SYS_I2C_CFG, i2c->sys_i2c_cfg);
1268
1269 ret = clk_enable(i2c->clk);
1270 if (ret)
1271 return ret;
1272 s3c24xx_i2c_init(i2c);
1273 clk_disable(i2c->clk);
1274 i2c->suspended = 0;
1275
1276 return 0;
1277}
1278#endif
1279
1280#ifdef CONFIG_PM
1281static const struct dev_pm_ops s3c24xx_i2c_dev_pm_ops = {
1282 SET_NOIRQ_SYSTEM_SLEEP_PM_OPS(s3c24xx_i2c_suspend_noirq,
1283 s3c24xx_i2c_resume_noirq)
1284};
1285
1286#define S3C24XX_DEV_PM_OPS (&s3c24xx_i2c_dev_pm_ops)
1287#else
1288#define S3C24XX_DEV_PM_OPS NULL
1289#endif
1290
1291static struct platform_driver s3c24xx_i2c_driver = {
1292 .probe = s3c24xx_i2c_probe,
1293 .remove = s3c24xx_i2c_remove,
1294 .id_table = s3c24xx_driver_ids,
1295 .driver = {
1296 .name = "s3c-i2c",
1297 .pm = S3C24XX_DEV_PM_OPS,
1298 .of_match_table = of_match_ptr(s3c24xx_i2c_match),
1299 },
1300};
1301
1302static int __init i2c_adap_s3c_init(void)
1303{
1304 return platform_driver_register(&s3c24xx_i2c_driver);
1305}
1306subsys_initcall(i2c_adap_s3c_init);
1307
1308static void __exit i2c_adap_s3c_exit(void)
1309{
1310 platform_driver_unregister(&s3c24xx_i2c_driver);
1311}
1312module_exit(i2c_adap_s3c_exit);
1313
1314MODULE_DESCRIPTION("S3C24XX I2C Bus driver");
1315MODULE_AUTHOR("Ben Dooks, <ben@simtec.co.uk>");
1316MODULE_LICENSE("GPL");
1317