summaryrefslogtreecommitdiff
path: root/linux-core/intel_i2c.c
diff options
context:
space:
mode:
authorroot <root@airlied2.(none)>2007-04-11 13:40:50 +1000
committerroot <root@airlied2.(none)>2007-04-11 13:40:50 +1000
commit7e58276c76ff2297fdf9ba295d696338377d6e14 (patch)
tree64451fa3e5193dcc9a01ba028e3fc6930d5c4190 /linux-core/intel_i2c.c
parent44be9c9d5950d3b2ba4d5527189abec8dac0686f (diff)
Revert "Remove some delays from Intel i2c code, we'll need a more comprehensive fix"
This reverts commit c0336989884e75bcd05284257e884754bb5f85b6. this break SDVO
Diffstat (limited to 'linux-core/intel_i2c.c')
-rw-r--r--linux-core/intel_i2c.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/linux-core/intel_i2c.c b/linux-core/intel_i2c.c
index e23283fb..d4cf7eef 100644
--- a/linux-core/intel_i2c.c
+++ b/linux-core/intel_i2c.c
@@ -80,8 +80,8 @@ static void set_clock(void *data, int state_high)
else
clock_bits = GPIO_CLOCK_DIR_OUT | GPIO_CLOCK_DIR_MASK |
GPIO_CLOCK_VAL_MASK;
-
I915_WRITE(chan->reg, reserved | clock_bits);
+ udelay(I2C_RISEFALL_TIME); /* wait for the line to change state */
}
static void set_data(void *data, int state_high)
@@ -103,6 +103,7 @@ static void set_data(void *data, int state_high)
GPIO_DATA_VAL_MASK;
I915_WRITE(chan->reg, reserved | data_bits);
+ udelay(I2C_RISEFALL_TIME); /* wait for the line to change state */
}
/**
@@ -146,7 +147,7 @@ struct intel_i2c_chan *intel_i2c_create(drm_device_t *dev, const u32 reg,
chan->algo.setscl = set_clock;
chan->algo.getsda = get_data;
chan->algo.getscl = get_clock;
- chan->algo.udelay = 20; /* between calls to (set|get)_(clock|data) */
+ chan->algo.udelay = 20;
chan->algo.timeout = usecs_to_jiffies(2200);
chan->algo.data = chan;
@@ -158,6 +159,7 @@ struct intel_i2c_chan *intel_i2c_create(drm_device_t *dev, const u32 reg,
/* JJJ: raise SCL and SDA? */
set_data(chan, 1);
set_clock(chan, 1);
+ udelay(20);
return chan;