All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot] [PATCH 1/4] i2c: rcar_i2c: Remove the driver
@ 2018-05-01  7:03 Marek Vasut
  2018-05-01  7:03 ` [U-Boot] [PATCH 2/4] i2c: rcar_i2c: Add DM and DT capable I2C driver Marek Vasut
                   ` (3 more replies)
  0 siblings, 4 replies; 10+ messages in thread
From: Marek Vasut @ 2018-05-01  7:03 UTC (permalink / raw)
  To: u-boot

Remove the rcar_i2c driver, since it's no longer used by any
board and will be superseded by a DM and DT capable variant.

Signed-off-by: Marek Vasut <marek.vasut+renesas@gmail.com>
Cc: Heiko Schocher <hs@denx.de>
Cc: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
---
 drivers/i2c/Makefile   |   1 -
 drivers/i2c/rcar_i2c.c | 293 -------------------------------------------------
 2 files changed, 294 deletions(-)
 delete mode 100644 drivers/i2c/rcar_i2c.c

diff --git a/drivers/i2c/Makefile b/drivers/i2c/Makefile
index 169a2f1d7a..4a6e06fbc5 100644
--- a/drivers/i2c/Makefile
+++ b/drivers/i2c/Makefile
@@ -30,7 +30,6 @@ obj-$(CONFIG_SYS_I2C_MVTWSI) += mvtwsi.o
 obj-$(CONFIG_SYS_I2C_MXC) += mxc_i2c.o
 obj-$(CONFIG_SYS_I2C_MXS) += mxs_i2c.o
 obj-$(CONFIG_SYS_I2C_OMAP24XX) += omap24xx_i2c.o
-obj-$(CONFIG_SYS_I2C_RCAR) += rcar_i2c.o
 obj-$(CONFIG_SYS_I2C_RCAR_IIC) += rcar_iic.o
 obj-$(CONFIG_SYS_I2C_ROCKCHIP) += rk_i2c.o
 obj-$(CONFIG_SYS_I2C_S3C24X0) += s3c24x0_i2c.o exynos_hs_i2c.o
