2 * linux/drivers/i2c/i2c-omap.c
4 * TI OMAP I2C master mode driver
6 * Copyright (C) 2003 MontaVista Software, Inc.
7 * Copyright (C) 2004 Texas Instruments.
9 * Updated to work with multiple I2C interfaces on 24xx by
10 * Tony Lindgren <tony@atomide.com> and Imre Deak <imre.deak@nokia.com>
11 * Copyright (C) 2005 Nokia Corporation
13 * Cleaned up by Juha Yrjölä <juha.yrjola@nokia.com>
15 * ----------------------------------------------------------------------------
16 * This file was highly leveraged from i2c-elektor.c:
18 * Copyright 1995-97 Simon G. Vogl
19 * 1998-99 Hans Berglund
21 * With some changes from Kyösti Mälkki <kmalkki@cc.hut.fi> and even
22 * Frodo Looijaard <frodol@dds.nl>
24 * This program is free software; you can redistribute it and/or modify
25 * it under the terms of the GNU General Public License as published by
26 * the Free Software Foundation; either version 2 of the License, or
27 * (at your option) any later version.
29 * This program is distributed in the hope that it will be useful,
30 * but WITHOUT ANY WARRANTY; without even the implied warranty of
31 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
32 * GNU General Public License for more details.
34 * You should have received a copy of the GNU General Public License
35 * along with this program; if not, write to the Free Software
36 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
41 #include <linux/module.h>
42 #include <linux/delay.h>
43 #include <linux/i2c.h>
44 #include <linux/err.h>
45 #include <linux/interrupt.h>
46 #include <linux/completion.h>
47 #include <linux/platform_device.h>
48 #include <linux/clk.h>
52 /* ----- global defines ----------------------------------------------- */
53 static const char driver_name[] = "i2c_omap";
55 #define MODULE_NAME "OMAP I2C"
56 #define OMAP_I2C_TIMEOUT (msecs_to_jiffies(1000)) /* timeout waiting for the controller to respond */
58 #define DEFAULT_OWN 1 /* default own I2C address */
59 #define MAX_MESSAGES 65536 /* max number of messages */
61 #define OMAP_I2C_REV_REG 0x00
62 #define OMAP_I2C_IE_REG 0x04
63 #define OMAP_I2C_STAT_REG 0x08
64 #define OMAP_I2C_IV_REG 0x0c
65 #define OMAP_I2C_SYSS_REG 0x10
66 #define OMAP_I2C_BUF_REG 0x14
67 #define OMAP_I2C_CNT_REG 0x18
68 #define OMAP_I2C_DATA_REG 0x1c
69 #define OMAP_I2C_SYSC_REG 0x20
70 #define OMAP_I2C_CON_REG 0x24
71 #define OMAP_I2C_OA_REG 0x28
72 #define OMAP_I2C_SA_REG 0x2c
73 #define OMAP_I2C_PSC_REG 0x30
74 #define OMAP_I2C_SCLL_REG 0x34
75 #define OMAP_I2C_SCLH_REG 0x38
76 #define OMAP_I2C_SYSTEST_REG 0x3c
78 /* I2C Interrupt Enable Register (OMAP_I2C_IE): */
79 #define OMAP_I2C_IE_XRDY (1 << 4) /* TX data ready int enable */
80 #define OMAP_I2C_IE_RRDY (1 << 3) /* RX data ready int enable */
81 #define OMAP_I2C_IE_ARDY (1 << 2) /* Access ready int enable */
82 #define OMAP_I2C_IE_NACK (1 << 1) /* No ack interrupt enable */
83 #define OMAP_I2C_IE_AL (1 << 0) /* Arbitration lost int ena */
85 /* I2C Status Register (OMAP_I2C_STAT): */
86 #define OMAP_I2C_STAT_SBD (1 << 15) /* Single byte data */
87 #define OMAP_I2C_STAT_BB (1 << 12) /* Bus busy */
88 #define OMAP_I2C_STAT_ROVR (1 << 11) /* Receive overrun */
89 #define OMAP_I2C_STAT_XUDF (1 << 10) /* Transmit underflow */
90 #define OMAP_I2C_STAT_AAS (1 << 9) /* Address as slave */
91 #define OMAP_I2C_STAT_AD0 (1 << 8) /* Address zero */
92 #define OMAP_I2C_STAT_XRDY (1 << 4) /* Transmit data ready */
93 #define OMAP_I2C_STAT_RRDY (1 << 3) /* Receive data ready */
94 #define OMAP_I2C_STAT_ARDY (1 << 2) /* Register access ready */
95 #define OMAP_I2C_STAT_NACK (1 << 1) /* No ack interrupt enable */
96 #define OMAP_I2C_STAT_AL (1 << 0) /* Arbitration lost int ena */
98 /* I2C Buffer Configuration Register (OMAP_I2C_BUF): */
99 #define OMAP_I2C_BUF_RDMA_EN (1 << 15) /* RX DMA channel enable */
100 #define OMAP_I2C_BUF_XDMA_EN (1 << 7) /* TX DMA channel enable */
102 /* I2C Configuration Register (OMAP_I2C_CON): */
103 #define OMAP_I2C_CON_EN (1 << 15) /* I2C module enable */
104 #define OMAP_I2C_CON_BE (1 << 14) /* Big endian mode */
105 #define OMAP_I2C_CON_STB (1 << 11) /* Start byte mode (master) */
106 #define OMAP_I2C_CON_MST (1 << 10) /* Master/slave mode */
107 #define OMAP_I2C_CON_TRX (1 << 9) /* TX/RX mode (master only) */
108 #define OMAP_I2C_CON_XA (1 << 8) /* Expand address */
109 #define OMAP_I2C_CON_RM (1 << 2) /* Repeat mode (master only) */
110 #define OMAP_I2C_CON_STP (1 << 1) /* Stop cond (master only) */
111 #define OMAP_I2C_CON_STT (1 << 0) /* Start condition (master) */
113 /* I2C System Test Register (OMAP_I2C_SYSTEST): */
114 #define OMAP_I2C_SYSTEST_ST_EN (1 << 15) /* System test enable */
115 #define OMAP_I2C_SYSTEST_FREE (1 << 14) /* Free running mode */
116 #define OMAP_I2C_SYSTEST_TMODE_MASK (3 << 12) /* Test mode select */
117 #define OMAP_I2C_SYSTEST_TMODE_SHIFT (12) /* Test mode select */
118 #define OMAP_I2C_SYSTEST_SCL_I (1 << 3) /* SCL line sense in */
119 #define OMAP_I2C_SYSTEST_SCL_O (1 << 2) /* SCL line drive out */
120 #define OMAP_I2C_SYSTEST_SDA_I (1 << 1) /* SDA line sense in */
121 #define OMAP_I2C_SYSTEST_SDA_O (1 << 0) /* SDA line drive out */
123 /* I2C System Status register (OMAP_I2C_SYSS): */
124 #define OMAP_I2C_SYSS_RDONE 1 /* Reset Done */
126 /* I2C System Configuration Register (OMAP_I2C_SYSC): */
127 #define OMAP_I2C_SYSC_SRST (1 << 1) /* Soft Reset */
129 /* REVISIT: Use platform_data instead of module parameters */
130 static int clock = 100; /* Default: Fast Mode = 400 KHz, Standard = 100 KHz */
131 module_param(clock, int, 0);
132 MODULE_PARM_DESC(clock, "Set I2C clock in kHz: 100 or 400 (Fast Mode)");
135 module_param(own, int, 0);
136 MODULE_PARM_DESC(own, "Address of OMAP I2C master (0 for default == 1)");
138 struct omap_i2c_dev {
140 void __iomem *base; /* virtual */
142 struct clk *iclk; /* Interface clock */
143 struct clk *fclk; /* Functional clock */
144 struct completion cmd_complete;
148 struct i2c_adapter adapter;
153 static inline void omap_i2c_write_reg(struct omap_i2c_dev *i2c_dev,
156 __raw_writew(val, i2c_dev->base + reg);
159 static inline u16 omap_i2c_read_reg(struct omap_i2c_dev *i2c_dev, int reg)
161 return __raw_readw(i2c_dev->base + reg);
164 static int omap_i2c_get_clocks(struct omap_i2c_dev *dev)
166 if (cpu_is_omap16xx() || cpu_is_omap24xx()) {
167 dev->iclk = clk_get(dev->dev, "i2c_ick");
168 if (IS_ERR(dev->iclk))
172 dev->fclk = clk_get(dev->dev, "i2c_fck");
173 if (IS_ERR(dev->fclk)) {
174 if (dev->iclk != NULL)
182 static void omap_i2c_put_clocks(struct omap_i2c_dev *dev)
186 if (dev->iclk != NULL) {
192 static void omap_i2c_enable_clocks(struct omap_i2c_dev *dev)
194 if (dev->iclk != NULL)
195 clk_enable(dev->iclk);
196 clk_enable(dev->fclk);
199 static void omap_i2c_disable_clocks(struct omap_i2c_dev *dev)
201 if (dev->iclk != NULL)
202 clk_disable(dev->iclk);
203 clk_disable(dev->fclk);
206 static void omap_i2c_reset(struct omap_i2c_dev *dev)
209 unsigned long fclk_rate;
212 omap_i2c_write_reg(dev, OMAP_I2C_SYSC_REG, OMAP_I2C_SYSC_SRST);
213 /* For some reason we need to set the EN bit before the
214 * reset done bit gets set. */
215 omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, OMAP_I2C_CON_EN);
216 while (!(omap_i2c_read_reg(dev, OMAP_I2C_SYSS_REG) & 0x01));
218 omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, 0);
220 if (cpu_class_is_omap1()) {
221 struct clk *armxor_ck;
222 unsigned long armxor_rate;
224 armxor_ck = clk_get(NULL, "armxor_ck");
225 if (IS_ERR(armxor_ck)) {
226 printk(KERN_WARNING "i2c: Could not get armxor_ck\n");
227 armxor_rate = 12000000;
229 armxor_rate = clk_get_rate(armxor_ck);
233 if (armxor_rate > 16000000)
234 psc = (armxor_rate + 8000000) / 12000000;
238 fclk_rate = armxor_rate;
239 } else if (cpu_class_is_omap2()) {
240 fclk_rate = 12000000;
244 /* Setup clock prescaler to obtain approx 12MHz I2C module clock: */
245 omap_i2c_write_reg(dev, OMAP_I2C_PSC_REG, psc);
247 /* Program desired operating rate */
248 fclk_rate /= (psc + 1) * 1000;
252 omap_i2c_write_reg(dev, OMAP_I2C_SCLL_REG,
253 fclk_rate / (clock * 2) - 7 + psc);
254 omap_i2c_write_reg(dev, OMAP_I2C_SCLH_REG,
255 fclk_rate / (clock * 2) - 7 + psc);
257 /* Set Own Address: */
258 omap_i2c_write_reg(dev, OMAP_I2C_OA_REG, dev->own_address);
260 /* Take the I2C module out of reset: */
261 omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, OMAP_I2C_CON_EN);
263 /* Enable interrupts */
264 omap_i2c_write_reg(dev, OMAP_I2C_IE_REG,
265 (OMAP_I2C_IE_XRDY | OMAP_I2C_IE_RRDY |
266 OMAP_I2C_IE_ARDY | OMAP_I2C_IE_NACK |
271 * Waiting on Bus Busy
273 static int omap_i2c_wait_for_bb(struct omap_i2c_dev *dev)
275 unsigned long timeout;
277 timeout = jiffies + OMAP_I2C_TIMEOUT;
278 while (omap_i2c_read_reg(dev, OMAP_I2C_STAT_REG) & OMAP_I2C_STAT_BB) {
279 if (time_after(jiffies, timeout)) {
280 dev_warn(dev->dev, "timeout waiting for bus ready\n");
290 * Low level master read/write transaction.
292 static int omap_i2c_xfer_msg(struct i2c_adapter *adap,
293 struct i2c_msg *msg, int stop)
295 struct omap_i2c_dev *dev = i2c_get_adapdata(adap);
300 dev_dbg(dev->dev, "addr: 0x%04x, len: %d, flags: 0x%x, stop: %d\n",
301 msg->addr, msg->len, msg->flags, stop);
303 omap_i2c_write_reg(dev, OMAP_I2C_SA_REG, msg->addr);
305 /* Sigh, seems we can't do zero length transactions. Thus, we
306 * can't probe for devices w/o actually sending/receiving at least
307 * a single byte. So we'll set count to 1 for the zero length
308 * transaction case and hope we don't cause grief for some
309 * arbitrary device due to random byte write/read during
312 /* REVISIT: Could the STB bit of I2C_CON be used with probing? */
314 dev->buf = &zero_byte;
318 dev->buf_len = msg->len;
320 omap_i2c_write_reg(dev, OMAP_I2C_CNT_REG, dev->buf_len);
322 init_completion(&dev->cmd_complete);
325 w = OMAP_I2C_CON_EN | OMAP_I2C_CON_MST | OMAP_I2C_CON_STT;
326 if (msg->flags & I2C_M_TEN)
327 w |= OMAP_I2C_CON_XA;
328 if (!(msg->flags & I2C_M_RD))
329 w |= OMAP_I2C_CON_TRX;
331 w |= OMAP_I2C_CON_STP;
332 omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, w);
334 r = wait_for_completion_interruptible_timeout(&dev->cmd_complete,
340 dev_err(dev->dev, "controller timed out\n");
345 if (likely(!dev->cmd_err))
348 /* We have an error */
349 if (dev->cmd_err & OMAP_I2C_STAT_NACK) {
350 if (msg->flags & I2C_M_IGNORE_NAK)
355 w = omap_i2c_read_reg(dev, OMAP_I2C_CON_REG);
356 w |= OMAP_I2C_CON_STP;
357 omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, w);
361 if (dev->cmd_err & (OMAP_I2C_STAT_AL | OMAP_I2C_STAT_ROVR |
369 * Prepare controller for a transaction and call omap_i2c_xfer_msg
370 * to do the work during IRQ processing.
373 omap_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[], int num)
375 struct omap_i2c_dev *dev = i2c_get_adapdata(adap);
379 if (num < 1 || num > MAX_MESSAGES)
382 /* Check for valid parameters in messages */
383 for (i = 0; i < num; i++)
384 if (msgs[i].buf == NULL)
387 omap_i2c_enable_clocks(dev);
389 /* REVISIT: initialize and use adap->retries */
390 if ((r = omap_i2c_wait_for_bb(dev)) < 0)
393 for (i = 0; i < num; i++) {
394 dev_dbg(dev->dev, "msg: %d, addr: 0x%04x, len: %d, flags: 0x%x\n",
395 i, msgs[i].addr, msgs[i].len, msgs[i].flags);
396 r = omap_i2c_xfer_msg(adap, &msgs[i], (i == (num - 1)));
404 omap_i2c_disable_clocks(dev);
409 omap_i2c_func(struct i2c_adapter *adap)
411 return I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL;
415 omap_i2c_complete_cmd(struct omap_i2c_dev *dev, u16 err)
418 complete(&dev->cmd_complete);
422 omap_i2c_ack_stat(struct omap_i2c_dev *dev, u16 stat)
424 omap_i2c_write_reg(dev, OMAP_I2C_STAT_REG, stat);
427 #ifdef CONFIG_ARCH_OMAP15XX
429 omap_i2c_rev1_isr(int this_irq, void *dev_id, struct pt_regs *regs)
431 struct omap_i2c_dev *dev = dev_id;
434 iv = omap_i2c_read_reg(dev, OMAP_I2C_IV_REG);
436 case 0x00: /* None */
438 case 0x01: /* Arbitration lost */
439 dev_err(dev->dev, "Arbitration lost\n");
440 omap_i2c_complete_cmd(dev, OMAP_I2C_STAT_AL);
442 case 0x02: /* No acknowledgement */
443 omap_i2c_complete_cmd(dev, OMAP_I2C_STAT_NACK);
444 omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, OMAP_I2C_CON_STP);
446 case 0x03: /* Register access ready */
447 omap_i2c_complete_cmd(dev, 0);
449 case 0x04: /* Receive data ready */
451 w = omap_i2c_read_reg(dev, OMAP_I2C_DATA_REG);
455 *dev->buf++ = w >> 8;
459 dev_err(dev->dev, "RRDY IRQ while no data requested\n");
461 case 0x05: /* Transmit data ready */
466 w |= *dev->buf++ << 8;
469 omap_i2c_write_reg(dev, OMAP_I2C_DATA_REG, w);
471 dev_err(dev->dev, "XRDY IRQ while no data to send\n");
482 omap_i2c_isr(int this_irq, void *dev_id, struct pt_regs *regs)
484 struct omap_i2c_dev *dev = dev_id;
489 bits = omap_i2c_read_reg(dev, OMAP_I2C_IE_REG);
490 while ((stat = (omap_i2c_read_reg(dev, OMAP_I2C_STAT_REG))) & bits) {
491 dev_dbg(dev->dev, "IRQ (ISR = 0x%04x)\n", stat);
492 if (count++ == 100) {
493 dev_warn(dev->dev, "Too much work in one IRQ\n");
497 omap_i2c_write_reg(dev, OMAP_I2C_STAT_REG, stat);
499 if (stat & OMAP_I2C_STAT_ARDY) {
500 omap_i2c_complete_cmd(dev, 0);
503 if (stat & OMAP_I2C_STAT_RRDY) {
504 w = omap_i2c_read_reg(dev, OMAP_I2C_DATA_REG);
509 *dev->buf++ = w >> 8;
513 dev_err(dev->dev, "RRDY IRQ while no data requested\n");
514 omap_i2c_ack_stat(dev, OMAP_I2C_STAT_RRDY);
517 if (stat & OMAP_I2C_STAT_XRDY) {
525 w |= *dev->buf++ << 8;
529 dev_err(dev->dev, "XRDY IRQ while no data to send\n");
531 if (!(stat & OMAP_I2C_STAT_BB)) {
532 dev_warn(dev->dev, "XRDY while bus not busy\n");
536 omap_i2c_write_reg(dev, OMAP_I2C_DATA_REG, w);
537 omap_i2c_ack_stat(dev, OMAP_I2C_STAT_XRDY);
539 omap_i2c_complete_cmd(dev, 1 << 15);
542 if (stat & OMAP_I2C_STAT_ROVR) {
543 dev_err(dev->dev, "Receive overrun\n");
544 dev->cmd_err |= OMAP_I2C_STAT_ROVR;
546 if (stat & OMAP_I2C_STAT_XUDF) {
547 dev_err(dev->dev, "Transmit overflow\n");
548 dev->cmd_err |= OMAP_I2C_STAT_XUDF;
550 if (stat & OMAP_I2C_STAT_NACK) {
551 omap_i2c_complete_cmd(dev, OMAP_I2C_STAT_NACK);
552 omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, OMAP_I2C_CON_STP);
554 if (stat & OMAP_I2C_STAT_AL) {
555 dev_err(dev->dev, "Arbitration lost\n");
556 omap_i2c_complete_cmd(dev, OMAP_I2C_STAT_AL);
560 return count ? IRQ_HANDLED : IRQ_NONE;
563 static struct i2c_algorithm omap_i2c_algo = {
564 .master_xfer = omap_i2c_xfer,
565 .functionality = omap_i2c_func,
569 omap_i2c_probe(struct platform_device *pdev)
571 struct omap_i2c_dev *dev;
572 struct i2c_adapter *adap;
573 struct resource *mem, *irq;
576 /* NOTE: driver uses the static register mapping */
577 mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
579 dev_err(&pdev->dev, "no mem resource?\n");
582 irq = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
584 dev_err(&pdev->dev, "no irq resource?\n");
588 r = (int) request_mem_region(mem->start, (mem->end - mem->start) + 1,
591 dev_err(&pdev->dev, "I2C region already claimed\n");
596 clock = 400; /* Fast mode */
598 clock = 100; /* Standard mode */
600 dev = kzalloc(sizeof(struct omap_i2c_dev), GFP_KERNEL);
603 goto do_release_region;
606 /* FIXME: Get own address from platform_data */
607 if (own >= 1 && own < 0x7f)
608 dev->own_address = own;
612 dev->dev = &pdev->dev;
613 dev->irq = irq->start;
614 dev->base = (void __iomem *) IO_ADDRESS(mem->start);
615 platform_set_drvdata(pdev, dev);
617 if ((r = omap_i2c_get_clocks(dev)) != 0)
620 omap_i2c_enable_clocks(dev);
622 #ifdef CONFIG_ARCH_OMAP15XX
623 dev->rev1 = omap_i2c_read_reg(dev, OMAP_I2C_REV_REG) < 0x20;
626 /* reset ASAP, clearing any IRQs */
629 #ifdef CONFIG_ARCH_OMAP15XX
630 r = request_irq(dev->irq, dev->rev1 ? omap_i2c_rev1_isr : omap_i2c_isr,
631 0, driver_name, dev);
633 r = request_irq(dev->irq, omap_i2c_isr, 0, driver_name, dev);
636 dev_err(dev->dev, "failure requesting irq %i\n", dev->irq);
637 goto do_unuse_clocks;
639 r = omap_i2c_read_reg(dev, OMAP_I2C_REV_REG) & 0xff;
640 dev_info(dev->dev, "bus %d rev%d.%d at %d kHz\n",
641 pdev->id - 1, r >> 4, r & 0xf, clock);
643 adap = &dev->adapter;
644 i2c_set_adapdata(adap, dev);
645 adap->owner = THIS_MODULE;
646 adap->class = I2C_CLASS_HWMON;
647 strncpy(adap->name, "OMAP I2C adapter", sizeof(adap->name));
648 adap->algo = &omap_i2c_algo;
649 adap->dev.parent = &pdev->dev;
651 /* i2c device drivers may be active on return from add_adapter() */
652 r = i2c_add_adapter(adap);
654 dev_err(dev->dev, "failure adding adapter\n");
658 omap_i2c_disable_clocks(dev);
663 free_irq(dev->irq, dev);
665 omap_i2c_disable_clocks(dev);
666 omap_i2c_put_clocks(dev);
670 omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, 0);
671 release_mem_region(mem->start, (mem->end - mem->start) + 1);
677 omap_i2c_remove(struct platform_device *pdev)
679 struct omap_i2c_dev *dev = platform_get_drvdata(pdev);
680 struct resource *mem;
682 free_irq(dev->irq, dev);
683 i2c_del_adapter(&dev->adapter);
684 omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, 0);
685 omap_i2c_put_clocks(dev);
687 mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
688 release_mem_region(mem->start, (mem->end - mem->start) + 1);
692 static struct platform_driver omap_i2c_driver = {
693 .probe = omap_i2c_probe,
694 .remove = omap_i2c_remove,
696 .name = (char *)driver_name,
700 /* I2C may be needed to bring up other drivers */
702 omap_i2c_init_driver(void)
704 return platform_driver_register(&omap_i2c_driver);
706 subsys_initcall(omap_i2c_init_driver);
708 static void __exit omap_i2c_exit_driver(void)
710 platform_driver_unregister(&omap_i2c_driver);
712 module_exit(omap_i2c_exit_driver);
714 MODULE_AUTHOR("MontaVista Software, Inc. (and others)");
715 MODULE_DESCRIPTION("TI OMAP I2C bus adapter");
716 MODULE_LICENSE("GPL");