]> git.sur5r.net Git - u-boot/blobdiff - common/soft_i2c.c
Use standard LAWAR_TRGT_IF_* defines for LAW setup on 85xx
[u-boot] / common / soft_i2c.c
index 77774801e87018f1e4ae962efc9b004583f3e56f..c5d7e205e5442d87cec9530b212bf873e7fc9bf3 100644 (file)
 #ifdef CONFIG_MPC8260                  /* only valid for MPC8260 */
 #include <ioports.h>
 #endif
+#ifdef CONFIG_AT91RM9200               /* need this for the at91rm9200 */
+#include <asm/io.h>
+#include <asm/arch/hardware.h>
+#endif
+#ifdef CONFIG_IXP425                   /* only valid for IXP425 */
+#include <asm/arch/ixp425.h>
+#endif
+#ifdef CONFIG_LPC2292
+#include <asm/arch/hardware.h>
+#endif
 #include <i2c.h>
 
 #if defined(CONFIG_SOFT_I2C)
 
 /* #define     DEBUG_I2C       */
 
+#ifdef DEBUG_I2C
+DECLARE_GLOBAL_DATA_PTR;
+#endif
+
 
 /*-----------------------------------------------------------------------
  * Definitions
@@ -49,7 +63,6 @@
 
 #ifdef DEBUG_I2C
 #define PRINTD(fmt,args...)    do {    \
-       DECLARE_GLOBAL_DATA_PTR;        \
        if (gd->have_console)           \
                printf (fmt ,##args);   \
        } while (0)
@@ -83,8 +96,12 @@ static void send_reset(void)
 #endif
        int j;
 
-       I2C_ACTIVE;
+       I2C_SCL(1);
        I2C_SDA(1);
+#ifdef I2C_INIT
+       I2C_INIT;
+#endif
+       I2C_TRISTATE;
        for(j = 0; j < 9; j++) {
                I2C_SCL(0);
                I2C_DELAY;
@@ -156,13 +173,10 @@ static void send_ack(int ack)
        volatile immap_t *immr = (immap_t *)CFG_IMMR;
 #endif
 
-       I2C_ACTIVE;
        I2C_SCL(0);
        I2C_DELAY;
-
-       I2C_SDA(ack);
-
        I2C_ACTIVE;
+       I2C_SDA(ack);
        I2C_DELAY;
        I2C_SCL(1);
        I2C_DELAY;
@@ -262,18 +276,11 @@ static uchar read_byte(int ack)
  */
 void i2c_init (int speed, int slaveaddr)
 {
-#ifdef CONFIG_8xx
-       volatile immap_t *immr = (immap_t *)CFG_IMMR;
-#endif
-
-#ifdef I2C_INIT
-       I2C_INIT;
-#endif
        /*
-         * WARNING: Do NOT save speed in a static variable: if the
-         * I2C routines are called before RAM is initialized (to read
-         * the DIMM SPD, for instance), RAM won't be usable and your
-         * system will crash.
+        * WARNING: Do NOT save speed in a static variable: if the
+        * I2C routines are called before RAM is initialized (to read
+        * the DIMM SPD, for instance), RAM won't be usable and your
+        * system will crash.
         */
        send_reset ();
 }
@@ -287,8 +294,12 @@ int i2c_probe(uchar addr)
 {
        int rc;
 
+       /*
+        * perform 1 byte write transaction with just address byte
+        * (fake write)
+        */
        send_start();
-       rc = write_byte ((addr << 1) | 1);
+       rc = write_byte ((addr << 1) | 0);
        send_stop();
 
        return (rc ? 1 : 0);
@@ -397,7 +408,7 @@ int  i2c_write(uchar chip, uint addr, int alen, uchar *buffer, int len)
  */
 uchar i2c_reg_read(uchar i2c_addr, uchar reg)
 {
-       char buf;
+       uchar buf;
 
        i2c_read(i2c_addr, reg, 1, &buf, 1);