xref: /rk3399_rockchip-uboot/drivers/i2c/sh_sh7734_i2c.c (revision eee479cf6a4046d25f8032c402355d9fc237fb70)
1 /*
2  * Copyright (C) 2012 Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com>
3  * Copyright (C) 2012 Renesas Solutions Corp.
4  *
5  * SPDX-License-Identifier:	GPL-2.0+
6  */
7 
8 #include <common.h>
9 #include <i2c.h>
10 #include <asm/io.h>
11 
12 struct sh_i2c {
13 	u8 iccr1;
14 	u8 iccr2;
15 	u8 icmr;
16 	u8 icier;
17 	u8 icsr;
18 	u8 sar;
19 	u8 icdrt;
20 	u8 icdrr;
21 	u8 nf2cyc;
22 	u8 __pad0;
23 	u8 __pad1;
24 };
25 
26 static struct sh_i2c *base;
27 static u8 iccr1_cks, nf2cyc;
28 
29 /* ICCR1 */
30 #define SH_I2C_ICCR1_ICE	(1 << 7)
31 #define SH_I2C_ICCR1_RCVD	(1 << 6)
32 #define SH_I2C_ICCR1_MST	(1 << 5)
33 #define SH_I2C_ICCR1_TRS	(1 << 4)
34 #define SH_I2C_ICCR1_MTRS	\
35 	(SH_I2C_ICCR1_MST | SH_I2C_ICCR1_TRS)
36 
37 /* ICCR1 */
38 #define SH_I2C_ICCR2_BBSY	(1 << 7)
39 #define SH_I2C_ICCR2_SCP	(1 << 6)
40 #define SH_I2C_ICCR2_SDAO	(1 << 5)
41 #define SH_I2C_ICCR2_SDAOP	(1 << 4)
42 #define SH_I2C_ICCR2_SCLO	(1 << 3)
43 #define SH_I2C_ICCR2_IICRST	(1 << 1)
44 
45 #define SH_I2C_ICIER_TIE	(1 << 7)
46 #define SH_I2C_ICIER_TEIE	(1 << 6)
47 #define SH_I2C_ICIER_RIE	(1 << 5)
48 #define SH_I2C_ICIER_NAKIE	(1 << 4)
49 #define SH_I2C_ICIER_STIE	(1 << 3)
50 #define SH_I2C_ICIER_ACKE	(1 << 2)
51 #define SH_I2C_ICIER_ACKBR	(1 << 1)
52 #define SH_I2C_ICIER_ACKBT	(1 << 0)
53 
54 #define SH_I2C_ICSR_TDRE	(1 << 7)
55 #define SH_I2C_ICSR_TEND	(1 << 6)
56 #define SH_I2C_ICSR_RDRF	(1 << 5)
57 #define SH_I2C_ICSR_NACKF	(1 << 4)
58 #define SH_I2C_ICSR_STOP	(1 << 3)
59 #define SH_I2C_ICSR_ALOVE	(1 << 2)
60 #define SH_I2C_ICSR_AAS		(1 << 1)
61 #define SH_I2C_ICSR_ADZ		(1 << 0)
62 
63 #define IRQ_WAIT 1000
64 
65 static void sh_i2c_send_stop(struct sh_i2c *base)
66 {
67 	clrbits_8(&base->iccr2, SH_I2C_ICCR2_BBSY | SH_I2C_ICCR2_SCP);
68 }
69 
70 static int check_icsr_bits(struct sh_i2c *base, u8 bits)
71 {
72 	int i;
73 
74 	for (i = 0; i < IRQ_WAIT; i++) {
75 		if (bits & readb(&base->icsr))
76 			return 0;
77 		udelay(10);
78 	}
79 
80 	return 1;
81 }
82 
83 static int check_stop(struct sh_i2c *base)
84 {
85 	int ret = check_icsr_bits(base, SH_I2C_ICSR_STOP);
86 	clrbits_8(&base->icsr, SH_I2C_ICSR_STOP);
87 
88 	return ret;
89 }
90 
91 static int check_tend(struct sh_i2c *base, int stop)
92 {
93 	int ret = check_icsr_bits(base, SH_I2C_ICSR_TEND);
94 
95 	if (stop) {
96 		clrbits_8(&base->icsr, SH_I2C_ICSR_STOP);
97 		sh_i2c_send_stop(base);
98 	}
99 
100 	clrbits_8(&base->icsr, SH_I2C_ICSR_TEND);
101 	return ret;
102 }
103 
104 static int check_tdre(struct sh_i2c *base)
105 {
106 	return check_icsr_bits(base, SH_I2C_ICSR_TDRE);
107 }
108 
109 static int check_rdrf(struct sh_i2c *base)
110 {
111 	return check_icsr_bits(base, SH_I2C_ICSR_RDRF);
112 }
113 
114 static int check_bbsy(struct sh_i2c *base)
115 {
116 	int i;
117 
118 	for (i = 0 ; i < IRQ_WAIT ; i++) {
119 		if (!(SH_I2C_ICCR2_BBSY & readb(&base->iccr2)))
120 			return 0;
121 		udelay(10);
122 	}
123 	return 1;
124 }
125 
126 static int check_ackbr(struct sh_i2c *base)
127 {
128 	int i;
129 
130 	for (i = 0 ; i < IRQ_WAIT ; i++) {
131 		if (!(SH_I2C_ICIER_ACKBR & readb(&base->icier)))
132 			return 0;
133 		udelay(10);
134 	}
135 
136 	return 1;
137 }
138 
139 static void sh_i2c_reset(struct sh_i2c *base)
140 {
141 	setbits_8(&base->iccr2, SH_I2C_ICCR2_IICRST);
142 
143 	udelay(100);
144 
145 	clrbits_8(&base->iccr2, SH_I2C_ICCR2_IICRST);
146 }
147 
148 static int i2c_set_addr(struct sh_i2c *base, u8 id, u8 reg)
149 {
150 	if (check_bbsy(base)) {
151 		puts("i2c bus busy\n");
152 		goto fail;
153 	}
154 
155 	setbits_8(&base->iccr1, SH_I2C_ICCR1_MTRS);
156 	clrsetbits_8(&base->iccr2, SH_I2C_ICCR2_SCP, SH_I2C_ICCR2_BBSY);
157 
158 	writeb((id << 1), &base->icdrt);
159 
160 	if (check_tend(base, 0)) {
161 		puts("TEND check fail...\n");
162 		goto fail;
163 	}
164 
165 	if (check_ackbr(base)) {
166 		check_tend(base, 0);
167 		sh_i2c_send_stop(base);
168 		goto fail;
169 	}
170 
171 	writeb(reg, &base->icdrt);
172 
173 	if (check_tdre(base)) {
174 		puts("TDRE check fail...\n");
175 		goto fail;
176 	}
177 
178 	if (check_tend(base, 0)) {
179 		puts("TEND check fail...\n");
180 		goto fail;
181 	}
182 
183 	return 0;
184 fail:
185 
186 	return 1;
187 }
188 
189 static int
190 i2c_raw_write(struct sh_i2c *base, u8 id, u8 reg, u8 *val, int size)
191 {
192 	int i;
193 
194 	if (i2c_set_addr(base, id, reg)) {
195 		puts("Fail set slave address\n");
196 		return 1;
197 	}
198 
199 	for (i = 0; i < size; i++) {
200 		writeb(val[i], &base->icdrt);
201 		check_tdre(base);
202 	}
203 
204 	check_tend(base, 1);
205 	check_stop(base);
206 
207 	udelay(100);
208 
209 	clrbits_8(&base->iccr1, SH_I2C_ICCR1_MTRS);
210 	clrbits_8(&base->icsr, SH_I2C_ICSR_TDRE);
211 	sh_i2c_reset(base);
212 
213 	return 0;
214 }
215 
216 static u8 i2c_raw_read(struct sh_i2c *base, u8 id, u8 reg)
217 {
218 	u8 ret = 0;
219 
220 	if (i2c_set_addr(base, id, reg)) {
221 		puts("Fail set slave address\n");
222 		goto fail;
223 	}
224 
225 	clrsetbits_8(&base->iccr2, SH_I2C_ICCR2_SCP, SH_I2C_ICCR2_BBSY);
226 	writeb((id << 1) | 1, &base->icdrt);
227 
228 	if (check_tend(base, 0))
229 		puts("TDRE check fail...\n");
230 
231 	clrsetbits_8(&base->iccr1, SH_I2C_ICCR1_TRS, SH_I2C_ICCR1_MST);
232 	clrbits_8(&base->icsr, SH_I2C_ICSR_TDRE);
233 	setbits_8(&base->icier, SH_I2C_ICIER_ACKBT);
234 	setbits_8(&base->iccr1, SH_I2C_ICCR1_RCVD);
235 
236 	/* read data (dummy) */
237 	ret = readb(&base->icdrr);
238 
239 	if (check_rdrf(base)) {
240 		puts("check RDRF error\n");
241 		goto fail;
242 	}
243 
244 	clrbits_8(&base->icsr, SH_I2C_ICSR_STOP);
245 	udelay(1000);
246 
247 	sh_i2c_send_stop(base);
248 
249 	if (check_stop(base)) {
250 		puts("check STOP error\n");
251 		goto fail;
252 	}
253 
254 	clrbits_8(&base->iccr1, SH_I2C_ICCR1_MTRS);
255 	clrbits_8(&base->icsr, SH_I2C_ICSR_TDRE);
256 
257 	/* data read */
258 	ret = readb(&base->icdrr);
259 
260 fail:
261 	clrbits_8(&base->iccr1, SH_I2C_ICCR1_RCVD);
262 
263 	return ret;
264 }
265 
266 #ifdef CONFIG_I2C_MULTI_BUS
267 static unsigned int current_bus;
268 
269 /**
270  * i2c_set_bus_num - change active I2C bus
271  *	@bus: bus index, zero based
272  *	@returns: 0 on success, non-0 on failure
273  */
274 int i2c_set_bus_num(unsigned int bus)
275 {
276 	switch (bus) {
277 	case 0:
278 		base = (void *)CONFIG_SH_I2C_BASE0;
279 		break;
280 	case 1:
281 		base = (void *)CONFIG_SH_I2C_BASE1;
282 		break;
283 	default:
284 		printf("Bad bus: %d\n", bus);
285 		return -1;
286 	}
287 
288 	current_bus = bus;
289 
290 	return 0;
291 }
292 
293 /**
294  * i2c_get_bus_num - returns index of active I2C bus
295  */
296 unsigned int i2c_get_bus_num(void)
297 {
298 	return current_bus;
299 }
300 #endif
301 
302 void i2c_init(int speed, int slaveaddr)
303 {
304 #ifdef CONFIG_I2C_MULTI_BUS
305 	current_bus = 0;
306 #endif
307 	base = (struct sh_i2c *)CONFIG_SH_I2C_BASE0;
308 
309 	if (speed == 400000)
310 		iccr1_cks = 0x07;
311 	else
312 		iccr1_cks = 0x0F;
313 
314 	nf2cyc = 1;
315 
316 	/* Reset */
317 	sh_i2c_reset(base);
318 
319 	/* ICE enable and set clock */
320 	writeb(SH_I2C_ICCR1_ICE | iccr1_cks, &base->iccr1);
321 	writeb(nf2cyc, &base->nf2cyc);
322 }
323 
324 /*
325  * i2c_read: - Read multiple bytes from an i2c device
326  *
327  * The higher level routines take into account that this function is only
328  * called with len < page length of the device (see configuration file)
329  *
330  * @chip:   address of the chip which is to be read
331  * @addr:   i2c data address within the chip
332  * @alen:   length of the i2c data address (1..2 bytes)
333  * @buffer: where to write the data
334  * @len:    how much byte do we want to read
335  * @return: 0 in case of success
336  */
337 int i2c_read(u8 chip, u32 addr, int alen, u8 *buffer, int len)
338 {
339 	int i = 0;
340 	for (i = 0; i < len; i++)
341 		buffer[i] = i2c_raw_read(base, chip, addr + i);
342 
343 	return 0;
344 }
345 
346 /*
347  * i2c_write: -  Write multiple bytes to an i2c device
348  *
349  * The higher level routines take into account that this function is only
350  * called with len < page length of the device (see configuration file)
351  *
352  * @chip:   address of the chip which is to be written
353  * @addr:   i2c data address within the chip
354  * @alen:   length of the i2c data address (1..2 bytes)
355  * @buffer: where to find the data to be written
356  * @len:    how much byte do we want to read
357  * @return: 0 in case of success
358  */
359 int i2c_write(u8 chip, u32 addr, int alen, u8 *buffer, int len)
360 {
361 	return i2c_raw_write(base, chip, addr, buffer, len);
362 }
363 
364 /*
365  * i2c_probe: - Test if a chip answers for a given i2c address
366  *
367  * @chip:   address of the chip which is searched for
368  * @return: 0 if a chip was found, -1 otherwhise
369  */
370 int i2c_probe(u8 chip)
371 {
372 	u8 byte;
373 	return i2c_read(chip, 0, 0, &byte, 1);
374 }
375