diff --git a/drivers/i2c/rcar_i2c.c b/drivers/i2c/rcar_i2c.c
deleted file mode 100644
index bfba443f62..0000000000
--- a/drivers/i2c/rcar_i2c.c
+++ /dev/null
@@ -1,293 +0,0 @@
-/*
- * drivers/i2c/rcar_i2c.c
- *
- * Copyright (C) 2013 Renesas Electronics Corporation
- * Copyright (C) 2013 Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com>
- *
- * SPDX-License-Identifier: GPL-2.0
- *
- * NOTE: This driver should be converted to driver model before June 2017.
- * Please see doc/driver-model/i2c-howto.txt for instructions.
- */
-
-#include <common.h>
-#include <i2c.h>
-#include <asm/io.h>
-
-DECLARE_GLOBAL_DATA_PTR;
-
-struct rcar_i2c {
-	u32 icscr;
-	u32 icmcr;
-	u32 icssr;
-	u32 icmsr;
-	u32 icsier;
-	u32 icmier;
-	u32 icccr;
-	u32 icsar;
-	u32 icmar;
-	u32 icrxdtxd;
-	u32 icccr2;
-	u32 icmpr;
-	u32 ichpr;
-	u32 iclpr;
-};
-
-#define MCR_MDBS	0x80	/* non-fifo mode switch	*/
-#define MCR_FSCL	0x40	/* override SCL pin	*/
-#define MCR_FSDA	0x20	/* override SDA pin	*/
-#define MCR_OBPC	0x10	/* override pins	*/
-#define MCR_MIE		0x08	/* master if enable	*/
-#define MCR_TSBE	0x04
-#define MCR_FSB		0x02	/* force stop bit	*/
-#define MCR_ESG		0x01	/* en startbit gen.	*/
-
-#define MSR_MASK	0x7f
-#define MSR_MNR		0x40	/* nack received	*/
-#define MSR_MAL		0x20	/* arbitration lost	*/
-#define MSR_MST		0x10	/* sent a stop		*/
-#define MSR_MDE		0x08
-#define MSR_MDT		0x04
-#define MSR_MDR		0x02
-#define MSR_MAT		0x01	/* slave addr xfer done	*/
-
-static const struct rcar_i2c *i2c_dev[CONFIF_SYS_RCAR_I2C_NUM_CONTROLLERS] = {
-	(struct rcar_i2c *)CONFIG_SYS_RCAR_I2C0_BASE,
-	(struct rcar_i2c *)CONFIG_SYS_RCAR_I2C1_BASE,
-	(struct rcar_i2c *)CONFIG_SYS_RCAR_I2C2_BASE,
-	(struct rcar_i2c *)CONFIG_SYS_RCAR_I2C3_BASE,
-};
-
-static void rcar_i2c_raw_rw_common(struct rcar_i2c *dev, u8 chip, uint addr)
-{
-	/* set slave address */
-	writel(chip << 1, &dev->icmar);
-	/* set register address */
-	writel(addr, &dev->icrxdtxd);
-	/* clear status */
-	writel(0, &dev->icmsr);
-	/* start master send */
-	writel(MCR_MDBS | MCR_MIE | MCR_ESG, &dev->icmcr);
-
-	while ((readl(&dev->icmsr) & (MSR_MAT | MSR_MDE))
-		!= (MSR_MAT | MSR_MDE))
-		udelay(10);
-
-	/* clear ESG */
-	writel(MCR_MDBS | MCR_MIE, &dev->icmcr);
-	/* start SCLclk */
-	writel(~(MSR_MAT | MSR_MDE), &dev->icmsr);
-
-	while (!(readl(&dev->icmsr) & MSR_MDE))
-		udelay(10);
-}
-
-static void rcar_i2c_raw_rw_finish(struct rcar_i2c *dev)
-{
-	while (!(readl(&dev->icmsr) & MSR_MST))
-		udelay(10);
-
-	writel(0, &dev->icmcr);
-}
-
-static int
-rcar_i2c_raw_write(struct rcar_i2c *dev, u8 chip, uint addr, u8 *val, int size)
-{
-	rcar_i2c_raw_rw_common(dev, chip, addr);
-
-	/* set send date */
-	writel(*val, &dev->icrxdtxd);
-	/* start SCLclk */
-	writel(~MSR_MDE, &dev->icmsr);
-
-	while (!(readl(&dev->icmsr) & MSR_MDE))
-		udelay(10);
-
-	/* set stop condition */
-	writel(MCR_MDBS | MCR_MIE | MCR_FSB, &dev->icmcr);
-	/* start SCLclk */
-	writel(~MSR_MDE, &dev->icmsr);
-
-	rcar_i2c_raw_rw_finish(dev);
-
-	return 0;
-}
-
-static u8
-rcar_i2c_raw_read(struct rcar_i2c *dev, u8 chip, uint addr)
-{
-	u8 ret;
-
-	rcar_i2c_raw_rw_common(dev, chip, addr);
-
-	/* set slave address, receive */
-	writel((chip << 1) | 1, &dev->icmar);
-	/* start master receive */
-	writel(MCR_MDBS | MCR_MIE | MCR_ESG, &dev->icmcr);
-	/* clear status */
-	writel(0, &dev->icmsr);
-
-	while ((readl(&dev->icmsr) & (MSR_MAT | MSR_MDR))
-		!= (MSR_MAT | MSR_MDR))
-		udelay(10);
-
-	/* clear ESG */
-	writel(MCR_MDBS | MCR_MIE, &dev->icmcr);
-	/* prepare stop condition */
-	writel(MCR_MDBS | MCR_MIE | MCR_FSB, &dev->icmcr);
-	/* start SCLclk */
-	writel(~(MSR_MAT | MSR_MDR), &dev->icmsr);
-
-	while (!(readl(&dev->icmsr) & MSR_MDR))
-		udelay(10);
-
-	/* get receive data */
-	ret = (u8)readl(&dev->icrxdtxd);
-	/* start SCLclk */
-	writel(~MSR_MDR, &dev->icmsr);
-
-	rcar_i2c_raw_rw_finish(dev);
-
-	return ret;
-}
-
-/*
- * SCL  = iicck / (20 + SCGD * 8 + F[(ticf + tr + intd) * iicck])
- * iicck  : I2C internal clock < 20 MHz
- * ticf : I2C SCL falling time: 35 ns
- * tr   : I2C SCL rising time:  200 ns
- * intd : LSI internal delay:   I2C0: 50 ns I2C1-3: 5
- * F[n] : n rounded up to an integer
- */
-static u32 rcar_clock_gen(int i2c_no, u32 bus_speed)
-{
-	u32 iicck, f, scl, scgd;
-	u32 intd = 5;
-
-	int bit = 0, cdf_width = 3;
-	for (bit = 0; bit < (1 << cdf_width); bit++) {
-		iicck = CONFIG_HP_CLK_FREQ / (1 + bit);
-		if (iicck < 20000000)
-			break;
-	}
-
-	if (bit > (1 << cdf_width)) {
-		puts("rcar-i2c: Can not get CDF\n");
-		return 0;
-	}
-
-	if (i2c_no == 0)
-		intd = 50;
-
-	f = (35 + 200 + intd) * (iicck / 1000000000);
-
-	for (scgd = 0; scgd < 0x40; scgd++) {
-		scl = iicck / (20 + (scgd * 8) + f);
-		if (scl <= bus_speed)
-			break;
-	}
-
-	if (scgd > 0x40) {
-		puts("rcar-i2c: Can not get SDGB\n");
-		return 0;
-	}
-
-	debug("%s: scl: %d\n", __func__, scl);
-	debug("%s: bit %x\n", __func__, bit);
-	debug("%s: scgd %x\n", __func__, scgd);
-	debug("%s: iccr %x\n", __func__, (scgd << (cdf_width) | bit));
-
-	return scgd << (cdf_width) | bit;
-}
-
-static void
-rcar_i2c_init(struct i2c_adapter *adap, int speed, int slaveadd)
-{
-	struct rcar_i2c *dev = (struct rcar_i2c *)i2c_dev[adap->hwadapnr];
-	u32 icccr = 0;
-
-	/* No i2c support prior to relocation */
-	if (!(gd->flags & GD_FLG_RELOC))
-		return;
-
-	/*
-	 * reset slave mode.
-	 * slave mode is not used on this driver
-	 */
-	writel(0, &dev->icsier);
-	writel(0, &dev->icsar);
-	writel(0, &dev->icscr);
-	writel(0, &dev->icssr);
-
-	/* reset master mode */
-	writel(0, &dev->icmier);
-	writel(0, &dev->icmcr);
-	writel(0, &dev->icmsr);
-	writel(0, &dev->icmar);
-
-	icccr = rcar_clock_gen(adap->hwadapnr, adap->speed);
-	if (icccr == 0)
-		puts("I2C: Init failed\n");
-	else
-		writel(icccr, &dev->icccr);
-}
-
-static int rcar_i2c_read(struct i2c_adapter *adap, uint8_t chip,
-			uint addr, int alen, u8 *data, int len)
-{
-	struct rcar_i2c *dev = (struct rcar_i2c *)i2c_dev[adap->hwadapnr];
-	int i;
-
-	for (i = 0; i < len; i++)
-		data[i] = rcar_i2c_raw_read(dev, chip, addr + i);
-
-	return 0;
-}
-
-static int rcar_i2c_write(struct i2c_adapter *adap, uint8_t chip, uint addr,
-			int alen, u8 *data, int len)
-{
-	struct rcar_i2c *dev = (struct rcar_i2c *)i2c_dev[adap->hwadapnr];
-	return rcar_i2c_raw_write(dev, chip, addr, data, len);
-}
-
-static int
-rcar_i2c_probe(struct i2c_adapter *adap, u8 dev)
-{
-	return rcar_i2c_read(adap, dev, 0, 0, NULL, 0);
-}
-
-static unsigned int rcar_i2c_set_bus_speed(struct i2c_adapter *adap,
-			unsigned int speed)
-{
-	struct rcar_i2c *dev = (struct rcar_i2c *)i2c_dev[adap->hwadapnr];
-	u32 icccr;
-	int ret = 0;
-
-	rcar_i2c_raw_rw_finish(dev);
-
-	icccr = rcar_clock_gen(adap->hwadapnr, speed);
-	if (icccr == 0) {
-		puts("I2C: Init failed\n");
-		ret = -1;
-	} else {
-		writel(icccr, &dev->icccr);
-	}
-	return ret;
-}
-
-/*
- * Register RCAR i2c adapters
- */
-U_BOOT_I2C_ADAP_COMPLETE(rcar_0, rcar_i2c_init, rcar_i2c_probe, rcar_i2c_read,
-			 rcar_i2c_write, rcar_i2c_set_bus_speed,
-			 CONFIG_SYS_RCAR_I2C0_SPEED, 0, 0)
-U_BOOT_I2C_ADAP_COMPLETE(rcar_1, rcar_i2c_init, rcar_i2c_probe, rcar_i2c_read,
-			 rcar_i2c_write, rcar_i2c_set_bus_speed,
-			 CONFIG_SYS_RCAR_I2C1_SPEED, 0, 1)
-U_BOOT_I2C_ADAP_COMPLETE(rcar_2, rcar_i2c_init, rcar_i2c_probe, rcar_i2c_read,
-			 rcar_i2c_write, rcar_i2c_set_bus_speed,
-			 CONFIG_SYS_RCAR_I2C2_SPEED, 0, 2)
-U_BOOT_I2C_ADAP_COMPLETE(rcar_3, rcar_i2c_init, rcar_i2c_probe, rcar_i2c_read,
-			 rcar_i2c_write, rcar_i2c_set_bus_speed,
-			 CONFIG_SYS_RCAR_I2C3_SPEED, 0, 3)
-- 
2.16.2

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [U-Boot] [PATCH 2/4] i2c: rcar_i2c: Add DM and DT capable I2C driver
  2018-05-01  7:03 [U-Boot] [PATCH 1/4] i2c: rcar_i2c: Remove the driver Marek Vasut
