summaryrefslogtreecommitdiff
path: root/drivers/i2c
diff options
context:
space:
mode:
authorSylvain Lemieux <slemieux@tycoint.com>2015-08-04 17:04:41 -0400
committerTom Rini <trini@konsulko.com>2015-08-18 13:45:57 -0400
commit1933af15e2ce9dfdf64d6c663eb16963ae0341ad (patch)
treea889db69a047807a06227463b427f0f63aee6888 /drivers/i2c
parent30cb3bf4a961dcd59a8f72f714e900cbfe7991dd (diff)
downloadu-boot-imx-1933af15e2ce9dfdf64d6c663eb16963ae0341ad.zip
u-boot-imx-1933af15e2ce9dfdf64d6c663eb16963ae0341ad.tar.gz
u-boot-imx-1933af15e2ce9dfdf64d6c663eb16963ae0341ad.tar.bz2
i2c: lpc32xx: add support for OTG I2C
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>
Diffstat (limited to 'drivers/i2c')
-rw-r--r--drivers/i2c/lpc32xx_i2c.c20
1 files changed, 17 insertions, 3 deletions
diff --git a/drivers/i2c/lpc32xx_i2c.c b/drivers/i2c/lpc32xx_i2c.c
index 7f4eccd..e63260c 100644
--- a/drivers/i2c/lpc32xx_i2c.c
+++ b/drivers/i2c/lpc32xx_i2c.c
@@ -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)