diff options
author | Michael Brown | 2006-06-14 02:20:35 +0200 |
---|---|---|
committer | Michael Brown | 2006-06-14 02:20:35 +0200 |
commit | ab4f96e525fe082b0750867cc50d03becf018048 (patch) | |
tree | 8475725200b15eb3f72f17579ba64a5952e04295 /src/drivers/bitbash | |
parent | Translate between "0 = success" and "0 = failure" call standards. (diff) | |
download | ipxe-ab4f96e525fe082b0750867cc50d03becf018048.tar.gz ipxe-ab4f96e525fe082b0750867cc50d03becf018048.tar.xz ipxe-ab4f96e525fe082b0750867cc50d03becf018048.zip |
Move per-transition delays from generic bit-bashing layer to i2c layer
(since SPI bit-bashing will require different delay semantics).
Diffstat (limited to 'src/drivers/bitbash')
-rw-r--r-- | src/drivers/bitbash/bitbash.c | 1 | ||||
-rw-r--r-- | src/drivers/bitbash/i2c_bit.c | 22 |
2 files changed, 15 insertions, 8 deletions
diff --git a/src/drivers/bitbash/bitbash.c b/src/drivers/bitbash/bitbash.c index 92abe1a7..19add4ce 100644 --- a/src/drivers/bitbash/bitbash.c +++ b/src/drivers/bitbash/bitbash.c @@ -38,7 +38,6 @@ void write_bit ( struct bit_basher *basher, unsigned int bit_id, unsigned long data ) { basher->write ( basher, bit_id, ( data ? -1UL : 0 ) ); - udelay ( basher->udelay ); } /** diff --git a/src/drivers/bitbash/i2c_bit.c b/src/drivers/bitbash/i2c_bit.c index cc73968b..2551bb4f 100644 --- a/src/drivers/bitbash/i2c_bit.c +++ b/src/drivers/bitbash/i2c_bit.c @@ -32,14 +32,24 @@ */ /** + * Delay between output state changes + * + * Max rated i2c speed (for the basic i2c protocol) is 100kbps, + * i.e. 200k clock transitions per second. + */ +static void i2c_delay ( void ) { + udelay ( I2C_UDELAY ); +} + +/** * Set state of I2C SCL line * * @v basher Bit-bashing interface * @v state New state of SCL */ -static inline __attribute__ (( always_inline )) void -setscl ( struct bit_basher *basher, int state ) { +static void setscl ( struct bit_basher *basher, int state ) { write_bit ( basher, I2C_BIT_SCL, state ); + i2c_delay(); } /** @@ -48,9 +58,9 @@ setscl ( struct bit_basher *basher, int state ) { * @v basher Bit-bashing interface * @v state New state of SDA */ -static inline __attribute__ (( always_inline )) void -setsda ( struct bit_basher *basher, int state ) { +static void setsda ( struct bit_basher *basher, int state ) { write_bit ( basher, I2C_BIT_SDA, state ); + i2c_delay(); } /** @@ -59,8 +69,7 @@ setsda ( struct bit_basher *basher, int state ) { * @v basher Bit-bashing interface * @ret state State of SDA */ -static inline __attribute__ (( always_inline )) int -getsda ( struct bit_basher *basher ) { +static int getsda ( struct bit_basher *basher ) { return read_bit ( basher, I2C_BIT_SDA ); } @@ -308,6 +317,5 @@ void init_i2c_bit_basher ( struct i2c_bit_basher *i2cbit ) { assert ( basher->write != NULL ); i2cbit->i2c.read = i2c_bit_read; i2cbit->i2c.write = i2c_bit_write; - basher->udelay = I2C_UDELAY; i2c_stop ( basher ); } |