/*
  * Software (bit-bang) I2C driver configuration
  */
-#define I2C_BASE_DIR   (CONFIG_SYS_PIGGY_BASE + 0x04)
-#define I2C_BASE_PORT  (CONFIG_SYS_PIGGY_BASE + 0x09)
+#define I2C_BASE_DIR   ((u16 *)(CONFIG_SYS_PIGGY_BASE + 0x04))
+#define I2C_BASE_PORT  ((u8 *)(CONFIG_SYS_PIGGY_BASE + 0x09))
 
 #define SDA_BIT                0x40
 #define SCL_BIT                0x80
 
 #define I2C_ACTIVE     do {} while (0)
 #define I2C_TRISTATE   do {} while (0)
-#define I2C_READ       i2c_soft_read_pin ()
+#define I2C_READ       ((in_8(I2C_BASE_PORT) & SDA_BIT) == SDA_BIT)
 #define I2C_SDA(bit)   if(bit) { \
-                               *(unsigned short *)(I2C_BASE_DIR) &=  ~SDA_CONF; \
+                               clrbits(be16, I2C_BASE_DIR, SDA_CONF); \
                        } else { \
-                               *(unsigned char *)(I2C_BASE_PORT) &= ~SDA_BIT; \
-                               *(unsigned short *)(I2C_BASE_DIR) |= SDA_CONF; \
+                               clrbits(8, I2C_BASE_PORT, SDA_BIT); \
+                               setbits(be16, I2C_BASE_DIR, SDA_CONF); \
                        }
 #define I2C_SCL(bit)   if(bit) { \
-                               *(unsigned short *)(I2C_BASE_DIR) &=  ~SCL_CONF; \
+                               clrbits(be16, I2C_BASE_DIR, SCL_CONF); \
                        } else { \
-                               *(unsigned char *)(I2C_BASE_PORT) &= ~SCL_BIT; \
-                               *(unsigned short *)(I2C_BASE_DIR) |= SCL_CONF; \
+                               clrbits(8, I2C_BASE_PORT, SCL_BIT); \
+                               setbits(be16, I2C_BASE_DIR, SCL_CONF); \
                        }
 #define I2C_DELAY      udelay(50)      /* 1/4 I2C clock duration */