Change read_bit() to return 0 or -1UL, rather than 0 or 1.
authorMichael Brown <mcb30@etherboot.org>
Mon, 12 Jun 2006 19:29:50 +0000 (19:29 +0000)
committerMichael Brown <mcb30@etherboot.org>
Mon, 12 Jun 2006 19:29:50 +0000 (19:29 +0000)
src/drivers/bitbash/bitbash.c
src/drivers/bitbash/i2c_bit.c
src/include/gpxe/i2c.h

index 270c1b9..92abe1a 100644 (file)
@@ -48,8 +48,10 @@ void write_bit ( struct bit_basher *basher, unsigned int bit_id,
  * @v bit_id           Bit number
  * @ret data           Value read
  *
  * @v bit_id           Bit number
  * @ret data           Value read
  *
- * @c data will always be either 0 or 1.
+ * @c data will always be either 0 or -1UL.  The idea is that the
+ * caller can simply binary-AND the returned value with whatever mask
+ * it needs to apply.
  */
 int read_bit ( struct bit_basher *basher, unsigned int bit_id ) {
  */
 int read_bit ( struct bit_basher *basher, unsigned int bit_id ) {
-       return ( basher->read ( basher, bit_id ) ? 1 : 0 );
+       return ( basher->read ( basher, bit_id ) ? -1UL : 0 );
 }
 }
index 9524d63..cc73968 100644 (file)
@@ -153,7 +153,7 @@ static uint8_t i2c_recv_byte ( struct bit_basher *basher ) {
        /* Receive byte */
        for ( i = 8 ; i ; i-- ) {
                value <<= 1;
        /* Receive byte */
        for ( i = 8 ; i ; i-- ) {
                value <<= 1;
-               value |= i2c_recv_bit ( basher );
+               value |= ( i2c_recv_bit ( basher ) & 0x1 );
        }
 
        /* Send NACK */
        }
 
        /* Send NACK */
index e282810..bfaee8f 100644 (file)
@@ -82,7 +82,9 @@ struct i2c_bit_basher {
 
 /** Bit indices used for I2C bit-bashing interface */
 enum {
 
 /** Bit indices used for I2C bit-bashing interface */
 enum {
+       /** Serial clock */
        I2C_BIT_SCL = 0,
        I2C_BIT_SCL = 0,
+       /** Serial data */
        I2C_BIT_SDA,
 };
 
        I2C_BIT_SDA,
 };