@ 2018-05-01  7:03 ` Marek Vasut
  2018-05-10  7:20   ` Heiko Schocher
  2018-05-01  7:03 ` [U-Boot] [PATCH 3/4] ARM: rmobile: Enable DM capable RCar I2C driver on Lager Marek Vasut
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 10+ messages in thread
From: Marek Vasut @ 2018-05-01  7:03 UTC (permalink / raw)
  To: u-boot

Add derivative of the rcar_i2c driver which is capable of
probing itself from DM and uses DT.

Signed-off-by: Marek Vasut <marek.vasut+renesas@gmail.com>
Cc: Heiko Schocher <hs@denx.de>
Cc: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
---
 drivers/i2c/Kconfig    |   6 +
 drivers/i2c/Makefile   |   1 +
 drivers/i2c/rcar_i2c.c | 355 +++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 362 insertions(+)
 create mode 100644 drivers/i2c/rcar_i2c.c

diff --git a/drivers/i2c/Kconfig b/drivers/i2c/Kconfig
index 7fb201d8e6..5eceab9ea8 100644
--- a/drivers/i2c/Kconfig
+++ b/drivers/i2c/Kconfig
@@ -339,6 +339,12 @@ config SYS_OMAP24_I2C_SPEED
 	  OMAP24xx Slave speed channel 0
 endif
 
+config SYS_I2C_RCAR_I2C
+	bool "Renesas RCar I2C driver"
+	depends on (RCAR_GEN3 || RCAR_GEN2) && DM_I2C
+	help
+	  Support for Renesas RCar I2C controller.
+
 config SYS_I2C_RCAR_IIC
 	bool "Renesas RCar Gen3 IIC driver"
 	depends on (RCAR_GEN3 || RCAR_GEN2) && DM_I2C
diff --git a/drivers/i2c/Makefile b/drivers/i2c/Makefile
index 4a6e06fbc5..4e9f233cda 100644
--- a/drivers/i2c/Makefile
+++ b/drivers/i2c/Makefile
@@ -30,6 +30,7 @@ obj-$(CONFIG_SYS_I2C_MVTWSI) += mvtwsi.o
 obj-$(CONFIG_SYS_I2C_MXC) += mxc_i2c.o
 obj-$(CONFIG_SYS_I2C_MXS) += mxs_i2c.o
 obj-$(CONFIG_SYS_I2C_OMAP24XX) += omap24xx_i2c.o
+obj-$(CONFIG_SYS_I2C_RCAR_I2C) += rcar_i2c.o
 obj-$(CONFIG_SYS_I2C_RCAR_IIC) += rcar_iic.o
 obj-$(CONFIG_SYS_I2C_ROCKCHIP) += rk_i2c.o
 obj-$(CONFIG_SYS_I2C_S3C24X0) += s3c24x0_i2c.o exynos_hs_i2c.o
diff --git a/drivers/i2c/rcar_i2c.c b/drivers/i2c/rcar_i2c.c
new file mode 100644
index 0000000000..6010ccde61
--- /dev/null
+++ b/drivers/i2c/rcar_i2c.c
@@ -0,0 +1,355 @@
+/*
+ * drivers/i2c/rcar_i2c.c
+ *
+ * Copyright (C) 2018 Marek Vasut <marek.vasut@gmail.com>
+ *
+ * Clock configuration based on Linux i2c-rcar.c:
+ * Copyright (C) 2014-15 Wolfram Sang <wsa@sang-engineering.com>
+ * Copyright (C) 2011-2015 Renesas Electronics Corporation
+ * Copyright (C) 2012-14 Renesas Solutions Corp.
+ *   Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
+ */
+
+#include <common.h>
+#include <clk.h>
+#include <dm.h>
+#include <i2c.h>
+#include <asm/io.h>
+#include <wait_bit.h>
+
+#define RCAR_I2C_ICSCR			0x00
+#define RCAR_I2C_ICMCR			0x04
+#define RCAR_I2C_ICMCR_MDBS		BIT(7)
+#define RCAR_I2C_ICMCR_FSCL		BIT(6)
+#define RCAR_I2C_ICMCR_FSDA		BIT(5)
+#define RCAR_I2C_ICMCR_OBPC		BIT(4)
+#define RCAR_I2C_ICMCR_MIE		BIT(3)
+#define RCAR_I2C_ICMCR_TSBE		BIT(2)
+#define RCAR_I2C_ICMCR_FSB		BIT(1)
+#define RCAR_I2C_ICMCR_ESG		BIT(0)
+#define RCAR_I2C_ICSSR			0x08
+#define RCAR_I2C_ICMSR			0x0c
+#define RCAR_I2C_ICMSR_MASK		0x7f
+#define RCAR_I2C_ICMSR_MNR		BIT(6)
+#define RCAR_I2C_ICMSR_MAL		BIT(5)
+#define RCAR_I2C_ICMSR_MST		BIT(4)
+#define RCAR_I2C_ICMSR_MDE		BIT(3)
+#define RCAR_I2C_ICMSR_MDT		BIT(2)
+#define RCAR_I2C_ICMSR_MDR		BIT(1)
+#define RCAR_I2C_ICMSR_MAT		BIT(0)
+#define RCAR_I2C_ICSIER			0x10
+#define RCAR_I2C_ICMIER			0x14
+#define RCAR_I2C_ICCCR			0x18
+#define RCAR_I2C_ICCCR_SCGD_OFF		3
+#define RCAR_I2C_ICSAR			0x1c
+#define RCAR_I2C_ICMAR			0x20
+#define RCAR_I2C_ICRXD_ICTXD		0x24
+
+struct rcar_i2c_priv {
+	void __iomem		*base;
+	struct clk		clk;
+	u32			intdelay;
+	u32			icccr;
+};
+
+static int rcar_i2c_finish(struct udevice *dev)
+{
+	struct rcar_i2c_priv *priv = dev_get_priv(dev);
+	int ret;
+
+	ret = wait_for_bit_le32(priv->base + RCAR_I2C_ICMSR, RCAR_I2C_ICMSR_MST,
+				true, 10, true);
+
+	writel(0, priv->base + RCAR_I2C_ICSSR);
+	writel(0, priv->base + RCAR_I2C_ICMSR);
+	writel(0, priv->base + RCAR_I2C_ICMCR);
+
+	return ret;
+}
+
+static void rcar_i2c_recover(struct udevice *dev)
+{
+	struct rcar_i2c_priv *priv = dev_get_priv(dev);
+	u32 mcr = RCAR_I2C_ICMCR_MDBS | RCAR_I2C_ICMCR_OBPC;
+	u32 mcra = mcr | RCAR_I2C_ICMCR_FSDA;
+	int i;
+
+	/* Send 9 SCL pulses */
+	for (i = 0; i < 9; i++) {
+		writel(mcra | RCAR_I2C_ICMCR_FSCL, priv->base + RCAR_I2C_ICMCR);
+		udelay(5);
+		writel(mcra, priv->base + RCAR_I2C_ICMCR);
+		udelay(5);
+	}
+
+	/* Send stop condition */
+	udelay(5);
+	writel(mcra, priv->base + RCAR_I2C_ICMCR);
+	udelay(5);
+	writel(mcr, priv->base + RCAR_I2C_ICMCR);
+	udelay(5);
+	writel(mcr | RCAR_I2C_ICMCR_FSCL, priv->base + RCAR_I2C_ICMCR);
+	udelay(5);
+	writel(mcra | RCAR_I2C_ICMCR_FSCL, priv->base + RCAR_I2C_ICMCR);
+	udelay(5);
+}
+
+static int rcar_i2c_set_addr(struct udevice *dev, u8 chip, u8 read)
+{
+	struct rcar_i2c_priv *priv = dev_get_priv(dev);
+	u32 mask = RCAR_I2C_ICMSR_MAT |
+		   (read ? RCAR_I2C_ICMSR_MDR : RCAR_I2C_ICMSR_MDE);
+	u32 val;
+	int ret;
+
+	writel(0, priv->base + RCAR_I2C_ICMIER);
+	writel(RCAR_I2C_ICMCR_MDBS, priv->base + RCAR_I2C_ICMCR);
+	writel(0, priv->base + RCAR_I2C_ICMSR);
+	writel(priv->icccr, priv->base + RCAR_I2C_ICCCR);
+
+	ret = wait_for_bit_le32(priv->base + RCAR_I2C_ICMCR,
+				RCAR_I2C_ICMCR_FSDA, false, 2, true);
+	if (ret) {
+		rcar_i2c_recover(dev);
+		val = readl(priv->base + RCAR_I2C_ICMSR);
+		if (val & RCAR_I2C_ICMCR_FSDA) {
+			dev_err(dev, "Bus busy, aborting\n");
+			return ret;
+		}
+	}
+
+	writel((chip << 1) | read, priv->base + RCAR_I2C_ICMAR);
+	writel(0, priv->base + RCAR_I2C_ICMSR);
+	writel(RCAR_I2C_ICMCR_MDBS | RCAR_I2C_ICMCR_MIE | RCAR_I2C_ICMCR_ESG,
+	       priv->base + RCAR_I2C_ICMCR);
+
+	ret = wait_for_bit_le32(priv->base + RCAR_I2C_ICMSR, mask,
+				true, 100, true);
+	if (ret)
+		return ret;
+
+	/* Check NAK */
+	if (readl(priv->base + RCAR_I2C_ICMSR) & RCAR_I2C_ICMSR_MNR)
+		return -EREMOTEIO;
+
+	return 0;
+}
+
+static int rcar_i2c_read_common(struct udevice *dev, struct i2c_msg *msg)
+{
+	struct rcar_i2c_priv *priv = dev_get_priv(dev);
+	u32 icmcr = RCAR_I2C_ICMCR_MDBS | RCAR_I2C_ICMCR_MIE;
+	int i, ret = -EREMOTEIO;
+
+	ret = rcar_i2c_set_addr(dev, msg->addr, 1);
+	if (ret)
+		return ret;
+
+	for (i = 0; i < msg->len; i++) {
+
+		if (msg->len - 1 == i)
+			icmcr |= RCAR_I2C_ICMCR_FSB;
+
+		writel(icmcr, priv->base + RCAR_I2C_ICMCR);
+		writel(~RCAR_I2C_ICMSR_MDR, priv->base + RCAR_I2C_ICMSR);
+
+		ret = wait_for_bit_le32(priv->base + RCAR_I2C_ICMSR,
+					RCAR_I2C_ICMSR_MDR, true, 100, true);
+		if (ret)
+			return ret;
+
+		msg->buf[i] = readl(priv->base + RCAR_I2C_ICRXD_ICTXD) & 0xff;
+	}
+
+	writel(~RCAR_I2C_ICMSR_MDR, priv->base + RCAR_I2C_ICMSR);
+
+	return rcar_i2c_finish(dev);
+}
+
+static int rcar_i2c_write_common(struct udevice *dev, struct i2c_msg *msg)
+{
+	struct rcar_i2c_priv *priv = dev_get_priv(dev);
+	u32 icmcr = RCAR_I2C_ICMCR_MDBS | RCAR_I2C_ICMCR_MIE;
+	int i, ret = -EREMOTEIO;
+
+	ret = rcar_i2c_set_addr(dev, msg->addr, 0);
+	if (ret)
+		return ret;
+
+	for (i = 0; i < msg->len; i++) {
+		writel(msg->buf[i], priv->base + RCAR_I2C_ICRXD_ICTXD);
+		writel(icmcr, priv->base + RCAR_I2C_ICMCR);
+		writel(~RCAR_I2C_ICMSR_MDE, priv->base + RCAR_I2C_ICMSR);
+
+		ret = wait_for_bit_le32(priv->base + RCAR_I2C_ICMSR,
+					RCAR_I2C_ICMSR_MDE, true, 100, true);
+		if (ret)
+			return ret;
+	}
+
+	writel(~RCAR_I2C_ICMSR_MDE, priv->base + RCAR_I2C_ICMSR);
+	icmcr |= RCAR_I2C_ICMCR_FSB;
+	writel(icmcr, priv->base + RCAR_I2C_ICMCR);
+
+	return rcar_i2c_finish(dev);
+}
+
+static int rcar_i2c_xfer(struct udevice *dev, struct i2c_msg *msg, int nmsgs)
+{
+	int ret;
+
+	for (; nmsgs > 0; nmsgs--, msg++) {
+		if (msg->flags & I2C_M_RD)
+			ret = rcar_i2c_read_common(dev, msg);
+		else
+			ret = rcar_i2c_write_common(dev, msg);
+
+		if (ret)
+			return -EREMOTEIO;
+	}
+
+	return ret;
+}
+
+static int rcar_i2c_probe_chip(struct udevice *dev, uint addr, uint flags)
+{
+	struct rcar_i2c_priv *priv = dev_get_priv(dev);
+	int ret;
+
+	/* Ignore address 0, slave address */
+	if (addr == 0)
+		return -EINVAL;
+
+	ret = rcar_i2c_set_addr(dev, addr, 1);
+	writel(0, priv->base + RCAR_I2C_ICMSR);
+	return ret;
+}
+
+static int rcar_i2c_set_speed(struct udevice *dev, uint bus_freq_hz)
+{
+	struct rcar_i2c_priv *priv = dev_get_priv(dev);
+	u32 scgd, cdf, round, ick, sum, scl;
+	unsigned long rate;
+
+	/*
+	 * calculate SCL clock
+	 * see
+	 *	ICCCR
+	 *
+	 * ick	= clkp / (1 + CDF)
+	 * SCL	= ick / (20 + SCGD * 8 + F[(ticf + tr + intd) * ick])
+	 *
+	 * ick  : I2C internal clock < 20 MHz
+	 * ticf : I2C SCL falling time
+	 * tr   : I2C SCL rising  time
+	 * intd : LSI internal delay
+	 * clkp : peripheral_clk
+	 * F[]  : integer up-valuation
+	 */
+	rate = clk_get_rate(&priv->clk);
+	cdf = rate / 20000000;
+	if (cdf >= 8) {
+		dev_err(dev, "Input clock %lu too high\n", rate);
+		return -EIO;
+	}
+	ick = rate / (cdf + 1);
+
+	/*
+	 * it is impossible to calculate large scale
+	 * number on u32. separate it
+	 *
+	 * F[(ticf + tr + intd) * ick] with sum = (ticf + tr + intd)
+	 *  = F[sum * ick / 1000000000]
+	 *  = F[(ick / 1000000) * sum / 1000]
+	 */
+	sum = 35 + 200 + priv->intdelay;
+	round = (ick + 500000) / 1000000 * sum;
+	round = (round + 500) / 1000;
+
+	/*
+	 * SCL	= ick / (20 + SCGD * 8 + F[(ticf + tr + intd) * ick])
+	 *
+	 * Calculation result (= SCL) should be less than
+	 * bus_speed for hardware safety
+	 *
+	 * We could use something along the lines of
+	 *	div = ick / (bus_speed + 1) + 1;
+	 *	scgd = (div - 20 - round + 7) / 8;
+	 *	scl = ick / (20 + (scgd * 8) + round);
+	 * (not fully verified) but that would get pretty involved
+	 */
+	for (scgd = 0; scgd < 0x40; scgd++) {
+		scl = ick / (20 + (scgd * 8) + round);
+		if (scl <= bus_freq_hz)
+			goto scgd_find;
+	}
+	dev_err(dev, "it is impossible to calculate best SCL\n");
+	return -EIO;
+
+scgd_find:
+	dev_dbg(dev, "clk %d/%d(%lu), round %u, CDF:0x%x, SCGD: 0x%x\n",
+		scl, bus_freq_hz, clk_get_rate(&priv->clk), round, cdf, scgd);
+
+	priv->icccr = (scgd << RCAR_I2C_ICCCR_SCGD_OFF) | cdf;
+	writel(priv->icccr, priv->base + RCAR_I2C_ICCCR);
+
+	return 0;
+}
+
+static int rcar_i2c_probe(struct udevice *dev)
+{
+	struct rcar_i2c_priv *priv = dev_get_priv(dev);
+	int ret;
+
+	priv->base = dev_read_addr_ptr(dev);
+	priv->intdelay = dev_read_u32_default(dev,
+					      "i2c-scl-internal-delay-ns", 5);
+
+	ret = clk_get_by_index(dev, 0, &priv->clk);
+	if (ret)
+		return ret;
+
+	ret = clk_enable(&priv->clk);
+	if (ret)
+		return ret;
+
+	/* reset slave mode */
+	writel(0, priv->base + RCAR_I2C_ICSIER);
+	writel(0, priv->base + RCAR_I2C_ICSAR);
+	writel(0, priv->base + RCAR_I2C_ICSCR);
+	writel(0, priv->base + RCAR_I2C_ICSSR);
+
+	/* reset master mode */
+	writel(0, priv->base + RCAR_I2C_ICMIER);
+	writel(0, priv->base + RCAR_I2C_ICMCR);
+	writel(0, priv->base + RCAR_I2C_ICMSR);
+	writel(0, priv->base + RCAR_I2C_ICMAR);
+
+	ret = rcar_i2c_set_speed(dev, 100000);
+	if (ret)
+		clk_disable(&priv->clk);
+
+	return ret;
+}
+
+static const struct dm_i2c_ops rcar_i2c_ops = {
+	.xfer		= rcar_i2c_xfer,
+	.probe_chip	= rcar_i2c_probe_chip,
+	.set_bus_speed	= rcar_i2c_set_speed,
+};
+
+static const struct udevice_id rcar_i2c_ids[] = {
+	{ .compatible = "renesas,rcar-gen2-i2c" },
+	{ }
+};
+
+U_BOOT_DRIVER(i2c_rcar) = {
+	.name		= "i2c_rcar",
+	.id		= UCLASS_I2C,
+	.of_match	= rcar_i2c_ids,
+	.probe		= rcar_i2c_probe,
+	.priv_auto_alloc_size = sizeof(struct rcar_i2c_priv),
+	.ops		= &rcar_i2c_ops,
+};
-- 
2.16.2

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [U-Boot] [PATCH 3/4] ARM: rmobile: Enable DM capable RCar I2C driver on Lager
  2018-05-01  7:03 [U-Boot] [PATCH 1/4] i2c: rcar_i2c: Remove the driver Marek Vasut
  2018-05-01  7:03 ` [U-Boot] [PATCH 2/4] i2c: rcar_i2c: Add DM and DT capable I2C driver Marek Vasut
