xref: /openbmc/linux/drivers/i2c/busses/i2c-rk3x.c (revision c41aa3ce938b684d853f1004072b6116a41bb1ce)
1*c41aa3ceSMax Schwarz /*
2*c41aa3ceSMax Schwarz  * Driver for I2C adapter in Rockchip RK3xxx SoC
3*c41aa3ceSMax Schwarz  *
4*c41aa3ceSMax Schwarz  * Max Schwarz <max.schwarz@online.de>
5*c41aa3ceSMax Schwarz  * based on the patches by Rockchip Inc.
6*c41aa3ceSMax Schwarz  *
7*c41aa3ceSMax Schwarz  * This program is free software; you can redistribute it and/or modify
8*c41aa3ceSMax Schwarz  * it under the terms of the GNU General Public License version 2 as
9*c41aa3ceSMax Schwarz  * published by the Free Software Foundation.
10*c41aa3ceSMax Schwarz  */
11*c41aa3ceSMax Schwarz 
12*c41aa3ceSMax Schwarz #include <linux/kernel.h>
13*c41aa3ceSMax Schwarz #include <linux/module.h>
14*c41aa3ceSMax Schwarz #include <linux/i2c.h>
15*c41aa3ceSMax Schwarz #include <linux/interrupt.h>
16*c41aa3ceSMax Schwarz #include <linux/errno.h>
17*c41aa3ceSMax Schwarz #include <linux/err.h>
18*c41aa3ceSMax Schwarz #include <linux/platform_device.h>
19*c41aa3ceSMax Schwarz #include <linux/io.h>
20*c41aa3ceSMax Schwarz #include <linux/of_address.h>
21*c41aa3ceSMax Schwarz #include <linux/of_irq.h>
22*c41aa3ceSMax Schwarz #include <linux/spinlock.h>
23*c41aa3ceSMax Schwarz #include <linux/clk.h>
24*c41aa3ceSMax Schwarz #include <linux/wait.h>
25*c41aa3ceSMax Schwarz #include <linux/mfd/syscon.h>
26*c41aa3ceSMax Schwarz #include <linux/regmap.h>
27*c41aa3ceSMax Schwarz 
28*c41aa3ceSMax Schwarz 
29*c41aa3ceSMax Schwarz /* Register Map */
30*c41aa3ceSMax Schwarz #define REG_CON        0x00 /* control register */
31*c41aa3ceSMax Schwarz #define REG_CLKDIV     0x04 /* clock divisor register */
32*c41aa3ceSMax Schwarz #define REG_MRXADDR    0x08 /* slave address for REGISTER_TX */
33*c41aa3ceSMax Schwarz #define REG_MRXRADDR   0x0c /* slave register address for REGISTER_TX */
34*c41aa3ceSMax Schwarz #define REG_MTXCNT     0x10 /* number of bytes to be transmitted */
35*c41aa3ceSMax Schwarz #define REG_MRXCNT     0x14 /* number of bytes to be received */
36*c41aa3ceSMax Schwarz #define REG_IEN        0x18 /* interrupt enable */
37*c41aa3ceSMax Schwarz #define REG_IPD        0x1c /* interrupt pending */
38*c41aa3ceSMax Schwarz #define REG_FCNT       0x20 /* finished count */
39*c41aa3ceSMax Schwarz 
40*c41aa3ceSMax Schwarz /* Data buffer offsets */
41*c41aa3ceSMax Schwarz #define TXBUFFER_BASE 0x100
42*c41aa3ceSMax Schwarz #define RXBUFFER_BASE 0x200
43*c41aa3ceSMax Schwarz 
44*c41aa3ceSMax Schwarz /* REG_CON bits */
45*c41aa3ceSMax Schwarz #define REG_CON_EN        BIT(0)
46*c41aa3ceSMax Schwarz enum {
47*c41aa3ceSMax Schwarz 	REG_CON_MOD_TX = 0,      /* transmit data */
48*c41aa3ceSMax Schwarz 	REG_CON_MOD_REGISTER_TX, /* select register and restart */
49*c41aa3ceSMax Schwarz 	REG_CON_MOD_RX,          /* receive data */
50*c41aa3ceSMax Schwarz 	REG_CON_MOD_REGISTER_RX, /* broken: transmits read addr AND writes
51*c41aa3ceSMax Schwarz 				  * register addr */
52*c41aa3ceSMax Schwarz };
53*c41aa3ceSMax Schwarz #define REG_CON_MOD(mod)  ((mod) << 1)
54*c41aa3ceSMax Schwarz #define REG_CON_MOD_MASK  (BIT(1) | BIT(2))
55*c41aa3ceSMax Schwarz #define REG_CON_START     BIT(3)
56*c41aa3ceSMax Schwarz #define REG_CON_STOP      BIT(4)
57*c41aa3ceSMax Schwarz #define REG_CON_LASTACK   BIT(5) /* 1: send NACK after last received byte */
58*c41aa3ceSMax Schwarz #define REG_CON_ACTACK    BIT(6) /* 1: stop if NACK is received */
59*c41aa3ceSMax Schwarz 
60*c41aa3ceSMax Schwarz /* REG_MRXADDR bits */
61*c41aa3ceSMax Schwarz #define REG_MRXADDR_VALID(x) BIT(24 + (x)) /* [x*8+7:x*8] of MRX[R]ADDR valid */
62*c41aa3ceSMax Schwarz 
63*c41aa3ceSMax Schwarz /* REG_IEN/REG_IPD bits */
64*c41aa3ceSMax Schwarz #define REG_INT_BTF       BIT(0) /* a byte was transmitted */
65*c41aa3ceSMax Schwarz #define REG_INT_BRF       BIT(1) /* a byte was received */
66*c41aa3ceSMax Schwarz #define REG_INT_MBTF      BIT(2) /* master data transmit finished */
67*c41aa3ceSMax Schwarz #define REG_INT_MBRF      BIT(3) /* master data receive finished */
68*c41aa3ceSMax Schwarz #define REG_INT_START     BIT(4) /* START condition generated */
69*c41aa3ceSMax Schwarz #define REG_INT_STOP      BIT(5) /* STOP condition generated */
70*c41aa3ceSMax Schwarz #define REG_INT_NAKRCV    BIT(6) /* NACK received */
71*c41aa3ceSMax Schwarz #define REG_INT_ALL       0x7f
72*c41aa3ceSMax Schwarz 
73*c41aa3ceSMax Schwarz /* Constants */
74*c41aa3ceSMax Schwarz #define WAIT_TIMEOUT      200 /* ms */
75*c41aa3ceSMax Schwarz #define DEFAULT_SCL_RATE  (100 * 1000) /* Hz */
76*c41aa3ceSMax Schwarz 
77*c41aa3ceSMax Schwarz enum rk3x_i2c_state {
78*c41aa3ceSMax Schwarz 	STATE_IDLE,
79*c41aa3ceSMax Schwarz 	STATE_START,
80*c41aa3ceSMax Schwarz 	STATE_READ,
81*c41aa3ceSMax Schwarz 	STATE_WRITE,
82*c41aa3ceSMax Schwarz 	STATE_STOP
83*c41aa3ceSMax Schwarz };
84*c41aa3ceSMax Schwarz 
85*c41aa3ceSMax Schwarz /**
86*c41aa3ceSMax Schwarz  * @grf_offset: offset inside the grf regmap for setting the i2c type
87*c41aa3ceSMax Schwarz  */
88*c41aa3ceSMax Schwarz struct rk3x_i2c_soc_data {
89*c41aa3ceSMax Schwarz 	int grf_offset;
90*c41aa3ceSMax Schwarz };
91*c41aa3ceSMax Schwarz 
92*c41aa3ceSMax Schwarz struct rk3x_i2c {
93*c41aa3ceSMax Schwarz 	struct i2c_adapter adap;
94*c41aa3ceSMax Schwarz 	struct device *dev;
95*c41aa3ceSMax Schwarz 	struct rk3x_i2c_soc_data *soc_data;
96*c41aa3ceSMax Schwarz 
97*c41aa3ceSMax Schwarz 	/* Hardware resources */
98*c41aa3ceSMax Schwarz 	void __iomem *regs;
99*c41aa3ceSMax Schwarz 	struct clk *clk;
100*c41aa3ceSMax Schwarz 
101*c41aa3ceSMax Schwarz 	/* Settings */
102*c41aa3ceSMax Schwarz 	unsigned int scl_frequency;
103*c41aa3ceSMax Schwarz 
104*c41aa3ceSMax Schwarz 	/* Synchronization & notification */
105*c41aa3ceSMax Schwarz 	spinlock_t lock;
106*c41aa3ceSMax Schwarz 	wait_queue_head_t wait;
107*c41aa3ceSMax Schwarz 	bool busy;
108*c41aa3ceSMax Schwarz 
109*c41aa3ceSMax Schwarz 	/* Current message */
110*c41aa3ceSMax Schwarz 	struct i2c_msg *msg;
111*c41aa3ceSMax Schwarz 	u8 addr;
112*c41aa3ceSMax Schwarz 	unsigned int mode;
113*c41aa3ceSMax Schwarz 	bool is_last_msg;
114*c41aa3ceSMax Schwarz 
115*c41aa3ceSMax Schwarz 	/* I2C state machine */
116*c41aa3ceSMax Schwarz 	enum rk3x_i2c_state state;
117*c41aa3ceSMax Schwarz 	unsigned int processed; /* sent/received bytes */
118*c41aa3ceSMax Schwarz 	int error;
119*c41aa3ceSMax Schwarz };
120*c41aa3ceSMax Schwarz 
121*c41aa3ceSMax Schwarz static inline void i2c_writel(struct rk3x_i2c *i2c, u32 value,
122*c41aa3ceSMax Schwarz 			      unsigned int offset)
123*c41aa3ceSMax Schwarz {
124*c41aa3ceSMax Schwarz 	writel(value, i2c->regs + offset);
125*c41aa3ceSMax Schwarz }
126*c41aa3ceSMax Schwarz 
127*c41aa3ceSMax Schwarz static inline u32 i2c_readl(struct rk3x_i2c *i2c, unsigned int offset)
128*c41aa3ceSMax Schwarz {
129*c41aa3ceSMax Schwarz 	return readl(i2c->regs + offset);
130*c41aa3ceSMax Schwarz }
131*c41aa3ceSMax Schwarz 
132*c41aa3ceSMax Schwarz /* Reset all interrupt pending bits */
133*c41aa3ceSMax Schwarz static inline void rk3x_i2c_clean_ipd(struct rk3x_i2c *i2c)
134*c41aa3ceSMax Schwarz {
135*c41aa3ceSMax Schwarz 	i2c_writel(i2c, REG_INT_ALL, REG_IPD);
136*c41aa3ceSMax Schwarz }
137*c41aa3ceSMax Schwarz 
138*c41aa3ceSMax Schwarz /**
139*c41aa3ceSMax Schwarz  * Generate a START condition, which triggers a REG_INT_START interrupt.
140*c41aa3ceSMax Schwarz  */
141*c41aa3ceSMax Schwarz static void rk3x_i2c_start(struct rk3x_i2c *i2c)
142*c41aa3ceSMax Schwarz {
143*c41aa3ceSMax Schwarz 	u32 val;
144*c41aa3ceSMax Schwarz 
145*c41aa3ceSMax Schwarz 	rk3x_i2c_clean_ipd(i2c);
146*c41aa3ceSMax Schwarz 	i2c_writel(i2c, REG_INT_START, REG_IEN);
147*c41aa3ceSMax Schwarz 
148*c41aa3ceSMax Schwarz 	/* enable adapter with correct mode, send START condition */
149*c41aa3ceSMax Schwarz 	val = REG_CON_EN | REG_CON_MOD(i2c->mode) | REG_CON_START;
150*c41aa3ceSMax Schwarz 
151*c41aa3ceSMax Schwarz 	/* if we want to react to NACK, set ACTACK bit */
152*c41aa3ceSMax Schwarz 	if (!(i2c->msg->flags & I2C_M_IGNORE_NAK))
153*c41aa3ceSMax Schwarz 		val |= REG_CON_ACTACK;
154*c41aa3ceSMax Schwarz 
155*c41aa3ceSMax Schwarz 	i2c_writel(i2c, val, REG_CON);
156*c41aa3ceSMax Schwarz }
157*c41aa3ceSMax Schwarz 
158*c41aa3ceSMax Schwarz /**
159*c41aa3ceSMax Schwarz  * Generate a STOP condition, which triggers a REG_INT_STOP interrupt.
160*c41aa3ceSMax Schwarz  *
161*c41aa3ceSMax Schwarz  * @error: Error code to return in rk3x_i2c_xfer
162*c41aa3ceSMax Schwarz  */
163*c41aa3ceSMax Schwarz static void rk3x_i2c_stop(struct rk3x_i2c *i2c, int error)
164*c41aa3ceSMax Schwarz {
165*c41aa3ceSMax Schwarz 	unsigned int ctrl;
166*c41aa3ceSMax Schwarz 
167*c41aa3ceSMax Schwarz 	i2c->processed = 0;
168*c41aa3ceSMax Schwarz 	i2c->msg = NULL;
169*c41aa3ceSMax Schwarz 	i2c->error = error;
170*c41aa3ceSMax Schwarz 
171*c41aa3ceSMax Schwarz 	if (i2c->is_last_msg) {
172*c41aa3ceSMax Schwarz 		/* Enable stop interrupt */
173*c41aa3ceSMax Schwarz 		i2c_writel(i2c, REG_INT_STOP, REG_IEN);
174*c41aa3ceSMax Schwarz 
175*c41aa3ceSMax Schwarz 		i2c->state = STATE_STOP;
176*c41aa3ceSMax Schwarz 
177*c41aa3ceSMax Schwarz 		ctrl = i2c_readl(i2c, REG_CON);
178*c41aa3ceSMax Schwarz 		ctrl |= REG_CON_STOP;
179*c41aa3ceSMax Schwarz 		i2c_writel(i2c, ctrl, REG_CON);
180*c41aa3ceSMax Schwarz 	} else {
181*c41aa3ceSMax Schwarz 		/* Signal rk3x_i2c_xfer to start the next message. */
182*c41aa3ceSMax Schwarz 		i2c->busy = false;
183*c41aa3ceSMax Schwarz 		i2c->state = STATE_IDLE;
184*c41aa3ceSMax Schwarz 
185*c41aa3ceSMax Schwarz 		/*
186*c41aa3ceSMax Schwarz 		 * The HW is actually not capable of REPEATED START. But we can
187*c41aa3ceSMax Schwarz 		 * get the intended effect by resetting its internal state
188*c41aa3ceSMax Schwarz 		 * and issuing an ordinary START.
189*c41aa3ceSMax Schwarz 		 */
190*c41aa3ceSMax Schwarz 		i2c_writel(i2c, 0, REG_CON);
191*c41aa3ceSMax Schwarz 
192*c41aa3ceSMax Schwarz 		/* signal that we are finished with the current msg */
193*c41aa3ceSMax Schwarz 		wake_up(&i2c->wait);
194*c41aa3ceSMax Schwarz 	}
195*c41aa3ceSMax Schwarz }
196*c41aa3ceSMax Schwarz 
197*c41aa3ceSMax Schwarz /**
198*c41aa3ceSMax Schwarz  * Setup a read according to i2c->msg
199*c41aa3ceSMax Schwarz  */
200*c41aa3ceSMax Schwarz static void rk3x_i2c_prepare_read(struct rk3x_i2c *i2c)
201*c41aa3ceSMax Schwarz {
202*c41aa3ceSMax Schwarz 	unsigned int len = i2c->msg->len - i2c->processed;
203*c41aa3ceSMax Schwarz 	u32 con;
204*c41aa3ceSMax Schwarz 
205*c41aa3ceSMax Schwarz 	con = i2c_readl(i2c, REG_CON);
206*c41aa3ceSMax Schwarz 
207*c41aa3ceSMax Schwarz 	/*
208*c41aa3ceSMax Schwarz 	 * The hw can read up to 32 bytes at a time. If we need more than one
209*c41aa3ceSMax Schwarz 	 * chunk, send an ACK after the last byte of the current chunk.
210*c41aa3ceSMax Schwarz 	 */
211*c41aa3ceSMax Schwarz 	if (unlikely(len > 32)) {
212*c41aa3ceSMax Schwarz 		len = 32;
213*c41aa3ceSMax Schwarz 		con &= ~REG_CON_LASTACK;
214*c41aa3ceSMax Schwarz 	} else {
215*c41aa3ceSMax Schwarz 		con |= REG_CON_LASTACK;
216*c41aa3ceSMax Schwarz 	}
217*c41aa3ceSMax Schwarz 
218*c41aa3ceSMax Schwarz 	/* make sure we are in plain RX mode if we read a second chunk */
219*c41aa3ceSMax Schwarz 	if (i2c->processed != 0) {
220*c41aa3ceSMax Schwarz 		con &= ~REG_CON_MOD_MASK;
221*c41aa3ceSMax Schwarz 		con |= REG_CON_MOD(REG_CON_MOD_RX);
222*c41aa3ceSMax Schwarz 	}
223*c41aa3ceSMax Schwarz 
224*c41aa3ceSMax Schwarz 	i2c_writel(i2c, con, REG_CON);
225*c41aa3ceSMax Schwarz 	i2c_writel(i2c, len, REG_MRXCNT);
226*c41aa3ceSMax Schwarz }
227*c41aa3ceSMax Schwarz 
228*c41aa3ceSMax Schwarz /**
229*c41aa3ceSMax Schwarz  * Fill the transmit buffer with data from i2c->msg
230*c41aa3ceSMax Schwarz  */
231*c41aa3ceSMax Schwarz static void rk3x_i2c_fill_transmit_buf(struct rk3x_i2c *i2c)
232*c41aa3ceSMax Schwarz {
233*c41aa3ceSMax Schwarz 	unsigned int i, j;
234*c41aa3ceSMax Schwarz 	u32 cnt = 0;
235*c41aa3ceSMax Schwarz 	u32 val;
236*c41aa3ceSMax Schwarz 	u8 byte;
237*c41aa3ceSMax Schwarz 
238*c41aa3ceSMax Schwarz 	for (i = 0; i < 8; ++i) {
239*c41aa3ceSMax Schwarz 		val = 0;
240*c41aa3ceSMax Schwarz 		for (j = 0; j < 4; ++j) {
241*c41aa3ceSMax Schwarz 			if (i2c->processed == i2c->msg->len)
242*c41aa3ceSMax Schwarz 				break;
243*c41aa3ceSMax Schwarz 
244*c41aa3ceSMax Schwarz 			if (i2c->processed == 0 && cnt == 0)
245*c41aa3ceSMax Schwarz 				byte = (i2c->addr & 0x7f) << 1;
246*c41aa3ceSMax Schwarz 			else
247*c41aa3ceSMax Schwarz 				byte = i2c->msg->buf[i2c->processed++];
248*c41aa3ceSMax Schwarz 
249*c41aa3ceSMax Schwarz 			val |= byte << (j * 8);
250*c41aa3ceSMax Schwarz 			cnt++;
251*c41aa3ceSMax Schwarz 		}
252*c41aa3ceSMax Schwarz 
253*c41aa3ceSMax Schwarz 		i2c_writel(i2c, val, TXBUFFER_BASE + 4 * i);
254*c41aa3ceSMax Schwarz 
255*c41aa3ceSMax Schwarz 		if (i2c->processed == i2c->msg->len)
256*c41aa3ceSMax Schwarz 			break;
257*c41aa3ceSMax Schwarz 	}
258*c41aa3ceSMax Schwarz 
259*c41aa3ceSMax Schwarz 	i2c_writel(i2c, cnt, REG_MTXCNT);
260*c41aa3ceSMax Schwarz }
261*c41aa3ceSMax Schwarz 
262*c41aa3ceSMax Schwarz 
263*c41aa3ceSMax Schwarz /* IRQ handlers for individual states */
264*c41aa3ceSMax Schwarz 
265*c41aa3ceSMax Schwarz static void rk3x_i2c_handle_start(struct rk3x_i2c *i2c, unsigned int ipd)
266*c41aa3ceSMax Schwarz {
267*c41aa3ceSMax Schwarz 	if (!(ipd & REG_INT_START)) {
268*c41aa3ceSMax Schwarz 		rk3x_i2c_stop(i2c, -EIO);
269*c41aa3ceSMax Schwarz 		dev_warn(i2c->dev, "unexpected irq in START: 0x%x\n", ipd);
270*c41aa3ceSMax Schwarz 		rk3x_i2c_clean_ipd(i2c);
271*c41aa3ceSMax Schwarz 		return;
272*c41aa3ceSMax Schwarz 	}
273*c41aa3ceSMax Schwarz 
274*c41aa3ceSMax Schwarz 	/* ack interrupt */
275*c41aa3ceSMax Schwarz 	i2c_writel(i2c, REG_INT_START, REG_IPD);
276*c41aa3ceSMax Schwarz 
277*c41aa3ceSMax Schwarz 	/* disable start bit */
278*c41aa3ceSMax Schwarz 	i2c_writel(i2c, i2c_readl(i2c, REG_CON) & ~REG_CON_START, REG_CON);
279*c41aa3ceSMax Schwarz 
280*c41aa3ceSMax Schwarz 	/* enable appropriate interrupts and transition */
281*c41aa3ceSMax Schwarz 	if (i2c->mode == REG_CON_MOD_TX) {
282*c41aa3ceSMax Schwarz 		i2c_writel(i2c, REG_INT_MBTF | REG_INT_NAKRCV, REG_IEN);
283*c41aa3ceSMax Schwarz 		i2c->state = STATE_WRITE;
284*c41aa3ceSMax Schwarz 		rk3x_i2c_fill_transmit_buf(i2c);
285*c41aa3ceSMax Schwarz 	} else {
286*c41aa3ceSMax Schwarz 		/* in any other case, we are going to be reading. */
287*c41aa3ceSMax Schwarz 		i2c_writel(i2c, REG_INT_MBRF | REG_INT_NAKRCV, REG_IEN);
288*c41aa3ceSMax Schwarz 		i2c->state = STATE_READ;
289*c41aa3ceSMax Schwarz 		rk3x_i2c_prepare_read(i2c);
290*c41aa3ceSMax Schwarz 	}
291*c41aa3ceSMax Schwarz }
292*c41aa3ceSMax Schwarz 
293*c41aa3ceSMax Schwarz static void rk3x_i2c_handle_write(struct rk3x_i2c *i2c, unsigned int ipd)
294*c41aa3ceSMax Schwarz {
295*c41aa3ceSMax Schwarz 	if (!(ipd & REG_INT_MBTF)) {
296*c41aa3ceSMax Schwarz 		rk3x_i2c_stop(i2c, -EIO);
297*c41aa3ceSMax Schwarz 		dev_err(i2c->dev, "unexpected irq in WRITE: 0x%x\n", ipd);
298*c41aa3ceSMax Schwarz 		rk3x_i2c_clean_ipd(i2c);
299*c41aa3ceSMax Schwarz 		return;
300*c41aa3ceSMax Schwarz 	}
301*c41aa3ceSMax Schwarz 
302*c41aa3ceSMax Schwarz 	/* ack interrupt */
303*c41aa3ceSMax Schwarz 	i2c_writel(i2c, REG_INT_MBTF, REG_IPD);
304*c41aa3ceSMax Schwarz 
305*c41aa3ceSMax Schwarz 	/* are we finished? */
306*c41aa3ceSMax Schwarz 	if (i2c->processed == i2c->msg->len)
307*c41aa3ceSMax Schwarz 		rk3x_i2c_stop(i2c, i2c->error);
308*c41aa3ceSMax Schwarz 	else
309*c41aa3ceSMax Schwarz 		rk3x_i2c_fill_transmit_buf(i2c);
310*c41aa3ceSMax Schwarz }
311*c41aa3ceSMax Schwarz 
312*c41aa3ceSMax Schwarz static void rk3x_i2c_handle_read(struct rk3x_i2c *i2c, unsigned int ipd)
313*c41aa3ceSMax Schwarz {
314*c41aa3ceSMax Schwarz 	unsigned int i;
315*c41aa3ceSMax Schwarz 	unsigned int len = i2c->msg->len - i2c->processed;
316*c41aa3ceSMax Schwarz 	u32 uninitialized_var(val);
317*c41aa3ceSMax Schwarz 	u8 byte;
318*c41aa3ceSMax Schwarz 
319*c41aa3ceSMax Schwarz 	/* we only care for MBRF here. */
320*c41aa3ceSMax Schwarz 	if (!(ipd & REG_INT_MBRF))
321*c41aa3ceSMax Schwarz 		return;
322*c41aa3ceSMax Schwarz 
323*c41aa3ceSMax Schwarz 	/* ack interrupt */
324*c41aa3ceSMax Schwarz 	i2c_writel(i2c, REG_INT_MBRF, REG_IPD);
325*c41aa3ceSMax Schwarz 
326*c41aa3ceSMax Schwarz 	/* read the data from receive buffer */
327*c41aa3ceSMax Schwarz 	for (i = 0; i < len; ++i) {
328*c41aa3ceSMax Schwarz 		if (i % 4 == 0)
329*c41aa3ceSMax Schwarz 			val = i2c_readl(i2c, RXBUFFER_BASE + (i / 4) * 4);
330*c41aa3ceSMax Schwarz 
331*c41aa3ceSMax Schwarz 		byte = (val >> ((i % 4) * 8)) & 0xff;
332*c41aa3ceSMax Schwarz 		i2c->msg->buf[i2c->processed++] = byte;
333*c41aa3ceSMax Schwarz 	}
334*c41aa3ceSMax Schwarz 
335*c41aa3ceSMax Schwarz 	/* are we finished? */
336*c41aa3ceSMax Schwarz 	if (i2c->processed == i2c->msg->len)
337*c41aa3ceSMax Schwarz 		rk3x_i2c_stop(i2c, i2c->error);
338*c41aa3ceSMax Schwarz 	else
339*c41aa3ceSMax Schwarz 		rk3x_i2c_prepare_read(i2c);
340*c41aa3ceSMax Schwarz }
341*c41aa3ceSMax Schwarz 
342*c41aa3ceSMax Schwarz static void rk3x_i2c_handle_stop(struct rk3x_i2c *i2c, unsigned int ipd)
343*c41aa3ceSMax Schwarz {
344*c41aa3ceSMax Schwarz 	unsigned int con;
345*c41aa3ceSMax Schwarz 
346*c41aa3ceSMax Schwarz 	if (!(ipd & REG_INT_STOP)) {
347*c41aa3ceSMax Schwarz 		rk3x_i2c_stop(i2c, -EIO);
348*c41aa3ceSMax Schwarz 		dev_err(i2c->dev, "unexpected irq in STOP: 0x%x\n", ipd);
349*c41aa3ceSMax Schwarz 		rk3x_i2c_clean_ipd(i2c);
350*c41aa3ceSMax Schwarz 		return;
351*c41aa3ceSMax Schwarz 	}
352*c41aa3ceSMax Schwarz 
353*c41aa3ceSMax Schwarz 	/* ack interrupt */
354*c41aa3ceSMax Schwarz 	i2c_writel(i2c, REG_INT_STOP, REG_IPD);
355*c41aa3ceSMax Schwarz 
356*c41aa3ceSMax Schwarz 	/* disable STOP bit */
357*c41aa3ceSMax Schwarz 	con = i2c_readl(i2c, REG_CON);
358*c41aa3ceSMax Schwarz 	con &= ~REG_CON_STOP;
359*c41aa3ceSMax Schwarz 	i2c_writel(i2c, con, REG_CON);
360*c41aa3ceSMax Schwarz 
361*c41aa3ceSMax Schwarz 	i2c->busy = false;
362*c41aa3ceSMax Schwarz 	i2c->state = STATE_IDLE;
363*c41aa3ceSMax Schwarz 
364*c41aa3ceSMax Schwarz 	/* signal rk3x_i2c_xfer that we are finished */
365*c41aa3ceSMax Schwarz 	wake_up(&i2c->wait);
366*c41aa3ceSMax Schwarz }
367*c41aa3ceSMax Schwarz 
368*c41aa3ceSMax Schwarz static irqreturn_t rk3x_i2c_irq(int irqno, void *dev_id)
369*c41aa3ceSMax Schwarz {
370*c41aa3ceSMax Schwarz 	struct rk3x_i2c *i2c = dev_id;
371*c41aa3ceSMax Schwarz 	unsigned int ipd;
372*c41aa3ceSMax Schwarz 
373*c41aa3ceSMax Schwarz 	spin_lock(&i2c->lock);
374*c41aa3ceSMax Schwarz 
375*c41aa3ceSMax Schwarz 	ipd = i2c_readl(i2c, REG_IPD);
376*c41aa3ceSMax Schwarz 	if (i2c->state == STATE_IDLE) {
377*c41aa3ceSMax Schwarz 		dev_warn(i2c->dev, "irq in STATE_IDLE, ipd = 0x%x\n", ipd);
378*c41aa3ceSMax Schwarz 		rk3x_i2c_clean_ipd(i2c);
379*c41aa3ceSMax Schwarz 		goto out;
380*c41aa3ceSMax Schwarz 	}
381*c41aa3ceSMax Schwarz 
382*c41aa3ceSMax Schwarz 	dev_dbg(i2c->dev, "IRQ: state %d, ipd: %x\n", i2c->state, ipd);
383*c41aa3ceSMax Schwarz 
384*c41aa3ceSMax Schwarz 	/* Clean interrupt bits we don't care about */
385*c41aa3ceSMax Schwarz 	ipd &= ~(REG_INT_BRF | REG_INT_BTF);
386*c41aa3ceSMax Schwarz 
387*c41aa3ceSMax Schwarz 	if (ipd & REG_INT_NAKRCV) {
388*c41aa3ceSMax Schwarz 		/*
389*c41aa3ceSMax Schwarz 		 * We got a NACK in the last operation. Depending on whether
390*c41aa3ceSMax Schwarz 		 * IGNORE_NAK is set, we have to stop the operation and report
391*c41aa3ceSMax Schwarz 		 * an error.
392*c41aa3ceSMax Schwarz 		 */
393*c41aa3ceSMax Schwarz 		i2c_writel(i2c, REG_INT_NAKRCV, REG_IPD);
394*c41aa3ceSMax Schwarz 
395*c41aa3ceSMax Schwarz 		ipd &= ~REG_INT_NAKRCV;
396*c41aa3ceSMax Schwarz 
397*c41aa3ceSMax Schwarz 		if (!(i2c->msg->flags & I2C_M_IGNORE_NAK))
398*c41aa3ceSMax Schwarz 			rk3x_i2c_stop(i2c, -ENXIO);
399*c41aa3ceSMax Schwarz 	}
400*c41aa3ceSMax Schwarz 
401*c41aa3ceSMax Schwarz 	/* is there anything left to handle? */
402*c41aa3ceSMax Schwarz 	if (unlikely(ipd == 0))
403*c41aa3ceSMax Schwarz 		goto out;
404*c41aa3ceSMax Schwarz 
405*c41aa3ceSMax Schwarz 	switch (i2c->state) {
406*c41aa3ceSMax Schwarz 	case STATE_START:
407*c41aa3ceSMax Schwarz 		rk3x_i2c_handle_start(i2c, ipd);
408*c41aa3ceSMax Schwarz 		break;
409*c41aa3ceSMax Schwarz 	case STATE_WRITE:
410*c41aa3ceSMax Schwarz 		rk3x_i2c_handle_write(i2c, ipd);
411*c41aa3ceSMax Schwarz 		break;
412*c41aa3ceSMax Schwarz 	case STATE_READ:
413*c41aa3ceSMax Schwarz 		rk3x_i2c_handle_read(i2c, ipd);
414*c41aa3ceSMax Schwarz 		break;
415*c41aa3ceSMax Schwarz 	case STATE_STOP:
416*c41aa3ceSMax Schwarz 		rk3x_i2c_handle_stop(i2c, ipd);
417*c41aa3ceSMax Schwarz 		break;
418*c41aa3ceSMax Schwarz 	case STATE_IDLE:
419*c41aa3ceSMax Schwarz 		break;
420*c41aa3ceSMax Schwarz 	}
421*c41aa3ceSMax Schwarz 
422*c41aa3ceSMax Schwarz out:
423*c41aa3ceSMax Schwarz 	spin_unlock(&i2c->lock);
424*c41aa3ceSMax Schwarz 	return IRQ_HANDLED;
425*c41aa3ceSMax Schwarz }
426*c41aa3ceSMax Schwarz 
427*c41aa3ceSMax Schwarz static void rk3x_i2c_set_scl_rate(struct rk3x_i2c *i2c, unsigned long scl_rate)
428*c41aa3ceSMax Schwarz {
429*c41aa3ceSMax Schwarz 	unsigned long i2c_rate = clk_get_rate(i2c->clk);
430*c41aa3ceSMax Schwarz 	unsigned int div;
431*c41aa3ceSMax Schwarz 
432*c41aa3ceSMax Schwarz 	/* SCL rate = (clk rate) / (8 * DIV) */
433*c41aa3ceSMax Schwarz 	div = DIV_ROUND_UP(i2c_rate, scl_rate * 8);
434*c41aa3ceSMax Schwarz 
435*c41aa3ceSMax Schwarz 	/* The lower and upper half of the CLKDIV reg describe the length of
436*c41aa3ceSMax Schwarz 	 * SCL low & high periods. */
437*c41aa3ceSMax Schwarz 	div = DIV_ROUND_UP(div, 2);
438*c41aa3ceSMax Schwarz 
439*c41aa3ceSMax Schwarz 	i2c_writel(i2c, (div << 16) | (div & 0xffff), REG_CLKDIV);
440*c41aa3ceSMax Schwarz }
441*c41aa3ceSMax Schwarz 
442*c41aa3ceSMax Schwarz /**
443*c41aa3ceSMax Schwarz  * Setup I2C registers for an I2C operation specified by msgs, num.
444*c41aa3ceSMax Schwarz  *
445*c41aa3ceSMax Schwarz  * Must be called with i2c->lock held.
446*c41aa3ceSMax Schwarz  *
447*c41aa3ceSMax Schwarz  * @msgs: I2C msgs to process
448*c41aa3ceSMax Schwarz  * @num: Number of msgs
449*c41aa3ceSMax Schwarz  *
450*c41aa3ceSMax Schwarz  * returns: Number of I2C msgs processed or negative in case of error
451*c41aa3ceSMax Schwarz  */
452*c41aa3ceSMax Schwarz static int rk3x_i2c_setup(struct rk3x_i2c *i2c, struct i2c_msg *msgs, int num)
453*c41aa3ceSMax Schwarz {
454*c41aa3ceSMax Schwarz 	u32 addr = (msgs[0].addr & 0x7f) << 1;
455*c41aa3ceSMax Schwarz 	int ret = 0;
456*c41aa3ceSMax Schwarz 
457*c41aa3ceSMax Schwarz 	/*
458*c41aa3ceSMax Schwarz 	 * The I2C adapter can issue a small (len < 4) write packet before
459*c41aa3ceSMax Schwarz 	 * reading. This speeds up SMBus-style register reads.
460*c41aa3ceSMax Schwarz 	 * The MRXADDR/MRXRADDR hold the slave address and the slave register
461*c41aa3ceSMax Schwarz 	 * address in this case.
462*c41aa3ceSMax Schwarz 	 */
463*c41aa3ceSMax Schwarz 
464*c41aa3ceSMax Schwarz 	if (num >= 2 && msgs[0].len < 4 &&
465*c41aa3ceSMax Schwarz 	    !(msgs[0].flags & I2C_M_RD) && (msgs[1].flags & I2C_M_RD)) {
466*c41aa3ceSMax Schwarz 		u32 reg_addr = 0;
467*c41aa3ceSMax Schwarz 		int i;
468*c41aa3ceSMax Schwarz 
469*c41aa3ceSMax Schwarz 		dev_dbg(i2c->dev, "Combined write/read from addr 0x%x\n",
470*c41aa3ceSMax Schwarz 			addr >> 1);
471*c41aa3ceSMax Schwarz 
472*c41aa3ceSMax Schwarz 		/* Fill MRXRADDR with the register address(es) */
473*c41aa3ceSMax Schwarz 		for (i = 0; i < msgs[0].len; ++i) {
474*c41aa3ceSMax Schwarz 			reg_addr |= msgs[0].buf[i] << (i * 8);
475*c41aa3ceSMax Schwarz 			reg_addr |= REG_MRXADDR_VALID(i);
476*c41aa3ceSMax Schwarz 		}
477*c41aa3ceSMax Schwarz 
478*c41aa3ceSMax Schwarz 		/* msgs[0] is handled by hw. */
479*c41aa3ceSMax Schwarz 		i2c->msg = &msgs[1];
480*c41aa3ceSMax Schwarz 
481*c41aa3ceSMax Schwarz 		i2c->mode = REG_CON_MOD_REGISTER_TX;
482*c41aa3ceSMax Schwarz 
483*c41aa3ceSMax Schwarz 		i2c_writel(i2c, addr | REG_MRXADDR_VALID(0), REG_MRXADDR);
484*c41aa3ceSMax Schwarz 		i2c_writel(i2c, reg_addr, REG_MRXRADDR);
485*c41aa3ceSMax Schwarz 
486*c41aa3ceSMax Schwarz 		ret = 2;
487*c41aa3ceSMax Schwarz 	} else {
488*c41aa3ceSMax Schwarz 		/*
489*c41aa3ceSMax Schwarz 		 * We'll have to do it the boring way and process the msgs
490*c41aa3ceSMax Schwarz 		 * one-by-one.
491*c41aa3ceSMax Schwarz 		 */
492*c41aa3ceSMax Schwarz 
493*c41aa3ceSMax Schwarz 		if (msgs[0].flags & I2C_M_RD) {
494*c41aa3ceSMax Schwarz 			addr |= 1; /* set read bit */
495*c41aa3ceSMax Schwarz 
496*c41aa3ceSMax Schwarz 			/*
497*c41aa3ceSMax Schwarz 			 * We have to transmit the slave addr first. Use
498*c41aa3ceSMax Schwarz 			 * MOD_REGISTER_TX for that purpose.
499*c41aa3ceSMax Schwarz 			 */
500*c41aa3ceSMax Schwarz 			i2c->mode = REG_CON_MOD_REGISTER_TX;
501*c41aa3ceSMax Schwarz 			i2c_writel(i2c, addr | REG_MRXADDR_VALID(0),
502*c41aa3ceSMax Schwarz 				   REG_MRXADDR);
503*c41aa3ceSMax Schwarz 			i2c_writel(i2c, 0, REG_MRXRADDR);
504*c41aa3ceSMax Schwarz 		} else {
505*c41aa3ceSMax Schwarz 			i2c->mode = REG_CON_MOD_TX;
506*c41aa3ceSMax Schwarz 		}
507*c41aa3ceSMax Schwarz 
508*c41aa3ceSMax Schwarz 		i2c->msg = &msgs[0];
509*c41aa3ceSMax Schwarz 
510*c41aa3ceSMax Schwarz 		ret = 1;
511*c41aa3ceSMax Schwarz 	}
512*c41aa3ceSMax Schwarz 
513*c41aa3ceSMax Schwarz 	i2c->addr = msgs[0].addr;
514*c41aa3ceSMax Schwarz 	i2c->busy = true;
515*c41aa3ceSMax Schwarz 	i2c->state = STATE_START;
516*c41aa3ceSMax Schwarz 	i2c->processed = 0;
517*c41aa3ceSMax Schwarz 	i2c->error = 0;
518*c41aa3ceSMax Schwarz 
519*c41aa3ceSMax Schwarz 	rk3x_i2c_clean_ipd(i2c);
520*c41aa3ceSMax Schwarz 
521*c41aa3ceSMax Schwarz 	return ret;
522*c41aa3ceSMax Schwarz }
523*c41aa3ceSMax Schwarz 
524*c41aa3ceSMax Schwarz static int rk3x_i2c_xfer(struct i2c_adapter *adap,
525*c41aa3ceSMax Schwarz 			 struct i2c_msg *msgs, int num)
526*c41aa3ceSMax Schwarz {
527*c41aa3ceSMax Schwarz 	struct rk3x_i2c *i2c = (struct rk3x_i2c *)adap->algo_data;
528*c41aa3ceSMax Schwarz 	unsigned long timeout, flags;
529*c41aa3ceSMax Schwarz 	int ret = 0;
530*c41aa3ceSMax Schwarz 	int i;
531*c41aa3ceSMax Schwarz 
532*c41aa3ceSMax Schwarz 	spin_lock_irqsave(&i2c->lock, flags);
533*c41aa3ceSMax Schwarz 
534*c41aa3ceSMax Schwarz 	clk_enable(i2c->clk);
535*c41aa3ceSMax Schwarz 
536*c41aa3ceSMax Schwarz 	/* The clock rate might have changed, so setup the divider again */
537*c41aa3ceSMax Schwarz 	rk3x_i2c_set_scl_rate(i2c, i2c->scl_frequency);
538*c41aa3ceSMax Schwarz 
539*c41aa3ceSMax Schwarz 	i2c->is_last_msg = false;
540*c41aa3ceSMax Schwarz 
541*c41aa3ceSMax Schwarz 	/*
542*c41aa3ceSMax Schwarz 	 * Process msgs. We can handle more than one message at once (see
543*c41aa3ceSMax Schwarz 	 * rk3x_i2c_setup()).
544*c41aa3ceSMax Schwarz 	 */
545*c41aa3ceSMax Schwarz 	for (i = 0; i < num; i += ret) {
546*c41aa3ceSMax Schwarz 		ret = rk3x_i2c_setup(i2c, msgs + i, num - i);
547*c41aa3ceSMax Schwarz 
548*c41aa3ceSMax Schwarz 		if (ret < 0) {
549*c41aa3ceSMax Schwarz 			dev_err(i2c->dev, "rk3x_i2c_setup() failed\n");
550*c41aa3ceSMax Schwarz 			break;
551*c41aa3ceSMax Schwarz 		}
552*c41aa3ceSMax Schwarz 
553*c41aa3ceSMax Schwarz 		if (i + ret >= num)
554*c41aa3ceSMax Schwarz 			i2c->is_last_msg = true;
555*c41aa3ceSMax Schwarz 
556*c41aa3ceSMax Schwarz 		spin_unlock_irqrestore(&i2c->lock, flags);
557*c41aa3ceSMax Schwarz 
558*c41aa3ceSMax Schwarz 		rk3x_i2c_start(i2c);
559*c41aa3ceSMax Schwarz 
560*c41aa3ceSMax Schwarz 		timeout = wait_event_timeout(i2c->wait, !i2c->busy,
561*c41aa3ceSMax Schwarz 					     msecs_to_jiffies(WAIT_TIMEOUT));
562*c41aa3ceSMax Schwarz 
563*c41aa3ceSMax Schwarz 		spin_lock_irqsave(&i2c->lock, flags);
564*c41aa3ceSMax Schwarz 
565*c41aa3ceSMax Schwarz 		if (timeout == 0) {
566*c41aa3ceSMax Schwarz 			dev_err(i2c->dev, "timeout, ipd: 0x%02x, state: %d\n",
567*c41aa3ceSMax Schwarz 				i2c_readl(i2c, REG_IPD), i2c->state);
568*c41aa3ceSMax Schwarz 
569*c41aa3ceSMax Schwarz 			/* Force a STOP condition without interrupt */
570*c41aa3ceSMax Schwarz 			i2c_writel(i2c, 0, REG_IEN);
571*c41aa3ceSMax Schwarz 			i2c_writel(i2c, REG_CON_EN | REG_CON_STOP, REG_CON);
572*c41aa3ceSMax Schwarz 
573*c41aa3ceSMax Schwarz 			i2c->state = STATE_IDLE;
574*c41aa3ceSMax Schwarz 
575*c41aa3ceSMax Schwarz 			ret = -ETIMEDOUT;
576*c41aa3ceSMax Schwarz 			break;
577*c41aa3ceSMax Schwarz 		}
578*c41aa3ceSMax Schwarz 
579*c41aa3ceSMax Schwarz 		if (i2c->error) {
580*c41aa3ceSMax Schwarz 			ret = i2c->error;
581*c41aa3ceSMax Schwarz 			break;
582*c41aa3ceSMax Schwarz 		}
583*c41aa3ceSMax Schwarz 	}
584*c41aa3ceSMax Schwarz 
585*c41aa3ceSMax Schwarz 	clk_disable(i2c->clk);
586*c41aa3ceSMax Schwarz 	spin_unlock_irqrestore(&i2c->lock, flags);
587*c41aa3ceSMax Schwarz 
588*c41aa3ceSMax Schwarz 	return ret;
589*c41aa3ceSMax Schwarz }
590*c41aa3ceSMax Schwarz 
591*c41aa3ceSMax Schwarz static u32 rk3x_i2c_func(struct i2c_adapter *adap)
592*c41aa3ceSMax Schwarz {
593*c41aa3ceSMax Schwarz 	return I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL | I2C_FUNC_PROTOCOL_MANGLING;
594*c41aa3ceSMax Schwarz }
595*c41aa3ceSMax Schwarz 
596*c41aa3ceSMax Schwarz static const struct i2c_algorithm rk3x_i2c_algorithm = {
597*c41aa3ceSMax Schwarz 	.master_xfer		= rk3x_i2c_xfer,
598*c41aa3ceSMax Schwarz 	.functionality		= rk3x_i2c_func,
599*c41aa3ceSMax Schwarz };
600*c41aa3ceSMax Schwarz 
601*c41aa3ceSMax Schwarz static struct rk3x_i2c_soc_data soc_data[3] = {
602*c41aa3ceSMax Schwarz 	{ .grf_offset = 0x154 }, /* rk3066 */
603*c41aa3ceSMax Schwarz 	{ .grf_offset = 0x0a4 }, /* rk3188 */
604*c41aa3ceSMax Schwarz 	{ .grf_offset = -1 },    /* no I2C switching needed */
605*c41aa3ceSMax Schwarz };
606*c41aa3ceSMax Schwarz 
607*c41aa3ceSMax Schwarz static const struct of_device_id rk3x_i2c_match[] = {
608*c41aa3ceSMax Schwarz 	{ .compatible = "rockchip,rk3066-i2c", .data = (void *)&soc_data[0] },
609*c41aa3ceSMax Schwarz 	{ .compatible = "rockchip,rk3188-i2c", .data = (void *)&soc_data[1] },
610*c41aa3ceSMax Schwarz 	{ .compatible = "rockchip,rk3288-i2c", .data = (void *)&soc_data[2] },
611*c41aa3ceSMax Schwarz };
612*c41aa3ceSMax Schwarz 
613*c41aa3ceSMax Schwarz static int rk3x_i2c_probe(struct platform_device *pdev)
614*c41aa3ceSMax Schwarz {
615*c41aa3ceSMax Schwarz 	struct device_node *np = pdev->dev.of_node;
616*c41aa3ceSMax Schwarz 	const struct of_device_id *match;
617*c41aa3ceSMax Schwarz 	struct rk3x_i2c *i2c;
618*c41aa3ceSMax Schwarz 	struct resource *mem;
619*c41aa3ceSMax Schwarz 	int ret = 0;
620*c41aa3ceSMax Schwarz 	int bus_nr;
621*c41aa3ceSMax Schwarz 	u32 value;
622*c41aa3ceSMax Schwarz 	int irq;
623*c41aa3ceSMax Schwarz 
624*c41aa3ceSMax Schwarz 	i2c = devm_kzalloc(&pdev->dev, sizeof(struct rk3x_i2c), GFP_KERNEL);
625*c41aa3ceSMax Schwarz 	if (!i2c)
626*c41aa3ceSMax Schwarz 		return -ENOMEM;
627*c41aa3ceSMax Schwarz 
628*c41aa3ceSMax Schwarz 	match = of_match_node(rk3x_i2c_match, np);
629*c41aa3ceSMax Schwarz 	i2c->soc_data = (struct rk3x_i2c_soc_data *)match->data;
630*c41aa3ceSMax Schwarz 
631*c41aa3ceSMax Schwarz 	if (of_property_read_u32(pdev->dev.of_node, "clock-frequency",
632*c41aa3ceSMax Schwarz 				 &i2c->scl_frequency)) {
633*c41aa3ceSMax Schwarz 		dev_info(&pdev->dev, "using default SCL frequency: %d\n",
634*c41aa3ceSMax Schwarz 			 DEFAULT_SCL_RATE);
635*c41aa3ceSMax Schwarz 		i2c->scl_frequency = DEFAULT_SCL_RATE;
636*c41aa3ceSMax Schwarz 	}
637*c41aa3ceSMax Schwarz 
638*c41aa3ceSMax Schwarz 	if (i2c->scl_frequency == 0 || i2c->scl_frequency > 400 * 1000) {
639*c41aa3ceSMax Schwarz 		dev_warn(&pdev->dev, "invalid SCL frequency specified.\n");
640*c41aa3ceSMax Schwarz 		dev_warn(&pdev->dev, "using default SCL frequency: %d\n",
641*c41aa3ceSMax Schwarz 			 DEFAULT_SCL_RATE);
642*c41aa3ceSMax Schwarz 		i2c->scl_frequency = DEFAULT_SCL_RATE;
643*c41aa3ceSMax Schwarz 	}
644*c41aa3ceSMax Schwarz 
645*c41aa3ceSMax Schwarz 	strlcpy(i2c->adap.name, "rk3x-i2c", sizeof(i2c->adap.name));
646*c41aa3ceSMax Schwarz 	i2c->adap.owner = THIS_MODULE;
647*c41aa3ceSMax Schwarz 	i2c->adap.algo = &rk3x_i2c_algorithm;
648*c41aa3ceSMax Schwarz 	i2c->adap.retries = 3;
649*c41aa3ceSMax Schwarz 	i2c->adap.dev.of_node = np;
650*c41aa3ceSMax Schwarz 	i2c->adap.algo_data = i2c;
651*c41aa3ceSMax Schwarz 	i2c->adap.dev.parent = &pdev->dev;
652*c41aa3ceSMax Schwarz 
653*c41aa3ceSMax Schwarz 	i2c->dev = &pdev->dev;
654*c41aa3ceSMax Schwarz 
655*c41aa3ceSMax Schwarz 	spin_lock_init(&i2c->lock);
656*c41aa3ceSMax Schwarz 	init_waitqueue_head(&i2c->wait);
657*c41aa3ceSMax Schwarz 
658*c41aa3ceSMax Schwarz 	i2c->clk = devm_clk_get(&pdev->dev, NULL);
659*c41aa3ceSMax Schwarz 	if (IS_ERR(i2c->clk)) {
660*c41aa3ceSMax Schwarz 		dev_err(&pdev->dev, "cannot get clock\n");
661*c41aa3ceSMax Schwarz 		return PTR_ERR(i2c->clk);
662*c41aa3ceSMax Schwarz 	}
663*c41aa3ceSMax Schwarz 
664*c41aa3ceSMax Schwarz 	mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
665*c41aa3ceSMax Schwarz 	i2c->regs = devm_ioremap_resource(&pdev->dev, mem);
666*c41aa3ceSMax Schwarz 	if (IS_ERR(i2c->regs))
667*c41aa3ceSMax Schwarz 		return PTR_ERR(i2c->regs);
668*c41aa3ceSMax Schwarz 
669*c41aa3ceSMax Schwarz 	/* Try to set the I2C adapter number from dt */
670*c41aa3ceSMax Schwarz 	bus_nr = of_alias_get_id(np, "i2c");
671*c41aa3ceSMax Schwarz 
672*c41aa3ceSMax Schwarz 	/*
673*c41aa3ceSMax Schwarz 	 * Switch to new interface if the SoC also offers the old one.
674*c41aa3ceSMax Schwarz 	 * The control bit is located in the GRF register space.
675*c41aa3ceSMax Schwarz 	 */
676*c41aa3ceSMax Schwarz 	if (i2c->soc_data->grf_offset >= 0) {
677*c41aa3ceSMax Schwarz 		struct regmap *grf;
678*c41aa3ceSMax Schwarz 
679*c41aa3ceSMax Schwarz 		grf = syscon_regmap_lookup_by_phandle(np, "rockchip,grf");
680*c41aa3ceSMax Schwarz 		if (IS_ERR(grf)) {
681*c41aa3ceSMax Schwarz 			dev_err(&pdev->dev,
682*c41aa3ceSMax Schwarz 				"rk3x-i2c needs 'rockchip,grf' property\n");
683*c41aa3ceSMax Schwarz 			return PTR_ERR(grf);
684*c41aa3ceSMax Schwarz 		}
685*c41aa3ceSMax Schwarz 
686*c41aa3ceSMax Schwarz 		if (bus_nr < 0) {
687*c41aa3ceSMax Schwarz 			dev_err(&pdev->dev, "rk3x-i2c needs i2cX alias");
688*c41aa3ceSMax Schwarz 			return -EINVAL;
689*c41aa3ceSMax Schwarz 		}
690*c41aa3ceSMax Schwarz 
691*c41aa3ceSMax Schwarz 		/* 27+i: write mask, 11+i: value */
692*c41aa3ceSMax Schwarz 		value = BIT(27 + bus_nr) | BIT(11 + bus_nr);
693*c41aa3ceSMax Schwarz 
694*c41aa3ceSMax Schwarz 		ret = regmap_write(grf, i2c->soc_data->grf_offset, value);
695*c41aa3ceSMax Schwarz 		if (ret != 0) {
696*c41aa3ceSMax Schwarz 			dev_err(i2c->dev, "Could not write to GRF: %d\n", ret);
697*c41aa3ceSMax Schwarz 			return ret;
698*c41aa3ceSMax Schwarz 		}
699*c41aa3ceSMax Schwarz 	}
700*c41aa3ceSMax Schwarz 
701*c41aa3ceSMax Schwarz 	/* IRQ setup */
702*c41aa3ceSMax Schwarz 	irq = platform_get_irq(pdev, 0);
703*c41aa3ceSMax Schwarz 	if (irq < 0) {
704*c41aa3ceSMax Schwarz 		dev_err(&pdev->dev, "cannot find rk3x IRQ\n");
705*c41aa3ceSMax Schwarz 		return irq;
706*c41aa3ceSMax Schwarz 	}
707*c41aa3ceSMax Schwarz 
708*c41aa3ceSMax Schwarz 	ret = devm_request_irq(&pdev->dev, irq, rk3x_i2c_irq,
709*c41aa3ceSMax Schwarz 			       0, dev_name(&pdev->dev), i2c);
710*c41aa3ceSMax Schwarz 	if (ret < 0) {
711*c41aa3ceSMax Schwarz 		dev_err(&pdev->dev, "cannot request IRQ\n");
712*c41aa3ceSMax Schwarz 		return ret;
713*c41aa3ceSMax Schwarz 	}
714*c41aa3ceSMax Schwarz 
715*c41aa3ceSMax Schwarz 	platform_set_drvdata(pdev, i2c);
716*c41aa3ceSMax Schwarz 
717*c41aa3ceSMax Schwarz 	ret = clk_prepare(i2c->clk);
718*c41aa3ceSMax Schwarz 	if (ret < 0) {
719*c41aa3ceSMax Schwarz 		dev_err(&pdev->dev, "Could not prepare clock\n");
720*c41aa3ceSMax Schwarz 		return ret;
721*c41aa3ceSMax Schwarz 	}
722*c41aa3ceSMax Schwarz 
723*c41aa3ceSMax Schwarz 	ret = i2c_add_adapter(&i2c->adap);
724*c41aa3ceSMax Schwarz 	if (ret < 0) {
725*c41aa3ceSMax Schwarz 		dev_err(&pdev->dev, "Could not register adapter\n");
726*c41aa3ceSMax Schwarz 		goto err_clk;
727*c41aa3ceSMax Schwarz 	}
728*c41aa3ceSMax Schwarz 
729*c41aa3ceSMax Schwarz 	dev_info(&pdev->dev, "Initialized RK3xxx I2C bus at %p\n", i2c->regs);
730*c41aa3ceSMax Schwarz 
731*c41aa3ceSMax Schwarz 	return 0;
732*c41aa3ceSMax Schwarz 
733*c41aa3ceSMax Schwarz err_clk:
734*c41aa3ceSMax Schwarz 	clk_unprepare(i2c->clk);
735*c41aa3ceSMax Schwarz 	return ret;
736*c41aa3ceSMax Schwarz }
737*c41aa3ceSMax Schwarz 
738*c41aa3ceSMax Schwarz static int rk3x_i2c_remove(struct platform_device *pdev)
739*c41aa3ceSMax Schwarz {
740*c41aa3ceSMax Schwarz 	struct rk3x_i2c *i2c = platform_get_drvdata(pdev);
741*c41aa3ceSMax Schwarz 
742*c41aa3ceSMax Schwarz 	i2c_del_adapter(&i2c->adap);
743*c41aa3ceSMax Schwarz 	clk_unprepare(i2c->clk);
744*c41aa3ceSMax Schwarz 
745*c41aa3ceSMax Schwarz 	return 0;
746*c41aa3ceSMax Schwarz }
747*c41aa3ceSMax Schwarz 
748*c41aa3ceSMax Schwarz static struct platform_driver rk3x_i2c_driver = {
749*c41aa3ceSMax Schwarz 	.probe   = rk3x_i2c_probe,
750*c41aa3ceSMax Schwarz 	.remove  = rk3x_i2c_remove,
751*c41aa3ceSMax Schwarz 	.driver  = {
752*c41aa3ceSMax Schwarz 		.owner = THIS_MODULE,
753*c41aa3ceSMax Schwarz 		.name  = "rk3x-i2c",
754*c41aa3ceSMax Schwarz 		.of_match_table = rk3x_i2c_match,
755*c41aa3ceSMax Schwarz 	},
756*c41aa3ceSMax Schwarz };
757*c41aa3ceSMax Schwarz 
758*c41aa3ceSMax Schwarz module_platform_driver(rk3x_i2c_driver);
759*c41aa3ceSMax Schwarz 
760*c41aa3ceSMax Schwarz MODULE_DESCRIPTION("Rockchip RK3xxx I2C Bus driver");
761*c41aa3ceSMax Schwarz MODULE_AUTHOR("Max Schwarz <max.schwarz@online.de>");
762*c41aa3ceSMax Schwarz MODULE_LICENSE("GPL v2");
763