]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
Move per-transition delays from generic bit-bashing layer to i2c layer
authorMichael Brown <mcb30@etherboot.org>
Wed, 14 Jun 2006 00:20:35 +0000 (00:20 +0000)
committerMichael Brown <mcb30@etherboot.org>
Wed, 14 Jun 2006 00:20:35 +0000 (00:20 +0000)
(since SPI bit-bashing will require different delay semantics).

src/drivers/bitbash/bitbash.c
src/drivers/bitbash/i2c_bit.c
src/include/gpxe/bitbash.h

index 92abe1a707cf2a86eaf162db6adb6c23c0e8dfb8..19add4ce00819732612df7b8a183f8cfefaa4c65 100644 (file)
@@ -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 );
 }
 
 /**
index cc73968b7dd8585a7284df9a9d1e77965b1fd672..2551bb4fe4bb2a2180d7bf51374828ea07da6247 100644 (file)
  * that provides two lines: SCL (clock) and SDA (data).
  */
 
+/**
+ * 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 );
 }
index 9bee39134330afb05d0d7998a62bee8696c709ab..f479b5ad06ebdbde36a53e9f15506d419dfe7cf8 100644 (file)
@@ -33,8 +33,6 @@ struct bit_basher {
         * @ret non-zero        Input is a logic 1
         */
        int ( * read ) ( struct bit_basher *basher, unsigned int bit_id );
-       /** Delay between subsequent calls to write(), in microseconds */
-       unsigned int udelay;
 };
 
 extern void write_bit ( struct bit_basher *basher, unsigned int bit_id,