1
2
3
4
5
6
7
8
9
10
11
12
13
14
15#include <linux/init.h>
16#include <linux/module.h>
17#include <linux/platform_device.h>
18#include <linux/slab.h>
19#include <linux/interrupt.h>
20#include <linux/i2c.h>
21#include <linux/err.h>
22#include <linux/clk.h>
23#include <linux/io.h>
24#include <linux/regulator/consumer.h>
25#include <linux/pm_runtime.h>
26
27#include <plat/i2c.h>
28
29#define DRIVER_NAME "nmk-i2c"
30
31
32#define I2C_CR (0x000)
33#define I2C_SCR (0x004)
34#define I2C_HSMCR (0x008)
35#define I2C_MCR (0x00C)
36#define I2C_TFR (0x010)
37#define I2C_SR (0x014)
38#define I2C_RFR (0x018)
39#define I2C_TFTR (0x01C)
40#define I2C_RFTR (0x020)
41#define I2C_DMAR (0x024)
42#define I2C_BRCR (0x028)
43#define I2C_IMSCR (0x02C)
44#define I2C_RISR (0x030)
45#define I2C_MISR (0x034)
46#define I2C_ICR (0x038)
47
48
49#define I2C_CR_PE (0x1 << 0)
50#define I2C_CR_OM (0x3 << 1)
51#define I2C_CR_SAM (0x1 << 3)
52#define I2C_CR_SM (0x3 << 4)
53#define I2C_CR_SGCM (0x1 << 6)
54#define I2C_CR_FTX (0x1 << 7)
55#define I2C_CR_FRX (0x1 << 8)
56#define I2C_CR_DMA_TX_EN (0x1 << 9)
57#define I2C_CR_DMA_RX_EN (0x1 << 10)
58#define I2C_CR_DMA_SLE (0x1 << 11)
59#define I2C_CR_LM (0x1 << 12)
60#define I2C_CR_FON (0x3 << 13)
61#define I2C_CR_FS (0x3 << 15)
62
63
64#define I2C_MCR_OP (0x1 << 0)
65#define I2C_MCR_A7 (0x7f << 1)
66#define I2C_MCR_EA10 (0x7 << 8)
67#define I2C_MCR_SB (0x1 << 11)
68#define I2C_MCR_AM (0x3 << 12)
69#define I2C_MCR_STOP (0x1 << 14)
70#define I2C_MCR_LENGTH (0x7ff << 15)
71
72
73#define I2C_SR_OP (0x3 << 0)
74#define I2C_SR_STATUS (0x3 << 2)
75#define I2C_SR_CAUSE (0x7 << 4)
76#define I2C_SR_TYPE (0x3 << 7)
77#define I2C_SR_LENGTH (0x7ff << 9)
78
79
80#define I2C_IT_TXFE (0x1 << 0)
81#define I2C_IT_TXFNE (0x1 << 1)
82#define I2C_IT_TXFF (0x1 << 2)
83#define I2C_IT_TXFOVR (0x1 << 3)
84#define I2C_IT_RXFE (0x1 << 4)
85#define I2C_IT_RXFNF (0x1 << 5)
86#define I2C_IT_RXFF (0x1 << 6)
87#define I2C_IT_RFSR (0x1 << 16)
88#define I2C_IT_RFSE (0x1 << 17)
89#define I2C_IT_WTSR (0x1 << 18)
90#define I2C_IT_MTD (0x1 << 19)
91#define I2C_IT_STD (0x1 << 20)
92#define I2C_IT_MAL (0x1 << 24)
93#define I2C_IT_BERR (0x1 << 25)
94#define I2C_IT_MTDWS (0x1 << 28)
95
96#define GEN_MASK(val, mask, sb) (((val) << (sb)) & (mask))
97
98
99#define I2C_CLEAR_ALL_INTS 0x131f007f
100
101
102#define IRQ_MASK(mask) (mask & 0x1fffffff)
103
104
105#define MAX_I2C_FIFO_THRESHOLD 15
106
107enum i2c_status {
108 I2C_NOP,
109 I2C_ON_GOING,
110 I2C_OK,
111 I2C_ABORT
112};
113
114
115enum i2c_operation {
116 I2C_NO_OPERATION = 0xff,
117 I2C_WRITE = 0x00,
118 I2C_READ = 0x01
119};
120
121
122
123
124
125
126
127
128
129struct i2c_nmk_client {
130 unsigned short slave_adr;
131 unsigned long count;
132 unsigned char *buffer;
133 unsigned long xfer_bytes;
134 enum i2c_operation operation;
135};
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152struct nmk_i2c_dev {
153 struct platform_device *pdev;
154 struct i2c_adapter adap;
155 int irq;
156 void __iomem *virtbase;
157 struct clk *clk;
158 struct nmk_i2c_controller cfg;
159 struct i2c_nmk_client cli;
160 int stop;
161 struct completion xfer_complete;
162 int result;
163 struct regulator *regulator;
164 bool busy;
165};
166
167
168static const char *abort_causes[] = {
169 "no ack received after address transmission",
170 "no ack received during data phase",
171 "ack received after xmission of master code",
172 "master lost arbitration",
173 "slave restarts",
174 "slave reset",
175 "overflow, maxsize is 2047 bytes",
176};
177
178static inline void i2c_set_bit(void __iomem *reg, u32 mask)
179{
180 writel(readl(reg) | mask, reg);
181}
182
183static inline void i2c_clr_bit(void __iomem *reg, u32 mask)
184{
185 writel(readl(reg) & ~mask, reg);
186}
187
188
189
190
191
192
193
194
195static int flush_i2c_fifo(struct nmk_i2c_dev *dev)
196{
197#define LOOP_ATTEMPTS 10
198 int i;
199 unsigned long timeout;
200
201
202
203
204
205
206
207
208 writel((I2C_CR_FTX | I2C_CR_FRX), dev->virtbase + I2C_CR);
209
210 for (i = 0; i < LOOP_ATTEMPTS; i++) {
211 timeout = jiffies + dev->adap.timeout;
212
213 while (!time_after(jiffies, timeout)) {
214 if ((readl(dev->virtbase + I2C_CR) &
215 (I2C_CR_FTX | I2C_CR_FRX)) == 0)
216 return 0;
217 }
218 }
219
220 dev_err(&dev->pdev->dev,
221 "flushing operation timed out giving up after %d attempts",
222 LOOP_ATTEMPTS);
223
224 return -ETIMEDOUT;
225}
226
227
228
229
230
231static void disable_all_interrupts(struct nmk_i2c_dev *dev)
232{
233 u32 mask = IRQ_MASK(0);
234 writel(mask, dev->virtbase + I2C_IMSCR);
235}
236
237
238
239
240
241static void clear_all_interrupts(struct nmk_i2c_dev *dev)
242{
243 u32 mask;
244 mask = IRQ_MASK(I2C_CLEAR_ALL_INTS);
245 writel(mask, dev->virtbase + I2C_ICR);
246}
247
248
249
250
251
252static int init_hw(struct nmk_i2c_dev *dev)
253{
254 int stat;
255
256 stat = flush_i2c_fifo(dev);
257 if (stat)
258 goto exit;
259
260
261 i2c_clr_bit(dev->virtbase + I2C_CR , I2C_CR_PE);
262
263 disable_all_interrupts(dev);
264
265 clear_all_interrupts(dev);
266
267 dev->cli.operation = I2C_NO_OPERATION;
268
269exit:
270 return stat;
271}
272
273
274#define DEFAULT_I2C_REG_CR ((1 << 1) | I2C_CR_PE)
275
276
277
278
279
280static u32 load_i2c_mcr_reg(struct nmk_i2c_dev *dev)
281{
282 u32 mcr = 0;
283
284
285 mcr |= GEN_MASK(1, I2C_MCR_AM, 12);
286 mcr |= GEN_MASK(dev->cli.slave_adr, I2C_MCR_A7, 1);
287
288
289 mcr |= GEN_MASK(0, I2C_MCR_SB, 11);
290
291
292 if (dev->cli.operation == I2C_WRITE)
293 mcr |= GEN_MASK(I2C_WRITE, I2C_MCR_OP, 0);
294 else
295 mcr |= GEN_MASK(I2C_READ, I2C_MCR_OP, 0);
296
297
298 if (dev->stop)
299 mcr |= GEN_MASK(1, I2C_MCR_STOP, 14);
300 else
301 mcr &= ~(GEN_MASK(1, I2C_MCR_STOP, 14));
302
303 mcr |= GEN_MASK(dev->cli.count, I2C_MCR_LENGTH, 15);
304
305 return mcr;
306}
307
308
309
310
311
312static void setup_i2c_controller(struct nmk_i2c_dev *dev)
313{
314 u32 brcr1, brcr2;
315 u32 i2c_clk, div;
316
317 writel(0x0, dev->virtbase + I2C_CR);
318 writel(0x0, dev->virtbase + I2C_HSMCR);
319 writel(0x0, dev->virtbase + I2C_TFTR);
320 writel(0x0, dev->virtbase + I2C_RFTR);
321 writel(0x0, dev->virtbase + I2C_DMAR);
322
323
324
325
326
327
328
329
330
331
332 writel(dev->cfg.slsu << 16, dev->virtbase + I2C_SCR);
333
334 i2c_clk = clk_get_rate(dev->clk);
335
336
337 if (dev->cfg.clk_freq == 0)
338 dev->cfg.clk_freq = 100000;
339
340
341
342
343
344
345 div = (dev->cfg.clk_freq > 100000) ? 3 : 2;
346
347
348
349
350
351
352
353
354 brcr1 = 0 << 16;
355 brcr2 = (i2c_clk/(dev->cfg.clk_freq * div)) & 0xffff;
356
357
358 writel((brcr1 | brcr2), dev->virtbase + I2C_BRCR);
359
360
361
362
363
364
365
366 if (dev->cfg.sm > I2C_FREQ_MODE_FAST) {
367 dev_err(&dev->pdev->dev,
368 "do not support this mode defaulting to std. mode\n");
369 brcr2 = i2c_clk/(100000 * 2) & 0xffff;
370 writel((brcr1 | brcr2), dev->virtbase + I2C_BRCR);
371 writel(I2C_FREQ_MODE_STANDARD << 4,
372 dev->virtbase + I2C_CR);
373 }
374 writel(dev->cfg.sm << 4, dev->virtbase + I2C_CR);
375
376
377 writel(dev->cfg.tft, dev->virtbase + I2C_TFTR);
378 writel(dev->cfg.rft, dev->virtbase + I2C_RFTR);
379}
380
381
382
383
384
385
386
387
388
389static int read_i2c(struct nmk_i2c_dev *dev)
390{
391 u32 status = 0;
392 u32 mcr;
393 u32 irq_mask = 0;
394 int timeout;
395
396 mcr = load_i2c_mcr_reg(dev);
397 writel(mcr, dev->virtbase + I2C_MCR);
398
399
400 writel(readl(dev->virtbase + I2C_CR) | DEFAULT_I2C_REG_CR,
401 dev->virtbase + I2C_CR);
402
403
404 i2c_set_bit(dev->virtbase + I2C_CR, I2C_CR_PE);
405
406 init_completion(&dev->xfer_complete);
407
408
409 irq_mask = (I2C_IT_RXFNF | I2C_IT_RXFF |
410 I2C_IT_MAL | I2C_IT_BERR);
411
412 if (dev->stop)
413 irq_mask |= I2C_IT_MTD;
414 else
415 irq_mask |= I2C_IT_MTDWS;
416
417 irq_mask = I2C_CLEAR_ALL_INTS & IRQ_MASK(irq_mask);
418
419 writel(readl(dev->virtbase + I2C_IMSCR) | irq_mask,
420 dev->virtbase + I2C_IMSCR);
421
422 timeout = wait_for_completion_timeout(
423 &dev->xfer_complete, dev->adap.timeout);
424
425 if (timeout < 0) {
426 dev_err(&dev->pdev->dev,
427 "wait_for_completion_timeout "
428 "returned %d waiting for event\n", timeout);
429 status = timeout;
430 }
431
432 if (timeout == 0) {
433
434 dev_err(&dev->pdev->dev, "read from slave 0x%x timed out\n",
435 dev->cli.slave_adr);
436 status = -ETIMEDOUT;
437 }
438 return status;
439}
440
441static void fill_tx_fifo(struct nmk_i2c_dev *dev, int no_bytes)
442{
443 int count;
444
445 for (count = (no_bytes - 2);
446 (count > 0) &&
447 (dev->cli.count != 0);
448 count--) {
449
450 writeb(*dev->cli.buffer,
451 dev->virtbase + I2C_TFR);
452 dev->cli.buffer++;
453 dev->cli.count--;
454 dev->cli.xfer_bytes++;
455 }
456
457}
458
459
460
461
462
463
464
465static int write_i2c(struct nmk_i2c_dev *dev)
466{
467 u32 status = 0;
468 u32 mcr;
469 u32 irq_mask = 0;
470 int timeout;
471
472 mcr = load_i2c_mcr_reg(dev);
473
474 writel(mcr, dev->virtbase + I2C_MCR);
475
476
477 writel(readl(dev->virtbase + I2C_CR) | DEFAULT_I2C_REG_CR,
478 dev->virtbase + I2C_CR);
479
480
481 i2c_set_bit(dev->virtbase + I2C_CR , I2C_CR_PE);
482
483 init_completion(&dev->xfer_complete);
484
485
486 irq_mask = (I2C_IT_TXFOVR | I2C_IT_MAL | I2C_IT_BERR);
487
488
489 fill_tx_fifo(dev, MAX_I2C_FIFO_THRESHOLD);
490
491 if (dev->cli.count != 0)
492 irq_mask |= I2C_IT_TXFNE;
493
494
495
496
497
498
499 if (dev->stop)
500 irq_mask |= I2C_IT_MTD;
501 else
502 irq_mask |= I2C_IT_MTDWS;
503
504 irq_mask = I2C_CLEAR_ALL_INTS & IRQ_MASK(irq_mask);
505
506 writel(readl(dev->virtbase + I2C_IMSCR) | irq_mask,
507 dev->virtbase + I2C_IMSCR);
508
509 timeout = wait_for_completion_timeout(
510 &dev->xfer_complete, dev->adap.timeout);
511
512 if (timeout < 0) {
513 dev_err(&dev->pdev->dev,
514 "wait_for_completion_timeout "
515 "returned %d waiting for event\n", timeout);
516 status = timeout;
517 }
518
519 if (timeout == 0) {
520
521 dev_err(&dev->pdev->dev, "write to slave 0x%x timed out\n",
522 dev->cli.slave_adr);
523 status = -ETIMEDOUT;
524 }
525
526 return status;
527}
528
529
530
531
532
533
534static int nmk_i2c_xfer_one(struct nmk_i2c_dev *dev, u16 flags)
535{
536 int status;
537
538 if (flags & I2C_M_RD) {
539
540 dev->cli.operation = I2C_READ;
541 status = read_i2c(dev);
542 } else {
543
544 dev->cli.operation = I2C_WRITE;
545 status = write_i2c(dev);
546 }
547
548 if (status || (dev->result)) {
549 u32 i2c_sr;
550 u32 cause;
551
552 i2c_sr = readl(dev->virtbase + I2C_SR);
553
554
555
556
557 if (((i2c_sr >> 2) & 0x3) == 0x3) {
558
559 cause = (i2c_sr >> 4) & 0x7;
560 dev_err(&dev->pdev->dev, "%s\n",
561 cause >= ARRAY_SIZE(abort_causes) ?
562 "unknown reason" :
563 abort_causes[cause]);
564 }
565
566 (void) init_hw(dev);
567
568 status = status ? status : dev->result;
569 }
570
571 return status;
572}
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621static int nmk_i2c_xfer(struct i2c_adapter *i2c_adap,
622 struct i2c_msg msgs[], int num_msgs)
623{
624 int status;
625 int i;
626 struct nmk_i2c_dev *dev = i2c_get_adapdata(i2c_adap);
627 int j;
628
629 dev->busy = true;
630
631 if (dev->regulator)
632 regulator_enable(dev->regulator);
633 pm_runtime_get_sync(&dev->pdev->dev);
634
635 clk_enable(dev->clk);
636
637 status = init_hw(dev);
638 if (status)
639 goto out;
640
641
642 for (j = 0; j < 3; j++) {
643
644 setup_i2c_controller(dev);
645
646 for (i = 0; i < num_msgs; i++) {
647 if (unlikely(msgs[i].flags & I2C_M_TEN)) {
648 dev_err(&dev->pdev->dev,
649 "10 bit addressing not supported\n");
650
651 status = -EINVAL;
652 goto out;
653 }
654 dev->cli.slave_adr = msgs[i].addr;
655 dev->cli.buffer = msgs[i].buf;
656 dev->cli.count = msgs[i].len;
657 dev->stop = (i < (num_msgs - 1)) ? 0 : 1;
658 dev->result = 0;
659
660 status = nmk_i2c_xfer_one(dev, msgs[i].flags);
661 if (status != 0)
662 break;
663 }
664 if (status == 0)
665 break;
666 }
667
668out:
669 clk_disable(dev->clk);
670 pm_runtime_put_sync(&dev->pdev->dev);
671 if (dev->regulator)
672 regulator_disable(dev->regulator);
673
674 dev->busy = false;
675
676
677 if (status)
678 return status;
679 else
680 return num_msgs;
681}
682
683
684
685
686
687
688static int disable_interrupts(struct nmk_i2c_dev *dev, u32 irq)
689{
690 irq = IRQ_MASK(irq);
691 writel(readl(dev->virtbase + I2C_IMSCR) & ~(I2C_CLEAR_ALL_INTS & irq),
692 dev->virtbase + I2C_IMSCR);
693 return 0;
694}
695
696
697
698
699
700
701
702
703
704
705
706
707static irqreturn_t i2c_irq_handler(int irq, void *arg)
708{
709 struct nmk_i2c_dev *dev = arg;
710 u32 tft, rft;
711 u32 count;
712 u32 misr;
713 u32 src = 0;
714
715
716 tft = readl(dev->virtbase + I2C_TFTR);
717 rft = readl(dev->virtbase + I2C_RFTR);
718
719
720 misr = readl(dev->virtbase + I2C_MISR);
721
722 src = __ffs(misr);
723 switch ((1 << src)) {
724
725
726 case I2C_IT_TXFNE:
727 {
728 if (dev->cli.operation == I2C_READ) {
729
730
731
732
733 disable_interrupts(dev, I2C_IT_TXFNE);
734 } else {
735 fill_tx_fifo(dev, (MAX_I2C_FIFO_THRESHOLD - tft));
736
737
738
739
740 if (dev->cli.count == 0)
741 disable_interrupts(dev, I2C_IT_TXFNE);
742 }
743 }
744 break;
745
746
747
748
749
750
751
752 case I2C_IT_RXFNF:
753 for (count = rft; count > 0; count--) {
754
755 *dev->cli.buffer = readb(dev->virtbase + I2C_RFR);
756 dev->cli.buffer++;
757 }
758 dev->cli.count -= rft;
759 dev->cli.xfer_bytes += rft;
760 break;
761
762
763 case I2C_IT_RXFF:
764 for (count = MAX_I2C_FIFO_THRESHOLD; count > 0; count--) {
765 *dev->cli.buffer = readb(dev->virtbase + I2C_RFR);
766 dev->cli.buffer++;
767 }
768 dev->cli.count -= MAX_I2C_FIFO_THRESHOLD;
769 dev->cli.xfer_bytes += MAX_I2C_FIFO_THRESHOLD;
770 break;
771
772
773 case I2C_IT_MTD:
774 case I2C_IT_MTDWS:
775 if (dev->cli.operation == I2C_READ) {
776 while (!(readl(dev->virtbase + I2C_RISR)
777 & I2C_IT_RXFE)) {
778 if (dev->cli.count == 0)
779 break;
780 *dev->cli.buffer =
781 readb(dev->virtbase + I2C_RFR);
782 dev->cli.buffer++;
783 dev->cli.count--;
784 dev->cli.xfer_bytes++;
785 }
786 }
787
788 disable_all_interrupts(dev);
789 clear_all_interrupts(dev);
790
791 if (dev->cli.count) {
792 dev->result = -EIO;
793 dev_err(&dev->pdev->dev,
794 "%lu bytes still remain to be xfered\n",
795 dev->cli.count);
796 (void) init_hw(dev);
797 }
798 complete(&dev->xfer_complete);
799
800 break;
801
802
803 case I2C_IT_MAL:
804 dev->result = -EIO;
805 (void) init_hw(dev);
806
807 i2c_set_bit(dev->virtbase + I2C_ICR, I2C_IT_MAL);
808 complete(&dev->xfer_complete);
809
810 break;
811
812
813
814
815
816
817 case I2C_IT_BERR:
818 dev->result = -EIO;
819
820 if (((readl(dev->virtbase + I2C_SR) >> 2) & 0x3) == I2C_ABORT)
821 (void) init_hw(dev);
822
823 i2c_set_bit(dev->virtbase + I2C_ICR, I2C_IT_BERR);
824 complete(&dev->xfer_complete);
825
826 break;
827
828
829
830
831
832
833 case I2C_IT_TXFOVR:
834 dev->result = -EIO;
835 (void) init_hw(dev);
836
837 dev_err(&dev->pdev->dev, "Tx Fifo Over run\n");
838 complete(&dev->xfer_complete);
839
840 break;
841
842
843 case I2C_IT_TXFE:
844 case I2C_IT_TXFF:
845 case I2C_IT_RXFE:
846 case I2C_IT_RFSR:
847 case I2C_IT_RFSE:
848 case I2C_IT_WTSR:
849 case I2C_IT_STD:
850 dev_err(&dev->pdev->dev, "unhandled Interrupt\n");
851 break;
852 default:
853 dev_err(&dev->pdev->dev, "spurious Interrupt..\n");
854 break;
855 }
856
857 return IRQ_HANDLED;
858}
859
860
861#ifdef CONFIG_PM
862static int nmk_i2c_suspend(struct device *dev)
863{
864 struct platform_device *pdev = to_platform_device(dev);
865 struct nmk_i2c_dev *nmk_i2c = platform_get_drvdata(pdev);
866
867 if (nmk_i2c->busy)
868 return -EBUSY;
869
870 return 0;
871}
872
873static int nmk_i2c_resume(struct device *dev)
874{
875 return 0;
876}
877#else
878#define nmk_i2c_suspend NULL
879#define nmk_i2c_resume NULL
880#endif
881
882
883
884
885
886
887static const struct dev_pm_ops nmk_i2c_pm = {
888 .suspend_noirq = nmk_i2c_suspend,
889 .resume_noirq = nmk_i2c_resume,
890};
891
892static unsigned int nmk_i2c_functionality(struct i2c_adapter *adap)
893{
894 return I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL;
895}
896
897static const struct i2c_algorithm nmk_i2c_algo = {
898 .master_xfer = nmk_i2c_xfer,
899 .functionality = nmk_i2c_functionality
900};
901
902static int __devinit nmk_i2c_probe(struct platform_device *pdev)
903{
904 int ret = 0;
905 struct resource *res;
906 struct nmk_i2c_controller *pdata =
907 pdev->dev.platform_data;
908 struct nmk_i2c_dev *dev;
909 struct i2c_adapter *adap;
910
911 dev = kzalloc(sizeof(struct nmk_i2c_dev), GFP_KERNEL);
912 if (!dev) {
913 dev_err(&pdev->dev, "cannot allocate memory\n");
914 ret = -ENOMEM;
915 goto err_no_mem;
916 }
917 dev->busy = false;
918 dev->pdev = pdev;
919 platform_set_drvdata(pdev, dev);
920
921 res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
922 if (!res) {
923 ret = -ENOENT;
924 goto err_no_resource;
925 }
926
927 if (request_mem_region(res->start, resource_size(res),
928 DRIVER_NAME "I/O region") == NULL) {
929 ret = -EBUSY;
930 goto err_no_region;
931 }
932
933 dev->virtbase = ioremap(res->start, resource_size(res));
934 if (!dev->virtbase) {
935 ret = -ENOMEM;
936 goto err_no_ioremap;
937 }
938
939 dev->irq = platform_get_irq(pdev, 0);
940 ret = request_irq(dev->irq, i2c_irq_handler, 0,
941 DRIVER_NAME, dev);
942 if (ret) {
943 dev_err(&pdev->dev, "cannot claim the irq %d\n", dev->irq);
944 goto err_irq;
945 }
946
947 dev->regulator = regulator_get(&pdev->dev, "v-i2c");
948 if (IS_ERR(dev->regulator)) {
949 dev_warn(&pdev->dev, "could not get i2c regulator\n");
950 dev->regulator = NULL;
951 }
952
953 pm_suspend_ignore_children(&pdev->dev, true);
954 pm_runtime_enable(&pdev->dev);
955
956 dev->clk = clk_get(&pdev->dev, NULL);
957 if (IS_ERR(dev->clk)) {
958 dev_err(&pdev->dev, "could not get i2c clock\n");
959 ret = PTR_ERR(dev->clk);
960 goto err_no_clk;
961 }
962
963 adap = &dev->adap;
964 adap->dev.parent = &pdev->dev;
965 adap->owner = THIS_MODULE;
966 adap->class = I2C_CLASS_HWMON | I2C_CLASS_SPD;
967 adap->algo = &nmk_i2c_algo;
968 adap->timeout = pdata->timeout ? msecs_to_jiffies(pdata->timeout) :
969 msecs_to_jiffies(20000);
970 snprintf(adap->name, sizeof(adap->name),
971 "Nomadik I2C%d at %lx", pdev->id, (unsigned long)res->start);
972
973
974 adap->nr = pdev->id;
975
976
977 dev->cfg.clk_freq = pdata->clk_freq;
978 dev->cfg.slsu = pdata->slsu;
979 dev->cfg.tft = pdata->tft;
980 dev->cfg.rft = pdata->rft;
981 dev->cfg.sm = pdata->sm;
982
983 i2c_set_adapdata(adap, dev);
984
985 dev_info(&pdev->dev,
986 "initialize %s on virtual base %p\n",
987 adap->name, dev->virtbase);
988
989 ret = i2c_add_numbered_adapter(adap);
990 if (ret) {
991 dev_err(&pdev->dev, "failed to add adapter\n");
992 goto err_add_adap;
993 }
994
995 return 0;
996
997 err_add_adap:
998 clk_put(dev->clk);
999 err_no_clk:
1000 if (dev->regulator)
1001 regulator_put(dev->regulator);
1002 pm_runtime_disable(&pdev->dev);
1003 free_irq(dev->irq, dev);
1004 err_irq:
1005 iounmap(dev->virtbase);
1006 err_no_ioremap:
1007 release_mem_region(res->start, resource_size(res));
1008 err_no_region:
1009 platform_set_drvdata(pdev, NULL);
1010 err_no_resource:
1011 kfree(dev);
1012 err_no_mem:
1013
1014 return ret;
1015}
1016
1017static int __devexit nmk_i2c_remove(struct platform_device *pdev)
1018{
1019 struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1020 struct nmk_i2c_dev *dev = platform_get_drvdata(pdev);
1021
1022 i2c_del_adapter(&dev->adap);
1023 flush_i2c_fifo(dev);
1024 disable_all_interrupts(dev);
1025 clear_all_interrupts(dev);
1026
1027 i2c_clr_bit(dev->virtbase + I2C_CR, I2C_CR_PE);
1028 free_irq(dev->irq, dev);
1029 iounmap(dev->virtbase);
1030 if (res)
1031 release_mem_region(res->start, resource_size(res));
1032 clk_put(dev->clk);
1033 if (dev->regulator)
1034 regulator_put(dev->regulator);
1035 pm_runtime_disable(&pdev->dev);
1036 platform_set_drvdata(pdev, NULL);
1037 kfree(dev);
1038
1039 return 0;
1040}
1041
1042static struct platform_driver nmk_i2c_driver = {
1043 .driver = {
1044 .owner = THIS_MODULE,
1045 .name = DRIVER_NAME,
1046 .pm = &nmk_i2c_pm,
1047 },
1048 .probe = nmk_i2c_probe,
1049 .remove = __devexit_p(nmk_i2c_remove),
1050};
1051
1052static int __init nmk_i2c_init(void)
1053{
1054 return platform_driver_register(&nmk_i2c_driver);
1055}
1056
1057static void __exit nmk_i2c_exit(void)
1058{
1059 platform_driver_unregister(&nmk_i2c_driver);
1060}
1061
1062subsys_initcall(nmk_i2c_init);
1063module_exit(nmk_i2c_exit);
1064
1065MODULE_AUTHOR("Sachin Verma, Srinidhi KASAGAR");
1066MODULE_DESCRIPTION("Nomadik/Ux500 I2C driver");
1067MODULE_LICENSE("GPL");
1068MODULE_ALIAS("platform:" DRIVER_NAME);
1069