@ 2018-05-01  7:03 ` Marek Vasut
  2018-05-10  7:23   ` Heiko Schocher
  2018-05-01  7:03 ` [U-Boot] [PATCH 4/4] ARM: rmobile: Enable DM capable RCar I2C driver on Silk Marek Vasut
  2018-05-08  8:14 ` [U-Boot] [PATCH 1/4] i2c: rcar_i2c: Remove the driver Heiko Schocher
  3 siblings, 1 reply; 10+ messages in thread
From: Marek Vasut @ 2018-05-01  7:03 UTC (permalink / raw)
  To: u-boot

Enable the DM capable driver instead of the legacy one.

Signed-off-by: Marek Vasut <marek.vasut+renesas@gmail.com>
Cc: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
---
 configs/lager_defconfig | 1 +
 1 file changed, 1 insertion(+)

diff --git a/configs/lager_defconfig b/configs/lager_defconfig
index 1071da24d2..7dcd9b7dd8 100644
--- a/configs/lager_defconfig
+++ b/configs/lager_defconfig
@@ -53,6 +53,7 @@ CONFIG_CLK_RENESAS=y
 CONFIG_DM_GPIO=y
 CONFIG_RCAR_GPIO=y
 CONFIG_DM_I2C=y
+CONFIG_SYS_I2C_RCAR_I2C=y
 CONFIG_SYS_I2C_RCAR_IIC=y
 CONFIG_DM_MMC=y
 CONFIG_SH_MMCIF=y
