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