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