-- 
2.16.2

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [U-Boot] [PATCH 4/4] ARM: rmobile: Enable DM capable RCar I2C driver on Silk
  2018-05-01  7:03 [U-Boot] [PATCH 1/4] i2c: rcar_i2c: Remove the driver Marek Vasut
  2018-05-01  7:03 ` [U-Boot] [PATCH 2/4] i2c: rcar_i2c: Add DM and DT capable I2C driver Marek Vasut
  2018-05-01  7:03 ` [U-Boot] [PATCH 3/4] ARM: rmobile: Enable DM capable RCar I2C driver on Lager Marek Vasut
@ 2018-05-01  7:03 ` Marek Vasut
  2018-05-08  8:14 ` [U-Boot] [PATCH 1/4] i2c: rcar_i2c: Remove the driver Heiko Schocher
  3 siblings, 0 replies; 10+ messages in thread
From: Marek Vasut @ 2018-05-01  7:03 UTC (permalink / raw)
  To: u-boot

Enable the DM capable driver instead of the legacy one.

Signed-off-by: Marek Vasut <marek.vasut+renesas@gmail.com>
Cc: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
---
 configs/silk_defconfig | 1 +
 1 file changed, 1 insertion(+)

diff --git a/configs/silk_defconfig b/configs/silk_defconfig
index 4cb1179a68..70c5219502 100644
--- a/configs/silk_defconfig
+++ b/configs/silk_defconfig
@@ -53,6 +53,7 @@ CONFIG_CLK_RENESAS=y
 CONFIG_DM_GPIO=y
 CONFIG_RCAR_GPIO=y
 CONFIG_DM_I2C=y
