Merge branch 'master' of git://git.denx.de/u-boot-atmel
[oweals/u-boot.git] / drivers / i2c / i2c_core.c
index b067b7c6ff39bd30075f0889151d19e20ef60f83..16b1aba32aaca5437cba1a25084dfefe3d4423d1 100644 (file)
@@ -56,25 +56,23 @@ void i2c_reloc_fixup(void)
                /* i2c_init() */
                addr = (unsigned long)i2c_adap_p->init;
                addr += gd->reloc_off;
-               i2c_adap_p->init = (void (*)(int, int))addr;
+               i2c_adap_p->init = (void *)addr;
                /* i2c_probe() */
                addr = (unsigned long)i2c_adap_p->probe;
                addr += gd->reloc_off;
-               i2c_adap_p->probe = (int (*)(uint8_t))addr;
+               i2c_adap_p->probe = (void *)addr;
                /* i2c_read() */
                addr = (unsigned long)i2c_adap_p->read;
                addr += gd->reloc_off;
-               i2c_adap_p->read = (int (*)(uint8_t, uint, int, uint8_t *,
-                                       int))addr;
+               i2c_adap_p->read = (void *)addr;
                /* i2c_write() */
                addr = (unsigned long)i2c_adap_p->write;
                addr += gd->reloc_off;
-               i2c_adap_p->write = (int (*)(uint8_t, uint, int, uint8_t *,
-                                       int))addr;
+               i2c_adap_p->write = (void *)addr;
                /* i2c_set_bus_speed() */
                addr = (unsigned long)i2c_adap_p->set_bus_speed;
                addr += gd->reloc_off;
-               i2c_adap_p->set_bus_speed = (uint (*)(uint))addr;
+               i2c_adap_p->set_bus_speed = (void *)addr;
                /* name */
                addr = (unsigned long)i2c_adap_p->name;
                addr += gd->reloc_off;
@@ -176,11 +174,11 @@ static int i2c_mux_set_all(void)
        return 0;
 }
 
-static int i2c_mux_disconnet_all(void)
+static int i2c_mux_disconnect_all(void)
 {
        struct  i2c_bus_hose *i2c_bus_tmp = &i2c_bus[I2C_BUS];
        int     i;
-       uint8_t buf;
+       uint8_t buf = 0;
 
        if (I2C_ADAP->init_done == 0)
                return 0;
@@ -199,7 +197,7 @@ static int i2c_mux_disconnet_all(void)
 
                        ret = I2C_ADAP->write(I2C_ADAP, chip, 0, 0, &buf, 1);
                        if (ret != 0) {
-                               printf("i2c: mux diconnect error\n");
+                               printf("i2c: mux disconnect error\n");
                                return ret;
                        }
                } while (i > 0);
@@ -231,11 +229,14 @@ static void i2c_init_bus(unsigned int bus_no, int speed, int slaveaddr)
 }
 
 /* implement possible board specific board init */
-static void __def_i2c_init_board(void)
+__weak void i2c_init_board(void)
+{
+}
+
+/* implement possible for i2c specific early i2c init */
+__weak void i2c_early_init_f(void)
 {
 }
-void i2c_init_board(void)
-       __attribute__((weak, alias("__def_i2c_init_board")));
 
 /*
  * i2c_init_all():
@@ -297,7 +298,7 @@ int i2c_set_bus_num(unsigned int bus)
        }
 
 #ifndef CONFIG_SYS_I2C_DIRECT_BUS
-       i2c_mux_disconnet_all();
+       i2c_mux_disconnect_all();
 #endif
 
        gd->cur_i2c_bus = bus;
@@ -351,7 +352,7 @@ unsigned int i2c_set_bus_speed(unsigned int speed)
                return 0;
        ret = I2C_ADAP->set_bus_speed(I2C_ADAP, speed);
        if (gd->flags & GD_FLG_RELOC)
-               I2C_ADAP->speed = ret;
+               I2C_ADAP->speed = (ret == 0) ? speed : 0;
 
        return ret;
 }
@@ -397,9 +398,7 @@ void i2c_reg_write(uint8_t addr, uint8_t reg, uint8_t val)
        i2c_write(addr, reg, 1, &val, 1);
 }
 
-void __i2c_init(int speed, int slaveaddr)
+__weak void i2c_init(int speed, int slaveaddr)
 {
        i2c_init_bus(i2c_get_bus_num(), speed, slaveaddr);
 }
-void i2c_init(int speed, int slaveaddr)
-       __attribute__((weak, alias("__i2c_init")));