Linux Audio

Check our new training course

Loading...
v3.1
   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 */
  35bool radeon_ddc_probe(struct radeon_connector *radeon_connector, bool requires_extended_probe)
  36{
  37	u8 out = 0x0;
  38	u8 buf[8];
  39	int ret;
  40	struct i2c_msg msgs[] = {
  41		{
  42			.addr = 0x50,
  43			.flags = 0,
  44			.len = 1,
  45			.buf = &out,
  46		},
  47		{
  48			.addr = 0x50,
  49			.flags = I2C_M_RD,
  50			.len = 1,
  51			.buf = buf,
  52		}
  53	};
  54
  55	/* Read 8 bytes from i2c for extended probe of EDID header */
  56	if (requires_extended_probe)
  57		msgs[1].len = 8;
  58
  59	/* on hw with routers, select right port */
  60	if (radeon_connector->router.ddc_valid)
  61		radeon_router_select_ddc_port(radeon_connector);
  62
  63	ret = i2c_transfer(&radeon_connector->ddc_bus->adapter, msgs, 2);
 
 
 
 
 
  64	if (ret != 2)
  65		/* Couldn't find an accessible DDC on this connector */
  66		return false;
  67	if (requires_extended_probe) {
  68		/* Probe also for valid EDID header
  69		 * EDID header starts with:
  70		 * 0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00.
  71		 * Only the first 6 bytes must be valid as
  72		 * drm_edid_block_valid() can fix the last 2 bytes */
  73		if (drm_edid_header_is_valid(buf) < 6) {
  74			/* Couldn't find an accessible EDID on this
  75			 * connector */
  76			return false;
  77		}
  78	}
  79	return true;
  80}
  81
  82/* bit banging i2c */
  83
  84static void radeon_i2c_do_lock(struct radeon_i2c_chan *i2c, int lock_state)
  85{
 
  86	struct radeon_device *rdev = i2c->dev->dev_private;
  87	struct radeon_i2c_bus_rec *rec = &i2c->rec;
  88	uint32_t temp;
  89
 
 
  90	/* RV410 appears to have a bug where the hw i2c in reset
  91	 * holds the i2c port in a bad state - switch hw i2c away before
  92	 * doing DDC - do this for all r200s/r300s/r400s for safety sake
  93	 */
  94	if (rec->hw_capable) {
  95		if ((rdev->family >= CHIP_R200) && !ASIC_IS_AVIVO(rdev)) {
  96			u32 reg;
  97
  98			if (rdev->family >= CHIP_RV350)
  99				reg = RADEON_GPIO_MONID;
 100			else if ((rdev->family == CHIP_R300) ||
 101				 (rdev->family == CHIP_R350))
 102				reg = RADEON_GPIO_DVI_DDC;
 103			else
 104				reg = RADEON_GPIO_CRT2_DDC;
 105
 106			mutex_lock(&rdev->dc_hw_i2c_mutex);
 107			if (rec->a_clk_reg == reg) {
 108				WREG32(RADEON_DVI_I2C_CNTL_0, (RADEON_I2C_SOFT_RST |
 109							       R200_DVI_I2C_PIN_SEL(R200_SEL_DDC1)));
 110			} else {
 111				WREG32(RADEON_DVI_I2C_CNTL_0, (RADEON_I2C_SOFT_RST |
 112							       R200_DVI_I2C_PIN_SEL(R200_SEL_DDC3)));
 113			}
 114			mutex_unlock(&rdev->dc_hw_i2c_mutex);
 115		}
 116	}
 117
 118	/* switch the pads to ddc mode */
 119	if (ASIC_IS_DCE3(rdev) && rec->hw_capable) {
 120		temp = RREG32(rec->mask_clk_reg);
 121		temp &= ~(1 << 16);
 122		WREG32(rec->mask_clk_reg, temp);
 123	}
 124
 125	/* clear the output pin values */
 126	temp = RREG32(rec->a_clk_reg) & ~rec->a_clk_mask;
 127	WREG32(rec->a_clk_reg, temp);
 128
 129	temp = RREG32(rec->a_data_reg) & ~rec->a_data_mask;
 130	WREG32(rec->a_data_reg, temp);
 131
 132	/* set the pins to input */
 133	temp = RREG32(rec->en_clk_reg) & ~rec->en_clk_mask;
 134	WREG32(rec->en_clk_reg, temp);
 135
 136	temp = RREG32(rec->en_data_reg) & ~rec->en_data_mask;
 137	WREG32(rec->en_data_reg, temp);
 138
 139	/* mask the gpio pins for software use */
 140	temp = RREG32(rec->mask_clk_reg);
 141	if (lock_state)
 142		temp |= rec->mask_clk_mask;
 143	else
 144		temp &= ~rec->mask_clk_mask;
 145	WREG32(rec->mask_clk_reg, temp);
 146	temp = RREG32(rec->mask_clk_reg);
 147
 
 
 148	temp = RREG32(rec->mask_data_reg);
 149	if (lock_state)
 150		temp |= rec->mask_data_mask;
 151	else
 152		temp &= ~rec->mask_data_mask;
 
 
 
 
 
 
 
 
 
 
 
 
 
 153	WREG32(rec->mask_data_reg, temp);
 154	temp = RREG32(rec->mask_data_reg);
 
 
 155}
 156
 157static int get_clock(void *i2c_priv)
 158{
 159	struct radeon_i2c_chan *i2c = i2c_priv;
 160	struct radeon_device *rdev = i2c->dev->dev_private;
 161	struct radeon_i2c_bus_rec *rec = &i2c->rec;
 162	uint32_t val;
 163
 164	/* read the value off the pin */
 165	val = RREG32(rec->y_clk_reg);
 166	val &= rec->y_clk_mask;
 167
 168	return (val != 0);
 169}
 170
 171
 172static int get_data(void *i2c_priv)
 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	/* read the value off the pin */
 180	val = RREG32(rec->y_data_reg);
 181	val &= rec->y_data_mask;
 182
 183	return (val != 0);
 184}
 185
 186static void set_clock(void *i2c_priv, int clock)
 187{
 188	struct radeon_i2c_chan *i2c = i2c_priv;
 189	struct radeon_device *rdev = i2c->dev->dev_private;
 190	struct radeon_i2c_bus_rec *rec = &i2c->rec;
 191	uint32_t val;
 192
 193	/* set pin direction */
 194	val = RREG32(rec->en_clk_reg) & ~rec->en_clk_mask;
 195	val |= clock ? 0 : rec->en_clk_mask;
 196	WREG32(rec->en_clk_reg, val);
 197}
 198
 199static void set_data(void *i2c_priv, int data)
 200{
 201	struct radeon_i2c_chan *i2c = i2c_priv;
 202	struct radeon_device *rdev = i2c->dev->dev_private;
 203	struct radeon_i2c_bus_rec *rec = &i2c->rec;
 204	uint32_t val;
 205
 206	/* set pin direction */
 207	val = RREG32(rec->en_data_reg) & ~rec->en_data_mask;
 208	val |= data ? 0 : rec->en_data_mask;
 209	WREG32(rec->en_data_reg, val);
 210}
 211
 212static int pre_xfer(struct i2c_adapter *i2c_adap)
 213{
 214	struct radeon_i2c_chan *i2c = i2c_get_adapdata(i2c_adap);
 215
 216	radeon_i2c_do_lock(i2c, 1);
 217
 218	return 0;
 219}
 220
 221static void post_xfer(struct i2c_adapter *i2c_adap)
 222{
 223	struct radeon_i2c_chan *i2c = i2c_get_adapdata(i2c_adap);
 224
 225	radeon_i2c_do_lock(i2c, 0);
 226}
 227
 228/* hw i2c */
 229
 230static u32 radeon_get_i2c_prescale(struct radeon_device *rdev)
 231{
 232	u32 sclk = rdev->pm.current_sclk;
 233	u32 prescale = 0;
 234	u32 nm;
 235	u8 n, m, loop;
 236	int i2c_clock;
 237
 238	switch (rdev->family) {
 239	case CHIP_R100:
 240	case CHIP_RV100:
 241	case CHIP_RS100:
 242	case CHIP_RV200:
 243	case CHIP_RS200:
 244	case CHIP_R200:
 245	case CHIP_RV250:
 246	case CHIP_RS300:
 247	case CHIP_RV280:
 248	case CHIP_R300:
 249	case CHIP_R350:
 250	case CHIP_RV350:
 251		i2c_clock = 60;
 252		nm = (sclk * 10) / (i2c_clock * 4);
 253		for (loop = 1; loop < 255; loop++) {
 254			if ((nm / loop) < loop)
 255				break;
 256		}
 257		n = loop - 1;
 258		m = loop - 2;
 259		prescale = m | (n << 8);
 260		break;
 261	case CHIP_RV380:
 262	case CHIP_RS400:
 263	case CHIP_RS480:
 264	case CHIP_R420:
 265	case CHIP_R423:
 266	case CHIP_RV410:
 267		prescale = (((sclk * 10)/(4 * 128 * 100) + 1) << 8) + 128;
 268		break;
 269	case CHIP_RS600:
 270	case CHIP_RS690:
 271	case CHIP_RS740:
 272		/* todo */
 273		break;
 274	case CHIP_RV515:
 275	case CHIP_R520:
 276	case CHIP_RV530:
 277	case CHIP_RV560:
 278	case CHIP_RV570:
 279	case CHIP_R580:
 280		i2c_clock = 50;
 281		if (rdev->family == CHIP_R520)
 282			prescale = (127 << 8) + ((sclk * 10) / (4 * 127 * i2c_clock));
 283		else
 284			prescale = (((sclk * 10)/(4 * 128 * 100) + 1) << 8) + 128;
 285		break;
 286	case CHIP_R600:
 287	case CHIP_RV610:
 288	case CHIP_RV630:
 289	case CHIP_RV670:
 290		/* todo */
 291		break;
 292	case CHIP_RV620:
 293	case CHIP_RV635:
 294	case CHIP_RS780:
 295	case CHIP_RS880:
 296	case CHIP_RV770:
 297	case CHIP_RV730:
 298	case CHIP_RV710:
 299	case CHIP_RV740:
 300		/* todo */
 301		break;
 302	case CHIP_CEDAR:
 303	case CHIP_REDWOOD:
 304	case CHIP_JUNIPER:
 305	case CHIP_CYPRESS:
 306	case CHIP_HEMLOCK:
 307		/* todo */
 308		break;
 309	default:
 310		DRM_ERROR("i2c: unhandled radeon chip\n");
 311		break;
 312	}
 313	return prescale;
 314}
 315
 316
 317/* hw i2c engine for r1xx-4xx hardware
 318 * hw can buffer up to 15 bytes
 319 */
 320static int r100_hw_i2c_xfer(struct i2c_adapter *i2c_adap,
 321			    struct i2c_msg *msgs, int num)
 322{
 323	struct radeon_i2c_chan *i2c = i2c_get_adapdata(i2c_adap);
 324	struct radeon_device *rdev = i2c->dev->dev_private;
 325	struct radeon_i2c_bus_rec *rec = &i2c->rec;
 326	struct i2c_msg *p;
 327	int i, j, k, ret = num;
 328	u32 prescale;
 329	u32 i2c_cntl_0, i2c_cntl_1, i2c_data;
 330	u32 tmp, reg;
 331
 332	mutex_lock(&rdev->dc_hw_i2c_mutex);
 333	/* take the pm lock since we need a constant sclk */
 334	mutex_lock(&rdev->pm.mutex);
 335
 336	prescale = radeon_get_i2c_prescale(rdev);
 337
 338	reg = ((prescale << RADEON_I2C_PRESCALE_SHIFT) |
 339	       RADEON_I2C_DRIVE_EN |
 340	       RADEON_I2C_START |
 341	       RADEON_I2C_STOP |
 342	       RADEON_I2C_GO);
 343
 344	if (rdev->is_atom_bios) {
 345		tmp = RREG32(RADEON_BIOS_6_SCRATCH);
 346		WREG32(RADEON_BIOS_6_SCRATCH, tmp | ATOM_S6_HW_I2C_BUSY_STATE);
 347	}
 348
 349	if (rec->mm_i2c) {
 350		i2c_cntl_0 = RADEON_I2C_CNTL_0;
 351		i2c_cntl_1 = RADEON_I2C_CNTL_1;
 352		i2c_data = RADEON_I2C_DATA;
 353	} else {
 354		i2c_cntl_0 = RADEON_DVI_I2C_CNTL_0;
 355		i2c_cntl_1 = RADEON_DVI_I2C_CNTL_1;
 356		i2c_data = RADEON_DVI_I2C_DATA;
 357
 358		switch (rdev->family) {
 359		case CHIP_R100:
 360		case CHIP_RV100:
 361		case CHIP_RS100:
 362		case CHIP_RV200:
 363		case CHIP_RS200:
 364		case CHIP_RS300:
 365			switch (rec->mask_clk_reg) {
 366			case RADEON_GPIO_DVI_DDC:
 367				/* no gpio select bit */
 368				break;
 369			default:
 370				DRM_ERROR("gpio not supported with hw i2c\n");
 371				ret = -EINVAL;
 372				goto done;
 373			}
 374			break;
 375		case CHIP_R200:
 376			/* only bit 4 on r200 */
 377			switch (rec->mask_clk_reg) {
 378			case RADEON_GPIO_DVI_DDC:
 379				reg |= R200_DVI_I2C_PIN_SEL(R200_SEL_DDC1);
 380				break;
 381			case RADEON_GPIO_MONID:
 382				reg |= R200_DVI_I2C_PIN_SEL(R200_SEL_DDC3);
 383				break;
 384			default:
 385				DRM_ERROR("gpio not supported with hw i2c\n");
 386				ret = -EINVAL;
 387				goto done;
 388			}
 389			break;
 390		case CHIP_RV250:
 391		case CHIP_RV280:
 392			/* bits 3 and 4 */
 393			switch (rec->mask_clk_reg) {
 394			case RADEON_GPIO_DVI_DDC:
 395				reg |= R200_DVI_I2C_PIN_SEL(R200_SEL_DDC1);
 396				break;
 397			case RADEON_GPIO_VGA_DDC:
 398				reg |= R200_DVI_I2C_PIN_SEL(R200_SEL_DDC2);
 399				break;
 400			case RADEON_GPIO_CRT2_DDC:
 401				reg |= R200_DVI_I2C_PIN_SEL(R200_SEL_DDC3);
 402				break;
 403			default:
 404				DRM_ERROR("gpio not supported with hw i2c\n");
 405				ret = -EINVAL;
 406				goto done;
 407			}
 408			break;
 409		case CHIP_R300:
 410		case CHIP_R350:
 411			/* only bit 4 on r300/r350 */
 412			switch (rec->mask_clk_reg) {
 413			case RADEON_GPIO_VGA_DDC:
 414				reg |= R200_DVI_I2C_PIN_SEL(R200_SEL_DDC1);
 415				break;
 416			case RADEON_GPIO_DVI_DDC:
 417				reg |= R200_DVI_I2C_PIN_SEL(R200_SEL_DDC3);
 418				break;
 419			default:
 420				DRM_ERROR("gpio not supported with hw i2c\n");
 421				ret = -EINVAL;
 422				goto done;
 423			}
 424			break;
 425		case CHIP_RV350:
 426		case CHIP_RV380:
 427		case CHIP_R420:
 428		case CHIP_R423:
 429		case CHIP_RV410:
 430		case CHIP_RS400:
 431		case CHIP_RS480:
 432			/* bits 3 and 4 */
 433			switch (rec->mask_clk_reg) {
 434			case RADEON_GPIO_VGA_DDC:
 435				reg |= R200_DVI_I2C_PIN_SEL(R200_SEL_DDC1);
 436				break;
 437			case RADEON_GPIO_DVI_DDC:
 438				reg |= R200_DVI_I2C_PIN_SEL(R200_SEL_DDC2);
 439				break;
 440			case RADEON_GPIO_MONID:
 441				reg |= R200_DVI_I2C_PIN_SEL(R200_SEL_DDC3);
 442				break;
 443			default:
 444				DRM_ERROR("gpio not supported with hw i2c\n");
 445				ret = -EINVAL;
 446				goto done;
 447			}
 448			break;
 449		default:
 450			DRM_ERROR("unsupported asic\n");
 451			ret = -EINVAL;
 452			goto done;
 453			break;
 454		}
 455	}
 456
 457	/* check for bus probe */
 458	p = &msgs[0];
 459	if ((num == 1) && (p->len == 0)) {
 460		WREG32(i2c_cntl_0, (RADEON_I2C_DONE |
 461				    RADEON_I2C_NACK |
 462				    RADEON_I2C_HALT |
 463				    RADEON_I2C_SOFT_RST));
 464		WREG32(i2c_data, (p->addr << 1) & 0xff);
 465		WREG32(i2c_data, 0);
 466		WREG32(i2c_cntl_1, ((1 << RADEON_I2C_DATA_COUNT_SHIFT) |
 467				    (1 << RADEON_I2C_ADDR_COUNT_SHIFT) |
 468				    RADEON_I2C_EN |
 469				    (48 << RADEON_I2C_TIME_LIMIT_SHIFT)));
 470		WREG32(i2c_cntl_0, reg);
 471		for (k = 0; k < 32; k++) {
 472			udelay(10);
 473			tmp = RREG32(i2c_cntl_0);
 474			if (tmp & RADEON_I2C_GO)
 475				continue;
 476			tmp = RREG32(i2c_cntl_0);
 477			if (tmp & RADEON_I2C_DONE)
 478				break;
 479			else {
 480				DRM_DEBUG("i2c write error 0x%08x\n", tmp);
 481				WREG32(i2c_cntl_0, tmp | RADEON_I2C_ABORT);
 482				ret = -EIO;
 483				goto done;
 484			}
 485		}
 486		goto done;
 487	}
 488
 489	for (i = 0; i < num; i++) {
 490		p = &msgs[i];
 491		for (j = 0; j < p->len; j++) {
 492			if (p->flags & I2C_M_RD) {
 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) | 0x1);
 498				WREG32(i2c_cntl_1, ((1 << RADEON_I2C_DATA_COUNT_SHIFT) |
 499						    (1 << RADEON_I2C_ADDR_COUNT_SHIFT) |
 500						    RADEON_I2C_EN |
 501						    (48 << RADEON_I2C_TIME_LIMIT_SHIFT)));
 502				WREG32(i2c_cntl_0, reg | RADEON_I2C_RECEIVE);
 503				for (k = 0; k < 32; k++) {
 504					udelay(10);
 505					tmp = RREG32(i2c_cntl_0);
 506					if (tmp & RADEON_I2C_GO)
 507						continue;
 508					tmp = RREG32(i2c_cntl_0);
 509					if (tmp & RADEON_I2C_DONE)
 510						break;
 511					else {
 512						DRM_DEBUG("i2c read error 0x%08x\n", tmp);
 513						WREG32(i2c_cntl_0, tmp | RADEON_I2C_ABORT);
 514						ret = -EIO;
 515						goto done;
 516					}
 517				}
 518				p->buf[j] = RREG32(i2c_data) & 0xff;
 519			} else {
 520				WREG32(i2c_cntl_0, (RADEON_I2C_DONE |
 521						    RADEON_I2C_NACK |
 522						    RADEON_I2C_HALT |
 523						    RADEON_I2C_SOFT_RST));
 524				WREG32(i2c_data, (p->addr << 1) & 0xff);
 525				WREG32(i2c_data, p->buf[j]);
 526				WREG32(i2c_cntl_1, ((1 << RADEON_I2C_DATA_COUNT_SHIFT) |
 527						    (1 << RADEON_I2C_ADDR_COUNT_SHIFT) |
 528						    RADEON_I2C_EN |
 529						    (48 << RADEON_I2C_TIME_LIMIT_SHIFT)));
 530				WREG32(i2c_cntl_0, reg);
 531				for (k = 0; k < 32; k++) {
 532					udelay(10);
 533					tmp = RREG32(i2c_cntl_0);
 534					if (tmp & RADEON_I2C_GO)
 535						continue;
 536					tmp = RREG32(i2c_cntl_0);
 537					if (tmp & RADEON_I2C_DONE)
 538						break;
 539					else {
 540						DRM_DEBUG("i2c write error 0x%08x\n", tmp);
 541						WREG32(i2c_cntl_0, tmp | RADEON_I2C_ABORT);
 542						ret = -EIO;
 543						goto done;
 544					}
 545				}
 546			}
 547		}
 548	}
 549
 550done:
 551	WREG32(i2c_cntl_0, 0);
 552	WREG32(i2c_cntl_1, 0);
 553	WREG32(i2c_cntl_0, (RADEON_I2C_DONE |
 554			    RADEON_I2C_NACK |
 555			    RADEON_I2C_HALT |
 556			    RADEON_I2C_SOFT_RST));
 557
 558	if (rdev->is_atom_bios) {
 559		tmp = RREG32(RADEON_BIOS_6_SCRATCH);
 560		tmp &= ~ATOM_S6_HW_I2C_BUSY_STATE;
 561		WREG32(RADEON_BIOS_6_SCRATCH, tmp);
 562	}
 563
 564	mutex_unlock(&rdev->pm.mutex);
 565	mutex_unlock(&rdev->dc_hw_i2c_mutex);
 566
 567	return ret;
 568}
 569
 570/* hw i2c engine for r5xx hardware
 571 * hw can buffer up to 15 bytes
 572 */
 573static int r500_hw_i2c_xfer(struct i2c_adapter *i2c_adap,
 574			    struct i2c_msg *msgs, int num)
 575{
 576	struct radeon_i2c_chan *i2c = i2c_get_adapdata(i2c_adap);
 577	struct radeon_device *rdev = i2c->dev->dev_private;
 578	struct radeon_i2c_bus_rec *rec = &i2c->rec;
 579	struct i2c_msg *p;
 580	int i, j, remaining, current_count, buffer_offset, ret = num;
 581	u32 prescale;
 582	u32 tmp, reg;
 583	u32 saved1, saved2;
 584
 585	mutex_lock(&rdev->dc_hw_i2c_mutex);
 586	/* take the pm lock since we need a constant sclk */
 587	mutex_lock(&rdev->pm.mutex);
 588
 589	prescale = radeon_get_i2c_prescale(rdev);
 590
 591	/* clear gpio mask bits */
 592	tmp = RREG32(rec->mask_clk_reg);
 593	tmp &= ~rec->mask_clk_mask;
 594	WREG32(rec->mask_clk_reg, tmp);
 595	tmp = RREG32(rec->mask_clk_reg);
 596
 597	tmp = RREG32(rec->mask_data_reg);
 598	tmp &= ~rec->mask_data_mask;
 599	WREG32(rec->mask_data_reg, tmp);
 600	tmp = RREG32(rec->mask_data_reg);
 601
 602	/* clear pin values */
 603	tmp = RREG32(rec->a_clk_reg);
 604	tmp &= ~rec->a_clk_mask;
 605	WREG32(rec->a_clk_reg, tmp);
 606	tmp = RREG32(rec->a_clk_reg);
 607
 608	tmp = RREG32(rec->a_data_reg);
 609	tmp &= ~rec->a_data_mask;
 610	WREG32(rec->a_data_reg, tmp);
 611	tmp = RREG32(rec->a_data_reg);
 612
 613	/* set the pins to input */
 614	tmp = RREG32(rec->en_clk_reg);
 615	tmp &= ~rec->en_clk_mask;
 616	WREG32(rec->en_clk_reg, tmp);
 617	tmp = RREG32(rec->en_clk_reg);
 618
 619	tmp = RREG32(rec->en_data_reg);
 620	tmp &= ~rec->en_data_mask;
 621	WREG32(rec->en_data_reg, tmp);
 622	tmp = RREG32(rec->en_data_reg);
 623
 624	/* */
 625	tmp = RREG32(RADEON_BIOS_6_SCRATCH);
 626	WREG32(RADEON_BIOS_6_SCRATCH, tmp | ATOM_S6_HW_I2C_BUSY_STATE);
 627	saved1 = RREG32(AVIVO_DC_I2C_CONTROL1);
 628	saved2 = RREG32(0x494);
 629	WREG32(0x494, saved2 | 0x1);
 630
 631	WREG32(AVIVO_DC_I2C_ARBITRATION, AVIVO_DC_I2C_SW_WANTS_TO_USE_I2C);
 632	for (i = 0; i < 50; i++) {
 633		udelay(1);
 634		if (RREG32(AVIVO_DC_I2C_ARBITRATION) & AVIVO_DC_I2C_SW_CAN_USE_I2C)
 635			break;
 636	}
 637	if (i == 50) {
 638		DRM_ERROR("failed to get i2c bus\n");
 639		ret = -EBUSY;
 640		goto done;
 641	}
 642
 643	reg = AVIVO_DC_I2C_START | AVIVO_DC_I2C_STOP | AVIVO_DC_I2C_EN;
 644	switch (rec->mask_clk_reg) {
 645	case AVIVO_DC_GPIO_DDC1_MASK:
 646		reg |= AVIVO_DC_I2C_PIN_SELECT(AVIVO_SEL_DDC1);
 647		break;
 648	case AVIVO_DC_GPIO_DDC2_MASK:
 649		reg |= AVIVO_DC_I2C_PIN_SELECT(AVIVO_SEL_DDC2);
 650		break;
 651	case AVIVO_DC_GPIO_DDC3_MASK:
 652		reg |= AVIVO_DC_I2C_PIN_SELECT(AVIVO_SEL_DDC3);
 653		break;
 654	default:
 655		DRM_ERROR("gpio not supported with hw i2c\n");
 656		ret = -EINVAL;
 657		goto done;
 658	}
 659
 660	/* check for bus probe */
 661	p = &msgs[0];
 662	if ((num == 1) && (p->len == 0)) {
 663		WREG32(AVIVO_DC_I2C_STATUS1, (AVIVO_DC_I2C_DONE |
 664					      AVIVO_DC_I2C_NACK |
 665					      AVIVO_DC_I2C_HALT));
 666		WREG32(AVIVO_DC_I2C_RESET, AVIVO_DC_I2C_SOFT_RESET);
 667		udelay(1);
 668		WREG32(AVIVO_DC_I2C_RESET, 0);
 669
 670		WREG32(AVIVO_DC_I2C_DATA, (p->addr << 1) & 0xff);
 671		WREG32(AVIVO_DC_I2C_DATA, 0);
 672
 673		WREG32(AVIVO_DC_I2C_CONTROL3, AVIVO_DC_I2C_TIME_LIMIT(48));
 674		WREG32(AVIVO_DC_I2C_CONTROL2, (AVIVO_DC_I2C_ADDR_COUNT(1) |
 675					       AVIVO_DC_I2C_DATA_COUNT(1) |
 676					       (prescale << 16)));
 677		WREG32(AVIVO_DC_I2C_CONTROL1, reg);
 678		WREG32(AVIVO_DC_I2C_STATUS1, AVIVO_DC_I2C_GO);
 679		for (j = 0; j < 200; j++) {
 680			udelay(50);
 681			tmp = RREG32(AVIVO_DC_I2C_STATUS1);
 682			if (tmp & AVIVO_DC_I2C_GO)
 683				continue;
 684			tmp = RREG32(AVIVO_DC_I2C_STATUS1);
 685			if (tmp & AVIVO_DC_I2C_DONE)
 686				break;
 687			else {
 688				DRM_DEBUG("i2c write error 0x%08x\n", tmp);
 689				WREG32(AVIVO_DC_I2C_RESET, AVIVO_DC_I2C_ABORT);
 690				ret = -EIO;
 691				goto done;
 692			}
 693		}
 694		goto done;
 695	}
 696
 697	for (i = 0; i < num; i++) {
 698		p = &msgs[i];
 699		remaining = p->len;
 700		buffer_offset = 0;
 701		if (p->flags & I2C_M_RD) {
 702			while (remaining) {
 703				if (remaining > 15)
 704					current_count = 15;
 705				else
 706					current_count = remaining;
 707				WREG32(AVIVO_DC_I2C_STATUS1, (AVIVO_DC_I2C_DONE |
 708							      AVIVO_DC_I2C_NACK |
 709							      AVIVO_DC_I2C_HALT));
 710				WREG32(AVIVO_DC_I2C_RESET, AVIVO_DC_I2C_SOFT_RESET);
 711				udelay(1);
 712				WREG32(AVIVO_DC_I2C_RESET, 0);
 713
 714				WREG32(AVIVO_DC_I2C_DATA, ((p->addr << 1) & 0xff) | 0x1);
 715				WREG32(AVIVO_DC_I2C_CONTROL3, AVIVO_DC_I2C_TIME_LIMIT(48));
 716				WREG32(AVIVO_DC_I2C_CONTROL2, (AVIVO_DC_I2C_ADDR_COUNT(1) |
 717							       AVIVO_DC_I2C_DATA_COUNT(current_count) |
 718							       (prescale << 16)));
 719				WREG32(AVIVO_DC_I2C_CONTROL1, reg | AVIVO_DC_I2C_RECEIVE);
 720				WREG32(AVIVO_DC_I2C_STATUS1, AVIVO_DC_I2C_GO);
 721				for (j = 0; j < 200; j++) {
 722					udelay(50);
 723					tmp = RREG32(AVIVO_DC_I2C_STATUS1);
 724					if (tmp & AVIVO_DC_I2C_GO)
 725						continue;
 726					tmp = RREG32(AVIVO_DC_I2C_STATUS1);
 727					if (tmp & AVIVO_DC_I2C_DONE)
 728						break;
 729					else {
 730						DRM_DEBUG("i2c read error 0x%08x\n", tmp);
 731						WREG32(AVIVO_DC_I2C_RESET, AVIVO_DC_I2C_ABORT);
 732						ret = -EIO;
 733						goto done;
 734					}
 735				}
 736				for (j = 0; j < current_count; j++)
 737					p->buf[buffer_offset + j] = RREG32(AVIVO_DC_I2C_DATA) & 0xff;
 738				remaining -= current_count;
 739				buffer_offset += current_count;
 740			}
 741		} else {
 742			while (remaining) {
 743				if (remaining > 15)
 744					current_count = 15;
 745				else
 746					current_count = remaining;
 747				WREG32(AVIVO_DC_I2C_STATUS1, (AVIVO_DC_I2C_DONE |
 748							      AVIVO_DC_I2C_NACK |
 749							      AVIVO_DC_I2C_HALT));
 750				WREG32(AVIVO_DC_I2C_RESET, AVIVO_DC_I2C_SOFT_RESET);
 751				udelay(1);
 752				WREG32(AVIVO_DC_I2C_RESET, 0);
 753
 754				WREG32(AVIVO_DC_I2C_DATA, (p->addr << 1) & 0xff);
 755				for (j = 0; j < current_count; j++)
 756					WREG32(AVIVO_DC_I2C_DATA, p->buf[buffer_offset + j]);
 757
 758				WREG32(AVIVO_DC_I2C_CONTROL3, AVIVO_DC_I2C_TIME_LIMIT(48));
 759				WREG32(AVIVO_DC_I2C_CONTROL2, (AVIVO_DC_I2C_ADDR_COUNT(1) |
 760							       AVIVO_DC_I2C_DATA_COUNT(current_count) |
 761							       (prescale << 16)));
 762				WREG32(AVIVO_DC_I2C_CONTROL1, reg);
 763				WREG32(AVIVO_DC_I2C_STATUS1, AVIVO_DC_I2C_GO);
 764				for (j = 0; j < 200; j++) {
 765					udelay(50);
 766					tmp = RREG32(AVIVO_DC_I2C_STATUS1);
 767					if (tmp & AVIVO_DC_I2C_GO)
 768						continue;
 769					tmp = RREG32(AVIVO_DC_I2C_STATUS1);
 770					if (tmp & AVIVO_DC_I2C_DONE)
 771						break;
 772					else {
 773						DRM_DEBUG("i2c write error 0x%08x\n", tmp);
 774						WREG32(AVIVO_DC_I2C_RESET, AVIVO_DC_I2C_ABORT);
 775						ret = -EIO;
 776						goto done;
 777					}
 778				}
 779				remaining -= current_count;
 780				buffer_offset += current_count;
 781			}
 782		}
 783	}
 784
 785done:
 786	WREG32(AVIVO_DC_I2C_STATUS1, (AVIVO_DC_I2C_DONE |
 787				      AVIVO_DC_I2C_NACK |
 788				      AVIVO_DC_I2C_HALT));
 789	WREG32(AVIVO_DC_I2C_RESET, AVIVO_DC_I2C_SOFT_RESET);
 790	udelay(1);
 791	WREG32(AVIVO_DC_I2C_RESET, 0);
 792
 793	WREG32(AVIVO_DC_I2C_ARBITRATION, AVIVO_DC_I2C_SW_DONE_USING_I2C);
 794	WREG32(AVIVO_DC_I2C_CONTROL1, saved1);
 795	WREG32(0x494, saved2);
 796	tmp = RREG32(RADEON_BIOS_6_SCRATCH);
 797	tmp &= ~ATOM_S6_HW_I2C_BUSY_STATE;
 798	WREG32(RADEON_BIOS_6_SCRATCH, tmp);
 799
 800	mutex_unlock(&rdev->pm.mutex);
 801	mutex_unlock(&rdev->dc_hw_i2c_mutex);
 802
 803	return ret;
 804}
 805
 806static int radeon_hw_i2c_xfer(struct i2c_adapter *i2c_adap,
 807			      struct i2c_msg *msgs, int num)
 808{
 809	struct radeon_i2c_chan *i2c = i2c_get_adapdata(i2c_adap);
 810	struct radeon_device *rdev = i2c->dev->dev_private;
 811	struct radeon_i2c_bus_rec *rec = &i2c->rec;
 812	int ret = 0;
 813
 
 
 814	switch (rdev->family) {
 815	case CHIP_R100:
 816	case CHIP_RV100:
 817	case CHIP_RS100:
 818	case CHIP_RV200:
 819	case CHIP_RS200:
 820	case CHIP_R200:
 821	case CHIP_RV250:
 822	case CHIP_RS300:
 823	case CHIP_RV280:
 824	case CHIP_R300:
 825	case CHIP_R350:
 826	case CHIP_RV350:
 827	case CHIP_RV380:
 828	case CHIP_R420:
 829	case CHIP_R423:
 830	case CHIP_RV410:
 831	case CHIP_RS400:
 832	case CHIP_RS480:
 833		ret = r100_hw_i2c_xfer(i2c_adap, msgs, num);
 834		break;
 835	case CHIP_RS600:
 836	case CHIP_RS690:
 837	case CHIP_RS740:
 838		/* XXX fill in hw i2c implementation */
 839		break;
 840	case CHIP_RV515:
 841	case CHIP_R520:
 842	case CHIP_RV530:
 843	case CHIP_RV560:
 844	case CHIP_RV570:
 845	case CHIP_R580:
 846		if (rec->mm_i2c)
 847			ret = r100_hw_i2c_xfer(i2c_adap, msgs, num);
 848		else
 849			ret = r500_hw_i2c_xfer(i2c_adap, msgs, num);
 850		break;
 851	case CHIP_R600:
 852	case CHIP_RV610:
 853	case CHIP_RV630:
 854	case CHIP_RV670:
 855		/* XXX fill in hw i2c implementation */
 856		break;
 857	case CHIP_RV620:
 858	case CHIP_RV635:
 859	case CHIP_RS780:
 860	case CHIP_RS880:
 861	case CHIP_RV770:
 862	case CHIP_RV730:
 863	case CHIP_RV710:
 864	case CHIP_RV740:
 865		/* XXX fill in hw i2c implementation */
 866		break;
 867	case CHIP_CEDAR:
 868	case CHIP_REDWOOD:
 869	case CHIP_JUNIPER:
 870	case CHIP_CYPRESS:
 871	case CHIP_HEMLOCK:
 872		/* XXX fill in hw i2c implementation */
 873		break;
 874	default:
 875		DRM_ERROR("i2c: unhandled radeon chip\n");
 876		ret = -EIO;
 877		break;
 878	}
 879
 
 
 880	return ret;
 881}
 882
 883static u32 radeon_hw_i2c_func(struct i2c_adapter *adap)
 884{
 885	return I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL;
 886}
 887
 888static const struct i2c_algorithm radeon_i2c_algo = {
 889	.master_xfer = radeon_hw_i2c_xfer,
 890	.functionality = radeon_hw_i2c_func,
 891};
 892
 
 
 
 
 
 893struct radeon_i2c_chan *radeon_i2c_create(struct drm_device *dev,
 894					  struct radeon_i2c_bus_rec *rec,
 895					  const char *name)
 896{
 897	struct radeon_device *rdev = dev->dev_private;
 898	struct radeon_i2c_chan *i2c;
 899	int ret;
 900
 
 
 
 
 901	i2c = kzalloc(sizeof(struct radeon_i2c_chan), GFP_KERNEL);
 902	if (i2c == NULL)
 903		return NULL;
 904
 905	i2c->rec = *rec;
 906	i2c->adapter.owner = THIS_MODULE;
 907	i2c->adapter.class = I2C_CLASS_DDC;
 
 908	i2c->dev = dev;
 909	i2c_set_adapdata(&i2c->adapter, i2c);
 
 910	if (rec->mm_i2c ||
 911	    (rec->hw_capable &&
 912	     radeon_hw_i2c &&
 913	     ((rdev->family <= CHIP_RS480) ||
 914	      ((rdev->family >= CHIP_RV515) && (rdev->family <= CHIP_R580))))) {
 915		/* set the radeon hw i2c adapter */
 916		snprintf(i2c->adapter.name, sizeof(i2c->adapter.name),
 917			 "Radeon i2c hw bus %s", name);
 918		i2c->adapter.algo = &radeon_i2c_algo;
 919		ret = i2c_add_adapter(&i2c->adapter);
 920		if (ret) {
 921			DRM_ERROR("Failed to register hw i2c %s\n", name);
 922			goto out_free;
 923		}
 
 
 
 
 
 
 
 
 
 
 
 
 924	} else {
 925		/* set the radeon bit adapter */
 926		snprintf(i2c->adapter.name, sizeof(i2c->adapter.name),
 927			 "Radeon i2c bit bus %s", name);
 928		i2c->adapter.algo_data = &i2c->algo.bit;
 929		i2c->algo.bit.pre_xfer = pre_xfer;
 930		i2c->algo.bit.post_xfer = post_xfer;
 931		i2c->algo.bit.setsda = set_data;
 932		i2c->algo.bit.setscl = set_clock;
 933		i2c->algo.bit.getsda = get_data;
 934		i2c->algo.bit.getscl = get_clock;
 935		i2c->algo.bit.udelay = 20;
 936		/* vesa says 2.2 ms is enough, 1 jiffy doesn't seem to always
 937		 * make this, 2 jiffies is a lot more reliable */
 938		i2c->algo.bit.timeout = 2;
 939		i2c->algo.bit.data = i2c;
 940		ret = i2c_bit_add_bus(&i2c->adapter);
 941		if (ret) {
 942			DRM_ERROR("Failed to register bit i2c %s\n", name);
 943			goto out_free;
 944		}
 945	}
 946
 947	return i2c;
 948out_free:
 949	kfree(i2c);
 950	return NULL;
 951
 952}
 953
 954struct radeon_i2c_chan *radeon_i2c_create_dp(struct drm_device *dev,
 955					     struct radeon_i2c_bus_rec *rec,
 956					     const char *name)
 957{
 958	struct radeon_i2c_chan *i2c;
 959	int ret;
 960
 961	i2c = kzalloc(sizeof(struct radeon_i2c_chan), GFP_KERNEL);
 962	if (i2c == NULL)
 963		return NULL;
 964
 965	i2c->rec = *rec;
 966	i2c->adapter.owner = THIS_MODULE;
 967	i2c->adapter.class = I2C_CLASS_DDC;
 968	i2c->dev = dev;
 969	snprintf(i2c->adapter.name, sizeof(i2c->adapter.name),
 970		 "Radeon aux bus %s", name);
 971	i2c_set_adapdata(&i2c->adapter, i2c);
 972	i2c->adapter.algo_data = &i2c->algo.dp;
 973	i2c->algo.dp.aux_ch = radeon_dp_i2c_aux_ch;
 974	i2c->algo.dp.address = 0;
 975	ret = i2c_dp_aux_add_bus(&i2c->adapter);
 976	if (ret) {
 977		DRM_INFO("Failed to register i2c %s\n", name);
 978		goto out_free;
 979	}
 980
 981	return i2c;
 982out_free:
 983	kfree(i2c);
 984	return NULL;
 985
 986}
 987
 988void radeon_i2c_destroy(struct radeon_i2c_chan *i2c)
 989{
 990	if (!i2c)
 991		return;
 992	i2c_del_adapter(&i2c->adapter);
 
 
 993	kfree(i2c);
 994}
 995
 996/* Add the default buses */
 997void radeon_i2c_init(struct radeon_device *rdev)
 998{
 
 
 
 999	if (rdev->is_atom_bios)
1000		radeon_atombios_i2c_init(rdev);
1001	else
1002		radeon_combios_i2c_init(rdev);
1003}
1004
1005/* remove all the buses */
1006void radeon_i2c_fini(struct radeon_device *rdev)
1007{
1008	int i;
1009
1010	for (i = 0; i < RADEON_MAX_I2C_BUS; i++) {
1011		if (rdev->i2c_bus[i]) {
1012			radeon_i2c_destroy(rdev->i2c_bus[i]);
1013			rdev->i2c_bus[i] = NULL;
1014		}
1015	}
1016}
1017
1018/* Add additional buses */
1019void radeon_i2c_add(struct radeon_device *rdev,
1020		    struct radeon_i2c_bus_rec *rec,
1021		    const char *name)
1022{
1023	struct drm_device *dev = rdev->ddev;
1024	int i;
1025
1026	for (i = 0; i < RADEON_MAX_I2C_BUS; i++) {
1027		if (!rdev->i2c_bus[i]) {
1028			rdev->i2c_bus[i] = radeon_i2c_create(dev, rec, name);
1029			return;
1030		}
1031	}
1032}
1033
1034/* looks up bus based on id */
1035struct radeon_i2c_chan *radeon_i2c_lookup(struct radeon_device *rdev,
1036					  struct radeon_i2c_bus_rec *i2c_bus)
1037{
1038	int i;
1039
1040	for (i = 0; i < RADEON_MAX_I2C_BUS; i++) {
1041		if (rdev->i2c_bus[i] &&
1042		    (rdev->i2c_bus[i]->rec.i2c_id == i2c_bus->i2c_id)) {
1043			return rdev->i2c_bus[i];
1044		}
1045	}
1046	return NULL;
1047}
1048
1049struct drm_encoder *radeon_best_encoder(struct drm_connector *connector)
1050{
1051	return NULL;
1052}
1053
1054void radeon_i2c_get_byte(struct radeon_i2c_chan *i2c_bus,
1055			 u8 slave_addr,
1056			 u8 addr,
1057			 u8 *val)
1058{
1059	u8 out_buf[2];
1060	u8 in_buf[2];
1061	struct i2c_msg msgs[] = {
1062		{
1063			.addr = slave_addr,
1064			.flags = 0,
1065			.len = 1,
1066			.buf = out_buf,
1067		},
1068		{
1069			.addr = slave_addr,
1070			.flags = I2C_M_RD,
1071			.len = 1,
1072			.buf = in_buf,
1073		}
1074	};
1075
1076	out_buf[0] = addr;
1077	out_buf[1] = 0;
1078
1079	if (i2c_transfer(&i2c_bus->adapter, msgs, 2) == 2) {
1080		*val = in_buf[0];
1081		DRM_DEBUG("val = 0x%02x\n", *val);
1082	} else {
1083		DRM_DEBUG("i2c 0x%02x 0x%02x read failed\n",
1084			  addr, *val);
1085	}
1086}
1087
1088void radeon_i2c_put_byte(struct radeon_i2c_chan *i2c_bus,
1089			 u8 slave_addr,
1090			 u8 addr,
1091			 u8 val)
1092{
1093	uint8_t out_buf[2];
1094	struct i2c_msg msg = {
1095		.addr = slave_addr,
1096		.flags = 0,
1097		.len = 2,
1098		.buf = out_buf,
1099	};
1100
1101	out_buf[0] = addr;
1102	out_buf[1] = val;
1103
1104	if (i2c_transfer(&i2c_bus->adapter, &msg, 1) != 1)
1105		DRM_DEBUG("i2c 0x%02x 0x%02x write failed\n",
1106			  addr, val);
1107}
1108
1109/* ddc router switching */
1110void radeon_router_select_ddc_port(struct radeon_connector *radeon_connector)
1111{
1112	u8 val;
1113
1114	if (!radeon_connector->router.ddc_valid)
1115		return;
1116
1117	if (!radeon_connector->router_bus)
1118		return;
1119
1120	radeon_i2c_get_byte(radeon_connector->router_bus,
1121			    radeon_connector->router.i2c_addr,
1122			    0x3, &val);
1123	val &= ~radeon_connector->router.ddc_mux_control_pin;
1124	radeon_i2c_put_byte(radeon_connector->router_bus,
1125			    radeon_connector->router.i2c_addr,
1126			    0x3, val);
1127	radeon_i2c_get_byte(radeon_connector->router_bus,
1128			    radeon_connector->router.i2c_addr,
1129			    0x1, &val);
1130	val &= ~radeon_connector->router.ddc_mux_control_pin;
1131	val |= radeon_connector->router.ddc_mux_state;
1132	radeon_i2c_put_byte(radeon_connector->router_bus,
1133			    radeon_connector->router.i2c_addr,
1134			    0x1, val);
1135}
1136
1137/* clock/data router switching */
1138void radeon_router_select_cd_port(struct radeon_connector *radeon_connector)
1139{
1140	u8 val;
1141
1142	if (!radeon_connector->router.cd_valid)
1143		return;
1144
1145	if (!radeon_connector->router_bus)
1146		return;
1147
1148	radeon_i2c_get_byte(radeon_connector->router_bus,
1149			    radeon_connector->router.i2c_addr,
1150			    0x3, &val);
1151	val &= ~radeon_connector->router.cd_mux_control_pin;
1152	radeon_i2c_put_byte(radeon_connector->router_bus,
1153			    radeon_connector->router.i2c_addr,
1154			    0x3, val);
1155	radeon_i2c_get_byte(radeon_connector->router_bus,
1156			    radeon_connector->router.i2c_addr,
1157			    0x1, &val);
1158	val &= ~radeon_connector->router.cd_mux_control_pin;
1159	val |= radeon_connector->router.cd_mux_state;
1160	radeon_i2c_put_byte(radeon_connector->router_bus,
1161			    radeon_connector->router.i2c_addr,
1162			    0x1, val);
1163}
1164
v4.6
   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 <linux/export.h>
  27
  28#include <drm/drmP.h>
  29#include <drm/drm_edid.h>
  30#include <drm/radeon_drm.h>
  31#include "radeon.h"
  32#include "atom.h"
  33
  34extern int radeon_atom_hw_i2c_xfer(struct i2c_adapter *i2c_adap,
  35				   struct i2c_msg *msgs, int num);
  36extern u32 radeon_atom_hw_i2c_func(struct i2c_adapter *adap);
  37
  38/**
  39 * radeon_ddc_probe
  40 *
  41 */
  42bool radeon_ddc_probe(struct radeon_connector *radeon_connector, bool use_aux)
  43{
  44	u8 out = 0x0;
  45	u8 buf[8];
  46	int ret;
  47	struct i2c_msg msgs[] = {
  48		{
  49			.addr = DDC_ADDR,
  50			.flags = 0,
  51			.len = 1,
  52			.buf = &out,
  53		},
  54		{
  55			.addr = DDC_ADDR,
  56			.flags = I2C_M_RD,
  57			.len = 8,
  58			.buf = buf,
  59		}
  60	};
  61
 
 
 
 
  62	/* on hw with routers, select right port */
  63	if (radeon_connector->router.ddc_valid)
  64		radeon_router_select_ddc_port(radeon_connector);
  65
  66	if (use_aux) {
  67		ret = i2c_transfer(&radeon_connector->ddc_bus->aux.ddc, msgs, 2);
  68	} else {
  69		ret = i2c_transfer(&radeon_connector->ddc_bus->adapter, msgs, 2);
  70	}
  71
  72	if (ret != 2)
  73		/* Couldn't find an accessible DDC on this connector */
  74		return false;
  75	/* Probe also for valid EDID header
  76	 * EDID header starts with:
  77	 * 0x00,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0x00.
  78	 * Only the first 6 bytes must be valid as
  79	 * drm_edid_block_valid() can fix the last 2 bytes */
  80	if (drm_edid_header_is_valid(buf) < 6) {
  81		/* Couldn't find an accessible EDID on this
  82		 * connector */
  83		return false;
 
 
  84	}
  85	return true;
  86}
  87
  88/* bit banging i2c */
  89
  90static int pre_xfer(struct i2c_adapter *i2c_adap)
  91{
  92	struct radeon_i2c_chan *i2c = i2c_get_adapdata(i2c_adap);
  93	struct radeon_device *rdev = i2c->dev->dev_private;
  94	struct radeon_i2c_bus_rec *rec = &i2c->rec;
  95	uint32_t temp;
  96
  97	mutex_lock(&i2c->mutex);
  98
  99	/* RV410 appears to have a bug where the hw i2c in reset
 100	 * holds the i2c port in a bad state - switch hw i2c away before
 101	 * doing DDC - do this for all r200s/r300s/r400s for safety sake
 102	 */
 103	if (rec->hw_capable) {
 104		if ((rdev->family >= CHIP_R200) && !ASIC_IS_AVIVO(rdev)) {
 105			u32 reg;
 106
 107			if (rdev->family >= CHIP_RV350)
 108				reg = RADEON_GPIO_MONID;
 109			else if ((rdev->family == CHIP_R300) ||
 110				 (rdev->family == CHIP_R350))
 111				reg = RADEON_GPIO_DVI_DDC;
 112			else
 113				reg = RADEON_GPIO_CRT2_DDC;
 114
 115			mutex_lock(&rdev->dc_hw_i2c_mutex);
 116			if (rec->a_clk_reg == reg) {
 117				WREG32(RADEON_DVI_I2C_CNTL_0, (RADEON_I2C_SOFT_RST |
 118							       R200_DVI_I2C_PIN_SEL(R200_SEL_DDC1)));
 119			} else {
 120				WREG32(RADEON_DVI_I2C_CNTL_0, (RADEON_I2C_SOFT_RST |
 121							       R200_DVI_I2C_PIN_SEL(R200_SEL_DDC3)));
 122			}
 123			mutex_unlock(&rdev->dc_hw_i2c_mutex);
 124		}
 125	}
 126
 127	/* switch the pads to ddc mode */
 128	if (ASIC_IS_DCE3(rdev) && rec->hw_capable) {
 129		temp = RREG32(rec->mask_clk_reg);
 130		temp &= ~(1 << 16);
 131		WREG32(rec->mask_clk_reg, temp);
 132	}
 133
 134	/* clear the output pin values */
 135	temp = RREG32(rec->a_clk_reg) & ~rec->a_clk_mask;
 136	WREG32(rec->a_clk_reg, temp);
 137
 138	temp = RREG32(rec->a_data_reg) & ~rec->a_data_mask;
 139	WREG32(rec->a_data_reg, temp);
 140
 141	/* set the pins to input */
 142	temp = RREG32(rec->en_clk_reg) & ~rec->en_clk_mask;
 143	WREG32(rec->en_clk_reg, temp);
 144
 145	temp = RREG32(rec->en_data_reg) & ~rec->en_data_mask;
 146	WREG32(rec->en_data_reg, temp);
 147
 148	/* mask the gpio pins for software use */
 149	temp = RREG32(rec->mask_clk_reg) | rec->mask_clk_mask;
 
 
 
 
 150	WREG32(rec->mask_clk_reg, temp);
 151	temp = RREG32(rec->mask_clk_reg);
 152
 153	temp = RREG32(rec->mask_data_reg) | rec->mask_data_mask;
 154	WREG32(rec->mask_data_reg, temp);
 155	temp = RREG32(rec->mask_data_reg);
 156
 157	return 0;
 158}
 159
 160static void post_xfer(struct i2c_adapter *i2c_adap)
 161{
 162	struct radeon_i2c_chan *i2c = i2c_get_adapdata(i2c_adap);
 163	struct radeon_device *rdev = i2c->dev->dev_private;
 164	struct radeon_i2c_bus_rec *rec = &i2c->rec;
 165	uint32_t temp;
 166
 167	/* unmask the gpio pins for software use */
 168	temp = RREG32(rec->mask_clk_reg) & ~rec->mask_clk_mask;
 169	WREG32(rec->mask_clk_reg, temp);
 170	temp = RREG32(rec->mask_clk_reg);
 171
 172	temp = RREG32(rec->mask_data_reg) & ~rec->mask_data_mask;
 173	WREG32(rec->mask_data_reg, temp);
 174	temp = RREG32(rec->mask_data_reg);
 175
 176	mutex_unlock(&i2c->mutex);
 177}
 178
 179static int get_clock(void *i2c_priv)
 180{
 181	struct radeon_i2c_chan *i2c = i2c_priv;
 182	struct radeon_device *rdev = i2c->dev->dev_private;
 183	struct radeon_i2c_bus_rec *rec = &i2c->rec;
 184	uint32_t val;
 185
 186	/* read the value off the pin */
 187	val = RREG32(rec->y_clk_reg);
 188	val &= rec->y_clk_mask;
 189
 190	return (val != 0);
 191}
 192
 193
 194static int get_data(void *i2c_priv)
 195{
 196	struct radeon_i2c_chan *i2c = i2c_priv;
 197	struct radeon_device *rdev = i2c->dev->dev_private;
 198	struct radeon_i2c_bus_rec *rec = &i2c->rec;
 199	uint32_t val;
 200
 201	/* read the value off the pin */
 202	val = RREG32(rec->y_data_reg);
 203	val &= rec->y_data_mask;
 204
 205	return (val != 0);
 206}
 207
 208static void set_clock(void *i2c_priv, int clock)
 209{
 210	struct radeon_i2c_chan *i2c = i2c_priv;
 211	struct radeon_device *rdev = i2c->dev->dev_private;
 212	struct radeon_i2c_bus_rec *rec = &i2c->rec;
 213	uint32_t val;
 214
 215	/* set pin direction */
 216	val = RREG32(rec->en_clk_reg) & ~rec->en_clk_mask;
 217	val |= clock ? 0 : rec->en_clk_mask;
 218	WREG32(rec->en_clk_reg, val);
 219}
 220
 221static void set_data(void *i2c_priv, int data)
 222{
 223	struct radeon_i2c_chan *i2c = i2c_priv;
 224	struct radeon_device *rdev = i2c->dev->dev_private;
 225	struct radeon_i2c_bus_rec *rec = &i2c->rec;
 226	uint32_t val;
 227
 228	/* set pin direction */
 229	val = RREG32(rec->en_data_reg) & ~rec->en_data_mask;
 230	val |= data ? 0 : rec->en_data_mask;
 231	WREG32(rec->en_data_reg, val);
 232}
 233
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 234/* hw i2c */
 235
 236static u32 radeon_get_i2c_prescale(struct radeon_device *rdev)
 237{
 238	u32 sclk = rdev->pm.current_sclk;
 239	u32 prescale = 0;
 240	u32 nm;
 241	u8 n, m, loop;
 242	int i2c_clock;
 243
 244	switch (rdev->family) {
 245	case CHIP_R100:
 246	case CHIP_RV100:
 247	case CHIP_RS100:
 248	case CHIP_RV200:
 249	case CHIP_RS200:
 250	case CHIP_R200:
 251	case CHIP_RV250:
 252	case CHIP_RS300:
 253	case CHIP_RV280:
 254	case CHIP_R300:
 255	case CHIP_R350:
 256	case CHIP_RV350:
 257		i2c_clock = 60;
 258		nm = (sclk * 10) / (i2c_clock * 4);
 259		for (loop = 1; loop < 255; loop++) {
 260			if ((nm / loop) < loop)
 261				break;
 262		}
 263		n = loop - 1;
 264		m = loop - 2;
 265		prescale = m | (n << 8);
 266		break;
 267	case CHIP_RV380:
 268	case CHIP_RS400:
 269	case CHIP_RS480:
 270	case CHIP_R420:
 271	case CHIP_R423:
 272	case CHIP_RV410:
 273		prescale = (((sclk * 10)/(4 * 128 * 100) + 1) << 8) + 128;
 274		break;
 275	case CHIP_RS600:
 276	case CHIP_RS690:
 277	case CHIP_RS740:
 278		/* todo */
 279		break;
 280	case CHIP_RV515:
 281	case CHIP_R520:
 282	case CHIP_RV530:
 283	case CHIP_RV560:
 284	case CHIP_RV570:
 285	case CHIP_R580:
 286		i2c_clock = 50;
 287		if (rdev->family == CHIP_R520)
 288			prescale = (127 << 8) + ((sclk * 10) / (4 * 127 * i2c_clock));
 289		else
 290			prescale = (((sclk * 10)/(4 * 128 * 100) + 1) << 8) + 128;
 291		break;
 292	case CHIP_R600:
 293	case CHIP_RV610:
 294	case CHIP_RV630:
 295	case CHIP_RV670:
 296		/* todo */
 297		break;
 298	case CHIP_RV620:
 299	case CHIP_RV635:
 300	case CHIP_RS780:
 301	case CHIP_RS880:
 302	case CHIP_RV770:
 303	case CHIP_RV730:
 304	case CHIP_RV710:
 305	case CHIP_RV740:
 306		/* todo */
 307		break;
 308	case CHIP_CEDAR:
 309	case CHIP_REDWOOD:
 310	case CHIP_JUNIPER:
 311	case CHIP_CYPRESS:
 312	case CHIP_HEMLOCK:
 313		/* todo */
 314		break;
 315	default:
 316		DRM_ERROR("i2c: unhandled radeon chip\n");
 317		break;
 318	}
 319	return prescale;
 320}
 321
 322
 323/* hw i2c engine for r1xx-4xx hardware
 324 * hw can buffer up to 15 bytes
 325 */
 326static int r100_hw_i2c_xfer(struct i2c_adapter *i2c_adap,
 327			    struct i2c_msg *msgs, int num)
 328{
 329	struct radeon_i2c_chan *i2c = i2c_get_adapdata(i2c_adap);
 330	struct radeon_device *rdev = i2c->dev->dev_private;
 331	struct radeon_i2c_bus_rec *rec = &i2c->rec;
 332	struct i2c_msg *p;
 333	int i, j, k, ret = num;
 334	u32 prescale;
 335	u32 i2c_cntl_0, i2c_cntl_1, i2c_data;
 336	u32 tmp, reg;
 337
 338	mutex_lock(&rdev->dc_hw_i2c_mutex);
 339	/* take the pm lock since we need a constant sclk */
 340	mutex_lock(&rdev->pm.mutex);
 341
 342	prescale = radeon_get_i2c_prescale(rdev);
 343
 344	reg = ((prescale << RADEON_I2C_PRESCALE_SHIFT) |
 345	       RADEON_I2C_DRIVE_EN |
 346	       RADEON_I2C_START |
 347	       RADEON_I2C_STOP |
 348	       RADEON_I2C_GO);
 349
 350	if (rdev->is_atom_bios) {
 351		tmp = RREG32(RADEON_BIOS_6_SCRATCH);
 352		WREG32(RADEON_BIOS_6_SCRATCH, tmp | ATOM_S6_HW_I2C_BUSY_STATE);
 353	}
 354
 355	if (rec->mm_i2c) {
 356		i2c_cntl_0 = RADEON_I2C_CNTL_0;
 357		i2c_cntl_1 = RADEON_I2C_CNTL_1;
 358		i2c_data = RADEON_I2C_DATA;
 359	} else {
 360		i2c_cntl_0 = RADEON_DVI_I2C_CNTL_0;
 361		i2c_cntl_1 = RADEON_DVI_I2C_CNTL_1;
 362		i2c_data = RADEON_DVI_I2C_DATA;
 363
 364		switch (rdev->family) {
 365		case CHIP_R100:
 366		case CHIP_RV100:
 367		case CHIP_RS100:
 368		case CHIP_RV200:
 369		case CHIP_RS200:
 370		case CHIP_RS300:
 371			switch (rec->mask_clk_reg) {
 372			case RADEON_GPIO_DVI_DDC:
 373				/* no gpio select bit */
 374				break;
 375			default:
 376				DRM_ERROR("gpio not supported with hw i2c\n");
 377				ret = -EINVAL;
 378				goto done;
 379			}
 380			break;
 381		case CHIP_R200:
 382			/* only bit 4 on r200 */
 383			switch (rec->mask_clk_reg) {
 384			case RADEON_GPIO_DVI_DDC:
 385				reg |= R200_DVI_I2C_PIN_SEL(R200_SEL_DDC1);
 386				break;
 387			case RADEON_GPIO_MONID:
 388				reg |= R200_DVI_I2C_PIN_SEL(R200_SEL_DDC3);
 389				break;
 390			default:
 391				DRM_ERROR("gpio not supported with hw i2c\n");
 392				ret = -EINVAL;
 393				goto done;
 394			}
 395			break;
 396		case CHIP_RV250:
 397		case CHIP_RV280:
 398			/* bits 3 and 4 */
 399			switch (rec->mask_clk_reg) {
 400			case RADEON_GPIO_DVI_DDC:
 401				reg |= R200_DVI_I2C_PIN_SEL(R200_SEL_DDC1);
 402				break;
 403			case RADEON_GPIO_VGA_DDC:
 404				reg |= R200_DVI_I2C_PIN_SEL(R200_SEL_DDC2);
 405				break;
 406			case RADEON_GPIO_CRT2_DDC:
 407				reg |= R200_DVI_I2C_PIN_SEL(R200_SEL_DDC3);
 408				break;
 409			default:
 410				DRM_ERROR("gpio not supported with hw i2c\n");
 411				ret = -EINVAL;
 412				goto done;
 413			}
 414			break;
 415		case CHIP_R300:
 416		case CHIP_R350:
 417			/* only bit 4 on r300/r350 */
 418			switch (rec->mask_clk_reg) {
 419			case RADEON_GPIO_VGA_DDC:
 420				reg |= R200_DVI_I2C_PIN_SEL(R200_SEL_DDC1);
 421				break;
 422			case RADEON_GPIO_DVI_DDC:
 423				reg |= R200_DVI_I2C_PIN_SEL(R200_SEL_DDC3);
 424				break;
 425			default:
 426				DRM_ERROR("gpio not supported with hw i2c\n");
 427				ret = -EINVAL;
 428				goto done;
 429			}
 430			break;
 431		case CHIP_RV350:
 432		case CHIP_RV380:
 433		case CHIP_R420:
 434		case CHIP_R423:
 435		case CHIP_RV410:
 436		case CHIP_RS400:
 437		case CHIP_RS480:
 438			/* bits 3 and 4 */
 439			switch (rec->mask_clk_reg) {
 440			case RADEON_GPIO_VGA_DDC:
 441				reg |= R200_DVI_I2C_PIN_SEL(R200_SEL_DDC1);
 442				break;
 443			case RADEON_GPIO_DVI_DDC:
 444				reg |= R200_DVI_I2C_PIN_SEL(R200_SEL_DDC2);
 445				break;
 446			case RADEON_GPIO_MONID:
 447				reg |= R200_DVI_I2C_PIN_SEL(R200_SEL_DDC3);
 448				break;
 449			default:
 450				DRM_ERROR("gpio not supported with hw i2c\n");
 451				ret = -EINVAL;
 452				goto done;
 453			}
 454			break;
 455		default:
 456			DRM_ERROR("unsupported asic\n");
 457			ret = -EINVAL;
 458			goto done;
 459			break;
 460		}
 461	}
 462
 463	/* check for bus probe */
 464	p = &msgs[0];
 465	if ((num == 1) && (p->len == 0)) {
 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);
 471		WREG32(i2c_data, 0);
 472		WREG32(i2c_cntl_1, ((1 << RADEON_I2C_DATA_COUNT_SHIFT) |
 473				    (1 << RADEON_I2C_ADDR_COUNT_SHIFT) |
 474				    RADEON_I2C_EN |
 475				    (48 << RADEON_I2C_TIME_LIMIT_SHIFT)));
 476		WREG32(i2c_cntl_0, reg);
 477		for (k = 0; k < 32; k++) {
 478			udelay(10);
 479			tmp = RREG32(i2c_cntl_0);
 480			if (tmp & RADEON_I2C_GO)
 481				continue;
 482			tmp = RREG32(i2c_cntl_0);
 483			if (tmp & RADEON_I2C_DONE)
 484				break;
 485			else {
 486				DRM_DEBUG("i2c write error 0x%08x\n", tmp);
 487				WREG32(i2c_cntl_0, tmp | RADEON_I2C_ABORT);
 488				ret = -EIO;
 489				goto done;
 490			}
 491		}
 492		goto done;
 493	}
 494
 495	for (i = 0; i < num; i++) {
 496		p = &msgs[i];
 497		for (j = 0; j < p->len; j++) {
 498			if (p->flags & I2C_M_RD) {
 499				WREG32(i2c_cntl_0, (RADEON_I2C_DONE |
 500						    RADEON_I2C_NACK |
 501						    RADEON_I2C_HALT |
 502						    RADEON_I2C_SOFT_RST));
 503				WREG32(i2c_data, ((p->addr << 1) & 0xff) | 0x1);
 504				WREG32(i2c_cntl_1, ((1 << RADEON_I2C_DATA_COUNT_SHIFT) |
 505						    (1 << RADEON_I2C_ADDR_COUNT_SHIFT) |
 506						    RADEON_I2C_EN |
 507						    (48 << RADEON_I2C_TIME_LIMIT_SHIFT)));
 508				WREG32(i2c_cntl_0, reg | RADEON_I2C_RECEIVE);
 509				for (k = 0; k < 32; k++) {
 510					udelay(10);
 511					tmp = RREG32(i2c_cntl_0);
 512					if (tmp & RADEON_I2C_GO)
 513						continue;
 514					tmp = RREG32(i2c_cntl_0);
 515					if (tmp & RADEON_I2C_DONE)
 516						break;
 517					else {
 518						DRM_DEBUG("i2c read error 0x%08x\n", tmp);
 519						WREG32(i2c_cntl_0, tmp | RADEON_I2C_ABORT);
 520						ret = -EIO;
 521						goto done;
 522					}
 523				}
 524				p->buf[j] = RREG32(i2c_data) & 0xff;
 525			} else {
 526				WREG32(i2c_cntl_0, (RADEON_I2C_DONE |
 527						    RADEON_I2C_NACK |
 528						    RADEON_I2C_HALT |
 529						    RADEON_I2C_SOFT_RST));
 530				WREG32(i2c_data, (p->addr << 1) & 0xff);
 531				WREG32(i2c_data, p->buf[j]);
 532				WREG32(i2c_cntl_1, ((1 << RADEON_I2C_DATA_COUNT_SHIFT) |
 533						    (1 << RADEON_I2C_ADDR_COUNT_SHIFT) |
 534						    RADEON_I2C_EN |
 535						    (48 << RADEON_I2C_TIME_LIMIT_SHIFT)));
 536				WREG32(i2c_cntl_0, reg);
 537				for (k = 0; k < 32; k++) {
 538					udelay(10);
 539					tmp = RREG32(i2c_cntl_0);
 540					if (tmp & RADEON_I2C_GO)
 541						continue;
 542					tmp = RREG32(i2c_cntl_0);
 543					if (tmp & RADEON_I2C_DONE)
 544						break;
 545					else {
 546						DRM_DEBUG("i2c write error 0x%08x\n", tmp);
 547						WREG32(i2c_cntl_0, tmp | RADEON_I2C_ABORT);
 548						ret = -EIO;
 549						goto done;
 550					}
 551				}
 552			}
 553		}
 554	}
 555
 556done:
 557	WREG32(i2c_cntl_0, 0);
 558	WREG32(i2c_cntl_1, 0);
 559	WREG32(i2c_cntl_0, (RADEON_I2C_DONE |
 560			    RADEON_I2C_NACK |
 561			    RADEON_I2C_HALT |
 562			    RADEON_I2C_SOFT_RST));
 563
 564	if (rdev->is_atom_bios) {
 565		tmp = RREG32(RADEON_BIOS_6_SCRATCH);
 566		tmp &= ~ATOM_S6_HW_I2C_BUSY_STATE;
 567		WREG32(RADEON_BIOS_6_SCRATCH, tmp);
 568	}
 569
 570	mutex_unlock(&rdev->pm.mutex);
 571	mutex_unlock(&rdev->dc_hw_i2c_mutex);
 572
 573	return ret;
 574}
 575
 576/* hw i2c engine for r5xx hardware
 577 * hw can buffer up to 15 bytes
 578 */
 579static int r500_hw_i2c_xfer(struct i2c_adapter *i2c_adap,
 580			    struct i2c_msg *msgs, int num)
 581{
 582	struct radeon_i2c_chan *i2c = i2c_get_adapdata(i2c_adap);
 583	struct radeon_device *rdev = i2c->dev->dev_private;
 584	struct radeon_i2c_bus_rec *rec = &i2c->rec;
 585	struct i2c_msg *p;
 586	int i, j, remaining, current_count, buffer_offset, ret = num;
 587	u32 prescale;
 588	u32 tmp, reg;
 589	u32 saved1, saved2;
 590
 591	mutex_lock(&rdev->dc_hw_i2c_mutex);
 592	/* take the pm lock since we need a constant sclk */
 593	mutex_lock(&rdev->pm.mutex);
 594
 595	prescale = radeon_get_i2c_prescale(rdev);
 596
 597	/* clear gpio mask bits */
 598	tmp = RREG32(rec->mask_clk_reg);
 599	tmp &= ~rec->mask_clk_mask;
 600	WREG32(rec->mask_clk_reg, tmp);
 601	tmp = RREG32(rec->mask_clk_reg);
 602
 603	tmp = RREG32(rec->mask_data_reg);
 604	tmp &= ~rec->mask_data_mask;
 605	WREG32(rec->mask_data_reg, tmp);
 606	tmp = RREG32(rec->mask_data_reg);
 607
 608	/* clear pin values */
 609	tmp = RREG32(rec->a_clk_reg);
 610	tmp &= ~rec->a_clk_mask;
 611	WREG32(rec->a_clk_reg, tmp);
 612	tmp = RREG32(rec->a_clk_reg);
 613
 614	tmp = RREG32(rec->a_data_reg);
 615	tmp &= ~rec->a_data_mask;
 616	WREG32(rec->a_data_reg, tmp);
 617	tmp = RREG32(rec->a_data_reg);
 618
 619	/* set the pins to input */
 620	tmp = RREG32(rec->en_clk_reg);
 621	tmp &= ~rec->en_clk_mask;
 622	WREG32(rec->en_clk_reg, tmp);
 623	tmp = RREG32(rec->en_clk_reg);
 624
 625	tmp = RREG32(rec->en_data_reg);
 626	tmp &= ~rec->en_data_mask;
 627	WREG32(rec->en_data_reg, tmp);
 628	tmp = RREG32(rec->en_data_reg);
 629
 630	/* */
 631	tmp = RREG32(RADEON_BIOS_6_SCRATCH);
 632	WREG32(RADEON_BIOS_6_SCRATCH, tmp | ATOM_S6_HW_I2C_BUSY_STATE);
 633	saved1 = RREG32(AVIVO_DC_I2C_CONTROL1);
 634	saved2 = RREG32(0x494);
 635	WREG32(0x494, saved2 | 0x1);
 636
 637	WREG32(AVIVO_DC_I2C_ARBITRATION, AVIVO_DC_I2C_SW_WANTS_TO_USE_I2C);
 638	for (i = 0; i < 50; i++) {
 639		udelay(1);
 640		if (RREG32(AVIVO_DC_I2C_ARBITRATION) & AVIVO_DC_I2C_SW_CAN_USE_I2C)
 641			break;
 642	}
 643	if (i == 50) {
 644		DRM_ERROR("failed to get i2c bus\n");
 645		ret = -EBUSY;
 646		goto done;
 647	}
 648
 649	reg = AVIVO_DC_I2C_START | AVIVO_DC_I2C_STOP | AVIVO_DC_I2C_EN;
 650	switch (rec->mask_clk_reg) {
 651	case AVIVO_DC_GPIO_DDC1_MASK:
 652		reg |= AVIVO_DC_I2C_PIN_SELECT(AVIVO_SEL_DDC1);
 653		break;
 654	case AVIVO_DC_GPIO_DDC2_MASK:
 655		reg |= AVIVO_DC_I2C_PIN_SELECT(AVIVO_SEL_DDC2);
 656		break;
 657	case AVIVO_DC_GPIO_DDC3_MASK:
 658		reg |= AVIVO_DC_I2C_PIN_SELECT(AVIVO_SEL_DDC3);
 659		break;
 660	default:
 661		DRM_ERROR("gpio not supported with hw i2c\n");
 662		ret = -EINVAL;
 663		goto done;
 664	}
 665
 666	/* check for bus probe */
 667	p = &msgs[0];
 668	if ((num == 1) && (p->len == 0)) {
 669		WREG32(AVIVO_DC_I2C_STATUS1, (AVIVO_DC_I2C_DONE |
 670					      AVIVO_DC_I2C_NACK |
 671					      AVIVO_DC_I2C_HALT));
 672		WREG32(AVIVO_DC_I2C_RESET, AVIVO_DC_I2C_SOFT_RESET);
 673		udelay(1);
 674		WREG32(AVIVO_DC_I2C_RESET, 0);
 675
 676		WREG32(AVIVO_DC_I2C_DATA, (p->addr << 1) & 0xff);
 677		WREG32(AVIVO_DC_I2C_DATA, 0);
 678
 679		WREG32(AVIVO_DC_I2C_CONTROL3, AVIVO_DC_I2C_TIME_LIMIT(48));
 680		WREG32(AVIVO_DC_I2C_CONTROL2, (AVIVO_DC_I2C_ADDR_COUNT(1) |
 681					       AVIVO_DC_I2C_DATA_COUNT(1) |
 682					       (prescale << 16)));
 683		WREG32(AVIVO_DC_I2C_CONTROL1, reg);
 684		WREG32(AVIVO_DC_I2C_STATUS1, AVIVO_DC_I2C_GO);
 685		for (j = 0; j < 200; j++) {
 686			udelay(50);
 687			tmp = RREG32(AVIVO_DC_I2C_STATUS1);
 688			if (tmp & AVIVO_DC_I2C_GO)
 689				continue;
 690			tmp = RREG32(AVIVO_DC_I2C_STATUS1);
 691			if (tmp & AVIVO_DC_I2C_DONE)
 692				break;
 693			else {
 694				DRM_DEBUG("i2c write error 0x%08x\n", tmp);
 695				WREG32(AVIVO_DC_I2C_RESET, AVIVO_DC_I2C_ABORT);
 696				ret = -EIO;
 697				goto done;
 698			}
 699		}
 700		goto done;
 701	}
 702
 703	for (i = 0; i < num; i++) {
 704		p = &msgs[i];
 705		remaining = p->len;
 706		buffer_offset = 0;
 707		if (p->flags & I2C_M_RD) {
 708			while (remaining) {
 709				if (remaining > 15)
 710					current_count = 15;
 711				else
 712					current_count = remaining;
 713				WREG32(AVIVO_DC_I2C_STATUS1, (AVIVO_DC_I2C_DONE |
 714							      AVIVO_DC_I2C_NACK |
 715							      AVIVO_DC_I2C_HALT));
 716				WREG32(AVIVO_DC_I2C_RESET, AVIVO_DC_I2C_SOFT_RESET);
 717				udelay(1);
 718				WREG32(AVIVO_DC_I2C_RESET, 0);
 719
 720				WREG32(AVIVO_DC_I2C_DATA, ((p->addr << 1) & 0xff) | 0x1);
 721				WREG32(AVIVO_DC_I2C_CONTROL3, AVIVO_DC_I2C_TIME_LIMIT(48));
 722				WREG32(AVIVO_DC_I2C_CONTROL2, (AVIVO_DC_I2C_ADDR_COUNT(1) |
 723							       AVIVO_DC_I2C_DATA_COUNT(current_count) |
 724							       (prescale << 16)));
 725				WREG32(AVIVO_DC_I2C_CONTROL1, reg | AVIVO_DC_I2C_RECEIVE);
 726				WREG32(AVIVO_DC_I2C_STATUS1, AVIVO_DC_I2C_GO);
 727				for (j = 0; j < 200; j++) {
 728					udelay(50);
 729					tmp = RREG32(AVIVO_DC_I2C_STATUS1);
 730					if (tmp & AVIVO_DC_I2C_GO)
 731						continue;
 732					tmp = RREG32(AVIVO_DC_I2C_STATUS1);
 733					if (tmp & AVIVO_DC_I2C_DONE)
 734						break;
 735					else {
 736						DRM_DEBUG("i2c read error 0x%08x\n", tmp);
 737						WREG32(AVIVO_DC_I2C_RESET, AVIVO_DC_I2C_ABORT);
 738						ret = -EIO;
 739						goto done;
 740					}
 741				}
 742				for (j = 0; j < current_count; j++)
 743					p->buf[buffer_offset + j] = RREG32(AVIVO_DC_I2C_DATA) & 0xff;
 744				remaining -= current_count;
 745				buffer_offset += current_count;
 746			}
 747		} else {
 748			while (remaining) {
 749				if (remaining > 15)
 750					current_count = 15;
 751				else
 752					current_count = remaining;
 753				WREG32(AVIVO_DC_I2C_STATUS1, (AVIVO_DC_I2C_DONE |
 754							      AVIVO_DC_I2C_NACK |
 755							      AVIVO_DC_I2C_HALT));
 756				WREG32(AVIVO_DC_I2C_RESET, AVIVO_DC_I2C_SOFT_RESET);
 757				udelay(1);
 758				WREG32(AVIVO_DC_I2C_RESET, 0);
 759
 760				WREG32(AVIVO_DC_I2C_DATA, (p->addr << 1) & 0xff);
 761				for (j = 0; j < current_count; j++)
 762					WREG32(AVIVO_DC_I2C_DATA, p->buf[buffer_offset + j]);
 763
 764				WREG32(AVIVO_DC_I2C_CONTROL3, AVIVO_DC_I2C_TIME_LIMIT(48));
 765				WREG32(AVIVO_DC_I2C_CONTROL2, (AVIVO_DC_I2C_ADDR_COUNT(1) |
 766							       AVIVO_DC_I2C_DATA_COUNT(current_count) |
 767							       (prescale << 16)));
 768				WREG32(AVIVO_DC_I2C_CONTROL1, reg);
 769				WREG32(AVIVO_DC_I2C_STATUS1, AVIVO_DC_I2C_GO);
 770				for (j = 0; j < 200; j++) {
 771					udelay(50);
 772					tmp = RREG32(AVIVO_DC_I2C_STATUS1);
 773					if (tmp & AVIVO_DC_I2C_GO)
 774						continue;
 775					tmp = RREG32(AVIVO_DC_I2C_STATUS1);
 776					if (tmp & AVIVO_DC_I2C_DONE)
 777						break;
 778					else {
 779						DRM_DEBUG("i2c write error 0x%08x\n", tmp);
 780						WREG32(AVIVO_DC_I2C_RESET, AVIVO_DC_I2C_ABORT);
 781						ret = -EIO;
 782						goto done;
 783					}
 784				}
 785				remaining -= current_count;
 786				buffer_offset += current_count;
 787			}
 788		}
 789	}
 790
 791done:
 792	WREG32(AVIVO_DC_I2C_STATUS1, (AVIVO_DC_I2C_DONE |
 793				      AVIVO_DC_I2C_NACK |
 794				      AVIVO_DC_I2C_HALT));
 795	WREG32(AVIVO_DC_I2C_RESET, AVIVO_DC_I2C_SOFT_RESET);
 796	udelay(1);
 797	WREG32(AVIVO_DC_I2C_RESET, 0);
 798
 799	WREG32(AVIVO_DC_I2C_ARBITRATION, AVIVO_DC_I2C_SW_DONE_USING_I2C);
 800	WREG32(AVIVO_DC_I2C_CONTROL1, saved1);
 801	WREG32(0x494, saved2);
 802	tmp = RREG32(RADEON_BIOS_6_SCRATCH);
 803	tmp &= ~ATOM_S6_HW_I2C_BUSY_STATE;
 804	WREG32(RADEON_BIOS_6_SCRATCH, tmp);
 805
 806	mutex_unlock(&rdev->pm.mutex);
 807	mutex_unlock(&rdev->dc_hw_i2c_mutex);
 808
 809	return ret;
 810}
 811
 812static int radeon_hw_i2c_xfer(struct i2c_adapter *i2c_adap,
 813			      struct i2c_msg *msgs, int num)
 814{
 815	struct radeon_i2c_chan *i2c = i2c_get_adapdata(i2c_adap);
 816	struct radeon_device *rdev = i2c->dev->dev_private;
 817	struct radeon_i2c_bus_rec *rec = &i2c->rec;
 818	int ret = 0;
 819
 820	mutex_lock(&i2c->mutex);
 821
 822	switch (rdev->family) {
 823	case CHIP_R100:
 824	case CHIP_RV100:
 825	case CHIP_RS100:
 826	case CHIP_RV200:
 827	case CHIP_RS200:
 828	case CHIP_R200:
 829	case CHIP_RV250:
 830	case CHIP_RS300:
 831	case CHIP_RV280:
 832	case CHIP_R300:
 833	case CHIP_R350:
 834	case CHIP_RV350:
 835	case CHIP_RV380:
 836	case CHIP_R420:
 837	case CHIP_R423:
 838	case CHIP_RV410:
 839	case CHIP_RS400:
 840	case CHIP_RS480:
 841		ret = r100_hw_i2c_xfer(i2c_adap, msgs, num);
 842		break;
 843	case CHIP_RS600:
 844	case CHIP_RS690:
 845	case CHIP_RS740:
 846		/* XXX fill in hw i2c implementation */
 847		break;
 848	case CHIP_RV515:
 849	case CHIP_R520:
 850	case CHIP_RV530:
 851	case CHIP_RV560:
 852	case CHIP_RV570:
 853	case CHIP_R580:
 854		if (rec->mm_i2c)
 855			ret = r100_hw_i2c_xfer(i2c_adap, msgs, num);
 856		else
 857			ret = r500_hw_i2c_xfer(i2c_adap, msgs, num);
 858		break;
 859	case CHIP_R600:
 860	case CHIP_RV610:
 861	case CHIP_RV630:
 862	case CHIP_RV670:
 863		/* XXX fill in hw i2c implementation */
 864		break;
 865	case CHIP_RV620:
 866	case CHIP_RV635:
 867	case CHIP_RS780:
 868	case CHIP_RS880:
 869	case CHIP_RV770:
 870	case CHIP_RV730:
 871	case CHIP_RV710:
 872	case CHIP_RV740:
 873		/* XXX fill in hw i2c implementation */
 874		break;
 875	case CHIP_CEDAR:
 876	case CHIP_REDWOOD:
 877	case CHIP_JUNIPER:
 878	case CHIP_CYPRESS:
 879	case CHIP_HEMLOCK:
 880		/* XXX fill in hw i2c implementation */
 881		break;
 882	default:
 883		DRM_ERROR("i2c: unhandled radeon chip\n");
 884		ret = -EIO;
 885		break;
 886	}
 887
 888	mutex_unlock(&i2c->mutex);
 889
 890	return ret;
 891}
 892
 893static u32 radeon_hw_i2c_func(struct i2c_adapter *adap)
 894{
 895	return I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL;
 896}
 897
 898static const struct i2c_algorithm radeon_i2c_algo = {
 899	.master_xfer = radeon_hw_i2c_xfer,
 900	.functionality = radeon_hw_i2c_func,
 901};
 902
 903static const struct i2c_algorithm radeon_atom_i2c_algo = {
 904	.master_xfer = radeon_atom_hw_i2c_xfer,
 905	.functionality = radeon_atom_hw_i2c_func,
 906};
 907
 908struct radeon_i2c_chan *radeon_i2c_create(struct drm_device *dev,
 909					  struct radeon_i2c_bus_rec *rec,
 910					  const char *name)
 911{
 912	struct radeon_device *rdev = dev->dev_private;
 913	struct radeon_i2c_chan *i2c;
 914	int ret;
 915
 916	/* don't add the mm_i2c bus unless hw_i2c is enabled */
 917	if (rec->mm_i2c && (radeon_hw_i2c == 0))
 918		return NULL;
 919
 920	i2c = kzalloc(sizeof(struct radeon_i2c_chan), GFP_KERNEL);
 921	if (i2c == NULL)
 922		return NULL;
 923
 924	i2c->rec = *rec;
 925	i2c->adapter.owner = THIS_MODULE;
 926	i2c->adapter.class = I2C_CLASS_DDC;
 927	i2c->adapter.dev.parent = &dev->pdev->dev;
 928	i2c->dev = dev;
 929	i2c_set_adapdata(&i2c->adapter, i2c);
 930	mutex_init(&i2c->mutex);
 931	if (rec->mm_i2c ||
 932	    (rec->hw_capable &&
 933	     radeon_hw_i2c &&
 934	     ((rdev->family <= CHIP_RS480) ||
 935	      ((rdev->family >= CHIP_RV515) && (rdev->family <= CHIP_R580))))) {
 936		/* set the radeon hw i2c adapter */
 937		snprintf(i2c->adapter.name, sizeof(i2c->adapter.name),
 938			 "Radeon i2c hw bus %s", name);
 939		i2c->adapter.algo = &radeon_i2c_algo;
 940		ret = i2c_add_adapter(&i2c->adapter);
 941		if (ret) {
 942			DRM_ERROR("Failed to register hw i2c %s\n", name);
 943			goto out_free;
 944		}
 945	} else if (rec->hw_capable &&
 946		   radeon_hw_i2c &&
 947		   ASIC_IS_DCE3(rdev)) {
 948		/* hw i2c using atom */
 949		snprintf(i2c->adapter.name, sizeof(i2c->adapter.name),
 950			 "Radeon i2c hw bus %s", name);
 951		i2c->adapter.algo = &radeon_atom_i2c_algo;
 952		ret = i2c_add_adapter(&i2c->adapter);
 953		if (ret) {
 954			DRM_ERROR("Failed to register hw i2c %s\n", name);
 955			goto out_free;
 956		}
 957	} else {
 958		/* set the radeon bit adapter */
 959		snprintf(i2c->adapter.name, sizeof(i2c->adapter.name),
 960			 "Radeon i2c bit bus %s", name);
 961		i2c->adapter.algo_data = &i2c->bit;
 962		i2c->bit.pre_xfer = pre_xfer;
 963		i2c->bit.post_xfer = post_xfer;
 964		i2c->bit.setsda = set_data;
 965		i2c->bit.setscl = set_clock;
 966		i2c->bit.getsda = get_data;
 967		i2c->bit.getscl = get_clock;
 968		i2c->bit.udelay = 10;
 969		i2c->bit.timeout = usecs_to_jiffies(2200);	/* from VESA */
 970		i2c->bit.data = i2c;
 
 
 971		ret = i2c_bit_add_bus(&i2c->adapter);
 972		if (ret) {
 973			DRM_ERROR("Failed to register bit i2c %s\n", name);
 974			goto out_free;
 975		}
 976	}
 977
 978	return i2c;
 979out_free:
 980	kfree(i2c);
 981	return NULL;
 982
 983}
 984
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 985void radeon_i2c_destroy(struct radeon_i2c_chan *i2c)
 986{
 987	if (!i2c)
 988		return;
 989	i2c_del_adapter(&i2c->adapter);
 990	if (i2c->has_aux)
 991		drm_dp_aux_unregister(&i2c->aux);
 992	kfree(i2c);
 993}
 994
 995/* Add the default buses */
 996void radeon_i2c_init(struct radeon_device *rdev)
 997{
 998	if (radeon_hw_i2c)
 999		DRM_INFO("hw_i2c forced on, you may experience display detection problems!\n");
1000
1001	if (rdev->is_atom_bios)
1002		radeon_atombios_i2c_init(rdev);
1003	else
1004		radeon_combios_i2c_init(rdev);
1005}
1006
1007/* remove all the buses */
1008void radeon_i2c_fini(struct radeon_device *rdev)
1009{
1010	int i;
1011
1012	for (i = 0; i < RADEON_MAX_I2C_BUS; i++) {
1013		if (rdev->i2c_bus[i]) {
1014			radeon_i2c_destroy(rdev->i2c_bus[i]);
1015			rdev->i2c_bus[i] = NULL;
1016		}
1017	}
1018}
1019
1020/* Add additional buses */
1021void radeon_i2c_add(struct radeon_device *rdev,
1022		    struct radeon_i2c_bus_rec *rec,
1023		    const char *name)
1024{
1025	struct drm_device *dev = rdev->ddev;
1026	int i;
1027
1028	for (i = 0; i < RADEON_MAX_I2C_BUS; i++) {
1029		if (!rdev->i2c_bus[i]) {
1030			rdev->i2c_bus[i] = radeon_i2c_create(dev, rec, name);
1031			return;
1032		}
1033	}
1034}
1035
1036/* looks up bus based on id */
1037struct radeon_i2c_chan *radeon_i2c_lookup(struct radeon_device *rdev,
1038					  struct radeon_i2c_bus_rec *i2c_bus)
1039{
1040	int i;
1041
1042	for (i = 0; i < RADEON_MAX_I2C_BUS; i++) {
1043		if (rdev->i2c_bus[i] &&
1044		    (rdev->i2c_bus[i]->rec.i2c_id == i2c_bus->i2c_id)) {
1045			return rdev->i2c_bus[i];
1046		}
1047	}
 
 
 
 
 
1048	return NULL;
1049}
1050
1051void radeon_i2c_get_byte(struct radeon_i2c_chan *i2c_bus,
1052			 u8 slave_addr,
1053			 u8 addr,
1054			 u8 *val)
1055{
1056	u8 out_buf[2];
1057	u8 in_buf[2];
1058	struct i2c_msg msgs[] = {
1059		{
1060			.addr = slave_addr,
1061			.flags = 0,
1062			.len = 1,
1063			.buf = out_buf,
1064		},
1065		{
1066			.addr = slave_addr,
1067			.flags = I2C_M_RD,
1068			.len = 1,
1069			.buf = in_buf,
1070		}
1071	};
1072
1073	out_buf[0] = addr;
1074	out_buf[1] = 0;
1075
1076	if (i2c_transfer(&i2c_bus->adapter, msgs, 2) == 2) {
1077		*val = in_buf[0];
1078		DRM_DEBUG("val = 0x%02x\n", *val);
1079	} else {
1080		DRM_DEBUG("i2c 0x%02x 0x%02x read failed\n",
1081			  addr, *val);
1082	}
1083}
1084
1085void radeon_i2c_put_byte(struct radeon_i2c_chan *i2c_bus,
1086			 u8 slave_addr,
1087			 u8 addr,
1088			 u8 val)
1089{
1090	uint8_t out_buf[2];
1091	struct i2c_msg msg = {
1092		.addr = slave_addr,
1093		.flags = 0,
1094		.len = 2,
1095		.buf = out_buf,
1096	};
1097
1098	out_buf[0] = addr;
1099	out_buf[1] = val;
1100
1101	if (i2c_transfer(&i2c_bus->adapter, &msg, 1) != 1)
1102		DRM_DEBUG("i2c 0x%02x 0x%02x write failed\n",
1103			  addr, val);
1104}
1105
1106/* ddc router switching */
1107void radeon_router_select_ddc_port(struct radeon_connector *radeon_connector)
1108{
1109	u8 val;
1110
1111	if (!radeon_connector->router.ddc_valid)
1112		return;
1113
1114	if (!radeon_connector->router_bus)
1115		return;
1116
1117	radeon_i2c_get_byte(radeon_connector->router_bus,
1118			    radeon_connector->router.i2c_addr,
1119			    0x3, &val);
1120	val &= ~radeon_connector->router.ddc_mux_control_pin;
1121	radeon_i2c_put_byte(radeon_connector->router_bus,
1122			    radeon_connector->router.i2c_addr,
1123			    0x3, val);
1124	radeon_i2c_get_byte(radeon_connector->router_bus,
1125			    radeon_connector->router.i2c_addr,
1126			    0x1, &val);
1127	val &= ~radeon_connector->router.ddc_mux_control_pin;
1128	val |= radeon_connector->router.ddc_mux_state;
1129	radeon_i2c_put_byte(radeon_connector->router_bus,
1130			    radeon_connector->router.i2c_addr,
1131			    0x1, val);
1132}
1133
1134/* clock/data router switching */
1135void radeon_router_select_cd_port(struct radeon_connector *radeon_connector)
1136{
1137	u8 val;
1138
1139	if (!radeon_connector->router.cd_valid)
1140		return;
1141
1142	if (!radeon_connector->router_bus)
1143		return;
1144
1145	radeon_i2c_get_byte(radeon_connector->router_bus,
1146			    radeon_connector->router.i2c_addr,
1147			    0x3, &val);
1148	val &= ~radeon_connector->router.cd_mux_control_pin;
1149	radeon_i2c_put_byte(radeon_connector->router_bus,
1150			    radeon_connector->router.i2c_addr,
1151			    0x3, val);
1152	radeon_i2c_get_byte(radeon_connector->router_bus,
1153			    radeon_connector->router.i2c_addr,
1154			    0x1, &val);
1155	val &= ~radeon_connector->router.cd_mux_control_pin;
1156	val |= radeon_connector->router.cd_mux_state;
1157	radeon_i2c_put_byte(radeon_connector->router_bus,
1158			    radeon_connector->router.i2c_addr,
1159			    0x1, val);
1160}
1161