Fedora kernel-2.6.17-1.2142_FC4 patched with stable patch-2.6.17.4-vs2.0.2-rc26.diff
[linux-2.6.git] / drivers / video / aty / radeon_i2c.c
index af351c0..a9d0414 100644 (file)
@@ -75,7 +75,7 @@ static int radeon_setup_i2c_bus(struct radeon_i2c_chan *chan, const char *name)
 
        strcpy(chan->adapter.name, name);
        chan->adapter.owner             = THIS_MODULE;
-       chan->adapter.id                = I2C_ALGO_ATI;
+       chan->adapter.id                = I2C_HW_B_RADEON;
        chan->adapter.algo_data         = &chan->algo;
        chan->adapter.dev.parent        = &chan->rinfo->pdev->dev;
        chan->algo.setsda               = radeon_gpio_setsda;
@@ -189,12 +189,12 @@ int radeon_probe_i2c_connector(struct radeonfb_info *rinfo, int conn, u8 **out_e
                 */
                OUTREG(reg, INREG(reg) & ~(VGA_DDC_DATA_OUT_EN));
                (void)INREG(reg);
-               wait_ms(13);
+               msleep(13);
 
                OUTREG(reg, INREG(reg) & ~(VGA_DDC_CLK_OUT_EN));
                (void)INREG(reg);
                for (j = 0; j < 5; j++) {
-                       wait_ms(10);
+                       msleep(10);
                        if (INREG(reg) & VGA_DDC_CLK_INPUT)
                                break;
                }
@@ -203,13 +203,13 @@ int radeon_probe_i2c_connector(struct radeonfb_info *rinfo, int conn, u8 **out_e
 
                OUTREG(reg, INREG(reg) | VGA_DDC_DATA_OUT_EN);
                (void)INREG(reg);
-               wait_ms(15);
+               msleep(15);
                OUTREG(reg, INREG(reg) | VGA_DDC_CLK_OUT_EN);
                (void)INREG(reg);
-               wait_ms(15);
+               msleep(15);
                OUTREG(reg, INREG(reg) & ~(VGA_DDC_DATA_OUT_EN));
                (void)INREG(reg);
-               wait_ms(15);
+               msleep(15);
 
                /* Do the real work */
                edid = radeon_do_probe_i2c_edid(&rinfo->i2c[conn-1]);
@@ -217,25 +217,31 @@ int radeon_probe_i2c_connector(struct radeonfb_info *rinfo, int conn, u8 **out_e
                OUTREG(reg, INREG(reg) | 
                                (VGA_DDC_DATA_OUT_EN | VGA_DDC_CLK_OUT_EN));
                (void)INREG(reg);
-               wait_ms(15);
+               msleep(15);
                
                OUTREG(reg, INREG(reg) & ~(VGA_DDC_CLK_OUT_EN));
                (void)INREG(reg);
                for (j = 0; j < 10; j++) {
-                       wait_ms(10);
+                       msleep(10);
                        if (INREG(reg) & VGA_DDC_CLK_INPUT)
                                break;
                }
 
                OUTREG(reg, INREG(reg) & ~(VGA_DDC_DATA_OUT_EN));
                (void)INREG(reg);
-               wait_ms(15);
+               msleep(15);
                OUTREG(reg, INREG(reg) |
                                (VGA_DDC_DATA_OUT_EN | VGA_DDC_CLK_OUT_EN));
                (void)INREG(reg);
                if (edid)
                        break;
        }
+       /* Release the DDC lines when done or the Apple Cinema HD display
+        * will switch off
+        */
+       OUTREG(reg, INREG(reg) & ~(VGA_DDC_CLK_OUT_EN | VGA_DDC_DATA_OUT_EN));
+       (void)INREG(reg);
+
        if (out_edid)
                *out_edid = edid;
        if (!edid) {