+CONFIG_SYS_I2C_RCAR_I2C=y
 CONFIG_SYS_I2C_RCAR_IIC=y
 CONFIG_DM_MMC=y
 CONFIG_SH_MMCIF=y
-- 
2.16.2

^ permalink raw reply related	[flat|nested] 10+ messages in thread

* [U-Boot] [PATCH 1/4] i2c: rcar_i2c: Remove the driver
  2018-05-01  7:03 [U-Boot] [PATCH 1/4] i2c: rcar_i2c: Remove the driver Marek Vasut
                   ` (2 preceding siblings ...)
  2018-05-01  7:03 ` [U-Boot] [PATCH 4/4] ARM: rmobile: Enable DM capable RCar I2C driver on Silk Marek Vasut
@ 2018-05-08  8:14 ` Heiko Schocher
  2018-05-08  9:28   ` Marek Vasut
  3 siblings, 1 reply; 10+ messages in thread
From: Heiko Schocher @ 2018-05-08  8:14 UTC (permalink / raw)
  To: u-boot

Hello Marek,

Am 01.05.2018 um 09:03 schrieb Marek Vasut:
> Remove the rcar_i2c driver, since it's no longer used by any
> board and will be superseded by a DM and DT capable variant.
> 
> Signed-off-by: Marek Vasut <marek.vasut+renesas@gmail.com>
> Cc: Heiko Schocher <hs@denx.de>
> Cc: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
> ---
>   drivers/i2c/Makefile   |   1 -
>   drivers/i2c/rcar_i2c.c | 293 -------------------------------------------------
>   2 files changed, 294 deletions(-)
>   delete mode 100644 drivers/i2c/rcar_i2c.c

checkpatch says:

2018-05-08 03:12:02,870:CON    :tbotlib   # tb_ctrl: ^[[33mWARNING:^[[0m added, moved or deleted 
file(s), does MAINTAINERS need updating?
#41:
deleted file mode 100644

total: 0 errors, 1 warnings, 0 checks, 7 lines checked

NOTE: For some of the reported defects, checkpatch may be able to
       mechanically convert to the typical style using --fix or --fix-inplace.

mbox has style problems, please review.

And applying patch to current mainline fails:

2018-05-08 03:12:04,014:CON    :tbotlib   # tb_ctrl: git am -3 mbox
2018-05-08 03:12:04,156:CON    :tbotlib   # tb_ctrl: Applying: i2c: rcar_i2c: Remove the driver
Using index info to reconstruct a base tree...
M	drivers/i2c/Makefile
M	drivers/i2c/rcar_i2c.c
Falling back to patching base and 3-way merge...
CONFLICT (modify/delete): drivers/i2c/rcar_i2c.c deleted in i2c: rcar_i2c: Remove the driver and 
modified in HEAD. Version HEAD of drivers/i2c/rcar_i2c.c left in tree.
Auto-merging drivers/i2c/Makefile
error: Failed to merge in the changes.
Patch failed at 0001 i2c: rcar_i2c: Remove the driver
The copy of the patch that failed is found in: .git/rebase-apply/patch
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".
hs at pollux [ 5:12:04] ttbott>

see full log:
http://xeidos.ddns.net/tbot/id_740/tbot.txt

Before I make a dummy mistake, can you please rebase your patchset?

Thanks!

Hmm.. why do you remove the driver in this patch, and add it again
in patch 2 ?

Isn;t it better to squash this 2 patches into one, so we see your
changes?

bye,
Heiko
-- 
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-52   Fax: +49-8142-66989-80   Email: hs at denx.de

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [U-Boot] [PATCH 1/4] i2c: rcar_i2c: Remove the driver
  2018-05-08  8:14 ` [U-Boot] [PATCH 1/4] i2c: rcar_i2c: Remove the driver Heiko Schocher
@ 2018-05-08  9:28   ` Marek Vasut
  0 siblings, 0 replies; 10+ messages in thread
From: Marek Vasut @ 2018-05-08  9:28 UTC (permalink / raw)
  To: u-boot

