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