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