On 05/08/2018 10:14 AM, Heiko Schocher wrote:
> Hello Marek,
> 
> Am 01.05.2018 um 09:03 schrieb Marek Vasut:
>> Remove the rcar_i2c driver, since it's no longer used by any
>> board and will be superseded by a DM and DT capable variant.
>>
>> Signed-off-by: Marek Vasut <marek.vasut+renesas@gmail.com>
>> Cc: Heiko Schocher <hs@denx.de>
>> Cc: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
>> ---
>>   drivers/i2c/Makefile   |   1 -
>>   drivers/i2c/rcar_i2c.c | 293
>> -------------------------------------------------
>>   2 files changed, 294 deletions(-)
>>   delete mode 100644 drivers/i2c/rcar_i2c.c
> 
> checkpatch says:
> 
> 2018-05-08 03:12:02,870:CON    :tbotlib   # tb_ctrl: ^[[33mWARNING:^[[0m
> added, moved or deleted file(s), does MAINTAINERS need updating?
> #41:
> deleted file mode 100644
> 
> total: 0 errors, 1 warnings, 0 checks, 7 lines checked
> 
> NOTE: For some of the reported defects, checkpatch may be able to
>       mechanically convert to the typical style using --fix or
> --fix-inplace.
> 
> mbox has style problems, please review.
> 
> And applying patch to current mainline fails:
> 
> 2018-05-08 03:12:04,014:CON    :tbotlib   # tb_ctrl: git am -3 mbox
> 2018-05-08 03:12:04,156:CON    :tbotlib   # tb_ctrl: Applying: i2c:
> rcar_i2c: Remove the driver
> Using index info to reconstruct a base tree...
> M    drivers/i2c/Makefile
> M    drivers/i2c/rcar_i2c.c
> Falling back to patching base and 3-way merge...
> CONFLICT (modify/delete): drivers/i2c/rcar_i2c.c deleted in i2c:
> rcar_i2c: Remove the driver and modified in HEAD. Version HEAD of
> drivers/i2c/rcar_i2c.c left in tree.
> Auto-merging drivers/i2c/Makefile
> error: Failed to merge in the changes.
> Patch failed at 0001 i2c: rcar_i2c: Remove the driver
> The copy of the patch that failed is found in: .git/rebase-apply/patch
> When you have resolved this problem, run "git am --continue".
> If you prefer to skip this patch, run "git am --skip" instead.
> To restore the original branch and stop patching, run "git am --abort".
> hs at pollux [ 5:12:04] ttbott>
> 
> see full log:
> http://xeidos.ddns.net/tbot/id_740/tbot.txt
> 
> Before I make a dummy mistake, can you please rebase your patchset?
> 
> Thanks!
> 
> Hmm.. why do you remove the driver in this patch, and add it again
> in patch 2 ?

I am replacing it with a different/new driver, since the old one is broken.

> Isn;t it better to squash this 2 patches into one, so we see your
> changes?

No, that'd be just unreviewable mess. Review 2/4 as a new driver.

-- 
Best regards,
Marek Vasut

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [U-Boot] [PATCH 2/4] i2c: rcar_i2c: Add DM and DT capable I2C driver
  2018-05-01  7:03 ` [U-Boot] [PATCH 2/4] i2c: rcar_i2c: Add DM and DT capable I2C driver Marek Vasut
@ 2018-05-10  7:20   ` Heiko Schocher
  0 siblings, 0 replies; 10+ messages in thread
From: Heiko Schocher @ 2018-05-10  7:20 UTC (permalink / raw)
  To: u-boot

Hello Marek,

Am 01.05.2018 um 09:03 schrieb Marek Vasut:
> Add derivative of the rcar_i2c driver which is capable of
> probing itself from DM and uses DT.
> 
> Signed-off-by: Marek Vasut <marek.vasut+renesas@gmail.com>
> Cc: Heiko Schocher <hs@denx.de>
> Cc: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
> ---
>   drivers/i2c/Kconfig    |   6 +
>   drivers/i2c/Makefile   |   1 +
>   drivers/i2c/rcar_i2c.c | 355 +++++++++++++++++++++++++++++++++++++++++++++++++
>   3 files changed, 362 insertions(+)
>   create mode 100644 drivers/i2c/rcar_i2c.c

I fixed patch 1/4 and tried to apply this patch, but checkpatch says:

--2018-05-10 09:16:48--  http://patchwork.ozlabs.org/patch/906952/mbox
Auflösen des Hostnamens patchwork.ozlabs.org (patchwork.ozlabs.org)… 203.11.71.1, 2401:3900:2:1::2
Verbindungsaufbau zu patchwork.ozlabs.org (patchwork.ozlabs.org)|203.11.71.1|:80 … verbunden.
HTTP-Anforderung gesendet, auf Antwort wird gewartet … 301 Moved Permanently
Platz: /patch/906952/mbox/ [folgend]
--2018-05-10 09:16:49--  http://patchwork.ozlabs.org/patch/906952/mbox/
Wiederverwendung der bestehenden Verbindung zu patchwork.ozlabs.org:80.
HTTP-Anforderung gesendet, auf Antwort wird gewartet … 200 OK
Länge: nicht spezifiziert [text/plain]
Wird in »mbox« gespeichert.

mbox                                          [ <=> 
                                 ]  11,38K  --.-KB/s    in 0,01s

2018-05-10 09:16:50 (933 KB/s) - »mbox« gespeichert [11653]

WARNING: please write a paragraph that describes the config symbol fully
#37: FILE: drivers/i2c/Kconfig:342:
+config SYS_I2C_RCAR_I2C

WARNING: added, moved or deleted file(s), does MAINTAINERS need updating?
#59:
new file mode 100644

