xref: /linux/drivers/i2c/busses/i2c-nomadik.c (revision 4b660dbd9ee2059850fd30e0df420ca7a38a1856)
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * Copyright (C) 2009 ST-Ericsson SA
4  * Copyright (C) 2009 STMicroelectronics
5  *
6  * I2C master mode controller driver, used in Nomadik 8815
7  * and Ux500 platforms.
8  *
9  * The Mobileye EyeQ5 platform is also supported; it uses
10  * the same Ux500/DB8500 IP block with two quirks:
11  *  - The memory bus only supports 32-bit accesses.
12  *  - A register must be configured for the I2C speed mode;
13  *    it is located in a shared register region called OLB.
14  *
15  * Author: Srinidhi Kasagar <srinidhi.kasagar@stericsson.com>
16  * Author: Sachin Verma <sachin.verma@st.com>
17  */
18 #include <linux/amba/bus.h>
19 #include <linux/bitfield.h>
20 #include <linux/clk.h>
21 #include <linux/err.h>
22 #include <linux/i2c.h>
23 #include <linux/init.h>
24 #include <linux/interrupt.h>
25 #include <linux/io.h>
26 #include <linux/mfd/syscon.h>
27 #include <linux/module.h>
28 #include <linux/of.h>
29 #include <linux/pinctrl/consumer.h>
30 #include <linux/pm_runtime.h>
31 #include <linux/regmap.h>
32 #include <linux/slab.h>
33 
34 #define DRIVER_NAME "nmk-i2c"
35 
36 /* I2C Controller register offsets */
37 #define I2C_CR		(0x000)
38 #define I2C_SCR		(0x004)
39 #define I2C_HSMCR	(0x008)
40 #define I2C_MCR		(0x00C)
41 #define I2C_TFR		(0x010)
42 #define I2C_SR		(0x014)
43 #define I2C_RFR		(0x018)
44 #define I2C_TFTR	(0x01C)
45 #define I2C_RFTR	(0x020)
46 #define I2C_DMAR	(0x024)
47 #define I2C_BRCR	(0x028)
48 #define I2C_IMSCR	(0x02C)
49 #define I2C_RISR	(0x030)
50 #define I2C_MISR	(0x034)
51 #define I2C_ICR		(0x038)
52 
53 /* Control registers */
54 #define I2C_CR_PE		BIT(0)		/* Peripheral Enable */
55 #define I2C_CR_OM		GENMASK(2, 1)	/* Operating mode */
56 #define I2C_CR_SAM		BIT(3)		/* Slave addressing mode */
57 #define I2C_CR_SM		GENMASK(5, 4)	/* Speed mode */
58 #define I2C_CR_SGCM		BIT(6)		/* Slave general call mode */
59 #define I2C_CR_FTX		BIT(7)		/* Flush Transmit */
60 #define I2C_CR_FRX		BIT(8)		/* Flush Receive */
61 #define I2C_CR_DMA_TX_EN	BIT(9)		/* DMA Tx enable */
62 #define I2C_CR_DMA_RX_EN	BIT(10)		/* DMA Rx Enable */
63 #define I2C_CR_DMA_SLE		BIT(11)		/* DMA sync. logic enable */
64 #define I2C_CR_LM		BIT(12)		/* Loopback mode */
65 #define I2C_CR_FON		GENMASK(14, 13)	/* Filtering on */
66 #define I2C_CR_FS		GENMASK(16, 15)	/* Force stop enable */
67 
68 /* Slave control register (SCR) */
69 #define I2C_SCR_SLSU		GENMASK(31, 16)	/* Slave data setup time */
70 
71 /* Master controller (MCR) register */
72 #define I2C_MCR_OP		BIT(0)		/* Operation */
73 #define I2C_MCR_A7		GENMASK(7, 1)	/* 7-bit address */
74 #define I2C_MCR_EA10		GENMASK(10, 8)	/* 10-bit Extended address */
75 #define I2C_MCR_SB		BIT(11)		/* Extended address */
76 #define I2C_MCR_AM		GENMASK(13, 12)	/* Address type */
77 #define I2C_MCR_STOP		BIT(14)		/* Stop condition */
78 #define I2C_MCR_LENGTH		GENMASK(25, 15)	/* Transaction length */
79 
80 /* Status register (SR) */
81 #define I2C_SR_OP		GENMASK(1, 0)	/* Operation */
82 #define I2C_SR_STATUS		GENMASK(3, 2)	/* controller status */
83 #define I2C_SR_CAUSE		GENMASK(6, 4)	/* Abort cause */
84 #define I2C_SR_TYPE		GENMASK(8, 7)	/* Receive type */
85 #define I2C_SR_LENGTH		GENMASK(19, 9)	/* Transfer length */
86 
87 /* Baud-rate counter register (BRCR) */
88 #define I2C_BRCR_BRCNT1		GENMASK(31, 16)	/* Baud-rate counter 1 */
89 #define I2C_BRCR_BRCNT2		GENMASK(15, 0)	/* Baud-rate counter 2 */
90 
91 /* Interrupt mask set/clear (IMSCR) bits */
92 #define I2C_IT_TXFE		BIT(0)
93 #define I2C_IT_TXFNE		BIT(1)
94 #define I2C_IT_TXFF		BIT(2)
95 #define I2C_IT_TXFOVR		BIT(3)
96 #define I2C_IT_RXFE		BIT(4)
97 #define I2C_IT_RXFNF		BIT(5)
98 #define I2C_IT_RXFF		BIT(6)
99 #define I2C_IT_RFSR		BIT(16)
100 #define I2C_IT_RFSE		BIT(17)
101 #define I2C_IT_WTSR		BIT(18)
102 #define I2C_IT_MTD		BIT(19)
103 #define I2C_IT_STD		BIT(20)
104 #define I2C_IT_MAL		BIT(24)
105 #define I2C_IT_BERR		BIT(25)
106 #define I2C_IT_MTDWS		BIT(28)
107 
108 /* some bits in ICR are reserved */
109 #define I2C_CLEAR_ALL_INTS	0x131f007f
110 
111 /* maximum threshold value */
112 #define MAX_I2C_FIFO_THRESHOLD	15
113 
114 enum i2c_freq_mode {
115 	I2C_FREQ_MODE_STANDARD,		/* up to 100 Kb/s */
116 	I2C_FREQ_MODE_FAST,		/* up to 400 Kb/s */
117 	I2C_FREQ_MODE_HIGH_SPEED,	/* up to 3.4 Mb/s */
118 	I2C_FREQ_MODE_FAST_PLUS,	/* up to 1 Mb/s */
119 };
120 
121 /* Mobileye EyeQ5 offset into a shared register region (called OLB) */
122 #define NMK_I2C_EYEQ5_OLB_IOCR2			0x0B8
123 
124 enum i2c_eyeq5_speed {
125 	I2C_EYEQ5_SPEED_FAST,
126 	I2C_EYEQ5_SPEED_FAST_PLUS,
127 	I2C_EYEQ5_SPEED_HIGH_SPEED,
128 };
129 
130 /**
131  * struct i2c_vendor_data - per-vendor variations
132  * @has_mtdws: variant has the MTDWS bit
133  * @fifodepth: variant FIFO depth
134  */
135 struct i2c_vendor_data {
136 	bool has_mtdws;
137 	u32 fifodepth;
138 };
139 
140 enum i2c_status {
141 	I2C_NOP,
142 	I2C_ON_GOING,
143 	I2C_OK,
144 	I2C_ABORT
145 };
146 
147 /* operation */
148 enum i2c_operation {
149 	I2C_NO_OPERATION = 0xff,
150 	I2C_WRITE = 0x00,
151 	I2C_READ = 0x01
152 };
153 
154 enum i2c_operating_mode {
155 	I2C_OM_SLAVE,
156 	I2C_OM_MASTER,
157 	I2C_OM_MASTER_OR_SLAVE,
158 };
159 
160 /**
161  * struct i2c_nmk_client - client specific data
162  * @slave_adr: 7-bit slave address
163  * @count: no. bytes to be transferred
164  * @buffer: client data buffer
165  * @xfer_bytes: bytes transferred till now
166  * @operation: current I2C operation
167  */
168 struct i2c_nmk_client {
169 	unsigned short		slave_adr;
170 	unsigned long		count;
171 	unsigned char		*buffer;
172 	unsigned long		xfer_bytes;
173 	enum i2c_operation	operation;
174 };
175 
176 /**
177  * struct nmk_i2c_dev - private data structure of the controller.
178  * @vendor: vendor data for this variant.
179  * @adev: parent amba device.
180  * @adap: corresponding I2C adapter.
181  * @irq: interrupt line for the controller.
182  * @virtbase: virtual io memory area.
183  * @clk: hardware i2c block clock.
184  * @cli: holder of client specific data.
185  * @clk_freq: clock frequency for the operation mode
186  * @tft: Tx FIFO Threshold in bytes
187  * @rft: Rx FIFO Threshold in bytes
188  * @timeout_usecs: Slave response timeout
189  * @sm: speed mode
190  * @stop: stop condition.
191  * @xfer_wq: xfer done wait queue.
192  * @xfer_done: xfer done boolean.
193  * @result: controller propogated result.
194  * @has_32b_bus: controller is on a bus that only supports 32-bit accesses.
195  */
196 struct nmk_i2c_dev {
197 	struct i2c_vendor_data		*vendor;
198 	struct amba_device		*adev;
199 	struct i2c_adapter		adap;
200 	int				irq;
201 	void __iomem			*virtbase;
202 	struct clk			*clk;
203 	struct i2c_nmk_client		cli;
204 	u32				clk_freq;
205 	unsigned char			tft;
206 	unsigned char			rft;
207 	u32				timeout_usecs;
208 	enum i2c_freq_mode		sm;
209 	int				stop;
210 	struct wait_queue_head		xfer_wq;
211 	bool				xfer_done;
212 	int				result;
213 	bool				has_32b_bus;
214 };
215 
216 /* controller's abort causes */
217 static const char *abort_causes[] = {
218 	"no ack received after address transmission",
219 	"no ack received during data phase",
220 	"ack received after xmission of master code",
221 	"master lost arbitration",
222 	"slave restarts",
223 	"slave reset",
224 	"overflow, maxsize is 2047 bytes",
225 };
226 
227 static inline void i2c_set_bit(void __iomem *reg, u32 mask)
228 {
229 	writel(readl(reg) | mask, reg);
230 }
231 
232 static inline void i2c_clr_bit(void __iomem *reg, u32 mask)
233 {
234 	writel(readl(reg) & ~mask, reg);
235 }
236 
237 static inline u8 nmk_i2c_readb(const struct nmk_i2c_dev *priv,
238 			       unsigned long reg)
239 {
240 	if (priv->has_32b_bus)
241 		return readl(priv->virtbase + reg);
242 	else
243 		return readb(priv->virtbase + reg);
244 }
245 
246 static inline void nmk_i2c_writeb(const struct nmk_i2c_dev *priv, u32 val,
247 				  unsigned long reg)
248 {
249 	if (priv->has_32b_bus)
250 		writel(val, priv->virtbase + reg);
251 	else
252 		writeb(val, priv->virtbase + reg);
253 }
254 
255 /**
256  * flush_i2c_fifo() - This function flushes the I2C FIFO
257  * @priv: private data of I2C Driver
258  *
259  * This function flushes the I2C Tx and Rx FIFOs. It returns
260  * 0 on successful flushing of FIFO
261  */
262 static int flush_i2c_fifo(struct nmk_i2c_dev *priv)
263 {
264 #define LOOP_ATTEMPTS 10
265 	ktime_t timeout;
266 	int i;
267 
268 	/*
269 	 * flush the transmit and receive FIFO. The flushing
270 	 * operation takes several cycles before to be completed.
271 	 * On the completion, the I2C internal logic clears these
272 	 * bits, until then no one must access Tx, Rx FIFO and
273 	 * should poll on these bits waiting for the completion.
274 	 */
275 	writel((I2C_CR_FTX | I2C_CR_FRX), priv->virtbase + I2C_CR);
276 
277 	for (i = 0; i < LOOP_ATTEMPTS; i++) {
278 		timeout = ktime_add_us(ktime_get(), priv->timeout_usecs);
279 
280 		while (ktime_after(timeout, ktime_get())) {
281 			if ((readl(priv->virtbase + I2C_CR) &
282 				(I2C_CR_FTX | I2C_CR_FRX)) == 0)
283 				return 0;
284 		}
285 	}
286 
287 	dev_err(&priv->adev->dev,
288 		"flushing operation timed out giving up after %d attempts",
289 		LOOP_ATTEMPTS);
290 
291 	return -ETIMEDOUT;
292 }
293 
294 /**
295  * disable_all_interrupts() - Disable all interrupts of this I2c Bus
296  * @priv: private data of I2C Driver
297  */
298 static void disable_all_interrupts(struct nmk_i2c_dev *priv)
299 {
300 	writel(0, priv->virtbase + I2C_IMSCR);
301 }
302 
303 /**
304  * clear_all_interrupts() - Clear all interrupts of I2C Controller
305  * @priv: private data of I2C Driver
306  */
307 static void clear_all_interrupts(struct nmk_i2c_dev *priv)
308 {
309 	writel(I2C_CLEAR_ALL_INTS, priv->virtbase + I2C_ICR);
310 }
311 
312 /**
313  * init_hw() - initialize the I2C hardware
314  * @priv: private data of I2C Driver
315  */
316 static int init_hw(struct nmk_i2c_dev *priv)
317 {
318 	int stat;
319 
320 	stat = flush_i2c_fifo(priv);
321 	if (stat)
322 		goto exit;
323 
324 	/* disable the controller */
325 	i2c_clr_bit(priv->virtbase + I2C_CR, I2C_CR_PE);
326 
327 	disable_all_interrupts(priv);
328 
329 	clear_all_interrupts(priv);
330 
331 	priv->cli.operation = I2C_NO_OPERATION;
332 
333 exit:
334 	return stat;
335 }
336 
337 /* enable peripheral, master mode operation */
338 #define DEFAULT_I2C_REG_CR	(FIELD_PREP(I2C_CR_OM, I2C_OM_MASTER) | I2C_CR_PE)
339 
340 /* grab top three bits from extended I2C addresses */
341 #define ADR_3MSB_BITS		GENMASK(9, 7)
342 
343 /**
344  * load_i2c_mcr_reg() - load the MCR register
345  * @priv: private data of controller
346  * @flags: message flags
347  */
348 static u32 load_i2c_mcr_reg(struct nmk_i2c_dev *priv, u16 flags)
349 {
350 	u32 mcr = 0;
351 	unsigned short slave_adr_3msb_bits;
352 
353 	mcr |= FIELD_PREP(I2C_MCR_A7, priv->cli.slave_adr);
354 
355 	if (unlikely(flags & I2C_M_TEN)) {
356 		/* 10-bit address transaction */
357 		mcr |= FIELD_PREP(I2C_MCR_AM, 2);
358 		/*
359 		 * Get the top 3 bits.
360 		 * EA10 represents extended address in MCR. This includes
361 		 * the extension (MSB bits) of the 7 bit address loaded
362 		 * in A7
363 		 */
364 		slave_adr_3msb_bits = FIELD_GET(ADR_3MSB_BITS,
365 						priv->cli.slave_adr);
366 
367 		mcr |= FIELD_PREP(I2C_MCR_EA10, slave_adr_3msb_bits);
368 	} else {
369 		/* 7-bit address transaction */
370 		mcr |= FIELD_PREP(I2C_MCR_AM, 1);
371 	}
372 
373 	/* start byte procedure not applied */
374 	mcr |= FIELD_PREP(I2C_MCR_SB, 0);
375 
376 	/* check the operation, master read/write? */
377 	if (priv->cli.operation == I2C_WRITE)
378 		mcr |= FIELD_PREP(I2C_MCR_OP, I2C_WRITE);
379 	else
380 		mcr |= FIELD_PREP(I2C_MCR_OP, I2C_READ);
381 
382 	/* stop or repeated start? */
383 	if (priv->stop)
384 		mcr |= FIELD_PREP(I2C_MCR_STOP, 1);
385 	else
386 		mcr &= ~FIELD_PREP(I2C_MCR_STOP, 1);
387 
388 	mcr |= FIELD_PREP(I2C_MCR_LENGTH, priv->cli.count);
389 
390 	return mcr;
391 }
392 
393 /**
394  * setup_i2c_controller() - setup the controller
395  * @priv: private data of controller
396  */
397 static void setup_i2c_controller(struct nmk_i2c_dev *priv)
398 {
399 	u32 brcr1, brcr2;
400 	u32 i2c_clk, div;
401 	u32 ns;
402 	u16 slsu;
403 
404 	writel(0x0, priv->virtbase + I2C_CR);
405 	writel(0x0, priv->virtbase + I2C_HSMCR);
406 	writel(0x0, priv->virtbase + I2C_TFTR);
407 	writel(0x0, priv->virtbase + I2C_RFTR);
408 	writel(0x0, priv->virtbase + I2C_DMAR);
409 
410 	i2c_clk = clk_get_rate(priv->clk);
411 
412 	/*
413 	 * set the slsu:
414 	 *
415 	 * slsu defines the data setup time after SCL clock
416 	 * stretching in terms of i2c clk cycles + 1 (zero means
417 	 * "wait one cycle"), the needed setup time for the three
418 	 * modes are 250ns, 100ns, 10ns respectively.
419 	 *
420 	 * As the time for one cycle T in nanoseconds is
421 	 * T = (1/f) * 1000000000 =>
422 	 * slsu = cycles / (1000000000 / f) + 1
423 	 */
424 	ns = DIV_ROUND_UP_ULL(1000000000ULL, i2c_clk);
425 	switch (priv->sm) {
426 	case I2C_FREQ_MODE_FAST:
427 	case I2C_FREQ_MODE_FAST_PLUS:
428 		slsu = DIV_ROUND_UP(100, ns); /* Fast */
429 		break;
430 	case I2C_FREQ_MODE_HIGH_SPEED:
431 		slsu = DIV_ROUND_UP(10, ns); /* High */
432 		break;
433 	case I2C_FREQ_MODE_STANDARD:
434 	default:
435 		slsu = DIV_ROUND_UP(250, ns); /* Standard */
436 		break;
437 	}
438 	slsu += 1;
439 
440 	dev_dbg(&priv->adev->dev, "calculated SLSU = %04x\n", slsu);
441 	writel(FIELD_PREP(I2C_SCR_SLSU, slsu), priv->virtbase + I2C_SCR);
442 
443 	/*
444 	 * The spec says, in case of std. mode the divider is
445 	 * 2 whereas it is 3 for fast and fastplus mode of
446 	 * operation. TODO - high speed support.
447 	 */
448 	div = (priv->clk_freq > I2C_MAX_STANDARD_MODE_FREQ) ? 3 : 2;
449 
450 	/*
451 	 * generate the mask for baud rate counters. The controller
452 	 * has two baud rate counters. One is used for High speed
453 	 * operation, and the other is for std, fast mode, fast mode
454 	 * plus operation. Currently we do not supprt high speed mode
455 	 * so set brcr1 to 0.
456 	 */
457 	brcr1 = FIELD_PREP(I2C_BRCR_BRCNT1, 0);
458 	brcr2 = FIELD_PREP(I2C_BRCR_BRCNT2, i2c_clk / (priv->clk_freq * div));
459 
460 	/* set the baud rate counter register */
461 	writel((brcr1 | brcr2), priv->virtbase + I2C_BRCR);
462 
463 	/*
464 	 * set the speed mode. Currently we support
465 	 * only standard and fast mode of operation
466 	 * TODO - support for fast mode plus (up to 1Mb/s)
467 	 * and high speed (up to 3.4 Mb/s)
468 	 */
469 	if (priv->sm > I2C_FREQ_MODE_FAST) {
470 		dev_err(&priv->adev->dev,
471 			"do not support this mode defaulting to std. mode\n");
472 		brcr2 = FIELD_PREP(I2C_BRCR_BRCNT2,
473 				   i2c_clk / (I2C_MAX_STANDARD_MODE_FREQ * 2));
474 		writel((brcr1 | brcr2), priv->virtbase + I2C_BRCR);
475 		writel(FIELD_PREP(I2C_CR_SM, I2C_FREQ_MODE_STANDARD),
476 		       priv->virtbase + I2C_CR);
477 	}
478 	writel(FIELD_PREP(I2C_CR_SM, priv->sm), priv->virtbase + I2C_CR);
479 
480 	/* set the Tx and Rx FIFO threshold */
481 	writel(priv->tft, priv->virtbase + I2C_TFTR);
482 	writel(priv->rft, priv->virtbase + I2C_RFTR);
483 }
484 
485 static bool nmk_i2c_wait_xfer_done(struct nmk_i2c_dev *priv)
486 {
487 	if (priv->timeout_usecs < jiffies_to_usecs(1)) {
488 		unsigned long timeout_usecs = priv->timeout_usecs;
489 		ktime_t timeout = ktime_set(0, timeout_usecs * NSEC_PER_USEC);
490 
491 		wait_event_hrtimeout(priv->xfer_wq, priv->xfer_done, timeout);
492 	} else {
493 		unsigned long timeout = usecs_to_jiffies(priv->timeout_usecs);
494 
495 		wait_event_timeout(priv->xfer_wq, priv->xfer_done, timeout);
496 	}
497 
498 	return priv->xfer_done;
499 }
500 
501 /**
502  * read_i2c() - Read from I2C client device
503  * @priv: private data of I2C Driver
504  * @flags: message flags
505  *
506  * This function reads from i2c client device when controller is in
507  * master mode. There is a completion timeout. If there is no transfer
508  * before timeout error is returned.
509  */
510 static int read_i2c(struct nmk_i2c_dev *priv, u16 flags)
511 {
512 	u32 mcr, irq_mask;
513 	int status = 0;
514 	bool xfer_done;
515 
516 	mcr = load_i2c_mcr_reg(priv, flags);
517 	writel(mcr, priv->virtbase + I2C_MCR);
518 
519 	/* load the current CR value */
520 	writel(readl(priv->virtbase + I2C_CR) | DEFAULT_I2C_REG_CR,
521 	       priv->virtbase + I2C_CR);
522 
523 	/* enable the controller */
524 	i2c_set_bit(priv->virtbase + I2C_CR, I2C_CR_PE);
525 
526 	init_waitqueue_head(&priv->xfer_wq);
527 	priv->xfer_done = false;
528 
529 	/* enable interrupts by setting the mask */
530 	irq_mask = (I2C_IT_RXFNF | I2C_IT_RXFF |
531 			I2C_IT_MAL | I2C_IT_BERR);
532 
533 	if (priv->stop || !priv->vendor->has_mtdws)
534 		irq_mask |= I2C_IT_MTD;
535 	else
536 		irq_mask |= I2C_IT_MTDWS;
537 
538 	irq_mask &= I2C_CLEAR_ALL_INTS;
539 
540 	writel(readl(priv->virtbase + I2C_IMSCR) | irq_mask,
541 	       priv->virtbase + I2C_IMSCR);
542 
543 	xfer_done = nmk_i2c_wait_xfer_done(priv);
544 
545 	if (!xfer_done) {
546 		/* Controller timed out */
547 		dev_err(&priv->adev->dev, "read from slave 0x%x timed out\n",
548 			priv->cli.slave_adr);
549 		status = -ETIMEDOUT;
550 	}
551 	return status;
552 }
553 
554 static void fill_tx_fifo(struct nmk_i2c_dev *priv, int no_bytes)
555 {
556 	int count;
557 
558 	for (count = (no_bytes - 2);
559 			(count > 0) &&
560 			(priv->cli.count != 0);
561 			count--) {
562 		/* write to the Tx FIFO */
563 		nmk_i2c_writeb(priv, *priv->cli.buffer, I2C_TFR);
564 		priv->cli.buffer++;
565 		priv->cli.count--;
566 		priv->cli.xfer_bytes++;
567 	}
568 
569 }
570 
571 /**
572  * write_i2c() - Write data to I2C client.
573  * @priv: private data of I2C Driver
574  * @flags: message flags
575  *
576  * This function writes data to I2C client
577  */
578 static int write_i2c(struct nmk_i2c_dev *priv, u16 flags)
579 {
580 	u32 mcr, irq_mask;
581 	u32 status = 0;
582 	bool xfer_done;
583 
584 	mcr = load_i2c_mcr_reg(priv, flags);
585 
586 	writel(mcr, priv->virtbase + I2C_MCR);
587 
588 	/* load the current CR value */
589 	writel(readl(priv->virtbase + I2C_CR) | DEFAULT_I2C_REG_CR,
590 	       priv->virtbase + I2C_CR);
591 
592 	/* enable the controller */
593 	i2c_set_bit(priv->virtbase + I2C_CR, I2C_CR_PE);
594 
595 	init_waitqueue_head(&priv->xfer_wq);
596 	priv->xfer_done = false;
597 
598 	/* enable interrupts by settings the masks */
599 	irq_mask = (I2C_IT_TXFOVR | I2C_IT_MAL | I2C_IT_BERR);
600 
601 	/* Fill the TX FIFO with transmit data */
602 	fill_tx_fifo(priv, MAX_I2C_FIFO_THRESHOLD);
603 
604 	if (priv->cli.count != 0)
605 		irq_mask |= I2C_IT_TXFNE;
606 
607 	/*
608 	 * check if we want to transfer a single or multiple bytes, if so
609 	 * set the MTDWS bit (Master Transaction Done Without Stop)
610 	 * to start repeated start operation
611 	 */
612 	if (priv->stop || !priv->vendor->has_mtdws)
613 		irq_mask |= I2C_IT_MTD;
614 	else
615 		irq_mask |= I2C_IT_MTDWS;
616 
617 	irq_mask &= I2C_CLEAR_ALL_INTS;
618 
619 	writel(readl(priv->virtbase + I2C_IMSCR) | irq_mask,
620 	       priv->virtbase + I2C_IMSCR);
621 
622 	xfer_done = nmk_i2c_wait_xfer_done(priv);
623 
624 	if (!xfer_done) {
625 		/* Controller timed out */
626 		dev_err(&priv->adev->dev, "write to slave 0x%x timed out\n",
627 			priv->cli.slave_adr);
628 		status = -ETIMEDOUT;
629 	}
630 
631 	return status;
632 }
633 
634 /**
635  * nmk_i2c_xfer_one() - transmit a single I2C message
636  * @priv: device with a message encoded into it
637  * @flags: message flags
638  */
639 static int nmk_i2c_xfer_one(struct nmk_i2c_dev *priv, u16 flags)
640 {
641 	int status;
642 
643 	if (flags & I2C_M_RD) {
644 		/* read operation */
645 		priv->cli.operation = I2C_READ;
646 		status = read_i2c(priv, flags);
647 	} else {
648 		/* write operation */
649 		priv->cli.operation = I2C_WRITE;
650 		status = write_i2c(priv, flags);
651 	}
652 
653 	if (status || priv->result) {
654 		u32 i2c_sr;
655 		u32 cause;
656 
657 		i2c_sr = readl(priv->virtbase + I2C_SR);
658 		if (FIELD_GET(I2C_SR_STATUS, i2c_sr) == I2C_ABORT) {
659 			cause = FIELD_GET(I2C_SR_CAUSE, i2c_sr);
660 			dev_err(&priv->adev->dev, "%s\n",
661 				cause >= ARRAY_SIZE(abort_causes) ?
662 				"unknown reason" :
663 				abort_causes[cause]);
664 		}
665 
666 		init_hw(priv);
667 
668 		status = status ? status : priv->result;
669 	}
670 
671 	return status;
672 }
673 
674 /**
675  * nmk_i2c_xfer() - I2C transfer function used by kernel framework
676  * @i2c_adap: Adapter pointer to the controller
677  * @msgs: Pointer to data to be written.
678  * @num_msgs: Number of messages to be executed
679  *
680  * This is the function called by the generic kernel i2c_transfer()
681  * or i2c_smbus...() API calls. Note that this code is protected by the
682  * semaphore set in the kernel i2c_transfer() function.
683  *
684  * NOTE:
685  * READ TRANSFER : We impose a restriction of the first message to be the
686  *		index message for any read transaction.
687  *		- a no index is coded as '0',
688  *		- 2byte big endian index is coded as '3'
689  *		!!! msg[0].buf holds the actual index.
690  *		This is compatible with generic messages of smbus emulator
691  *		that send a one byte index.
692  *		eg. a I2C transation to read 2 bytes from index 0
693  *			idx = 0;
694  *			msg[0].addr = client->addr;
695  *			msg[0].flags = 0x0;
696  *			msg[0].len = 1;
697  *			msg[0].buf = &idx;
698  *
699  *			msg[1].addr = client->addr;
700  *			msg[1].flags = I2C_M_RD;
701  *			msg[1].len = 2;
702  *			msg[1].buf = rd_buff
703  *			i2c_transfer(adap, msg, 2);
704  *
705  * WRITE TRANSFER : The I2C standard interface interprets all data as payload.
706  *		If you want to emulate an SMBUS write transaction put the
707  *		index as first byte(or first and second) in the payload.
708  *		eg. a I2C transation to write 2 bytes from index 1
709  *			wr_buff[0] = 0x1;
710  *			wr_buff[1] = 0x23;
711  *			wr_buff[2] = 0x46;
712  *			msg[0].flags = 0x0;
713  *			msg[0].len = 3;
714  *			msg[0].buf = wr_buff;
715  *			i2c_transfer(adap, msg, 1);
716  *
717  * To read or write a block of data (multiple bytes) using SMBUS emulation
718  * please use the i2c_smbus_read_i2c_block_data()
719  * or i2c_smbus_write_i2c_block_data() API
720  */
721 static int nmk_i2c_xfer(struct i2c_adapter *i2c_adap,
722 		struct i2c_msg msgs[], int num_msgs)
723 {
724 	int status = 0;
725 	int i;
726 	struct nmk_i2c_dev *priv = i2c_get_adapdata(i2c_adap);
727 	int j;
728 
729 	pm_runtime_get_sync(&priv->adev->dev);
730 
731 	/* Attempt three times to send the message queue */
732 	for (j = 0; j < 3; j++) {
733 		/* setup the i2c controller */
734 		setup_i2c_controller(priv);
735 
736 		for (i = 0; i < num_msgs; i++) {
737 			priv->cli.slave_adr	= msgs[i].addr;
738 			priv->cli.buffer		= msgs[i].buf;
739 			priv->cli.count		= msgs[i].len;
740 			priv->stop = (i < (num_msgs - 1)) ? 0 : 1;
741 			priv->result = 0;
742 
743 			status = nmk_i2c_xfer_one(priv, msgs[i].flags);
744 			if (status != 0)
745 				break;
746 		}
747 		if (status == 0)
748 			break;
749 	}
750 
751 	pm_runtime_put_sync(&priv->adev->dev);
752 
753 	/* return the no. messages processed */
754 	if (status)
755 		return status;
756 	else
757 		return num_msgs;
758 }
759 
760 /**
761  * disable_interrupts() - disable the interrupts
762  * @priv: private data of controller
763  * @irq: interrupt number
764  */
765 static int disable_interrupts(struct nmk_i2c_dev *priv, u32 irq)
766 {
767 	irq &= I2C_CLEAR_ALL_INTS;
768 	writel(readl(priv->virtbase + I2C_IMSCR) & ~irq,
769 	       priv->virtbase + I2C_IMSCR);
770 	return 0;
771 }
772 
773 /**
774  * i2c_irq_handler() - interrupt routine
775  * @irq: interrupt number
776  * @arg: data passed to the handler
777  *
778  * This is the interrupt handler for the i2c driver. Currently
779  * it handles the major interrupts like Rx & Tx FIFO management
780  * interrupts, master transaction interrupts, arbitration and
781  * bus error interrupts. The rest of the interrupts are treated as
782  * unhandled.
783  */
784 static irqreturn_t i2c_irq_handler(int irq, void *arg)
785 {
786 	struct nmk_i2c_dev *priv = arg;
787 	struct device *dev = &priv->adev->dev;
788 	u32 tft, rft;
789 	u32 count;
790 	u32 misr, src;
791 
792 	/* load Tx FIFO and Rx FIFO threshold values */
793 	tft = readl(priv->virtbase + I2C_TFTR);
794 	rft = readl(priv->virtbase + I2C_RFTR);
795 
796 	/* read interrupt status register */
797 	misr = readl(priv->virtbase + I2C_MISR);
798 
799 	src = __ffs(misr);
800 	switch (BIT(src)) {
801 
802 	/* Transmit FIFO nearly empty interrupt */
803 	case I2C_IT_TXFNE:
804 	{
805 		if (priv->cli.operation == I2C_READ) {
806 			/*
807 			 * in read operation why do we care for writing?
808 			 * so disable the Transmit FIFO interrupt
809 			 */
810 			disable_interrupts(priv, I2C_IT_TXFNE);
811 		} else {
812 			fill_tx_fifo(priv, (MAX_I2C_FIFO_THRESHOLD - tft));
813 			/*
814 			 * if done, close the transfer by disabling the
815 			 * corresponding TXFNE interrupt
816 			 */
817 			if (priv->cli.count == 0)
818 				disable_interrupts(priv,	I2C_IT_TXFNE);
819 		}
820 	}
821 	break;
822 
823 	/*
824 	 * Rx FIFO nearly full interrupt.
825 	 * This is set when the numer of entries in Rx FIFO is
826 	 * greater or equal than the threshold value programmed
827 	 * in RFT
828 	 */
829 	case I2C_IT_RXFNF:
830 		for (count = rft; count > 0; count--) {
831 			/* Read the Rx FIFO */
832 			*priv->cli.buffer = nmk_i2c_readb(priv, I2C_RFR);
833 			priv->cli.buffer++;
834 		}
835 		priv->cli.count -= rft;
836 		priv->cli.xfer_bytes += rft;
837 		break;
838 
839 	/* Rx FIFO full */
840 	case I2C_IT_RXFF:
841 		for (count = MAX_I2C_FIFO_THRESHOLD; count > 0; count--) {
842 			*priv->cli.buffer = nmk_i2c_readb(priv, I2C_RFR);
843 			priv->cli.buffer++;
844 		}
845 		priv->cli.count -= MAX_I2C_FIFO_THRESHOLD;
846 		priv->cli.xfer_bytes += MAX_I2C_FIFO_THRESHOLD;
847 		break;
848 
849 	/* Master Transaction Done with/without stop */
850 	case I2C_IT_MTD:
851 	case I2C_IT_MTDWS:
852 		if (priv->cli.operation == I2C_READ) {
853 			while (!(readl(priv->virtbase + I2C_RISR)
854 				 & I2C_IT_RXFE)) {
855 				if (priv->cli.count == 0)
856 					break;
857 				*priv->cli.buffer =
858 					nmk_i2c_readb(priv, I2C_RFR);
859 				priv->cli.buffer++;
860 				priv->cli.count--;
861 				priv->cli.xfer_bytes++;
862 			}
863 		}
864 
865 		disable_all_interrupts(priv);
866 		clear_all_interrupts(priv);
867 
868 		if (priv->cli.count) {
869 			priv->result = -EIO;
870 			dev_err(dev, "%lu bytes still remain to be xfered\n",
871 				priv->cli.count);
872 			init_hw(priv);
873 		}
874 		priv->xfer_done = true;
875 		wake_up(&priv->xfer_wq);
876 
877 
878 		break;
879 
880 	/* Master Arbitration lost interrupt */
881 	case I2C_IT_MAL:
882 		priv->result = -EIO;
883 		init_hw(priv);
884 
885 		i2c_set_bit(priv->virtbase + I2C_ICR, I2C_IT_MAL);
886 		priv->xfer_done = true;
887 		wake_up(&priv->xfer_wq);
888 
889 
890 		break;
891 
892 	/*
893 	 * Bus Error interrupt.
894 	 * This happens when an unexpected start/stop condition occurs
895 	 * during the transaction.
896 	 */
897 	case I2C_IT_BERR:
898 	{
899 		u32 sr;
900 
901 		sr = readl(priv->virtbase + I2C_SR);
902 		priv->result = -EIO;
903 		if (FIELD_GET(I2C_SR_STATUS, sr) == I2C_ABORT)
904 			init_hw(priv);
905 
906 		i2c_set_bit(priv->virtbase + I2C_ICR, I2C_IT_BERR);
907 		priv->xfer_done = true;
908 		wake_up(&priv->xfer_wq);
909 
910 	}
911 	break;
912 
913 	/*
914 	 * Tx FIFO overrun interrupt.
915 	 * This is set when a write operation in Tx FIFO is performed and
916 	 * the Tx FIFO is full.
917 	 */
918 	case I2C_IT_TXFOVR:
919 		priv->result = -EIO;
920 		init_hw(priv);
921 
922 		dev_err(dev, "Tx Fifo Over run\n");
923 		priv->xfer_done = true;
924 		wake_up(&priv->xfer_wq);
925 
926 
927 		break;
928 
929 	/* unhandled interrupts by this driver - TODO*/
930 	case I2C_IT_TXFE:
931 	case I2C_IT_TXFF:
932 	case I2C_IT_RXFE:
933 	case I2C_IT_RFSR:
934 	case I2C_IT_RFSE:
935 	case I2C_IT_WTSR:
936 	case I2C_IT_STD:
937 		dev_err(dev, "unhandled Interrupt\n");
938 		break;
939 	default:
940 		dev_err(dev, "spurious Interrupt..\n");
941 		break;
942 	}
943 
944 	return IRQ_HANDLED;
945 }
946 
947 static int nmk_i2c_suspend_late(struct device *dev)
948 {
949 	int ret;
950 
951 	ret = pm_runtime_force_suspend(dev);
952 	if (ret)
953 		return ret;
954 
955 	pinctrl_pm_select_sleep_state(dev);
956 	return 0;
957 }
958 
959 static int nmk_i2c_resume_early(struct device *dev)
960 {
961 	return pm_runtime_force_resume(dev);
962 }
963 
964 static int nmk_i2c_runtime_suspend(struct device *dev)
965 {
966 	struct amba_device *adev = to_amba_device(dev);
967 	struct nmk_i2c_dev *priv = amba_get_drvdata(adev);
968 
969 	clk_disable_unprepare(priv->clk);
970 	pinctrl_pm_select_idle_state(dev);
971 	return 0;
972 }
973 
974 static int nmk_i2c_runtime_resume(struct device *dev)
975 {
976 	struct amba_device *adev = to_amba_device(dev);
977 	struct nmk_i2c_dev *priv = amba_get_drvdata(adev);
978 	int ret;
979 
980 	ret = clk_prepare_enable(priv->clk);
981 	if (ret) {
982 		dev_err(dev, "can't prepare_enable clock\n");
983 		return ret;
984 	}
985 
986 	pinctrl_pm_select_default_state(dev);
987 
988 	ret = init_hw(priv);
989 	if (ret) {
990 		clk_disable_unprepare(priv->clk);
991 		pinctrl_pm_select_idle_state(dev);
992 	}
993 
994 	return ret;
995 }
996 
997 static const struct dev_pm_ops nmk_i2c_pm = {
998 	LATE_SYSTEM_SLEEP_PM_OPS(nmk_i2c_suspend_late, nmk_i2c_resume_early)
999 	RUNTIME_PM_OPS(nmk_i2c_runtime_suspend, nmk_i2c_runtime_resume, NULL)
1000 };
1001 
1002 static unsigned int nmk_i2c_functionality(struct i2c_adapter *adap)
1003 {
1004 	return I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL | I2C_FUNC_10BIT_ADDR;
1005 }
1006 
1007 static const struct i2c_algorithm nmk_i2c_algo = {
1008 	.master_xfer	= nmk_i2c_xfer,
1009 	.functionality	= nmk_i2c_functionality
1010 };
1011 
1012 static void nmk_i2c_of_probe(struct device_node *np,
1013 			     struct nmk_i2c_dev *priv)
1014 {
1015 	u32 timeout_usecs;
1016 
1017 	/* Default to 100 kHz if no frequency is given in the node */
1018 	if (of_property_read_u32(np, "clock-frequency", &priv->clk_freq))
1019 		priv->clk_freq = I2C_MAX_STANDARD_MODE_FREQ;
1020 
1021 	/* This driver only supports 'standard' and 'fast' modes of operation. */
1022 	if (priv->clk_freq <= I2C_MAX_STANDARD_MODE_FREQ)
1023 		priv->sm = I2C_FREQ_MODE_STANDARD;
1024 	else
1025 		priv->sm = I2C_FREQ_MODE_FAST;
1026 	priv->tft = 1; /* Tx FIFO threshold */
1027 	priv->rft = 8; /* Rx FIFO threshold */
1028 
1029 	/* Slave response timeout */
1030 	if (!of_property_read_u32(np, "i2c-transfer-timeout-us", &timeout_usecs))
1031 		priv->timeout_usecs = timeout_usecs;
1032 	else
1033 		priv->timeout_usecs = 200 * USEC_PER_MSEC;
1034 }
1035 
1036 static const unsigned int nmk_i2c_eyeq5_masks[] = {
1037 	GENMASK(5, 4),
1038 	GENMASK(7, 6),
1039 	GENMASK(9, 8),
1040 	GENMASK(11, 10),
1041 	GENMASK(13, 12),
1042 };
1043 
1044 static int nmk_i2c_eyeq5_probe(struct nmk_i2c_dev *priv)
1045 {
1046 	struct device *dev = &priv->adev->dev;
1047 	struct device_node *np = dev->of_node;
1048 	unsigned int mask, speed_mode;
1049 	struct regmap *olb;
1050 	unsigned int id;
1051 
1052 	priv->has_32b_bus = true;
1053 
1054 	olb = syscon_regmap_lookup_by_phandle_args(np, "mobileye,olb", 1, &id);
1055 	if (IS_ERR(olb))
1056 		return PTR_ERR(olb);
1057 	if (id >= ARRAY_SIZE(nmk_i2c_eyeq5_masks))
1058 		return -ENOENT;
1059 
1060 	if (priv->clk_freq <= 400000)
1061 		speed_mode = I2C_EYEQ5_SPEED_FAST;
1062 	else if (priv->clk_freq <= 1000000)
1063 		speed_mode = I2C_EYEQ5_SPEED_FAST_PLUS;
1064 	else
1065 		speed_mode = I2C_EYEQ5_SPEED_HIGH_SPEED;
1066 
1067 	mask = nmk_i2c_eyeq5_masks[id];
1068 	regmap_update_bits(olb, NMK_I2C_EYEQ5_OLB_IOCR2,
1069 			   mask, speed_mode << __fls(mask));
1070 
1071 	return 0;
1072 }
1073 
1074 static int nmk_i2c_probe(struct amba_device *adev, const struct amba_id *id)
1075 {
1076 	int ret = 0;
1077 	struct nmk_i2c_dev *priv;
1078 	struct device_node *np = adev->dev.of_node;
1079 	struct device *dev = &adev->dev;
1080 	struct i2c_adapter *adap;
1081 	struct i2c_vendor_data *vendor = id->data;
1082 	u32 max_fifo_threshold = (vendor->fifodepth / 2) - 1;
1083 
1084 	priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
1085 	if (!priv)
1086 		return -ENOMEM;
1087 
1088 	priv->vendor = vendor;
1089 	priv->adev = adev;
1090 	priv->has_32b_bus = false;
1091 	nmk_i2c_of_probe(np, priv);
1092 
1093 	if (of_device_is_compatible(np, "mobileye,eyeq5-i2c")) {
1094 		ret = nmk_i2c_eyeq5_probe(priv);
1095 		if (ret)
1096 			return dev_err_probe(dev, ret, "failed OLB lookup\n");
1097 	}
1098 
1099 	if (priv->tft > max_fifo_threshold) {
1100 		dev_warn(dev, "requested TX FIFO threshold %u, adjusted down to %u\n",
1101 			 priv->tft, max_fifo_threshold);
1102 		priv->tft = max_fifo_threshold;
1103 	}
1104 
1105 	if (priv->rft > max_fifo_threshold) {
1106 		dev_warn(dev, "requested RX FIFO threshold %u, adjusted down to %u\n",
1107 			 priv->rft, max_fifo_threshold);
1108 		priv->rft = max_fifo_threshold;
1109 	}
1110 
1111 	amba_set_drvdata(adev, priv);
1112 
1113 	priv->virtbase = devm_ioremap(dev, adev->res.start,
1114 				      resource_size(&adev->res));
1115 	if (!priv->virtbase)
1116 		return -ENOMEM;
1117 
1118 	priv->irq = adev->irq[0];
1119 	ret = devm_request_irq(dev, priv->irq, i2c_irq_handler, 0,
1120 			       DRIVER_NAME, priv);
1121 	if (ret)
1122 		return dev_err_probe(dev, ret,
1123 				     "cannot claim the irq %d\n", priv->irq);
1124 
1125 	priv->clk = devm_clk_get_enabled(dev, NULL);
1126 	if (IS_ERR(priv->clk))
1127 		return dev_err_probe(dev, PTR_ERR(priv->clk),
1128 				     "could enable i2c clock\n");
1129 
1130 	init_hw(priv);
1131 
1132 	adap = &priv->adap;
1133 	adap->dev.of_node = np;
1134 	adap->dev.parent = dev;
1135 	adap->owner = THIS_MODULE;
1136 	adap->class = I2C_CLASS_DEPRECATED;
1137 	adap->algo = &nmk_i2c_algo;
1138 	adap->timeout = usecs_to_jiffies(priv->timeout_usecs);
1139 	snprintf(adap->name, sizeof(adap->name),
1140 		 "Nomadik I2C at %pR", &adev->res);
1141 
1142 	i2c_set_adapdata(adap, priv);
1143 
1144 	dev_info(dev,
1145 		 "initialize %s on virtual base %p\n",
1146 		 adap->name, priv->virtbase);
1147 
1148 	ret = i2c_add_adapter(adap);
1149 	if (ret)
1150 		return ret;
1151 
1152 	pm_runtime_put(dev);
1153 
1154 	return 0;
1155 }
1156 
1157 static void nmk_i2c_remove(struct amba_device *adev)
1158 {
1159 	struct nmk_i2c_dev *priv = amba_get_drvdata(adev);
1160 
1161 	i2c_del_adapter(&priv->adap);
1162 	flush_i2c_fifo(priv);
1163 	disable_all_interrupts(priv);
1164 	clear_all_interrupts(priv);
1165 	/* disable the controller */
1166 	i2c_clr_bit(priv->virtbase + I2C_CR, I2C_CR_PE);
1167 }
1168 
1169 static struct i2c_vendor_data vendor_stn8815 = {
1170 	.has_mtdws = false,
1171 	.fifodepth = 16, /* Guessed from TFTR/RFTR = 7 */
1172 };
1173 
1174 static struct i2c_vendor_data vendor_db8500 = {
1175 	.has_mtdws = true,
1176 	.fifodepth = 32, /* Guessed from TFTR/RFTR = 15 */
1177 };
1178 
1179 static const struct amba_id nmk_i2c_ids[] = {
1180 	{
1181 		.id	= 0x00180024,
1182 		.mask	= 0x00ffffff,
1183 		.data	= &vendor_stn8815,
1184 	},
1185 	{
1186 		.id	= 0x00380024,
1187 		.mask	= 0x00ffffff,
1188 		.data	= &vendor_db8500,
1189 	},
1190 	{},
1191 };
1192 
1193 MODULE_DEVICE_TABLE(amba, nmk_i2c_ids);
1194 
1195 static struct amba_driver nmk_i2c_driver = {
1196 	.drv = {
1197 		.owner = THIS_MODULE,
1198 		.name = DRIVER_NAME,
1199 		.pm = pm_ptr(&nmk_i2c_pm),
1200 	},
1201 	.id_table = nmk_i2c_ids,
1202 	.probe = nmk_i2c_probe,
1203 	.remove = nmk_i2c_remove,
1204 };
1205 
1206 static int __init nmk_i2c_init(void)
1207 {
1208 	return amba_driver_register(&nmk_i2c_driver);
1209 }
1210 
1211 static void __exit nmk_i2c_exit(void)
1212 {
1213 	amba_driver_unregister(&nmk_i2c_driver);
1214 }
1215 
1216 subsys_initcall(nmk_i2c_init);
1217 module_exit(nmk_i2c_exit);
1218 
1219 MODULE_AUTHOR("Sachin Verma");
1220 MODULE_AUTHOR("Srinidhi KASAGAR");
1221 MODULE_DESCRIPTION("Nomadik/Ux500 I2C driver");
1222 MODULE_LICENSE("GPL");
1223