aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/drivers/bitbash/bitbash.c6
-rw-r--r--src/drivers/bitbash/i2c_bit.c2
-rw-r--r--src/include/gpxe/i2c.h2
3 files changed, 7 insertions, 3 deletions
diff --git a/src/drivers/bitbash/bitbash.c b/src/drivers/bitbash/bitbash.c
index 270c1b922..92abe1a70 100644
--- a/src/drivers/bitbash/bitbash.c
+++ b/src/drivers/bitbash/bitbash.c
@@ -48,8 +48,10 @@ void write_bit ( struct bit_basher *basher, unsigned int bit_id,
* @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 ) {
- return ( basher->read ( basher, bit_id ) ? 1 : 0 );
+ return ( basher->read ( basher, bit_id ) ? -1UL : 0 );
}
diff --git a/src/drivers/bitbash/i2c_bit.c b/src/drivers/bitbash/i2c_bit.c
index 9524d6312..cc73968b7 100644
--- a/src/drivers/bitbash/i2c_bit.c
+++ b/src/drivers/bitbash/i2c_bit.c
@@ -153,7 +153,7 @@ static uint8_t i2c_recv_byte ( struct bit_basher *basher ) {
/* Receive byte */
for ( i = 8 ; i ; i-- ) {
value <<= 1;
- value |= i2c_recv_bit ( basher );
+ value |= ( i2c_recv_bit ( basher ) & 0x1 );
}
/* Send NACK */
diff --git a/src/include/gpxe/i2c.h b/src/include/gpxe/i2c.h
index e282810be..bfaee8fb5 100644
--- a/src/include/gpxe/i2c.h
+++ b/src/include/gpxe/i2c.h
@@ -82,7 +82,9 @@ struct i2c_bit_basher {
/** Bit indices used for I2C bit-bashing interface */
enum {
+ /** Serial clock */
I2C_BIT_SCL = 0,
+ /** Serial data */
I2C_BIT_SDA,
};