]> git.sur5r.net Git - u-boot/commitdiff
i2c: lpc32xx: add support for OTG I2C
authorSylvain Lemieux <slemieux@tycoint.com>
Tue, 4 Aug 2015 21:04:41 +0000 (17:04 -0400)
committerTom Rini <trini@konsulko.com>
Tue, 18 Aug 2015 17:45:57 +0000 (13:45 -0400)
Updated the LPC32xx I2C driver to support
the OTG I2C that is part of the USB module.

Signed-off-by: Sylvain Lemieux <slemieux@tycoint.com>
Acked-by: Marek Vasut <marex@denx.de>
drivers/i2c/lpc32xx_i2c.c

index 7f4eccdf537e35ff5c8ad1b8733c799b356e85c2..e63260cc9b06c15ed530ff927efd385aeb33e318 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * LPC32xx I2C interface driver
  *
- * (C) Copyright 2014  DENX Software Engineering GmbH
+ * (C) Copyright 2014-2015  DENX Software Engineering GmbH
  * Written-by: Albert ARIBAUD - 3ADEV <albert.aribaud@3adev.fr>
  *
  * SPDX-License-Identifier:    GPL-2.0+
@@ -60,7 +60,8 @@ struct lpc32xx_i2c_registers {
 
 static struct lpc32xx_i2c_registers *lpc32xx_i2c[] = {
        (struct lpc32xx_i2c_registers *)I2C1_BASE,
-       (struct lpc32xx_i2c_registers *)I2C2_BASE
+       (struct lpc32xx_i2c_registers *)I2C2_BASE,
+       (struct lpc32xx_i2c_registers *)(USB_BASE + 0x300)
 };
 
 /* Set I2C bus speed */
@@ -68,11 +69,17 @@ static unsigned int lpc32xx_i2c_set_bus_speed(struct i2c_adapter *adap,
                        unsigned int speed)
 {
        int half_period;
+       int clk_rate;
 
        if (speed == 0)
                return -EINVAL;
 
-       half_period = (get_hclk_clk_rate() / speed) / 2;
+       if (adap->hwadapnr == 2)
+               /* OTG I2C clock source is different. */
+               clk_rate = get_periph_clk_rate();
+       else
+               clk_rate = get_hclk_clk_rate();
+       half_period = (clk_rate / speed) / 2;
 
        if ((half_period > 255) || (half_period < 0))
                return -EINVAL;
@@ -249,3 +256,10 @@ U_BOOT_I2C_ADAP_COMPLETE(lpc32xx_1, _i2c_init, lpc32xx_i2c_probe,
                         CONFIG_SYS_I2C_LPC32XX_SPEED,
                         CONFIG_SYS_I2C_LPC32XX_SLAVE,
                         1)
+
+U_BOOT_I2C_ADAP_COMPLETE(lpc32xx_2, _i2c_init, NULL,
+                        lpc32xx_i2c_read, lpc32xx_i2c_write,
+                        lpc32xx_i2c_set_bus_speed,
+                        100000,
+                        0,
+                        2)