xref: /linux/drivers/i2c/busses/i2c-nomadik.c (revision f2ee442115c9b6219083c019939a9cc0c9abb2f8)
1 /*
2  * Copyright (C) 2009 ST-Ericsson SA
3  * Copyright (C) 2009 STMicroelectronics
4  *
5  * I2C master mode controller driver, used in Nomadik 8815
6  * and Ux500 platforms.
7  *
8  * Author: Srinidhi Kasagar <srinidhi.kasagar@stericsson.com>
9  * Author: Sachin Verma <sachin.verma@st.com>
10  *
11  * This program is free software; you can redistribute it and/or modify
12  * it under the terms of the GNU General Public License version 2, as
13  * published by the Free Software Foundation.
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 /* I2C Controller register offsets */
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 /* Control registers */
49 #define I2C_CR_PE		(0x1 << 0)	/* Peripheral Enable */
50 #define I2C_CR_OM		(0x3 << 1)	/* Operating mode */
51 #define I2C_CR_SAM		(0x1 << 3)	/* Slave addressing mode */
52 #define I2C_CR_SM		(0x3 << 4)	/* Speed mode */
53 #define I2C_CR_SGCM		(0x1 << 6)	/* Slave general call mode */
54 #define I2C_CR_FTX		(0x1 << 7)	/* Flush Transmit */
55 #define I2C_CR_FRX		(0x1 << 8)	/* Flush Receive */
56 #define I2C_CR_DMA_TX_EN	(0x1 << 9)	/* DMA Tx enable */
57 #define I2C_CR_DMA_RX_EN	(0x1 << 10)	/* DMA Rx Enable */
58 #define I2C_CR_DMA_SLE		(0x1 << 11)	/* DMA sync. logic enable */
59 #define I2C_CR_LM		(0x1 << 12)	/* Loopback mode */
60 #define I2C_CR_FON		(0x3 << 13)	/* Filtering on */
61 #define I2C_CR_FS		(0x3 << 15)	/* Force stop enable */
62 
63 /* Master controller (MCR) register */
64 #define I2C_MCR_OP		(0x1 << 0)	/* Operation */
65 #define I2C_MCR_A7		(0x7f << 1)	/* 7-bit address */
66 #define I2C_MCR_EA10		(0x7 << 8)	/* 10-bit Extended address */
67 #define I2C_MCR_SB		(0x1 << 11)	/* Extended address */
68 #define I2C_MCR_AM		(0x3 << 12)	/* Address type */
69 #define I2C_MCR_STOP		(0x1 << 14)	/* Stop condition */
70 #define I2C_MCR_LENGTH		(0x7ff << 15)	/* Transaction length */
71 
72 /* Status register (SR) */
73 #define I2C_SR_OP		(0x3 << 0)	/* Operation */
74 #define I2C_SR_STATUS		(0x3 << 2)	/* controller status */
75 #define I2C_SR_CAUSE		(0x7 << 4)	/* Abort cause */
76 #define I2C_SR_TYPE		(0x3 << 7)	/* Receive type */
77 #define I2C_SR_LENGTH		(0x7ff << 9)	/* Transfer length */
78 
79 /* Interrupt mask set/clear (IMSCR) bits */
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 /* some bits in ICR are reserved */
99 #define I2C_CLEAR_ALL_INTS	0x131f007f
100 
101 /* first three msb bits are reserved */
102 #define IRQ_MASK(mask)		(mask & 0x1fffffff)
103 
104 /* maximum threshold value */
105 #define MAX_I2C_FIFO_THRESHOLD	15
106 
107 enum i2c_status {
108 	I2C_NOP,
109 	I2C_ON_GOING,
110 	I2C_OK,
111 	I2C_ABORT
112 };
113 
114 /* operation */
115 enum i2c_operation {
116 	I2C_NO_OPERATION = 0xff,
117 	I2C_WRITE = 0x00,
118 	I2C_READ = 0x01
119 };
120 
121 /**
122  * struct i2c_nmk_client - client specific data
123  * @slave_adr: 7-bit slave address
124  * @count: no. bytes to be transferred
125  * @buffer: client data buffer
126  * @xfer_bytes: bytes transferred till now
127  * @operation: current I2C operation
128  */
129 struct 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  * struct nmk_i2c_dev - private data structure of the controller.
139  * @pdev: parent platform device.
140  * @adap: corresponding I2C adapter.
141  * @irq: interrupt line for the controller.
142  * @virtbase: virtual io memory area.
143  * @clk: hardware i2c block clock.
144  * @cfg: machine provided controller configuration.
145  * @cli: holder of client specific data.
146  * @stop: stop condition.
147  * @xfer_complete: acknowledge completion for a I2C message.
148  * @result: controller propogated result.
149  * @regulator: pointer to i2c regulator.
150  * @busy: Busy doing transfer.
151  */
152 struct 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 /* controller's abort causes */
168 static 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 
178 static inline void i2c_set_bit(void __iomem *reg, u32 mask)
179 {
180 	writel(readl(reg) | mask, reg);
181 }
182 
183 static inline void i2c_clr_bit(void __iomem *reg, u32 mask)
184 {
185 	writel(readl(reg) & ~mask, reg);
186 }
187 
188 /**
189  * flush_i2c_fifo() - This function flushes the I2C FIFO
190  * @dev: private data of I2C Driver
191  *
192  * This function flushes the I2C Tx and Rx FIFOs. It returns
193  * 0 on successful flushing of FIFO
194  */
195 static 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 	 * flush the transmit and receive FIFO. The flushing
203 	 * operation takes several cycles before to be completed.
204 	 * On the completion, the I2C internal logic clears these
205 	 * bits, until then no one must access Tx, Rx FIFO and
206 	 * should poll on these bits waiting for the completion.
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  * disable_all_interrupts() - Disable all interrupts of this I2c Bus
229  * @dev: private data of I2C Driver
230  */
231 static 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  * clear_all_interrupts() - Clear all interrupts of I2C Controller
239  * @dev: private data of I2C Driver
240  */
241 static 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  * init_hw() - initialize the I2C hardware
250  * @dev: private data of I2C Driver
251  */
252 static 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 	/* disable the controller */
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 
269 exit:
270 	return stat;
271 }
272 
273 /* enable peripheral, master mode operation */
274 #define DEFAULT_I2C_REG_CR	((1 << 1) | I2C_CR_PE)
275 
276 /**
277  * load_i2c_mcr_reg() - load the MCR register
278  * @dev: private data of controller
279  */
280 static u32 load_i2c_mcr_reg(struct nmk_i2c_dev *dev)
281 {
282 	u32 mcr = 0;
283 
284 	/* 7-bit address transaction */
285 	mcr |= GEN_MASK(1, I2C_MCR_AM, 12);
286 	mcr |= GEN_MASK(dev->cli.slave_adr, I2C_MCR_A7, 1);
287 
288 	/* start byte procedure not applied */
289 	mcr |= GEN_MASK(0, I2C_MCR_SB, 11);
290 
291 	/* check the operation, master read/write? */
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 	/* stop or repeated start? */
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  * setup_i2c_controller() - setup the controller
310  * @dev: private data of controller
311  */
312 static 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 	 * set the slsu:
325 	 *
326 	 * slsu defines the data setup time after SCL clock
327 	 * stretching in terms of i2c clk cycles. The
328 	 * needed setup time for the three modes are 250ns,
329 	 * 100ns, 10ns respectively thus leading to the values
330 	 * of 14, 6, 2 for a 48 MHz i2c clk.
331 	 */
332 	writel(dev->cfg.slsu << 16, dev->virtbase + I2C_SCR);
333 
334 	i2c_clk = clk_get_rate(dev->clk);
335 
336 	/* fallback to std. mode if machine has not provided it */
337 	if (dev->cfg.clk_freq == 0)
338 		dev->cfg.clk_freq = 100000;
339 
340 	/*
341 	 * The spec says, in case of std. mode the divider is
342 	 * 2 whereas it is 3 for fast and fastplus mode of
343 	 * operation. TODO - high speed support.
344 	 */
345 	div = (dev->cfg.clk_freq > 100000) ? 3 : 2;
346 
347 	/*
348 	 * generate the mask for baud rate counters. The controller
349 	 * has two baud rate counters. One is used for High speed
350 	 * operation, and the other is for std, fast mode, fast mode
351 	 * plus operation. Currently we do not supprt high speed mode
352 	 * so set brcr1 to 0.
353 	 */
354 	brcr1 = 0 << 16;
355 	brcr2 = (i2c_clk/(dev->cfg.clk_freq * div)) & 0xffff;
356 
357 	/* set the baud rate counter register */
358 	writel((brcr1 | brcr2), dev->virtbase + I2C_BRCR);
359 
360 	/*
361 	 * set the speed mode. Currently we support
362 	 * only standard and fast mode of operation
363 	 * TODO - support for fast mode plus (up to 1Mb/s)
364 	 * and high speed (up to 3.4 Mb/s)
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 	/* set the Tx and Rx FIFO threshold */
377 	writel(dev->cfg.tft, dev->virtbase + I2C_TFTR);
378 	writel(dev->cfg.rft, dev->virtbase + I2C_RFTR);
379 }
380 
381 /**
382  * read_i2c() - Read from I2C client device
383  * @dev: private data of I2C Driver
384  *
385  * This function reads from i2c client device when controller is in
386  * master mode. There is a completion timeout. If there is no transfer
387  * before timeout error is returned.
388  */
389 static 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 	/* load the current CR value */
400 	writel(readl(dev->virtbase + I2C_CR) | DEFAULT_I2C_REG_CR,
401 			dev->virtbase + I2C_CR);
402 
403 	/* enable the controller */
404 	i2c_set_bit(dev->virtbase + I2C_CR, I2C_CR_PE);
405 
406 	init_completion(&dev->xfer_complete);
407 
408 	/* enable interrupts by setting the mask */
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 		/* Controller timed out */
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 
441 static 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 		/* write to the Tx FIFO */
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  * write_i2c() - Write data to I2C client.
461  * @dev: private data of I2C Driver
462  *
463  * This function writes data to I2C client
464  */
465 static 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 	/* load the current CR value */
477 	writel(readl(dev->virtbase + I2C_CR) | DEFAULT_I2C_REG_CR,
478 			dev->virtbase + I2C_CR);
479 
480 	/* enable the controller */
481 	i2c_set_bit(dev->virtbase + I2C_CR , I2C_CR_PE);
482 
483 	init_completion(&dev->xfer_complete);
484 
485 	/* enable interrupts by settings the masks */
486 	irq_mask = (I2C_IT_TXFOVR | I2C_IT_MAL | I2C_IT_BERR);
487 
488 	/* Fill the TX FIFO with transmit data */
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 	 * check if we want to transfer a single or multiple bytes, if so
496 	 * set the MTDWS bit (Master Transaction Done Without Stop)
497 	 * to start repeated start operation
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 		/* Controller timed out */
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  * nmk_i2c_xfer_one() - transmit a single I2C message
531  * @dev: device with a message encoded into it
532  * @flags: message flags
533  */
534 static int nmk_i2c_xfer_one(struct nmk_i2c_dev *dev, u16 flags)
535 {
536 	int status;
537 
538 	if (flags & I2C_M_RD) {
539 		/* read operation */
540 		dev->cli.operation = I2C_READ;
541 		status = read_i2c(dev);
542 	} else {
543 		/* write operation */
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 		 * Check if the controller I2C operation status
555 		 * is set to ABORT(11b).
556 		 */
557 		if (((i2c_sr >> 2) & 0x3) == 0x3) {
558 			/* get the abort cause */
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  * nmk_i2c_xfer() - I2C transfer function used by kernel framework
576  * @i2c_adap: Adapter pointer to the controller
577  * @msgs: Pointer to data to be written.
578  * @num_msgs: Number of messages to be executed
579  *
580  * This is the function called by the generic kernel i2c_transfer()
581  * or i2c_smbus...() API calls. Note that this code is protected by the
582  * semaphore set in the kernel i2c_transfer() function.
583  *
584  * NOTE:
585  * READ TRANSFER : We impose a restriction of the first message to be the
586  *		index message for any read transaction.
587  *		- a no index is coded as '0',
588  *		- 2byte big endian index is coded as '3'
589  *		!!! msg[0].buf holds the actual index.
590  *		This is compatible with generic messages of smbus emulator
591  *		that send a one byte index.
592  *		eg. a I2C transation to read 2 bytes from index 0
593  *			idx = 0;
594  *			msg[0].addr = client->addr;
595  *			msg[0].flags = 0x0;
596  *			msg[0].len = 1;
597  *			msg[0].buf = &idx;
598  *
599  *			msg[1].addr = client->addr;
600  *			msg[1].flags = I2C_M_RD;
601  *			msg[1].len = 2;
602  *			msg[1].buf = rd_buff
603  *			i2c_transfer(adap, msg, 2);
604  *
605  * WRITE TRANSFER : The I2C standard interface interprets all data as payload.
606  *		If you want to emulate an SMBUS write transaction put the
607  *		index as first byte(or first and second) in the payload.
608  *		eg. a I2C transation to write 2 bytes from index 1
609  *			wr_buff[0] = 0x1;
610  *			wr_buff[1] = 0x23;
611  *			wr_buff[2] = 0x46;
612  *			msg[0].flags = 0x0;
613  *			msg[0].len = 3;
614  *			msg[0].buf = wr_buff;
615  *			i2c_transfer(adap, msg, 1);
616  *
617  * To read or write a block of data (multiple bytes) using SMBUS emulation
618  * please use the i2c_smbus_read_i2c_block_data()
619  * or i2c_smbus_write_i2c_block_data() API
620  */
621 static 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 	/* Attempt three times to send the message queue */
642 	for (j = 0; j < 3; j++) {
643 		/* setup the i2c controller */
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 
668 out:
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 	/* return the no. messages processed */
677 	if (status)
678 		return status;
679 	else
680 		return num_msgs;
681 }
682 
683 /**
684  * disable_interrupts() - disable the interrupts
685  * @dev: private data of controller
686  * @irq: interrupt number
687  */
688 static 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  * i2c_irq_handler() - interrupt routine
698  * @irq: interrupt number
699  * @arg: data passed to the handler
700  *
701  * This is the interrupt handler for the i2c driver. Currently
702  * it handles the major interrupts like Rx & Tx FIFO management
703  * interrupts, master transaction interrupts, arbitration and
704  * bus error interrupts. The rest of the interrupts are treated as
705  * unhandled.
706  */
707 static 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 	/* load Tx FIFO and Rx FIFO threshold values */
716 	tft = readl(dev->virtbase + I2C_TFTR);
717 	rft = readl(dev->virtbase + I2C_RFTR);
718 
719 	/* read interrupt status register */
720 	misr = readl(dev->virtbase + I2C_MISR);
721 
722 	src = __ffs(misr);
723 	switch ((1 << src)) {
724 
725 	/* Transmit FIFO nearly empty interrupt */
726 	case I2C_IT_TXFNE:
727 	{
728 		if (dev->cli.operation == I2C_READ) {
729 			/*
730 			 * in read operation why do we care for writing?
731 			 * so disable the Transmit FIFO interrupt
732 			 */
733 			disable_interrupts(dev, I2C_IT_TXFNE);
734 		} else {
735 			fill_tx_fifo(dev, (MAX_I2C_FIFO_THRESHOLD - tft));
736 			/*
737 			 * if done, close the transfer by disabling the
738 			 * corresponding TXFNE interrupt
739 			 */
740 			if (dev->cli.count == 0)
741 				disable_interrupts(dev,	I2C_IT_TXFNE);
742 		}
743 	}
744 	break;
745 
746 	/*
747 	 * Rx FIFO nearly full interrupt.
748 	 * This is set when the numer of entries in Rx FIFO is
749 	 * greater or equal than the threshold value programmed
750 	 * in RFT
751 	 */
752 	case I2C_IT_RXFNF:
753 		for (count = rft; count > 0; count--) {
754 			/* Read the Rx FIFO */
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 	/* Rx FIFO full */
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 	/* Master Transaction Done with/without stop */
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 	/* Master Arbitration lost interrupt */
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 	 * Bus Error interrupt.
814 	 * This happens when an unexpected start/stop condition occurs
815 	 * during the transaction.
816 	 */
817 	case I2C_IT_BERR:
818 		dev->result = -EIO;
819 		/* get the status */
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 	 * Tx FIFO overrun interrupt.
830 	 * This is set when a write operation in Tx FIFO is performed and
831 	 * the Tx FIFO is full.
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 	/* unhandled interrupts by this driver - TODO*/
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
862 static 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 
873 static 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  * We use noirq so that we suspend late and resume before the wakeup interrupt
884  * to ensure that we do the !pm_runtime_suspended() check in resume before
885  * there has been a regular pm runtime resume (via pm_runtime_get_sync()).
886  */
887 static const struct dev_pm_ops nmk_i2c_pm = {
888 	.suspend_noirq	= nmk_i2c_suspend,
889 	.resume_noirq	= nmk_i2c_resume,
890 };
891 
892 static unsigned int nmk_i2c_functionality(struct i2c_adapter *adap)
893 {
894 	return I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL;
895 }
896 
897 static const struct i2c_algorithm nmk_i2c_algo = {
898 	.master_xfer	= nmk_i2c_xfer,
899 	.functionality	= nmk_i2c_functionality
900 };
901 
902 static 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 	/* fetch the controller id */
974 	adap->nr	= pdev->id;
975 
976 	/* fetch the controller configuration from machine */
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 
1017 static 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 	/* disable the controller */
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 
1042 static 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 
1052 static int __init nmk_i2c_init(void)
1053 {
1054 	return platform_driver_register(&nmk_i2c_driver);
1055 }
1056 
1057 static void __exit nmk_i2c_exit(void)
1058 {
1059 	platform_driver_unregister(&nmk_i2c_driver);
1060 }
1061 
1062 subsys_initcall(nmk_i2c_init);
1063 module_exit(nmk_i2c_exit);
1064 
1065 MODULE_AUTHOR("Sachin Verma, Srinidhi KASAGAR");
1066 MODULE_DESCRIPTION("Nomadik/Ux500 I2C driver");
1067 MODULE_LICENSE("GPL");
1068 MODULE_ALIAS("platform:" DRIVER_NAME);
1069