xref: /openbmc/linux/drivers/i2c/busses/i2c-omap.c (revision baa7eb025ab14f3cba2e35c0a8648f9c9f01d24f)
1 /*
2  * TI OMAP I2C master mode driver
3  *
4  * Copyright (C) 2003 MontaVista Software, Inc.
5  * Copyright (C) 2005 Nokia Corporation
6  * Copyright (C) 2004 - 2007 Texas Instruments.
7  *
8  * Originally written by MontaVista Software, Inc.
9  * Additional contributions by:
10  *	Tony Lindgren <tony@atomide.com>
11  *	Imre Deak <imre.deak@nokia.com>
12  *	Juha Yrjölä <juha.yrjola@solidboot.com>
13  *	Syed Khasim <x0khasim@ti.com>
14  *	Nishant Menon <nm@ti.com>
15  *
16  * This program is free software; you can redistribute it and/or modify
17  * it under the terms of the GNU General Public License as published by
18  * the Free Software Foundation; either version 2 of the License, or
19  * (at your option) any later version.
20  *
21  * This program is distributed in the hope that it will be useful,
22  * but WITHOUT ANY WARRANTY; without even the implied warranty of
23  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
24  * GNU General Public License for more details.
25  *
26  * You should have received a copy of the GNU General Public License
27  * along with this program; if not, write to the Free Software
28  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
29  */
30 
31 #include <linux/module.h>
32 #include <linux/delay.h>
33 #include <linux/i2c.h>
34 #include <linux/err.h>
35 #include <linux/interrupt.h>
36 #include <linux/completion.h>
37 #include <linux/platform_device.h>
38 #include <linux/clk.h>
39 #include <linux/io.h>
40 #include <linux/slab.h>
41 #include <linux/i2c-omap.h>
42 
43 /* I2C controller revisions */
44 #define OMAP_I2C_REV_2			0x20
45 
46 /* I2C controller revisions present on specific hardware */
47 #define OMAP_I2C_REV_ON_2430		0x36
48 #define OMAP_I2C_REV_ON_3430		0x3C
49 #define OMAP_I2C_REV_ON_4430		0x40
50 
51 /* timeout waiting for the controller to respond */
52 #define OMAP_I2C_TIMEOUT (msecs_to_jiffies(1000))
53 
54 /* For OMAP3 I2C_IV has changed to I2C_WE (wakeup enable) */
55 enum {
56 	OMAP_I2C_REV_REG = 0,
57 	OMAP_I2C_IE_REG,
58 	OMAP_I2C_STAT_REG,
59 	OMAP_I2C_IV_REG,
60 	OMAP_I2C_WE_REG,
61 	OMAP_I2C_SYSS_REG,
62 	OMAP_I2C_BUF_REG,
63 	OMAP_I2C_CNT_REG,
64 	OMAP_I2C_DATA_REG,
65 	OMAP_I2C_SYSC_REG,
66 	OMAP_I2C_CON_REG,
67 	OMAP_I2C_OA_REG,
68 	OMAP_I2C_SA_REG,
69 	OMAP_I2C_PSC_REG,
70 	OMAP_I2C_SCLL_REG,
71 	OMAP_I2C_SCLH_REG,
72 	OMAP_I2C_SYSTEST_REG,
73 	OMAP_I2C_BUFSTAT_REG,
74 	OMAP_I2C_REVNB_LO,
75 	OMAP_I2C_REVNB_HI,
76 	OMAP_I2C_IRQSTATUS_RAW,
77 	OMAP_I2C_IRQENABLE_SET,
78 	OMAP_I2C_IRQENABLE_CLR,
79 };
80 
81 /* I2C Interrupt Enable Register (OMAP_I2C_IE): */
82 #define OMAP_I2C_IE_XDR		(1 << 14)	/* TX Buffer drain int enable */
83 #define OMAP_I2C_IE_RDR		(1 << 13)	/* RX Buffer drain int enable */
84 #define OMAP_I2C_IE_XRDY	(1 << 4)	/* TX data ready int enable */
85 #define OMAP_I2C_IE_RRDY	(1 << 3)	/* RX data ready int enable */
86 #define OMAP_I2C_IE_ARDY	(1 << 2)	/* Access ready int enable */
87 #define OMAP_I2C_IE_NACK	(1 << 1)	/* No ack interrupt enable */
88 #define OMAP_I2C_IE_AL		(1 << 0)	/* Arbitration lost int ena */
89 
90 /* I2C Status Register (OMAP_I2C_STAT): */
91 #define OMAP_I2C_STAT_XDR	(1 << 14)	/* TX Buffer draining */
92 #define OMAP_I2C_STAT_RDR	(1 << 13)	/* RX Buffer draining */
93 #define OMAP_I2C_STAT_BB	(1 << 12)	/* Bus busy */
94 #define OMAP_I2C_STAT_ROVR	(1 << 11)	/* Receive overrun */
95 #define OMAP_I2C_STAT_XUDF	(1 << 10)	/* Transmit underflow */
96 #define OMAP_I2C_STAT_AAS	(1 << 9)	/* Address as slave */
97 #define OMAP_I2C_STAT_AD0	(1 << 8)	/* Address zero */
98 #define OMAP_I2C_STAT_XRDY	(1 << 4)	/* Transmit data ready */
99 #define OMAP_I2C_STAT_RRDY	(1 << 3)	/* Receive data ready */
100 #define OMAP_I2C_STAT_ARDY	(1 << 2)	/* Register access ready */
101 #define OMAP_I2C_STAT_NACK	(1 << 1)	/* No ack interrupt enable */
102 #define OMAP_I2C_STAT_AL	(1 << 0)	/* Arbitration lost int ena */
103 
104 /* I2C WE wakeup enable register */
105 #define OMAP_I2C_WE_XDR_WE	(1 << 14)	/* TX drain wakup */
106 #define OMAP_I2C_WE_RDR_WE	(1 << 13)	/* RX drain wakeup */
107 #define OMAP_I2C_WE_AAS_WE	(1 << 9)	/* Address as slave wakeup*/
108 #define OMAP_I2C_WE_BF_WE	(1 << 8)	/* Bus free wakeup */
109 #define OMAP_I2C_WE_STC_WE	(1 << 6)	/* Start condition wakeup */
110 #define OMAP_I2C_WE_GC_WE	(1 << 5)	/* General call wakeup */
111 #define OMAP_I2C_WE_DRDY_WE	(1 << 3)	/* TX/RX data ready wakeup */
112 #define OMAP_I2C_WE_ARDY_WE	(1 << 2)	/* Reg access ready wakeup */
113 #define OMAP_I2C_WE_NACK_WE	(1 << 1)	/* No acknowledgment wakeup */
114 #define OMAP_I2C_WE_AL_WE	(1 << 0)	/* Arbitration lost wakeup */
115 
116 #define OMAP_I2C_WE_ALL		(OMAP_I2C_WE_XDR_WE | OMAP_I2C_WE_RDR_WE | \
117 				OMAP_I2C_WE_AAS_WE | OMAP_I2C_WE_BF_WE | \
118 				OMAP_I2C_WE_STC_WE | OMAP_I2C_WE_GC_WE | \
119 				OMAP_I2C_WE_DRDY_WE | OMAP_I2C_WE_ARDY_WE | \
120 				OMAP_I2C_WE_NACK_WE | OMAP_I2C_WE_AL_WE)
121 
122 /* I2C Buffer Configuration Register (OMAP_I2C_BUF): */
123 #define OMAP_I2C_BUF_RDMA_EN	(1 << 15)	/* RX DMA channel enable */
124 #define OMAP_I2C_BUF_RXFIF_CLR	(1 << 14)	/* RX FIFO Clear */
125 #define OMAP_I2C_BUF_XDMA_EN	(1 << 7)	/* TX DMA channel enable */
126 #define OMAP_I2C_BUF_TXFIF_CLR	(1 << 6)	/* TX FIFO Clear */
127 
128 /* I2C Configuration Register (OMAP_I2C_CON): */
129 #define OMAP_I2C_CON_EN		(1 << 15)	/* I2C module enable */
130 #define OMAP_I2C_CON_BE		(1 << 14)	/* Big endian mode */
131 #define OMAP_I2C_CON_OPMODE_HS	(1 << 12)	/* High Speed support */
132 #define OMAP_I2C_CON_STB	(1 << 11)	/* Start byte mode (master) */
133 #define OMAP_I2C_CON_MST	(1 << 10)	/* Master/slave mode */
134 #define OMAP_I2C_CON_TRX	(1 << 9)	/* TX/RX mode (master only) */
135 #define OMAP_I2C_CON_XA		(1 << 8)	/* Expand address */
136 #define OMAP_I2C_CON_RM		(1 << 2)	/* Repeat mode (master only) */
137 #define OMAP_I2C_CON_STP	(1 << 1)	/* Stop cond (master only) */
138 #define OMAP_I2C_CON_STT	(1 << 0)	/* Start condition (master) */
139 
140 /* I2C SCL time value when Master */
141 #define OMAP_I2C_SCLL_HSSCLL	8
142 #define OMAP_I2C_SCLH_HSSCLH	8
143 
144 /* I2C System Test Register (OMAP_I2C_SYSTEST): */
145 #ifdef DEBUG
146 #define OMAP_I2C_SYSTEST_ST_EN		(1 << 15)	/* System test enable */
147 #define OMAP_I2C_SYSTEST_FREE		(1 << 14)	/* Free running mode */
148 #define OMAP_I2C_SYSTEST_TMODE_MASK	(3 << 12)	/* Test mode select */
149 #define OMAP_I2C_SYSTEST_TMODE_SHIFT	(12)		/* Test mode select */
150 #define OMAP_I2C_SYSTEST_SCL_I		(1 << 3)	/* SCL line sense in */
151 #define OMAP_I2C_SYSTEST_SCL_O		(1 << 2)	/* SCL line drive out */
152 #define OMAP_I2C_SYSTEST_SDA_I		(1 << 1)	/* SDA line sense in */
153 #define OMAP_I2C_SYSTEST_SDA_O		(1 << 0)	/* SDA line drive out */
154 #endif
155 
156 /* OCP_SYSSTATUS bit definitions */
157 #define SYSS_RESETDONE_MASK		(1 << 0)
158 
159 /* OCP_SYSCONFIG bit definitions */
160 #define SYSC_CLOCKACTIVITY_MASK		(0x3 << 8)
161 #define SYSC_SIDLEMODE_MASK		(0x3 << 3)
162 #define SYSC_ENAWAKEUP_MASK		(1 << 2)
163 #define SYSC_SOFTRESET_MASK		(1 << 1)
164 #define SYSC_AUTOIDLE_MASK		(1 << 0)
165 
166 #define SYSC_IDLEMODE_SMART		0x2
167 #define SYSC_CLOCKACTIVITY_FCLK		0x2
168 
169 /* Errata definitions */
170 #define I2C_OMAP_ERRATA_I207		(1 << 0)
171 #define I2C_OMAP3_1P153			(1 << 1)
172 
173 struct omap_i2c_dev {
174 	struct device		*dev;
175 	void __iomem		*base;		/* virtual */
176 	int			irq;
177 	int			reg_shift;      /* bit shift for I2C register addresses */
178 	struct clk		*iclk;		/* Interface clock */
179 	struct clk		*fclk;		/* Functional clock */
180 	struct completion	cmd_complete;
181 	struct resource		*ioarea;
182 	u32			latency;	/* maximum mpu wkup latency */
183 	void			(*set_mpu_wkup_lat)(struct device *dev,
184 						    long latency);
185 	u32			speed;		/* Speed of bus in Khz */
186 	u16			cmd_err;
187 	u8			*buf;
188 	u8			*regs;
189 	size_t			buf_len;
190 	struct i2c_adapter	adapter;
191 	u8			fifo_size;	/* use as flag and value
192 						 * fifo_size==0 implies no fifo
193 						 * if set, should be trsh+1
194 						 */
195 	u8			rev;
196 	unsigned		b_hw:1;		/* bad h/w fixes */
197 	unsigned		idle:1;
198 	u16			iestate;	/* Saved interrupt register */
199 	u16			pscstate;
200 	u16			scllstate;
201 	u16			sclhstate;
202 	u16			bufstate;
203 	u16			syscstate;
204 	u16			westate;
205 	u16			errata;
206 };
207 
208 const static u8 reg_map[] = {
209 	[OMAP_I2C_REV_REG] = 0x00,
210 	[OMAP_I2C_IE_REG] = 0x01,
211 	[OMAP_I2C_STAT_REG] = 0x02,
212 	[OMAP_I2C_IV_REG] = 0x03,
213 	[OMAP_I2C_WE_REG] = 0x03,
214 	[OMAP_I2C_SYSS_REG] = 0x04,
215 	[OMAP_I2C_BUF_REG] = 0x05,
216 	[OMAP_I2C_CNT_REG] = 0x06,
217 	[OMAP_I2C_DATA_REG] = 0x07,
218 	[OMAP_I2C_SYSC_REG] = 0x08,
219 	[OMAP_I2C_CON_REG] = 0x09,
220 	[OMAP_I2C_OA_REG] = 0x0a,
221 	[OMAP_I2C_SA_REG] = 0x0b,
222 	[OMAP_I2C_PSC_REG] = 0x0c,
223 	[OMAP_I2C_SCLL_REG] = 0x0d,
224 	[OMAP_I2C_SCLH_REG] = 0x0e,
225 	[OMAP_I2C_SYSTEST_REG] = 0x0f,
226 	[OMAP_I2C_BUFSTAT_REG] = 0x10,
227 };
228 
229 const static u8 omap4_reg_map[] = {
230 	[OMAP_I2C_REV_REG] = 0x04,
231 	[OMAP_I2C_IE_REG] = 0x2c,
232 	[OMAP_I2C_STAT_REG] = 0x28,
233 	[OMAP_I2C_IV_REG] = 0x34,
234 	[OMAP_I2C_WE_REG] = 0x34,
235 	[OMAP_I2C_SYSS_REG] = 0x90,
236 	[OMAP_I2C_BUF_REG] = 0x94,
237 	[OMAP_I2C_CNT_REG] = 0x98,
238 	[OMAP_I2C_DATA_REG] = 0x9c,
239 	[OMAP_I2C_SYSC_REG] = 0x20,
240 	[OMAP_I2C_CON_REG] = 0xa4,
241 	[OMAP_I2C_OA_REG] = 0xa8,
242 	[OMAP_I2C_SA_REG] = 0xac,
243 	[OMAP_I2C_PSC_REG] = 0xb0,
244 	[OMAP_I2C_SCLL_REG] = 0xb4,
245 	[OMAP_I2C_SCLH_REG] = 0xb8,
246 	[OMAP_I2C_SYSTEST_REG] = 0xbC,
247 	[OMAP_I2C_BUFSTAT_REG] = 0xc0,
248 	[OMAP_I2C_REVNB_LO] = 0x00,
249 	[OMAP_I2C_REVNB_HI] = 0x04,
250 	[OMAP_I2C_IRQSTATUS_RAW] = 0x24,
251 	[OMAP_I2C_IRQENABLE_SET] = 0x2c,
252 	[OMAP_I2C_IRQENABLE_CLR] = 0x30,
253 };
254 
255 static inline void omap_i2c_write_reg(struct omap_i2c_dev *i2c_dev,
256 				      int reg, u16 val)
257 {
258 	__raw_writew(val, i2c_dev->base +
259 			(i2c_dev->regs[reg] << i2c_dev->reg_shift));
260 }
261 
262 static inline u16 omap_i2c_read_reg(struct omap_i2c_dev *i2c_dev, int reg)
263 {
264 	return __raw_readw(i2c_dev->base +
265 				(i2c_dev->regs[reg] << i2c_dev->reg_shift));
266 }
267 
268 static int __init omap_i2c_get_clocks(struct omap_i2c_dev *dev)
269 {
270 	int ret;
271 
272 	dev->iclk = clk_get(dev->dev, "ick");
273 	if (IS_ERR(dev->iclk)) {
274 		ret = PTR_ERR(dev->iclk);
275 		dev->iclk = NULL;
276 		return ret;
277 	}
278 
279 	dev->fclk = clk_get(dev->dev, "fck");
280 	if (IS_ERR(dev->fclk)) {
281 		ret = PTR_ERR(dev->fclk);
282 		if (dev->iclk != NULL) {
283 			clk_put(dev->iclk);
284 			dev->iclk = NULL;
285 		}
286 		dev->fclk = NULL;
287 		return ret;
288 	}
289 
290 	return 0;
291 }
292 
293 static void omap_i2c_put_clocks(struct omap_i2c_dev *dev)
294 {
295 	clk_put(dev->fclk);
296 	dev->fclk = NULL;
297 	clk_put(dev->iclk);
298 	dev->iclk = NULL;
299 }
300 
301 static void omap_i2c_unidle(struct omap_i2c_dev *dev)
302 {
303 	WARN_ON(!dev->idle);
304 
305 	clk_enable(dev->iclk);
306 	clk_enable(dev->fclk);
307 	if (cpu_is_omap34xx()) {
308 		omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, 0);
309 		omap_i2c_write_reg(dev, OMAP_I2C_PSC_REG, dev->pscstate);
310 		omap_i2c_write_reg(dev, OMAP_I2C_SCLL_REG, dev->scllstate);
311 		omap_i2c_write_reg(dev, OMAP_I2C_SCLH_REG, dev->sclhstate);
312 		omap_i2c_write_reg(dev, OMAP_I2C_BUF_REG, dev->bufstate);
313 		omap_i2c_write_reg(dev, OMAP_I2C_SYSC_REG, dev->syscstate);
314 		omap_i2c_write_reg(dev, OMAP_I2C_WE_REG, dev->westate);
315 		omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, OMAP_I2C_CON_EN);
316 	}
317 	dev->idle = 0;
318 
319 	/*
320 	 * Don't write to this register if the IE state is 0 as it can
321 	 * cause deadlock.
322 	 */
323 	if (dev->iestate)
324 		omap_i2c_write_reg(dev, OMAP_I2C_IE_REG, dev->iestate);
325 }
326 
327 static void omap_i2c_idle(struct omap_i2c_dev *dev)
328 {
329 	u16 iv;
330 
331 	WARN_ON(dev->idle);
332 
333 	dev->iestate = omap_i2c_read_reg(dev, OMAP_I2C_IE_REG);
334 	if (dev->rev >= OMAP_I2C_REV_ON_4430)
335 		omap_i2c_write_reg(dev, OMAP_I2C_IRQENABLE_CLR, 1);
336 	else
337 		omap_i2c_write_reg(dev, OMAP_I2C_IE_REG, 0);
338 
339 	if (dev->rev < OMAP_I2C_REV_2) {
340 		iv = omap_i2c_read_reg(dev, OMAP_I2C_IV_REG); /* Read clears */
341 	} else {
342 		omap_i2c_write_reg(dev, OMAP_I2C_STAT_REG, dev->iestate);
343 
344 		/* Flush posted write before the dev->idle store occurs */
345 		omap_i2c_read_reg(dev, OMAP_I2C_STAT_REG);
346 	}
347 	dev->idle = 1;
348 	clk_disable(dev->fclk);
349 	clk_disable(dev->iclk);
350 }
351 
352 static int omap_i2c_init(struct omap_i2c_dev *dev)
353 {
354 	u16 psc = 0, scll = 0, sclh = 0, buf = 0;
355 	u16 fsscll = 0, fssclh = 0, hsscll = 0, hssclh = 0;
356 	unsigned long fclk_rate = 12000000;
357 	unsigned long timeout;
358 	unsigned long internal_clk = 0;
359 
360 	if (dev->rev >= OMAP_I2C_REV_2) {
361 		/* Disable I2C controller before soft reset */
362 		omap_i2c_write_reg(dev, OMAP_I2C_CON_REG,
363 			omap_i2c_read_reg(dev, OMAP_I2C_CON_REG) &
364 				~(OMAP_I2C_CON_EN));
365 
366 		omap_i2c_write_reg(dev, OMAP_I2C_SYSC_REG, SYSC_SOFTRESET_MASK);
367 		/* For some reason we need to set the EN bit before the
368 		 * reset done bit gets set. */
369 		timeout = jiffies + OMAP_I2C_TIMEOUT;
370 		omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, OMAP_I2C_CON_EN);
371 		while (!(omap_i2c_read_reg(dev, OMAP_I2C_SYSS_REG) &
372 			 SYSS_RESETDONE_MASK)) {
373 			if (time_after(jiffies, timeout)) {
374 				dev_warn(dev->dev, "timeout waiting "
375 						"for controller reset\n");
376 				return -ETIMEDOUT;
377 			}
378 			msleep(1);
379 		}
380 
381 		/* SYSC register is cleared by the reset; rewrite it */
382 		if (dev->rev == OMAP_I2C_REV_ON_2430) {
383 
384 			omap_i2c_write_reg(dev, OMAP_I2C_SYSC_REG,
385 					   SYSC_AUTOIDLE_MASK);
386 
387 		} else if (dev->rev >= OMAP_I2C_REV_ON_3430) {
388 			dev->syscstate = SYSC_AUTOIDLE_MASK;
389 			dev->syscstate |= SYSC_ENAWAKEUP_MASK;
390 			dev->syscstate |= (SYSC_IDLEMODE_SMART <<
391 			      __ffs(SYSC_SIDLEMODE_MASK));
392 			dev->syscstate |= (SYSC_CLOCKACTIVITY_FCLK <<
393 			      __ffs(SYSC_CLOCKACTIVITY_MASK));
394 
395 			omap_i2c_write_reg(dev, OMAP_I2C_SYSC_REG,
396 							dev->syscstate);
397 			/*
398 			 * Enabling all wakup sources to stop I2C freezing on
399 			 * WFI instruction.
400 			 * REVISIT: Some wkup sources might not be needed.
401 			 */
402 			dev->westate = OMAP_I2C_WE_ALL;
403 			if (dev->rev < OMAP_I2C_REV_ON_4430)
404 				omap_i2c_write_reg(dev, OMAP_I2C_WE_REG,
405 								dev->westate);
406 		}
407 	}
408 	omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, 0);
409 
410 	if (cpu_class_is_omap1()) {
411 		/*
412 		 * The I2C functional clock is the armxor_ck, so there's
413 		 * no need to get "armxor_ck" separately.  Now, if OMAP2420
414 		 * always returns 12MHz for the functional clock, we can
415 		 * do this bit unconditionally.
416 		 */
417 		fclk_rate = clk_get_rate(dev->fclk);
418 
419 		/* TRM for 5912 says the I2C clock must be prescaled to be
420 		 * between 7 - 12 MHz. The XOR input clock is typically
421 		 * 12, 13 or 19.2 MHz. So we should have code that produces:
422 		 *
423 		 * XOR MHz	Divider		Prescaler
424 		 * 12		1		0
425 		 * 13		2		1
426 		 * 19.2		2		1
427 		 */
428 		if (fclk_rate > 12000000)
429 			psc = fclk_rate / 12000000;
430 	}
431 
432 	if (!(cpu_class_is_omap1() || cpu_is_omap2420())) {
433 
434 		/*
435 		 * HSI2C controller internal clk rate should be 19.2 Mhz for
436 		 * HS and for all modes on 2430. On 34xx we can use lower rate
437 		 * to get longer filter period for better noise suppression.
438 		 * The filter is iclk (fclk for HS) period.
439 		 */
440 		if (dev->speed > 400 || cpu_is_omap2430())
441 			internal_clk = 19200;
442 		else if (dev->speed > 100)
443 			internal_clk = 9600;
444 		else
445 			internal_clk = 4000;
446 		fclk_rate = clk_get_rate(dev->fclk) / 1000;
447 
448 		/* Compute prescaler divisor */
449 		psc = fclk_rate / internal_clk;
450 		psc = psc - 1;
451 
452 		/* If configured for High Speed */
453 		if (dev->speed > 400) {
454 			unsigned long scl;
455 
456 			/* For first phase of HS mode */
457 			scl = internal_clk / 400;
458 			fsscll = scl - (scl / 3) - 7;
459 			fssclh = (scl / 3) - 5;
460 
461 			/* For second phase of HS mode */
462 			scl = fclk_rate / dev->speed;
463 			hsscll = scl - (scl / 3) - 7;
464 			hssclh = (scl / 3) - 5;
465 		} else if (dev->speed > 100) {
466 			unsigned long scl;
467 
468 			/* Fast mode */
469 			scl = internal_clk / dev->speed;
470 			fsscll = scl - (scl / 3) - 7;
471 			fssclh = (scl / 3) - 5;
472 		} else {
473 			/* Standard mode */
474 			fsscll = internal_clk / (dev->speed * 2) - 7;
475 			fssclh = internal_clk / (dev->speed * 2) - 5;
476 		}
477 		scll = (hsscll << OMAP_I2C_SCLL_HSSCLL) | fsscll;
478 		sclh = (hssclh << OMAP_I2C_SCLH_HSSCLH) | fssclh;
479 	} else {
480 		/* Program desired operating rate */
481 		fclk_rate /= (psc + 1) * 1000;
482 		if (psc > 2)
483 			psc = 2;
484 		scll = fclk_rate / (dev->speed * 2) - 7 + psc;
485 		sclh = fclk_rate / (dev->speed * 2) - 7 + psc;
486 	}
487 
488 	/* Setup clock prescaler to obtain approx 12MHz I2C module clock: */
489 	omap_i2c_write_reg(dev, OMAP_I2C_PSC_REG, psc);
490 
491 	/* SCL low and high time values */
492 	omap_i2c_write_reg(dev, OMAP_I2C_SCLL_REG, scll);
493 	omap_i2c_write_reg(dev, OMAP_I2C_SCLH_REG, sclh);
494 
495 	if (dev->fifo_size) {
496 		/* Note: setup required fifo size - 1. RTRSH and XTRSH */
497 		buf = (dev->fifo_size - 1) << 8 | OMAP_I2C_BUF_RXFIF_CLR |
498 			(dev->fifo_size - 1) | OMAP_I2C_BUF_TXFIF_CLR;
499 		omap_i2c_write_reg(dev, OMAP_I2C_BUF_REG, buf);
500 	}
501 
502 	/* Take the I2C module out of reset: */
503 	omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, OMAP_I2C_CON_EN);
504 
505 	dev->errata = 0;
506 
507 	if (cpu_is_omap2430() || cpu_is_omap34xx())
508 		dev->errata |= I2C_OMAP_ERRATA_I207;
509 
510 	/* Enable interrupts */
511 	dev->iestate = (OMAP_I2C_IE_XRDY | OMAP_I2C_IE_RRDY |
512 			OMAP_I2C_IE_ARDY | OMAP_I2C_IE_NACK |
513 			OMAP_I2C_IE_AL)  | ((dev->fifo_size) ?
514 				(OMAP_I2C_IE_RDR | OMAP_I2C_IE_XDR) : 0);
515 	omap_i2c_write_reg(dev, OMAP_I2C_IE_REG, dev->iestate);
516 	if (cpu_is_omap34xx()) {
517 		dev->pscstate = psc;
518 		dev->scllstate = scll;
519 		dev->sclhstate = sclh;
520 		dev->bufstate = buf;
521 	}
522 	return 0;
523 }
524 
525 /*
526  * Waiting on Bus Busy
527  */
528 static int omap_i2c_wait_for_bb(struct omap_i2c_dev *dev)
529 {
530 	unsigned long timeout;
531 
532 	timeout = jiffies + OMAP_I2C_TIMEOUT;
533 	while (omap_i2c_read_reg(dev, OMAP_I2C_STAT_REG) & OMAP_I2C_STAT_BB) {
534 		if (time_after(jiffies, timeout)) {
535 			dev_warn(dev->dev, "timeout waiting for bus ready\n");
536 			return -ETIMEDOUT;
537 		}
538 		msleep(1);
539 	}
540 
541 	return 0;
542 }
543 
544 /*
545  * Low level master read/write transaction.
546  */
547 static int omap_i2c_xfer_msg(struct i2c_adapter *adap,
548 			     struct i2c_msg *msg, int stop)
549 {
550 	struct omap_i2c_dev *dev = i2c_get_adapdata(adap);
551 	int r;
552 	u16 w;
553 
554 	dev_dbg(dev->dev, "addr: 0x%04x, len: %d, flags: 0x%x, stop: %d\n",
555 		msg->addr, msg->len, msg->flags, stop);
556 
557 	if (msg->len == 0)
558 		return -EINVAL;
559 
560 	omap_i2c_write_reg(dev, OMAP_I2C_SA_REG, msg->addr);
561 
562 	/* REVISIT: Could the STB bit of I2C_CON be used with probing? */
563 	dev->buf = msg->buf;
564 	dev->buf_len = msg->len;
565 
566 	omap_i2c_write_reg(dev, OMAP_I2C_CNT_REG, dev->buf_len);
567 
568 	/* Clear the FIFO Buffers */
569 	w = omap_i2c_read_reg(dev, OMAP_I2C_BUF_REG);
570 	w |= OMAP_I2C_BUF_RXFIF_CLR | OMAP_I2C_BUF_TXFIF_CLR;
571 	omap_i2c_write_reg(dev, OMAP_I2C_BUF_REG, w);
572 
573 	init_completion(&dev->cmd_complete);
574 	dev->cmd_err = 0;
575 
576 	w = OMAP_I2C_CON_EN | OMAP_I2C_CON_MST | OMAP_I2C_CON_STT;
577 
578 	/* High speed configuration */
579 	if (dev->speed > 400)
580 		w |= OMAP_I2C_CON_OPMODE_HS;
581 
582 	if (msg->flags & I2C_M_TEN)
583 		w |= OMAP_I2C_CON_XA;
584 	if (!(msg->flags & I2C_M_RD))
585 		w |= OMAP_I2C_CON_TRX;
586 
587 	if (!dev->b_hw && stop)
588 		w |= OMAP_I2C_CON_STP;
589 
590 	omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, w);
591 
592 	/*
593 	 * Don't write stt and stp together on some hardware.
594 	 */
595 	if (dev->b_hw && stop) {
596 		unsigned long delay = jiffies + OMAP_I2C_TIMEOUT;
597 		u16 con = omap_i2c_read_reg(dev, OMAP_I2C_CON_REG);
598 		while (con & OMAP_I2C_CON_STT) {
599 			con = omap_i2c_read_reg(dev, OMAP_I2C_CON_REG);
600 
601 			/* Let the user know if i2c is in a bad state */
602 			if (time_after(jiffies, delay)) {
603 				dev_err(dev->dev, "controller timed out "
604 				"waiting for start condition to finish\n");
605 				return -ETIMEDOUT;
606 			}
607 			cpu_relax();
608 		}
609 
610 		w |= OMAP_I2C_CON_STP;
611 		w &= ~OMAP_I2C_CON_STT;
612 		omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, w);
613 	}
614 
615 	/*
616 	 * REVISIT: We should abort the transfer on signals, but the bus goes
617 	 * into arbitration and we're currently unable to recover from it.
618 	 */
619 	if (dev->set_mpu_wkup_lat != NULL)
620 		dev->set_mpu_wkup_lat(dev->dev, dev->latency);
621 	r = wait_for_completion_timeout(&dev->cmd_complete,
622 					OMAP_I2C_TIMEOUT);
623 	if (dev->set_mpu_wkup_lat != NULL)
624 		dev->set_mpu_wkup_lat(dev->dev, -1);
625 	dev->buf_len = 0;
626 	if (r < 0)
627 		return r;
628 	if (r == 0) {
629 		dev_err(dev->dev, "controller timed out\n");
630 		omap_i2c_init(dev);
631 		return -ETIMEDOUT;
632 	}
633 
634 	if (likely(!dev->cmd_err))
635 		return 0;
636 
637 	/* We have an error */
638 	if (dev->cmd_err & (OMAP_I2C_STAT_AL | OMAP_I2C_STAT_ROVR |
639 			    OMAP_I2C_STAT_XUDF)) {
640 		omap_i2c_init(dev);
641 		return -EIO;
642 	}
643 
644 	if (dev->cmd_err & OMAP_I2C_STAT_NACK) {
645 		if (msg->flags & I2C_M_IGNORE_NAK)
646 			return 0;
647 		if (stop) {
648 			w = omap_i2c_read_reg(dev, OMAP_I2C_CON_REG);
649 			w |= OMAP_I2C_CON_STP;
650 			omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, w);
651 		}
652 		return -EREMOTEIO;
653 	}
654 	return -EIO;
655 }
656 
657 
658 /*
659  * Prepare controller for a transaction and call omap_i2c_xfer_msg
660  * to do the work during IRQ processing.
661  */
662 static int
663 omap_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[], int num)
664 {
665 	struct omap_i2c_dev *dev = i2c_get_adapdata(adap);
666 	int i;
667 	int r;
668 
669 	omap_i2c_unidle(dev);
670 
671 	r = omap_i2c_wait_for_bb(dev);
672 	if (r < 0)
673 		goto out;
674 
675 	for (i = 0; i < num; i++) {
676 		r = omap_i2c_xfer_msg(adap, &msgs[i], (i == (num - 1)));
677 		if (r != 0)
678 			break;
679 	}
680 
681 	if (r == 0)
682 		r = num;
683 
684 	omap_i2c_wait_for_bb(dev);
685 out:
686 	omap_i2c_idle(dev);
687 	return r;
688 }
689 
690 static u32
691 omap_i2c_func(struct i2c_adapter *adap)
692 {
693 	return I2C_FUNC_I2C | (I2C_FUNC_SMBUS_EMUL & ~I2C_FUNC_SMBUS_QUICK);
694 }
695 
696 static inline void
697 omap_i2c_complete_cmd(struct omap_i2c_dev *dev, u16 err)
698 {
699 	dev->cmd_err |= err;
700 	complete(&dev->cmd_complete);
701 }
702 
703 static inline void
704 omap_i2c_ack_stat(struct omap_i2c_dev *dev, u16 stat)
705 {
706 	omap_i2c_write_reg(dev, OMAP_I2C_STAT_REG, stat);
707 }
708 
709 static inline void i2c_omap_errata_i207(struct omap_i2c_dev *dev, u16 stat)
710 {
711 	/*
712 	 * I2C Errata(Errata Nos. OMAP2: 1.67, OMAP3: 1.8)
713 	 * Not applicable for OMAP4.
714 	 * Under certain rare conditions, RDR could be set again
715 	 * when the bus is busy, then ignore the interrupt and
716 	 * clear the interrupt.
717 	 */
718 	if (stat & OMAP_I2C_STAT_RDR) {
719 		/* Step 1: If RDR is set, clear it */
720 		omap_i2c_ack_stat(dev, OMAP_I2C_STAT_RDR);
721 
722 		/* Step 2: */
723 		if (!(omap_i2c_read_reg(dev, OMAP_I2C_STAT_REG)
724 						& OMAP_I2C_STAT_BB)) {
725 
726 			/* Step 3: */
727 			if (omap_i2c_read_reg(dev, OMAP_I2C_STAT_REG)
728 						& OMAP_I2C_STAT_RDR) {
729 				omap_i2c_ack_stat(dev, OMAP_I2C_STAT_RDR);
730 				dev_dbg(dev->dev, "RDR when bus is busy.\n");
731 			}
732 
733 		}
734 	}
735 }
736 
737 /* rev1 devices are apparently only on some 15xx */
738 #ifdef CONFIG_ARCH_OMAP15XX
739 
740 static irqreturn_t
741 omap_i2c_rev1_isr(int this_irq, void *dev_id)
742 {
743 	struct omap_i2c_dev *dev = dev_id;
744 	u16 iv, w;
745 
746 	if (dev->idle)
747 		return IRQ_NONE;
748 
749 	iv = omap_i2c_read_reg(dev, OMAP_I2C_IV_REG);
750 	switch (iv) {
751 	case 0x00:	/* None */
752 		break;
753 	case 0x01:	/* Arbitration lost */
754 		dev_err(dev->dev, "Arbitration lost\n");
755 		omap_i2c_complete_cmd(dev, OMAP_I2C_STAT_AL);
756 		break;
757 	case 0x02:	/* No acknowledgement */
758 		omap_i2c_complete_cmd(dev, OMAP_I2C_STAT_NACK);
759 		omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, OMAP_I2C_CON_STP);
760 		break;
761 	case 0x03:	/* Register access ready */
762 		omap_i2c_complete_cmd(dev, 0);
763 		break;
764 	case 0x04:	/* Receive data ready */
765 		if (dev->buf_len) {
766 			w = omap_i2c_read_reg(dev, OMAP_I2C_DATA_REG);
767 			*dev->buf++ = w;
768 			dev->buf_len--;
769 			if (dev->buf_len) {
770 				*dev->buf++ = w >> 8;
771 				dev->buf_len--;
772 			}
773 		} else
774 			dev_err(dev->dev, "RRDY IRQ while no data requested\n");
775 		break;
776 	case 0x05:	/* Transmit data ready */
777 		if (dev->buf_len) {
778 			w = *dev->buf++;
779 			dev->buf_len--;
780 			if (dev->buf_len) {
781 				w |= *dev->buf++ << 8;
782 				dev->buf_len--;
783 			}
784 			omap_i2c_write_reg(dev, OMAP_I2C_DATA_REG, w);
785 		} else
786 			dev_err(dev->dev, "XRDY IRQ while no data to send\n");
787 		break;
788 	default:
789 		return IRQ_NONE;
790 	}
791 
792 	return IRQ_HANDLED;
793 }
794 #else
795 #define omap_i2c_rev1_isr		NULL
796 #endif
797 
798 /*
799  * OMAP3430 Errata 1.153: When an XRDY/XDR is hit, wait for XUDF before writing
800  * data to DATA_REG. Otherwise some data bytes can be lost while transferring
801  * them from the memory to the I2C interface.
802  */
803 static int errata_omap3_1p153(struct omap_i2c_dev *dev, u16 *stat, int *err)
804 {
805 	unsigned long timeout = 10000;
806 
807 	while (--timeout && !(*stat & OMAP_I2C_STAT_XUDF)) {
808 		if (*stat & (OMAP_I2C_STAT_NACK | OMAP_I2C_STAT_AL)) {
809 			omap_i2c_ack_stat(dev, *stat & (OMAP_I2C_STAT_XRDY |
810 							OMAP_I2C_STAT_XDR));
811 			*err |= OMAP_I2C_STAT_XUDF;
812 			return -ETIMEDOUT;
813 		}
814 
815 		cpu_relax();
816 		*stat = omap_i2c_read_reg(dev, OMAP_I2C_STAT_REG);
817 	}
818 
819 	if (!timeout) {
820 		dev_err(dev->dev, "timeout waiting on XUDF bit\n");
821 		return 0;
822 	}
823 
824 	return 0;
825 }
826 
827 static irqreturn_t
828 omap_i2c_isr(int this_irq, void *dev_id)
829 {
830 	struct omap_i2c_dev *dev = dev_id;
831 	u16 bits;
832 	u16 stat, w;
833 	int err, count = 0;
834 
835 	if (dev->idle)
836 		return IRQ_NONE;
837 
838 	bits = omap_i2c_read_reg(dev, OMAP_I2C_IE_REG);
839 	while ((stat = (omap_i2c_read_reg(dev, OMAP_I2C_STAT_REG))) & bits) {
840 		dev_dbg(dev->dev, "IRQ (ISR = 0x%04x)\n", stat);
841 		if (count++ == 100) {
842 			dev_warn(dev->dev, "Too much work in one IRQ\n");
843 			break;
844 		}
845 
846 		err = 0;
847 complete:
848 		/*
849 		 * Ack the stat in one go, but [R/X]DR and [R/X]RDY should be
850 		 * acked after the data operation is complete.
851 		 * Ref: TRM SWPU114Q Figure 18-31
852 		 */
853 		omap_i2c_write_reg(dev, OMAP_I2C_STAT_REG, stat &
854 				~(OMAP_I2C_STAT_RRDY | OMAP_I2C_STAT_RDR |
855 				OMAP_I2C_STAT_XRDY | OMAP_I2C_STAT_XDR));
856 
857 		if (stat & OMAP_I2C_STAT_NACK) {
858 			err |= OMAP_I2C_STAT_NACK;
859 			omap_i2c_write_reg(dev, OMAP_I2C_CON_REG,
860 					   OMAP_I2C_CON_STP);
861 		}
862 		if (stat & OMAP_I2C_STAT_AL) {
863 			dev_err(dev->dev, "Arbitration lost\n");
864 			err |= OMAP_I2C_STAT_AL;
865 		}
866 		if (stat & (OMAP_I2C_STAT_ARDY | OMAP_I2C_STAT_NACK |
867 					OMAP_I2C_STAT_AL)) {
868 			omap_i2c_ack_stat(dev, stat &
869 				(OMAP_I2C_STAT_RRDY | OMAP_I2C_STAT_RDR |
870 				OMAP_I2C_STAT_XRDY | OMAP_I2C_STAT_XDR));
871 			omap_i2c_complete_cmd(dev, err);
872 			return IRQ_HANDLED;
873 		}
874 		if (stat & (OMAP_I2C_STAT_RRDY | OMAP_I2C_STAT_RDR)) {
875 			u8 num_bytes = 1;
876 
877 			if (dev->errata & I2C_OMAP_ERRATA_I207)
878 				i2c_omap_errata_i207(dev, stat);
879 
880 			if (dev->fifo_size) {
881 				if (stat & OMAP_I2C_STAT_RRDY)
882 					num_bytes = dev->fifo_size;
883 				else    /* read RXSTAT on RDR interrupt */
884 					num_bytes = (omap_i2c_read_reg(dev,
885 							OMAP_I2C_BUFSTAT_REG)
886 							>> 8) & 0x3F;
887 			}
888 			while (num_bytes) {
889 				num_bytes--;
890 				w = omap_i2c_read_reg(dev, OMAP_I2C_DATA_REG);
891 				if (dev->buf_len) {
892 					*dev->buf++ = w;
893 					dev->buf_len--;
894 					/*
895 					 * Data reg in 2430, omap3 and
896 					 * omap4 is 8 bit wide
897 					 */
898 					if (cpu_class_is_omap1() ||
899 							cpu_is_omap2420()) {
900 						if (dev->buf_len) {
901 							*dev->buf++ = w >> 8;
902 							dev->buf_len--;
903 						}
904 					}
905 				} else {
906 					if (stat & OMAP_I2C_STAT_RRDY)
907 						dev_err(dev->dev,
908 							"RRDY IRQ while no data"
909 								" requested\n");
910 					if (stat & OMAP_I2C_STAT_RDR)
911 						dev_err(dev->dev,
912 							"RDR IRQ while no data"
913 								" requested\n");
914 					break;
915 				}
916 			}
917 			omap_i2c_ack_stat(dev,
918 				stat & (OMAP_I2C_STAT_RRDY | OMAP_I2C_STAT_RDR));
919 			continue;
920 		}
921 		if (stat & (OMAP_I2C_STAT_XRDY | OMAP_I2C_STAT_XDR)) {
922 			u8 num_bytes = 1;
923 			if (dev->fifo_size) {
924 				if (stat & OMAP_I2C_STAT_XRDY)
925 					num_bytes = dev->fifo_size;
926 				else    /* read TXSTAT on XDR interrupt */
927 					num_bytes = omap_i2c_read_reg(dev,
928 							OMAP_I2C_BUFSTAT_REG)
929 							& 0x3F;
930 			}
931 			while (num_bytes) {
932 				num_bytes--;
933 				w = 0;
934 				if (dev->buf_len) {
935 					w = *dev->buf++;
936 					dev->buf_len--;
937 					/*
938 					 * Data reg in 2430, omap3 and
939 					 * omap4 is 8 bit wide
940 					 */
941 					if (cpu_class_is_omap1() ||
942 							cpu_is_omap2420()) {
943 						if (dev->buf_len) {
944 							w |= *dev->buf++ << 8;
945 							dev->buf_len--;
946 						}
947 					}
948 				} else {
949 					if (stat & OMAP_I2C_STAT_XRDY)
950 						dev_err(dev->dev,
951 							"XRDY IRQ while no "
952 							"data to send\n");
953 					if (stat & OMAP_I2C_STAT_XDR)
954 						dev_err(dev->dev,
955 							"XDR IRQ while no "
956 							"data to send\n");
957 					break;
958 				}
959 
960 				if ((dev->errata & I2C_OMAP3_1P153) &&
961 				    errata_omap3_1p153(dev, &stat, &err))
962 					goto complete;
963 
964 				omap_i2c_write_reg(dev, OMAP_I2C_DATA_REG, w);
965 			}
966 			omap_i2c_ack_stat(dev,
967 				stat & (OMAP_I2C_STAT_XRDY | OMAP_I2C_STAT_XDR));
968 			continue;
969 		}
970 		if (stat & OMAP_I2C_STAT_ROVR) {
971 			dev_err(dev->dev, "Receive overrun\n");
972 			dev->cmd_err |= OMAP_I2C_STAT_ROVR;
973 		}
974 		if (stat & OMAP_I2C_STAT_XUDF) {
975 			dev_err(dev->dev, "Transmit underflow\n");
976 			dev->cmd_err |= OMAP_I2C_STAT_XUDF;
977 		}
978 	}
979 
980 	return count ? IRQ_HANDLED : IRQ_NONE;
981 }
982 
983 static const struct i2c_algorithm omap_i2c_algo = {
984 	.master_xfer	= omap_i2c_xfer,
985 	.functionality	= omap_i2c_func,
986 };
987 
988 static int __devinit
989 omap_i2c_probe(struct platform_device *pdev)
990 {
991 	struct omap_i2c_dev	*dev;
992 	struct i2c_adapter	*adap;
993 	struct resource		*mem, *irq, *ioarea;
994 	struct omap_i2c_bus_platform_data *pdata = pdev->dev.platform_data;
995 	irq_handler_t isr;
996 	int r;
997 	u32 speed = 0;
998 
999 	/* NOTE: driver uses the static register mapping */
1000 	mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1001 	if (!mem) {
1002 		dev_err(&pdev->dev, "no mem resource?\n");
1003 		return -ENODEV;
1004 	}
1005 	irq = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
1006 	if (!irq) {
1007 		dev_err(&pdev->dev, "no irq resource?\n");
1008 		return -ENODEV;
1009 	}
1010 
1011 	ioarea = request_mem_region(mem->start, resource_size(mem),
1012 			pdev->name);
1013 	if (!ioarea) {
1014 		dev_err(&pdev->dev, "I2C region already claimed\n");
1015 		return -EBUSY;
1016 	}
1017 
1018 	dev = kzalloc(sizeof(struct omap_i2c_dev), GFP_KERNEL);
1019 	if (!dev) {
1020 		r = -ENOMEM;
1021 		goto err_release_region;
1022 	}
1023 
1024 	if (pdata != NULL) {
1025 		speed = pdata->clkrate;
1026 		dev->set_mpu_wkup_lat = pdata->set_mpu_wkup_lat;
1027 	} else {
1028 		speed = 100;	/* Default speed */
1029 		dev->set_mpu_wkup_lat = NULL;
1030 	}
1031 
1032 	dev->speed = speed;
1033 	dev->idle = 1;
1034 	dev->dev = &pdev->dev;
1035 	dev->irq = irq->start;
1036 	dev->base = ioremap(mem->start, resource_size(mem));
1037 	if (!dev->base) {
1038 		r = -ENOMEM;
1039 		goto err_free_mem;
1040 	}
1041 
1042 	platform_set_drvdata(pdev, dev);
1043 
1044 	if (cpu_is_omap7xx())
1045 		dev->reg_shift = 1;
1046 	else if (cpu_is_omap44xx())
1047 		dev->reg_shift = 0;
1048 	else
1049 		dev->reg_shift = 2;
1050 
1051 	if ((r = omap_i2c_get_clocks(dev)) != 0)
1052 		goto err_iounmap;
1053 
1054 	if (cpu_is_omap44xx())
1055 		dev->regs = (u8 *) omap4_reg_map;
1056 	else
1057 		dev->regs = (u8 *) reg_map;
1058 
1059 	omap_i2c_unidle(dev);
1060 
1061 	dev->rev = omap_i2c_read_reg(dev, OMAP_I2C_REV_REG) & 0xff;
1062 
1063 	if (dev->rev <= OMAP_I2C_REV_ON_3430)
1064 		dev->errata |= I2C_OMAP3_1P153;
1065 
1066 	if (!(cpu_class_is_omap1() || cpu_is_omap2420())) {
1067 		u16 s;
1068 
1069 		/* Set up the fifo size - Get total size */
1070 		s = (omap_i2c_read_reg(dev, OMAP_I2C_BUFSTAT_REG) >> 14) & 0x3;
1071 		dev->fifo_size = 0x8 << s;
1072 
1073 		/*
1074 		 * Set up notification threshold as half the total available
1075 		 * size. This is to ensure that we can handle the status on int
1076 		 * call back latencies.
1077 		 */
1078 		if (dev->rev >= OMAP_I2C_REV_ON_4430) {
1079 			dev->fifo_size = 0;
1080 			dev->b_hw = 0; /* Disable hardware fixes */
1081 		} else {
1082 			dev->fifo_size = (dev->fifo_size / 2);
1083 			dev->b_hw = 1; /* Enable hardware fixes */
1084 		}
1085 		/* calculate wakeup latency constraint for MPU */
1086 		if (dev->set_mpu_wkup_lat != NULL)
1087 			dev->latency = (1000000 * dev->fifo_size) /
1088 				       (1000 * speed / 8);
1089 	}
1090 
1091 	/* reset ASAP, clearing any IRQs */
1092 	omap_i2c_init(dev);
1093 
1094 	isr = (dev->rev < OMAP_I2C_REV_2) ? omap_i2c_rev1_isr : omap_i2c_isr;
1095 	r = request_irq(dev->irq, isr, 0, pdev->name, dev);
1096 
1097 	if (r) {
1098 		dev_err(dev->dev, "failure requesting irq %i\n", dev->irq);
1099 		goto err_unuse_clocks;
1100 	}
1101 
1102 	dev_info(dev->dev, "bus %d rev%d.%d at %d kHz\n",
1103 		 pdev->id, dev->rev >> 4, dev->rev & 0xf, dev->speed);
1104 
1105 	omap_i2c_idle(dev);
1106 
1107 	adap = &dev->adapter;
1108 	i2c_set_adapdata(adap, dev);
1109 	adap->owner = THIS_MODULE;
1110 	adap->class = I2C_CLASS_HWMON;
1111 	strlcpy(adap->name, "OMAP I2C adapter", sizeof(adap->name));
1112 	adap->algo = &omap_i2c_algo;
1113 	adap->dev.parent = &pdev->dev;
1114 
1115 	/* i2c device drivers may be active on return from add_adapter() */
1116 	adap->nr = pdev->id;
1117 	r = i2c_add_numbered_adapter(adap);
1118 	if (r) {
1119 		dev_err(dev->dev, "failure adding adapter\n");
1120 		goto err_free_irq;
1121 	}
1122 
1123 	return 0;
1124 
1125 err_free_irq:
1126 	free_irq(dev->irq, dev);
1127 err_unuse_clocks:
1128 	omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, 0);
1129 	omap_i2c_idle(dev);
1130 	omap_i2c_put_clocks(dev);
1131 err_iounmap:
1132 	iounmap(dev->base);
1133 err_free_mem:
1134 	platform_set_drvdata(pdev, NULL);
1135 	kfree(dev);
1136 err_release_region:
1137 	release_mem_region(mem->start, resource_size(mem));
1138 
1139 	return r;
1140 }
1141 
1142 static int
1143 omap_i2c_remove(struct platform_device *pdev)
1144 {
1145 	struct omap_i2c_dev	*dev = platform_get_drvdata(pdev);
1146 	struct resource		*mem;
1147 
1148 	platform_set_drvdata(pdev, NULL);
1149 
1150 	free_irq(dev->irq, dev);
1151 	i2c_del_adapter(&dev->adapter);
1152 	omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, 0);
1153 	omap_i2c_put_clocks(dev);
1154 	iounmap(dev->base);
1155 	kfree(dev);
1156 	mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
1157 	release_mem_region(mem->start, resource_size(mem));
1158 	return 0;
1159 }
1160 
1161 static struct platform_driver omap_i2c_driver = {
1162 	.probe		= omap_i2c_probe,
1163 	.remove		= omap_i2c_remove,
1164 	.driver		= {
1165 		.name	= "i2c_omap",
1166 		.owner	= THIS_MODULE,
1167 	},
1168 };
1169 
1170 /* I2C may be needed to bring up other drivers */
1171 static int __init
1172 omap_i2c_init_driver(void)
1173 {
1174 	return platform_driver_register(&omap_i2c_driver);
1175 }
1176 subsys_initcall(omap_i2c_init_driver);
1177 
1178 static void __exit omap_i2c_exit_driver(void)
1179 {
1180 	platform_driver_unregister(&omap_i2c_driver);
1181 }
1182 module_exit(omap_i2c_exit_driver);
1183 
1184 MODULE_AUTHOR("MontaVista Software, Inc. (and others)");
1185 MODULE_DESCRIPTION("TI OMAP I2C bus adapter");
1186 MODULE_LICENSE("GPL");
1187 MODULE_ALIAS("platform:i2c_omap");
1188