]> git.kernelconcepts.de Git - karo-tx-uboot.git/commitdiff
i2c, zynq: convert zynq i2c driver to new multibus/multiadapter framework
authorHeiko Schocher <hs@denx.de>
Fri, 8 Nov 2013 06:30:53 +0000 (07:30 +0100)
committerHeiko Schocher <hs@denx.de>
Wed, 13 Nov 2013 05:18:27 +0000 (06:18 +0100)
- add zync i2c driver to new multibus/multiadpater support
- adapted all config files, which uses this driver

Signed-off-by: Heiko Schocher <hs@denx.de>
Cc: Joe Hershberger <joe.hershberger@ni.com>
Cc: Michal Simek <michal.simek@xilinx.com>
README
drivers/i2c/Makefile
drivers/i2c/zynq_i2c.c
include/configs/zynq.h

diff --git a/README b/README
index 53e56bb1874ac45924dd85b13fa72756964217f4..c97ff0af0b6283057b53ba992682b7cbfdbc7831 100644 (file)
--- a/README
+++ b/README
@@ -2071,6 +2071,11 @@ CBFS (Coreboot Filesystem) support
                  - CONFIG_SYS_OMAP24_I2C_SPEED4 speed channel 4
                  - CONFIG_SYS_OMAP24_I2C_SLAVE4 slave addr channel 4
 
+               - drivers/i2c/zynq_i2c.c
+                 - activate this driver with CONFIG_SYS_I2C_ZYNQ
+                 - set CONFIG_SYS_I2C_ZYNQ_SPEED for speed setting
+                 - set CONFIG_SYS_I2C_ZYNQ_SLAVE for slave addr
+
                additional defines:
 
                CONFIG_SYS_NUM_I2C_BUSES
index 298b17b3650b5ceda05a896cc8b2520e44a837d1..9dd90947d3c16ed6550667bfbbc73696220c7693 100644 (file)
@@ -28,4 +28,4 @@ obj-$(CONFIG_SYS_I2C_RCAR) += rcar_i2c.o
 obj-$(CONFIG_SYS_I2C_SH) += sh_i2c.o
 obj-$(CONFIG_SYS_I2C_SOFT) += soft_i2c.o
 obj-$(CONFIG_SYS_I2C_TEGRA) += tegra_i2c.o
-obj-$(CONFIG_ZYNQ_I2C) += zynq_i2c.o
+obj-$(CONFIG_SYS_I2C_ZYNQ) += zynq_i2c.o
index ce2d23f725bd6fcdd5af2cfdfef7ab2d2ba109f1..70a9aeafd531124c70c0f45afdf98541872fb1e2 100644 (file)
@@ -74,7 +74,8 @@ static struct zynq_i2c_registers *zynq_i2c =
        (struct zynq_i2c_registers *)ZYNQ_I2C_BASE;
 
 /* I2C init called by cmd_i2c when doing 'i2c reset'. */
-void i2c_init(int requested_speed, int slaveadd)
+static void zynq_i2c_init(struct i2c_adapter *adap, int requested_speed,
+                         int slaveadd)
 {
        /* 111MHz / ( (3 * 17) * 22 ) = ~100KHz */
        writel((16 << ZYNQ_I2C_CONTROL_DIV_B_SHIFT) |
@@ -151,7 +152,7 @@ static u32 zynq_i2c_wait(u32 mask)
  * I2C probe called by cmd_i2c when doing 'i2c probe'.
  * Begin read, nak data byte, end.
  */
-int i2c_probe(u8 dev)
+static int zynq_i2c_probe(struct i2c_adapter *adap, u8 dev)
 {
        /* Attempt to read a byte */
        setbits_le32(&zynq_i2c->control, ZYNQ_I2C_CONTROL_CLR_FIFO |
@@ -170,7 +171,8 @@ int i2c_probe(u8 dev)
  * I2C read called by cmd_i2c when doing 'i2c read' and by cmd_eeprom.c
  * Begin write, send address byte(s), begin read, receive data bytes, end.
  */
-int i2c_read(u8 dev, uint addr, int alen, u8 *data, int length)
+static int zynq_i2c_read(struct i2c_adapter *adap, u8 dev, uint addr,
+                        int alen, u8 *data, int length)
 {
        u32 status;
        u32 i = 0;
@@ -235,7 +237,8 @@ int i2c_read(u8 dev, uint addr, int alen, u8 *data, int length)
  * I2C write called by cmd_i2c when doing 'i2c write' and by cmd_eeprom.c
  * Begin write, send address byte(s), send data bytes, end.
  */
-int i2c_write(u8 dev, uint addr, int alen, u8 *data, int length)
+static int zynq_i2c_write(struct i2c_adapter *adap, u8 dev, uint addr,
+                         int alen, u8 *data, int length)
 {
        u8 *cur_data = data;
 
@@ -275,16 +278,16 @@ int i2c_write(u8 dev, uint addr, int alen, u8 *data, int length)
        return 0;
 }
 
-int i2c_set_bus_num(unsigned int bus)
+static unsigned int zynq_i2c_set_bus_speed(struct i2c_adapter *adap,
+                       unsigned int speed)
 {
-       /* Only support bus 0 */
-       if (bus > 0)
-               return -1;
-       return 0;
-}
+       if (speed != 1000000)
+               return -EINVAL;
 
-unsigned int i2c_get_bus_num(void)
-{
-       /* Only support bus 0 */
        return 0;
 }
+
+U_BOOT_I2C_ADAP_COMPLETE(zynq_0, zynq_i2c_init, zynq_i2c_probe, zynq_i2c_read,
+                        zynq_i2c_write, zynq_i2c_set_bus_speed,
+                        CONFIG_SYS_I2C_ZYNQ_SPEED, CONFIG_SYS_I2C_ZYNQ_SLAVE,
+                        0)
index 4c6e6e8f6a57cfbfe8f0dd6cac006cf03c485e67..82ec826f73544e549398950b063c065376617e4f 100644 (file)
 /* I2C */
 #if defined(CONFIG_ZYNQ_I2C0) || defined(CONFIG_ZYNQ_I2C1)
 # define CONFIG_CMD_I2C
-# define CONFIG_ZYNQ_I2C
-# define CONFIG_HARD_I2C
-# define CONFIG_SYS_I2C_SPEED          100000
-# define CONFIG_SYS_I2C_SLAVE          1
+# define CONFIG_SYS_I2C
+# define CONFIG_SYS_I2C_ZYNQ
+# define CONFIG_SYS_I2C_ZYNQ_SPEED             100000
+# define CONFIG_SYS_I2C_ZYNQ_SLAVE             1
 #endif
 
 #if defined(CONFIG_ZYNQ_DCC)