xref: /linux/drivers/gpu/drm/radeon/radeon_i2c.c (revision cc4589ebfae6f8dbb5cf880a0a67eedab3416492)
1 /*
2  * Copyright 2007-8 Advanced Micro Devices, Inc.
3  * Copyright 2008 Red Hat Inc.
4  *
5  * Permission is hereby granted, free of charge, to any person obtaining a
6  * copy of this software and associated documentation files (the "Software"),
7  * to deal in the Software without restriction, including without limitation
8  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9  * and/or sell copies of the Software, and to permit persons to whom the
10  * Software is furnished to do so, subject to the following conditions:
11  *
12  * The above copyright notice and this permission notice shall be included in
13  * all copies or substantial portions of the Software.
14  *
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18  * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
19  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
20  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
21  * OTHER DEALINGS IN THE SOFTWARE.
22  *
23  * Authors: Dave Airlie
24  *          Alex Deucher
25  */
26 #include "drmP.h"
27 #include "radeon_drm.h"
28 #include "radeon.h"
29 #include "atom.h"
30 
31 /**
32  * radeon_ddc_probe
33  *
34  */
35 bool radeon_ddc_probe(struct radeon_connector *radeon_connector)
36 {
37 	u8 out_buf[] = { 0x0, 0x0};
38 	u8 buf[2];
39 	int ret;
40 	struct i2c_msg msgs[] = {
41 		{
42 			.addr = 0x50,
43 			.flags = 0,
44 			.len = 1,
45 			.buf = out_buf,
46 		},
47 		{
48 			.addr = 0x50,
49 			.flags = I2C_M_RD,
50 			.len = 1,
51 			.buf = buf,
52 		}
53 	};
54 
55 	ret = i2c_transfer(&radeon_connector->ddc_bus->adapter, msgs, 2);
56 	if (ret == 2)
57 		return true;
58 
59 	return false;
60 }
61 
62 /* bit banging i2c */
63 
64 static void radeon_i2c_do_lock(struct radeon_i2c_chan *i2c, int lock_state)
65 {
66 	struct radeon_device *rdev = i2c->dev->dev_private;
67 	struct radeon_i2c_bus_rec *rec = &i2c->rec;
68 	uint32_t temp;
69 
70 	/* RV410 appears to have a bug where the hw i2c in reset
71 	 * holds the i2c port in a bad state - switch hw i2c away before
72 	 * doing DDC - do this for all r200s/r300s/r400s for safety sake
73 	 */
74 	if (rec->hw_capable) {
75 		if ((rdev->family >= CHIP_R200) && !ASIC_IS_AVIVO(rdev)) {
76 			u32 reg;
77 
78 			if (rdev->family >= CHIP_RV350)
79 				reg = RADEON_GPIO_MONID;
80 			else if ((rdev->family == CHIP_R300) ||
81 				 (rdev->family == CHIP_R350))
82 				reg = RADEON_GPIO_DVI_DDC;
83 			else
84 				reg = RADEON_GPIO_CRT2_DDC;
85 
86 			mutex_lock(&rdev->dc_hw_i2c_mutex);
87 			if (rec->a_clk_reg == reg) {
88 				WREG32(RADEON_DVI_I2C_CNTL_0, (RADEON_I2C_SOFT_RST |
89 							       R200_DVI_I2C_PIN_SEL(R200_SEL_DDC1)));
90 			} else {
91 				WREG32(RADEON_DVI_I2C_CNTL_0, (RADEON_I2C_SOFT_RST |
92 							       R200_DVI_I2C_PIN_SEL(R200_SEL_DDC3)));
93 			}
94 			mutex_unlock(&rdev->dc_hw_i2c_mutex);
95 		}
96 	}
97 
98 	/* clear the output pin values */
99 	temp = RREG32(rec->a_clk_reg) & ~rec->a_clk_mask;
100 	WREG32(rec->a_clk_reg, temp);
101 
102 	temp = RREG32(rec->a_data_reg) & ~rec->a_data_mask;
103 	WREG32(rec->a_data_reg, temp);
104 
105 	/* set the pins to input */
106 	temp = RREG32(rec->en_clk_reg) & ~rec->en_clk_mask;
107 	WREG32(rec->en_clk_reg, temp);
108 
109 	temp = RREG32(rec->en_data_reg) & ~rec->en_data_mask;
110 	WREG32(rec->en_data_reg, temp);
111 
112 	/* mask the gpio pins for software use */
113 	temp = RREG32(rec->mask_clk_reg);
114 	if (lock_state)
115 		temp |= rec->mask_clk_mask;
116 	else
117 		temp &= ~rec->mask_clk_mask;
118 	WREG32(rec->mask_clk_reg, temp);
119 	temp = RREG32(rec->mask_clk_reg);
120 
121 	temp = RREG32(rec->mask_data_reg);
122 	if (lock_state)
123 		temp |= rec->mask_data_mask;
124 	else
125 		temp &= ~rec->mask_data_mask;
126 	WREG32(rec->mask_data_reg, temp);
127 	temp = RREG32(rec->mask_data_reg);
128 }
129 
130 static int get_clock(void *i2c_priv)
131 {
132 	struct radeon_i2c_chan *i2c = i2c_priv;
133 	struct radeon_device *rdev = i2c->dev->dev_private;
134 	struct radeon_i2c_bus_rec *rec = &i2c->rec;
135 	uint32_t val;
136 
137 	/* read the value off the pin */
138 	val = RREG32(rec->y_clk_reg);
139 	val &= rec->y_clk_mask;
140 
141 	return (val != 0);
142 }
143 
144 
145 static int get_data(void *i2c_priv)
146 {
147 	struct radeon_i2c_chan *i2c = i2c_priv;
148 	struct radeon_device *rdev = i2c->dev->dev_private;
149 	struct radeon_i2c_bus_rec *rec = &i2c->rec;
150 	uint32_t val;
151 
152 	/* read the value off the pin */
153 	val = RREG32(rec->y_data_reg);
154 	val &= rec->y_data_mask;
155 
156 	return (val != 0);
157 }
158 
159 static void set_clock(void *i2c_priv, int clock)
160 {
161 	struct radeon_i2c_chan *i2c = i2c_priv;
162 	struct radeon_device *rdev = i2c->dev->dev_private;
163 	struct radeon_i2c_bus_rec *rec = &i2c->rec;
164 	uint32_t val;
165 
166 	/* set pin direction */
167 	val = RREG32(rec->en_clk_reg) & ~rec->en_clk_mask;
168 	val |= clock ? 0 : rec->en_clk_mask;
169 	WREG32(rec->en_clk_reg, val);
170 }
171 
172 static void set_data(void *i2c_priv, int data)
173 {
174 	struct radeon_i2c_chan *i2c = i2c_priv;
175 	struct radeon_device *rdev = i2c->dev->dev_private;
176 	struct radeon_i2c_bus_rec *rec = &i2c->rec;
177 	uint32_t val;
178 
179 	/* set pin direction */
180 	val = RREG32(rec->en_data_reg) & ~rec->en_data_mask;
181 	val |= data ? 0 : rec->en_data_mask;
182 	WREG32(rec->en_data_reg, val);
183 }
184 
185 static int pre_xfer(struct i2c_adapter *i2c_adap)
186 {
187 	struct radeon_i2c_chan *i2c = i2c_get_adapdata(i2c_adap);
188 
189 	radeon_i2c_do_lock(i2c, 1);
190 
191 	return 0;
192 }
193 
194 static void post_xfer(struct i2c_adapter *i2c_adap)
195 {
196 	struct radeon_i2c_chan *i2c = i2c_get_adapdata(i2c_adap);
197 
198 	radeon_i2c_do_lock(i2c, 0);
199 }
200 
201 /* hw i2c */
202 
203 static u32 radeon_get_i2c_prescale(struct radeon_device *rdev)
204 {
205 	u32 sclk = radeon_get_engine_clock(rdev);
206 	u32 prescale = 0;
207 	u32 nm;
208 	u8 n, m, loop;
209 	int i2c_clock;
210 
211 	switch (rdev->family) {
212 	case CHIP_R100:
213 	case CHIP_RV100:
214 	case CHIP_RS100:
215 	case CHIP_RV200:
216 	case CHIP_RS200:
217 	case CHIP_R200:
218 	case CHIP_RV250:
219 	case CHIP_RS300:
220 	case CHIP_RV280:
221 	case CHIP_R300:
222 	case CHIP_R350:
223 	case CHIP_RV350:
224 		i2c_clock = 60;
225 		nm = (sclk * 10) / (i2c_clock * 4);
226 		for (loop = 1; loop < 255; loop++) {
227 			if ((nm / loop) < loop)
228 				break;
229 		}
230 		n = loop - 1;
231 		m = loop - 2;
232 		prescale = m | (n << 8);
233 		break;
234 	case CHIP_RV380:
235 	case CHIP_RS400:
236 	case CHIP_RS480:
237 	case CHIP_R420:
238 	case CHIP_R423:
239 	case CHIP_RV410:
240 		prescale = (((sclk * 10)/(4 * 128 * 100) + 1) << 8) + 128;
241 		break;
242 	case CHIP_RS600:
243 	case CHIP_RS690:
244 	case CHIP_RS740:
245 		/* todo */
246 		break;
247 	case CHIP_RV515:
248 	case CHIP_R520:
249 	case CHIP_RV530:
250 	case CHIP_RV560:
251 	case CHIP_RV570:
252 	case CHIP_R580:
253 		i2c_clock = 50;
254 		if (rdev->family == CHIP_R520)
255 			prescale = (127 << 8) + ((sclk * 10) / (4 * 127 * i2c_clock));
256 		else
257 			prescale = (((sclk * 10)/(4 * 128 * 100) + 1) << 8) + 128;
258 		break;
259 	case CHIP_R600:
260 	case CHIP_RV610:
261 	case CHIP_RV630:
262 	case CHIP_RV670:
263 		/* todo */
264 		break;
265 	case CHIP_RV620:
266 	case CHIP_RV635:
267 	case CHIP_RS780:
268 	case CHIP_RS880:
269 	case CHIP_RV770:
270 	case CHIP_RV730:
271 	case CHIP_RV710:
272 	case CHIP_RV740:
273 		/* todo */
274 		break;
275 	case CHIP_CEDAR:
276 	case CHIP_REDWOOD:
277 	case CHIP_JUNIPER:
278 	case CHIP_CYPRESS:
279 	case CHIP_HEMLOCK:
280 		/* todo */
281 		break;
282 	default:
283 		DRM_ERROR("i2c: unhandled radeon chip\n");
284 		break;
285 	}
286 	return prescale;
287 }
288 
289 
290 /* hw i2c engine for r1xx-4xx hardware
291  * hw can buffer up to 15 bytes
292  */
293 static int r100_hw_i2c_xfer(struct i2c_adapter *i2c_adap,
294 			    struct i2c_msg *msgs, int num)
295 {
296 	struct radeon_i2c_chan *i2c = i2c_get_adapdata(i2c_adap);
297 	struct radeon_device *rdev = i2c->dev->dev_private;
298 	struct radeon_i2c_bus_rec *rec = &i2c->rec;
299 	struct i2c_msg *p;
300 	int i, j, k, ret = num;
301 	u32 prescale;
302 	u32 i2c_cntl_0, i2c_cntl_1, i2c_data;
303 	u32 tmp, reg;
304 
305 	mutex_lock(&rdev->dc_hw_i2c_mutex);
306 	/* take the pm lock since we need a constant sclk */
307 	mutex_lock(&rdev->pm.mutex);
308 
309 	prescale = radeon_get_i2c_prescale(rdev);
310 
311 	reg = ((prescale << RADEON_I2C_PRESCALE_SHIFT) |
312 	       RADEON_I2C_DRIVE_EN |
313 	       RADEON_I2C_START |
314 	       RADEON_I2C_STOP |
315 	       RADEON_I2C_GO);
316 
317 	if (rdev->is_atom_bios) {
318 		tmp = RREG32(RADEON_BIOS_6_SCRATCH);
319 		WREG32(RADEON_BIOS_6_SCRATCH, tmp | ATOM_S6_HW_I2C_BUSY_STATE);
320 	}
321 
322 	if (rec->mm_i2c) {
323 		i2c_cntl_0 = RADEON_I2C_CNTL_0;
324 		i2c_cntl_1 = RADEON_I2C_CNTL_1;
325 		i2c_data = RADEON_I2C_DATA;
326 	} else {
327 		i2c_cntl_0 = RADEON_DVI_I2C_CNTL_0;
328 		i2c_cntl_1 = RADEON_DVI_I2C_CNTL_1;
329 		i2c_data = RADEON_DVI_I2C_DATA;
330 
331 		switch (rdev->family) {
332 		case CHIP_R100:
333 		case CHIP_RV100:
334 		case CHIP_RS100:
335 		case CHIP_RV200:
336 		case CHIP_RS200:
337 		case CHIP_RS300:
338 			switch (rec->mask_clk_reg) {
339 			case RADEON_GPIO_DVI_DDC:
340 				/* no gpio select bit */
341 				break;
342 			default:
343 				DRM_ERROR("gpio not supported with hw i2c\n");
344 				ret = -EINVAL;
345 				goto done;
346 			}
347 			break;
348 		case CHIP_R200:
349 			/* only bit 4 on r200 */
350 			switch (rec->mask_clk_reg) {
351 			case RADEON_GPIO_DVI_DDC:
352 				reg |= R200_DVI_I2C_PIN_SEL(R200_SEL_DDC1);
353 				break;
354 			case RADEON_GPIO_MONID:
355 				reg |= R200_DVI_I2C_PIN_SEL(R200_SEL_DDC3);
356 				break;
357 			default:
358 				DRM_ERROR("gpio not supported with hw i2c\n");
359 				ret = -EINVAL;
360 				goto done;
361 			}
362 			break;
363 		case CHIP_RV250:
364 		case CHIP_RV280:
365 			/* bits 3 and 4 */
366 			switch (rec->mask_clk_reg) {
367 			case RADEON_GPIO_DVI_DDC:
368 				reg |= R200_DVI_I2C_PIN_SEL(R200_SEL_DDC1);
369 				break;
370 			case RADEON_GPIO_VGA_DDC:
371 				reg |= R200_DVI_I2C_PIN_SEL(R200_SEL_DDC2);
372 				break;
373 			case RADEON_GPIO_CRT2_DDC:
374 				reg |= R200_DVI_I2C_PIN_SEL(R200_SEL_DDC3);
375 				break;
376 			default:
377 				DRM_ERROR("gpio not supported with hw i2c\n");
378 				ret = -EINVAL;
379 				goto done;
380 			}
381 			break;
382 		case CHIP_R300:
383 		case CHIP_R350:
384 			/* only bit 4 on r300/r350 */
385 			switch (rec->mask_clk_reg) {
386 			case RADEON_GPIO_VGA_DDC:
387 				reg |= R200_DVI_I2C_PIN_SEL(R200_SEL_DDC1);
388 				break;
389 			case RADEON_GPIO_DVI_DDC:
390 				reg |= R200_DVI_I2C_PIN_SEL(R200_SEL_DDC3);
391 				break;
392 			default:
393 				DRM_ERROR("gpio not supported with hw i2c\n");
394 				ret = -EINVAL;
395 				goto done;
396 			}
397 			break;
398 		case CHIP_RV350:
399 		case CHIP_RV380:
400 		case CHIP_R420:
401 		case CHIP_R423:
402 		case CHIP_RV410:
403 		case CHIP_RS400:
404 		case CHIP_RS480:
405 			/* bits 3 and 4 */
406 			switch (rec->mask_clk_reg) {
407 			case RADEON_GPIO_VGA_DDC:
408 				reg |= R200_DVI_I2C_PIN_SEL(R200_SEL_DDC1);
409 				break;
410 			case RADEON_GPIO_DVI_DDC:
411 				reg |= R200_DVI_I2C_PIN_SEL(R200_SEL_DDC2);
412 				break;
413 			case RADEON_GPIO_MONID:
414 				reg |= R200_DVI_I2C_PIN_SEL(R200_SEL_DDC3);
415 				break;
416 			default:
417 				DRM_ERROR("gpio not supported with hw i2c\n");
418 				ret = -EINVAL;
419 				goto done;
420 			}
421 			break;
422 		default:
423 			DRM_ERROR("unsupported asic\n");
424 			ret = -EINVAL;
425 			goto done;
426 			break;
427 		}
428 	}
429 
430 	/* check for bus probe */
431 	p = &msgs[0];
432 	if ((num == 1) && (p->len == 0)) {
433 		WREG32(i2c_cntl_0, (RADEON_I2C_DONE |
434 				    RADEON_I2C_NACK |
435 				    RADEON_I2C_HALT |
436 				    RADEON_I2C_SOFT_RST));
437 		WREG32(i2c_data, (p->addr << 1) & 0xff);
438 		WREG32(i2c_data, 0);
439 		WREG32(i2c_cntl_1, ((1 << RADEON_I2C_DATA_COUNT_SHIFT) |
440 				    (1 << RADEON_I2C_ADDR_COUNT_SHIFT) |
441 				    RADEON_I2C_EN |
442 				    (48 << RADEON_I2C_TIME_LIMIT_SHIFT)));
443 		WREG32(i2c_cntl_0, reg);
444 		for (k = 0; k < 32; k++) {
445 			udelay(10);
446 			tmp = RREG32(i2c_cntl_0);
447 			if (tmp & RADEON_I2C_GO)
448 				continue;
449 			tmp = RREG32(i2c_cntl_0);
450 			if (tmp & RADEON_I2C_DONE)
451 				break;
452 			else {
453 				DRM_DEBUG("i2c write error 0x%08x\n", tmp);
454 				WREG32(i2c_cntl_0, tmp | RADEON_I2C_ABORT);
455 				ret = -EIO;
456 				goto done;
457 			}
458 		}
459 		goto done;
460 	}
461 
462 	for (i = 0; i < num; i++) {
463 		p = &msgs[i];
464 		for (j = 0; j < p->len; j++) {
465 			if (p->flags & I2C_M_RD) {
466 				WREG32(i2c_cntl_0, (RADEON_I2C_DONE |
467 						    RADEON_I2C_NACK |
468 						    RADEON_I2C_HALT |
469 						    RADEON_I2C_SOFT_RST));
470 				WREG32(i2c_data, ((p->addr << 1) & 0xff) | 0x1);
471 				WREG32(i2c_cntl_1, ((1 << RADEON_I2C_DATA_COUNT_SHIFT) |
472 						    (1 << RADEON_I2C_ADDR_COUNT_SHIFT) |
473 						    RADEON_I2C_EN |
474 						    (48 << RADEON_I2C_TIME_LIMIT_SHIFT)));
475 				WREG32(i2c_cntl_0, reg | RADEON_I2C_RECEIVE);
476 				for (k = 0; k < 32; k++) {
477 					udelay(10);
478 					tmp = RREG32(i2c_cntl_0);
479 					if (tmp & RADEON_I2C_GO)
480 						continue;
481 					tmp = RREG32(i2c_cntl_0);
482 					if (tmp & RADEON_I2C_DONE)
483 						break;
484 					else {
485 						DRM_DEBUG("i2c read error 0x%08x\n", tmp);
486 						WREG32(i2c_cntl_0, tmp | RADEON_I2C_ABORT);
487 						ret = -EIO;
488 						goto done;
489 					}
490 				}
491 				p->buf[j] = RREG32(i2c_data) & 0xff;
492 			} else {
493 				WREG32(i2c_cntl_0, (RADEON_I2C_DONE |
494 						    RADEON_I2C_NACK |
495 						    RADEON_I2C_HALT |
496 						    RADEON_I2C_SOFT_RST));
497 				WREG32(i2c_data, (p->addr << 1) & 0xff);
498 				WREG32(i2c_data, p->buf[j]);
499 				WREG32(i2c_cntl_1, ((1 << RADEON_I2C_DATA_COUNT_SHIFT) |
500 						    (1 << RADEON_I2C_ADDR_COUNT_SHIFT) |
501 						    RADEON_I2C_EN |
502 						    (48 << RADEON_I2C_TIME_LIMIT_SHIFT)));
503 				WREG32(i2c_cntl_0, reg);
504 				for (k = 0; k < 32; k++) {
505 					udelay(10);
506 					tmp = RREG32(i2c_cntl_0);
507 					if (tmp & RADEON_I2C_GO)
508 						continue;
509 					tmp = RREG32(i2c_cntl_0);
510 					if (tmp & RADEON_I2C_DONE)
511 						break;
512 					else {
513 						DRM_DEBUG("i2c write error 0x%08x\n", tmp);
514 						WREG32(i2c_cntl_0, tmp | RADEON_I2C_ABORT);
515 						ret = -EIO;
516 						goto done;
517 					}
518 				}
519 			}
520 		}
521 	}
522 
523 done:
524 	WREG32(i2c_cntl_0, 0);
525 	WREG32(i2c_cntl_1, 0);
526 	WREG32(i2c_cntl_0, (RADEON_I2C_DONE |
527 			    RADEON_I2C_NACK |
528 			    RADEON_I2C_HALT |
529 			    RADEON_I2C_SOFT_RST));
530 
531 	if (rdev->is_atom_bios) {
532 		tmp = RREG32(RADEON_BIOS_6_SCRATCH);
533 		tmp &= ~ATOM_S6_HW_I2C_BUSY_STATE;
534 		WREG32(RADEON_BIOS_6_SCRATCH, tmp);
535 	}
536 
537 	mutex_unlock(&rdev->pm.mutex);
538 	mutex_unlock(&rdev->dc_hw_i2c_mutex);
539 
540 	return ret;
541 }
542 
543 /* hw i2c engine for r5xx hardware
544  * hw can buffer up to 15 bytes
545  */
546 static int r500_hw_i2c_xfer(struct i2c_adapter *i2c_adap,
547 			    struct i2c_msg *msgs, int num)
548 {
549 	struct radeon_i2c_chan *i2c = i2c_get_adapdata(i2c_adap);
550 	struct radeon_device *rdev = i2c->dev->dev_private;
551 	struct radeon_i2c_bus_rec *rec = &i2c->rec;
552 	struct i2c_msg *p;
553 	int i, j, remaining, current_count, buffer_offset, ret = num;
554 	u32 prescale;
555 	u32 tmp, reg;
556 	u32 saved1, saved2;
557 
558 	mutex_lock(&rdev->dc_hw_i2c_mutex);
559 	/* take the pm lock since we need a constant sclk */
560 	mutex_lock(&rdev->pm.mutex);
561 
562 	prescale = radeon_get_i2c_prescale(rdev);
563 
564 	/* clear gpio mask bits */
565 	tmp = RREG32(rec->mask_clk_reg);
566 	tmp &= ~rec->mask_clk_mask;
567 	WREG32(rec->mask_clk_reg, tmp);
568 	tmp = RREG32(rec->mask_clk_reg);
569 
570 	tmp = RREG32(rec->mask_data_reg);
571 	tmp &= ~rec->mask_data_mask;
572 	WREG32(rec->mask_data_reg, tmp);
573 	tmp = RREG32(rec->mask_data_reg);
574 
575 	/* clear pin values */
576 	tmp = RREG32(rec->a_clk_reg);
577 	tmp &= ~rec->a_clk_mask;
578 	WREG32(rec->a_clk_reg, tmp);
579 	tmp = RREG32(rec->a_clk_reg);
580 
581 	tmp = RREG32(rec->a_data_reg);
582 	tmp &= ~rec->a_data_mask;
583 	WREG32(rec->a_data_reg, tmp);
584 	tmp = RREG32(rec->a_data_reg);
585 
586 	/* set the pins to input */
587 	tmp = RREG32(rec->en_clk_reg);
588 	tmp &= ~rec->en_clk_mask;
589 	WREG32(rec->en_clk_reg, tmp);
590 	tmp = RREG32(rec->en_clk_reg);
591 
592 	tmp = RREG32(rec->en_data_reg);
593 	tmp &= ~rec->en_data_mask;
594 	WREG32(rec->en_data_reg, tmp);
595 	tmp = RREG32(rec->en_data_reg);
596 
597 	/* */
598 	tmp = RREG32(RADEON_BIOS_6_SCRATCH);
599 	WREG32(RADEON_BIOS_6_SCRATCH, tmp | ATOM_S6_HW_I2C_BUSY_STATE);
600 	saved1 = RREG32(AVIVO_DC_I2C_CONTROL1);
601 	saved2 = RREG32(0x494);
602 	WREG32(0x494, saved2 | 0x1);
603 
604 	WREG32(AVIVO_DC_I2C_ARBITRATION, AVIVO_DC_I2C_SW_WANTS_TO_USE_I2C);
605 	for (i = 0; i < 50; i++) {
606 		udelay(1);
607 		if (RREG32(AVIVO_DC_I2C_ARBITRATION) & AVIVO_DC_I2C_SW_CAN_USE_I2C)
608 			break;
609 	}
610 	if (i == 50) {
611 		DRM_ERROR("failed to get i2c bus\n");
612 		ret = -EBUSY;
613 		goto done;
614 	}
615 
616 	reg = AVIVO_DC_I2C_START | AVIVO_DC_I2C_STOP | AVIVO_DC_I2C_EN;
617 	switch (rec->mask_clk_reg) {
618 	case AVIVO_DC_GPIO_DDC1_MASK:
619 		reg |= AVIVO_DC_I2C_PIN_SELECT(AVIVO_SEL_DDC1);
620 		break;
621 	case AVIVO_DC_GPIO_DDC2_MASK:
622 		reg |= AVIVO_DC_I2C_PIN_SELECT(AVIVO_SEL_DDC2);
623 		break;
624 	case AVIVO_DC_GPIO_DDC3_MASK:
625 		reg |= AVIVO_DC_I2C_PIN_SELECT(AVIVO_SEL_DDC3);
626 		break;
627 	default:
628 		DRM_ERROR("gpio not supported with hw i2c\n");
629 		ret = -EINVAL;
630 		goto done;
631 	}
632 
633 	/* check for bus probe */
634 	p = &msgs[0];
635 	if ((num == 1) && (p->len == 0)) {
636 		WREG32(AVIVO_DC_I2C_STATUS1, (AVIVO_DC_I2C_DONE |
637 					      AVIVO_DC_I2C_NACK |
638 					      AVIVO_DC_I2C_HALT));
639 		WREG32(AVIVO_DC_I2C_RESET, AVIVO_DC_I2C_SOFT_RESET);
640 		udelay(1);
641 		WREG32(AVIVO_DC_I2C_RESET, 0);
642 
643 		WREG32(AVIVO_DC_I2C_DATA, (p->addr << 1) & 0xff);
644 		WREG32(AVIVO_DC_I2C_DATA, 0);
645 
646 		WREG32(AVIVO_DC_I2C_CONTROL3, AVIVO_DC_I2C_TIME_LIMIT(48));
647 		WREG32(AVIVO_DC_I2C_CONTROL2, (AVIVO_DC_I2C_ADDR_COUNT(1) |
648 					       AVIVO_DC_I2C_DATA_COUNT(1) |
649 					       (prescale << 16)));
650 		WREG32(AVIVO_DC_I2C_CONTROL1, reg);
651 		WREG32(AVIVO_DC_I2C_STATUS1, AVIVO_DC_I2C_GO);
652 		for (j = 0; j < 200; j++) {
653 			udelay(50);
654 			tmp = RREG32(AVIVO_DC_I2C_STATUS1);
655 			if (tmp & AVIVO_DC_I2C_GO)
656 				continue;
657 			tmp = RREG32(AVIVO_DC_I2C_STATUS1);
658 			if (tmp & AVIVO_DC_I2C_DONE)
659 				break;
660 			else {
661 				DRM_DEBUG("i2c write error 0x%08x\n", tmp);
662 				WREG32(AVIVO_DC_I2C_RESET, AVIVO_DC_I2C_ABORT);
663 				ret = -EIO;
664 				goto done;
665 			}
666 		}
667 		goto done;
668 	}
669 
670 	for (i = 0; i < num; i++) {
671 		p = &msgs[i];
672 		remaining = p->len;
673 		buffer_offset = 0;
674 		if (p->flags & I2C_M_RD) {
675 			while (remaining) {
676 				if (remaining > 15)
677 					current_count = 15;
678 				else
679 					current_count = remaining;
680 				WREG32(AVIVO_DC_I2C_STATUS1, (AVIVO_DC_I2C_DONE |
681 							      AVIVO_DC_I2C_NACK |
682 							      AVIVO_DC_I2C_HALT));
683 				WREG32(AVIVO_DC_I2C_RESET, AVIVO_DC_I2C_SOFT_RESET);
684 				udelay(1);
685 				WREG32(AVIVO_DC_I2C_RESET, 0);
686 
687 				WREG32(AVIVO_DC_I2C_DATA, ((p->addr << 1) & 0xff) | 0x1);
688 				WREG32(AVIVO_DC_I2C_CONTROL3, AVIVO_DC_I2C_TIME_LIMIT(48));
689 				WREG32(AVIVO_DC_I2C_CONTROL2, (AVIVO_DC_I2C_ADDR_COUNT(1) |
690 							       AVIVO_DC_I2C_DATA_COUNT(current_count) |
691 							       (prescale << 16)));
692 				WREG32(AVIVO_DC_I2C_CONTROL1, reg | AVIVO_DC_I2C_RECEIVE);
693 				WREG32(AVIVO_DC_I2C_STATUS1, AVIVO_DC_I2C_GO);
694 				for (j = 0; j < 200; j++) {
695 					udelay(50);
696 					tmp = RREG32(AVIVO_DC_I2C_STATUS1);
697 					if (tmp & AVIVO_DC_I2C_GO)
698 						continue;
699 					tmp = RREG32(AVIVO_DC_I2C_STATUS1);
700 					if (tmp & AVIVO_DC_I2C_DONE)
701 						break;
702 					else {
703 						DRM_DEBUG("i2c read error 0x%08x\n", tmp);
704 						WREG32(AVIVO_DC_I2C_RESET, AVIVO_DC_I2C_ABORT);
705 						ret = -EIO;
706 						goto done;
707 					}
708 				}
709 				for (j = 0; j < current_count; j++)
710 					p->buf[buffer_offset + j] = RREG32(AVIVO_DC_I2C_DATA) & 0xff;
711 				remaining -= current_count;
712 				buffer_offset += current_count;
713 			}
714 		} else {
715 			while (remaining) {
716 				if (remaining > 15)
717 					current_count = 15;
718 				else
719 					current_count = remaining;
720 				WREG32(AVIVO_DC_I2C_STATUS1, (AVIVO_DC_I2C_DONE |
721 							      AVIVO_DC_I2C_NACK |
722 							      AVIVO_DC_I2C_HALT));
723 				WREG32(AVIVO_DC_I2C_RESET, AVIVO_DC_I2C_SOFT_RESET);
724 				udelay(1);
725 				WREG32(AVIVO_DC_I2C_RESET, 0);
726 
727 				WREG32(AVIVO_DC_I2C_DATA, (p->addr << 1) & 0xff);
728 				for (j = 0; j < current_count; j++)
729 					WREG32(AVIVO_DC_I2C_DATA, p->buf[buffer_offset + j]);
730 
731 				WREG32(AVIVO_DC_I2C_CONTROL3, AVIVO_DC_I2C_TIME_LIMIT(48));
732 				WREG32(AVIVO_DC_I2C_CONTROL2, (AVIVO_DC_I2C_ADDR_COUNT(1) |
733 							       AVIVO_DC_I2C_DATA_COUNT(current_count) |
734 							       (prescale << 16)));
735 				WREG32(AVIVO_DC_I2C_CONTROL1, reg);
736 				WREG32(AVIVO_DC_I2C_STATUS1, AVIVO_DC_I2C_GO);
737 				for (j = 0; j < 200; j++) {
738 					udelay(50);
739 					tmp = RREG32(AVIVO_DC_I2C_STATUS1);
740 					if (tmp & AVIVO_DC_I2C_GO)
741 						continue;
742 					tmp = RREG32(AVIVO_DC_I2C_STATUS1);
743 					if (tmp & AVIVO_DC_I2C_DONE)
744 						break;
745 					else {
746 						DRM_DEBUG("i2c write error 0x%08x\n", tmp);
747 						WREG32(AVIVO_DC_I2C_RESET, AVIVO_DC_I2C_ABORT);
748 						ret = -EIO;
749 						goto done;
750 					}
751 				}
752 				remaining -= current_count;
753 				buffer_offset += current_count;
754 			}
755 		}
756 	}
757 
758 done:
759 	WREG32(AVIVO_DC_I2C_STATUS1, (AVIVO_DC_I2C_DONE |
760 				      AVIVO_DC_I2C_NACK |
761 				      AVIVO_DC_I2C_HALT));
762 	WREG32(AVIVO_DC_I2C_RESET, AVIVO_DC_I2C_SOFT_RESET);
763 	udelay(1);
764 	WREG32(AVIVO_DC_I2C_RESET, 0);
765 
766 	WREG32(AVIVO_DC_I2C_ARBITRATION, AVIVO_DC_I2C_SW_DONE_USING_I2C);
767 	WREG32(AVIVO_DC_I2C_CONTROL1, saved1);
768 	WREG32(0x494, saved2);
769 	tmp = RREG32(RADEON_BIOS_6_SCRATCH);
770 	tmp &= ~ATOM_S6_HW_I2C_BUSY_STATE;
771 	WREG32(RADEON_BIOS_6_SCRATCH, tmp);
772 
773 	mutex_unlock(&rdev->pm.mutex);
774 	mutex_unlock(&rdev->dc_hw_i2c_mutex);
775 
776 	return ret;
777 }
778 
779 static int radeon_hw_i2c_xfer(struct i2c_adapter *i2c_adap,
780 			      struct i2c_msg *msgs, int num)
781 {
782 	struct radeon_i2c_chan *i2c = i2c_get_adapdata(i2c_adap);
783 	struct radeon_device *rdev = i2c->dev->dev_private;
784 	struct radeon_i2c_bus_rec *rec = &i2c->rec;
785 	int ret = 0;
786 
787 	switch (rdev->family) {
788 	case CHIP_R100:
789 	case CHIP_RV100:
790 	case CHIP_RS100:
791 	case CHIP_RV200:
792 	case CHIP_RS200:
793 	case CHIP_R200:
794 	case CHIP_RV250:
795 	case CHIP_RS300:
796 	case CHIP_RV280:
797 	case CHIP_R300:
798 	case CHIP_R350:
799 	case CHIP_RV350:
800 	case CHIP_RV380:
801 	case CHIP_R420:
802 	case CHIP_R423:
803 	case CHIP_RV410:
804 	case CHIP_RS400:
805 	case CHIP_RS480:
806 		ret = r100_hw_i2c_xfer(i2c_adap, msgs, num);
807 		break;
808 	case CHIP_RS600:
809 	case CHIP_RS690:
810 	case CHIP_RS740:
811 		/* XXX fill in hw i2c implementation */
812 		break;
813 	case CHIP_RV515:
814 	case CHIP_R520:
815 	case CHIP_RV530:
816 	case CHIP_RV560:
817 	case CHIP_RV570:
818 	case CHIP_R580:
819 		if (rec->mm_i2c)
820 			ret = r100_hw_i2c_xfer(i2c_adap, msgs, num);
821 		else
822 			ret = r500_hw_i2c_xfer(i2c_adap, msgs, num);
823 		break;
824 	case CHIP_R600:
825 	case CHIP_RV610:
826 	case CHIP_RV630:
827 	case CHIP_RV670:
828 		/* XXX fill in hw i2c implementation */
829 		break;
830 	case CHIP_RV620:
831 	case CHIP_RV635:
832 	case CHIP_RS780:
833 	case CHIP_RS880:
834 	case CHIP_RV770:
835 	case CHIP_RV730:
836 	case CHIP_RV710:
837 	case CHIP_RV740:
838 		/* XXX fill in hw i2c implementation */
839 		break;
840 	case CHIP_CEDAR:
841 	case CHIP_REDWOOD:
842 	case CHIP_JUNIPER:
843 	case CHIP_CYPRESS:
844 	case CHIP_HEMLOCK:
845 		/* XXX fill in hw i2c implementation */
846 		break;
847 	default:
848 		DRM_ERROR("i2c: unhandled radeon chip\n");
849 		ret = -EIO;
850 		break;
851 	}
852 
853 	return ret;
854 }
855 
856 static u32 radeon_hw_i2c_func(struct i2c_adapter *adap)
857 {
858 	return I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL;
859 }
860 
861 static const struct i2c_algorithm radeon_i2c_algo = {
862 	.master_xfer = radeon_hw_i2c_xfer,
863 	.functionality = radeon_hw_i2c_func,
864 };
865 
866 struct radeon_i2c_chan *radeon_i2c_create(struct drm_device *dev,
867 					  struct radeon_i2c_bus_rec *rec,
868 					  const char *name)
869 {
870 	struct radeon_device *rdev = dev->dev_private;
871 	struct radeon_i2c_chan *i2c;
872 	int ret;
873 
874 	i2c = kzalloc(sizeof(struct radeon_i2c_chan), GFP_KERNEL);
875 	if (i2c == NULL)
876 		return NULL;
877 
878 	i2c->rec = *rec;
879 	i2c->adapter.owner = THIS_MODULE;
880 	i2c->dev = dev;
881 	i2c_set_adapdata(&i2c->adapter, i2c);
882 	if (rec->mm_i2c ||
883 	    (rec->hw_capable &&
884 	     radeon_hw_i2c &&
885 	     ((rdev->family <= CHIP_RS480) ||
886 	      ((rdev->family >= CHIP_RV515) && (rdev->family <= CHIP_R580))))) {
887 		/* set the radeon hw i2c adapter */
888 		sprintf(i2c->adapter.name, "Radeon i2c hw bus %s", name);
889 		i2c->adapter.algo = &radeon_i2c_algo;
890 		ret = i2c_add_adapter(&i2c->adapter);
891 		if (ret) {
892 			DRM_ERROR("Failed to register hw i2c %s\n", name);
893 			goto out_free;
894 		}
895 	} else {
896 		/* set the radeon bit adapter */
897 		sprintf(i2c->adapter.name, "Radeon i2c bit bus %s", name);
898 		i2c->adapter.algo_data = &i2c->algo.bit;
899 		i2c->algo.bit.pre_xfer = pre_xfer;
900 		i2c->algo.bit.post_xfer = post_xfer;
901 		i2c->algo.bit.setsda = set_data;
902 		i2c->algo.bit.setscl = set_clock;
903 		i2c->algo.bit.getsda = get_data;
904 		i2c->algo.bit.getscl = get_clock;
905 		i2c->algo.bit.udelay = 20;
906 		/* vesa says 2.2 ms is enough, 1 jiffy doesn't seem to always
907 		 * make this, 2 jiffies is a lot more reliable */
908 		i2c->algo.bit.timeout = 2;
909 		i2c->algo.bit.data = i2c;
910 		ret = i2c_bit_add_bus(&i2c->adapter);
911 		if (ret) {
912 			DRM_ERROR("Failed to register bit i2c %s\n", name);
913 			goto out_free;
914 		}
915 	}
916 
917 	return i2c;
918 out_free:
919 	kfree(i2c);
920 	return NULL;
921 
922 }
923 
924 struct radeon_i2c_chan *radeon_i2c_create_dp(struct drm_device *dev,
925 					     struct radeon_i2c_bus_rec *rec,
926 					     const char *name)
927 {
928 	struct radeon_i2c_chan *i2c;
929 	int ret;
930 
931 	i2c = kzalloc(sizeof(struct radeon_i2c_chan), GFP_KERNEL);
932 	if (i2c == NULL)
933 		return NULL;
934 
935 	i2c->rec = *rec;
936 	i2c->adapter.owner = THIS_MODULE;
937 	i2c->dev = dev;
938 	i2c_set_adapdata(&i2c->adapter, i2c);
939 	i2c->adapter.algo_data = &i2c->algo.dp;
940 	i2c->algo.dp.aux_ch = radeon_dp_i2c_aux_ch;
941 	i2c->algo.dp.address = 0;
942 	ret = i2c_dp_aux_add_bus(&i2c->adapter);
943 	if (ret) {
944 		DRM_INFO("Failed to register i2c %s\n", name);
945 		goto out_free;
946 	}
947 
948 	return i2c;
949 out_free:
950 	kfree(i2c);
951 	return NULL;
952 
953 }
954 
955 void radeon_i2c_destroy(struct radeon_i2c_chan *i2c)
956 {
957 	if (!i2c)
958 		return;
959 	i2c_del_adapter(&i2c->adapter);
960 	kfree(i2c);
961 }
962 
963 struct drm_encoder *radeon_best_encoder(struct drm_connector *connector)
964 {
965 	return NULL;
966 }
967 
968 void radeon_i2c_get_byte(struct radeon_i2c_chan *i2c_bus,
969 			 u8 slave_addr,
970 			 u8 addr,
971 			 u8 *val)
972 {
973 	u8 out_buf[2];
974 	u8 in_buf[2];
975 	struct i2c_msg msgs[] = {
976 		{
977 			.addr = slave_addr,
978 			.flags = 0,
979 			.len = 1,
980 			.buf = out_buf,
981 		},
982 		{
983 			.addr = slave_addr,
984 			.flags = I2C_M_RD,
985 			.len = 1,
986 			.buf = in_buf,
987 		}
988 	};
989 
990 	out_buf[0] = addr;
991 	out_buf[1] = 0;
992 
993 	if (i2c_transfer(&i2c_bus->adapter, msgs, 2) == 2) {
994 		*val = in_buf[0];
995 		DRM_DEBUG("val = 0x%02x\n", *val);
996 	} else {
997 		DRM_ERROR("i2c 0x%02x 0x%02x read failed\n",
998 			  addr, *val);
999 	}
1000 }
1001 
1002 void radeon_i2c_put_byte(struct radeon_i2c_chan *i2c_bus,
1003 			 u8 slave_addr,
1004 			 u8 addr,
1005 			 u8 val)
1006 {
1007 	uint8_t out_buf[2];
1008 	struct i2c_msg msg = {
1009 		.addr = slave_addr,
1010 		.flags = 0,
1011 		.len = 2,
1012 		.buf = out_buf,
1013 	};
1014 
1015 	out_buf[0] = addr;
1016 	out_buf[1] = val;
1017 
1018 	if (i2c_transfer(&i2c_bus->adapter, &msg, 1) != 1)
1019 		DRM_ERROR("i2c 0x%02x 0x%02x write failed\n",
1020 			  addr, val);
1021 }
1022 
1023