WARNING: Missing or malformed SPDX-License-Identifier tag in line 1
#64: FILE: drivers/i2c/rcar_i2c.c:1:
+/*

CHECK: Blank lines aren't necessary after an open brace '{'
#214: FILE: drivers/i2c/rcar_i2c.c:151:
+       for (i = 0; i < msg->len; i++) {
+

total: 0 errors, 3 warnings, 1 checks, 374 lines checked

NOTE: For some of the reported defects, checkpatch may be able to
       mechanically convert to the typical style using --fix or --fix-inplace.

mbox has style problems, please review.

NOTE: Ignored message types: COMPLEX_MACRO CONSIDER_KSTRTO MINMAX MULTISTATEMENT_MACRO_USE_DO_WHILE 
NETWORKING_BLOCK_COMMENT_STYLE PREFER_ETHER_ADDR_COPY USLEEP_RANGE

NOTE: If any of the errors are false positives, please report
       them to the maintainer, see CHECKPATCH in MAINTAINERS.
Wende an: i2c: rcar_i2c: Add DM and DT capable I2C driver

Coukd you please send a rebased version of the patchset?

Thanks!

Beside of this, you can add my to patch 1 and 2:

Reviewed-by: Heiko Schocher <hs@denx.de>

bye,
Heiko
-- 
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-52   Fax: +49-8142-66989-80   Email: hs at denx.de

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [U-Boot] [PATCH 3/4] ARM: rmobile: Enable DM capable RCar I2C driver on Lager
  2018-05-01  7:03 ` [U-Boot] [PATCH 3/4] ARM: rmobile: Enable DM capable RCar I2C driver on Lager Marek Vasut
@ 2018-05-10  7:23   ` Heiko Schocher
  2018-05-10 10:23     ` Marek Vasut
  0 siblings, 1 reply; 10+ messages in thread
From: Heiko Schocher @ 2018-05-10  7:23 UTC (permalink / raw)
  To: u-boot

Hello Marek,

Am 01.05.2018 um 09:03 schrieb Marek Vasut:
> Enable the DM capable driver instead of the legacy one.
> 
> Signed-off-by: Marek Vasut <marek.vasut+renesas@gmail.com>
> Cc: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
> ---
>   configs/lager_defconfig | 1 +
>   1 file changed, 1 insertion(+)
> 
> diff --git a/configs/lager_defconfig b/configs/lager_defconfig
> index 1071da24d2..7dcd9b7dd8 100644
> --- a/configs/lager_defconfig
> +++ b/configs/lager_defconfig
> @@ -53,6 +53,7 @@ CONFIG_CLK_RENESAS=y
>   CONFIG_DM_GPIO=y
>   CONFIG_RCAR_GPIO=y
>   CONFIG_DM_I2C=y
> +CONFIG_SYS_I2C_RCAR_I2C=y
>   CONFIG_SYS_I2C_RCAR_IIC=y

Isn;t CONFIG_SYS_I2C_RCAR_IIC also a i2c driver?

Has this SoC 2 different i2c drivers?

If so, you can add my

Reviewed-by: Heiko Schocher <hs@denx.de>

(Also to patch 4)

>   CONFIG_DM_MMC=y
>   CONFIG_SH_MMCIF=y
> 

bye,
Heiko
-- 
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-52   Fax: +49-8142-66989-80   Email: hs at denx.de

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [U-Boot] [PATCH 3/4] ARM: rmobile: Enable DM capable RCar I2C driver on Lager
  2018-05-10  7:23   ` Heiko Schocher
@ 2018-05-10 10:23     ` Marek Vasut
  0 siblings, 0 replies; 10+ messages in thread
From: Marek Vasut @ 2018-05-10 10:23 UTC (permalink / raw)
  To: u-boot

On 05/10/2018 09:23 AM, Heiko Schocher wrote:
> Hello Marek,

Hi,

> Am 01.05.2018 um 09:03 schrieb Marek Vasut:
>> Enable the DM capable driver instead of the legacy one.
>>
>> Signed-off-by: Marek Vasut <marek.vasut+renesas@gmail.com>
>> Cc: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
>> ---
>>   configs/lager_defconfig | 1 +
>>   1 file changed, 1 insertion(+)
>>
>> diff --git a/configs/lager_defconfig b/configs/lager_defconfig
>> index 1071da24d2..7dcd9b7dd8 100644
>> --- a/configs/lager_defconfig
>> +++ b/configs/lager_defconfig
>> @@ -53,6 +53,7 @@ CONFIG_CLK_RENESAS=y
>>   CONFIG_DM_GPIO=y
>>   CONFIG_RCAR_GPIO=y
>>   CONFIG_DM_I2C=y
>> +CONFIG_SYS_I2C_RCAR_I2C=y
>>   CONFIG_SYS_I2C_RCAR_IIC=y
> 
> Isn;t CONFIG_SYS_I2C_RCAR_IIC also a i2c driver?
> 
> Has this SoC 2 different i2c drivers?

Yes :)

> If so, you can add my
> 
> Reviewed-by: Heiko Schocher <hs@denx.de>
> 
> (Also to patch 4)
> 
>>   CONFIG_DM_MMC=y
>>   CONFIG_SH_MMCIF=y
>>
> 
> bye,
> Heiko


-- 
Best regards,
Marek Vasut

^ permalink raw reply	[flat|nested] 10+ messages in thread

* [U-Boot] [PATCH 3/4] ARM: rmobile: Enable DM capable RCar I2C driver on Lager
  2018-05-12 21:15 Marek Vasut
@ 2018-05-12 21:15 ` Marek Vasut
  0 siblings, 0 replies; 10+ messages in thread
From: Marek Vasut @ 2018-05-12 21:15 UTC (permalink / raw)
  To: u-boot

Enable the DM capable driver instead of the legacy one.

Signed-off-by: Marek Vasut <marek.vasut+renesas@gmail.com>
Cc: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
---
 configs/lager_defconfig | 1 +
 1 file changed, 1 insertion(+)

diff --git a/configs/lager_defconfig b/configs/lager_defconfig
index 901b34e1dd..70083bcbfe 100644
--- a/configs/lager_defconfig
+++ b/configs/lager_defconfig
@@ -54,6 +54,7 @@ CONFIG_CLK_RENESAS=y
 CONFIG_DM_GPIO=y
 CONFIG_RCAR_GPIO=y
 CONFIG_DM_I2C=y
+CONFIG_SYS_I2C_RCAR_I2C=y
 CONFIG_SYS_I2C_RCAR_IIC=y
 CONFIG_DM_MMC=y
 CONFIG_SH_MMCIF=y
-- 
2.16.2

^ permalink raw reply related	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2018-05-12 21:15 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-05-01  7:03 [U-Boot] [PATCH 1/4] i2c: rcar_i2c: Remove the driver Marek Vasut
2018-05-01  7:03 ` [U-Boot] [PATCH 2/4] i2c: rcar_i2c: Add DM and DT capable I2C driver Marek Vasut
2018-05-10  7:20   ` Heiko Schocher
2018-05-01  7:03 ` [U-Boot] [PATCH 3/4] ARM: rmobile: Enable DM capable RCar I2C driver on Lager Marek Vasut
2018-05-10  7:23   ` Heiko Schocher
2018-05-10 10:23     ` Marek Vasut
2018-05-01  7:03 ` [U-Boot] [PATCH 4/4] ARM: rmobile: Enable DM capable RCar I2C driver on Silk Marek Vasut
2018-05-08  8:14 ` [U-Boot] [PATCH 1/4] i2c: rcar_i2c: Remove the driver Heiko Schocher
2018-05-08  9:28   ` Marek Vasut
2018-05-12 21:15 Marek Vasut
2018-05-12 21:15 ` [U-Boot] [PATCH 3/4] ARM: rmobile: Enable DM capable RCar I2C driver on Lager Marek Vasut

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.