xref: /rk3399_rockchip-uboot/drivers/i2c/rcar_i2c.c (revision f2465934b46235287e07473fa4919035ba1a2b68)
11086bfa9SNobuhiro Iwamatsu /*
21086bfa9SNobuhiro Iwamatsu  * drivers/i2c/rcar_i2c.c
31086bfa9SNobuhiro Iwamatsu  *
41086bfa9SNobuhiro Iwamatsu  * Copyright (C) 2013 Renesas Electronics Corporation
51086bfa9SNobuhiro Iwamatsu  * Copyright (C) 2013 Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com>
61086bfa9SNobuhiro Iwamatsu  *
71086bfa9SNobuhiro Iwamatsu  * SPDX-License-Identifier: GPL-2.0
8*28527096SSimon Glass  *
9*28527096SSimon Glass  * NOTE: This driver should be converted to driver model before June 2017.
10*28527096SSimon Glass  * Please see doc/driver-model/i2c-howto.txt for instructions.
111086bfa9SNobuhiro Iwamatsu  */
121086bfa9SNobuhiro Iwamatsu 
131086bfa9SNobuhiro Iwamatsu #include <common.h>
141086bfa9SNobuhiro Iwamatsu #include <i2c.h>
151086bfa9SNobuhiro Iwamatsu #include <asm/io.h>
161086bfa9SNobuhiro Iwamatsu 
171086bfa9SNobuhiro Iwamatsu DECLARE_GLOBAL_DATA_PTR;
181086bfa9SNobuhiro Iwamatsu 
191086bfa9SNobuhiro Iwamatsu struct rcar_i2c {
201086bfa9SNobuhiro Iwamatsu 	u32 icscr;
211086bfa9SNobuhiro Iwamatsu 	u32 icmcr;
221086bfa9SNobuhiro Iwamatsu 	u32 icssr;
231086bfa9SNobuhiro Iwamatsu 	u32 icmsr;
241086bfa9SNobuhiro Iwamatsu 	u32 icsier;
251086bfa9SNobuhiro Iwamatsu 	u32 icmier;
261086bfa9SNobuhiro Iwamatsu 	u32 icccr;
271086bfa9SNobuhiro Iwamatsu 	u32 icsar;
281086bfa9SNobuhiro Iwamatsu 	u32 icmar;
291086bfa9SNobuhiro Iwamatsu 	u32 icrxdtxd;
301086bfa9SNobuhiro Iwamatsu 	u32 icccr2;
311086bfa9SNobuhiro Iwamatsu 	u32 icmpr;
321086bfa9SNobuhiro Iwamatsu 	u32 ichpr;
331086bfa9SNobuhiro Iwamatsu 	u32 iclpr;
341086bfa9SNobuhiro Iwamatsu };
351086bfa9SNobuhiro Iwamatsu 
361086bfa9SNobuhiro Iwamatsu #define MCR_MDBS	0x80	/* non-fifo mode switch	*/
371086bfa9SNobuhiro Iwamatsu #define MCR_FSCL	0x40	/* override SCL pin	*/
381086bfa9SNobuhiro Iwamatsu #define MCR_FSDA	0x20	/* override SDA pin	*/
391086bfa9SNobuhiro Iwamatsu #define MCR_OBPC	0x10	/* override pins	*/
401086bfa9SNobuhiro Iwamatsu #define MCR_MIE		0x08	/* master if enable	*/
411086bfa9SNobuhiro Iwamatsu #define MCR_TSBE	0x04
421086bfa9SNobuhiro Iwamatsu #define MCR_FSB		0x02	/* force stop bit	*/
431086bfa9SNobuhiro Iwamatsu #define MCR_ESG		0x01	/* en startbit gen.	*/
441086bfa9SNobuhiro Iwamatsu 
451086bfa9SNobuhiro Iwamatsu #define MSR_MASK	0x7f
461086bfa9SNobuhiro Iwamatsu #define MSR_MNR		0x40	/* nack received	*/
471086bfa9SNobuhiro Iwamatsu #define MSR_MAL		0x20	/* arbitration lost	*/
481086bfa9SNobuhiro Iwamatsu #define MSR_MST		0x10	/* sent a stop		*/
491086bfa9SNobuhiro Iwamatsu #define MSR_MDE		0x08
501086bfa9SNobuhiro Iwamatsu #define MSR_MDT		0x04
511086bfa9SNobuhiro Iwamatsu #define MSR_MDR		0x02
521086bfa9SNobuhiro Iwamatsu #define MSR_MAT		0x01	/* slave addr xfer done	*/
531086bfa9SNobuhiro Iwamatsu 
541086bfa9SNobuhiro Iwamatsu static const struct rcar_i2c *i2c_dev[CONFIF_SYS_RCAR_I2C_NUM_CONTROLLERS] = {
551086bfa9SNobuhiro Iwamatsu 	(struct rcar_i2c *)CONFIG_SYS_RCAR_I2C0_BASE,
561086bfa9SNobuhiro Iwamatsu 	(struct rcar_i2c *)CONFIG_SYS_RCAR_I2C1_BASE,
571086bfa9SNobuhiro Iwamatsu 	(struct rcar_i2c *)CONFIG_SYS_RCAR_I2C2_BASE,
581086bfa9SNobuhiro Iwamatsu 	(struct rcar_i2c *)CONFIG_SYS_RCAR_I2C3_BASE,
591086bfa9SNobuhiro Iwamatsu };
601086bfa9SNobuhiro Iwamatsu 
rcar_i2c_raw_rw_common(struct rcar_i2c * dev,u8 chip,uint addr)611086bfa9SNobuhiro Iwamatsu static void rcar_i2c_raw_rw_common(struct rcar_i2c *dev, u8 chip, uint addr)
621086bfa9SNobuhiro Iwamatsu {
631086bfa9SNobuhiro Iwamatsu 	/* set slave address */
641086bfa9SNobuhiro Iwamatsu 	writel(chip << 1, &dev->icmar);
651086bfa9SNobuhiro Iwamatsu 	/* set register address */
661086bfa9SNobuhiro Iwamatsu 	writel(addr, &dev->icrxdtxd);
671086bfa9SNobuhiro Iwamatsu 	/* clear status */
681086bfa9SNobuhiro Iwamatsu 	writel(0, &dev->icmsr);
691086bfa9SNobuhiro Iwamatsu 	/* start master send */
701086bfa9SNobuhiro Iwamatsu 	writel(MCR_MDBS | MCR_MIE | MCR_ESG, &dev->icmcr);
711086bfa9SNobuhiro Iwamatsu 
721086bfa9SNobuhiro Iwamatsu 	while ((readl(&dev->icmsr) & (MSR_MAT | MSR_MDE))
731086bfa9SNobuhiro Iwamatsu 		!= (MSR_MAT | MSR_MDE))
741086bfa9SNobuhiro Iwamatsu 		udelay(10);
751086bfa9SNobuhiro Iwamatsu 
761086bfa9SNobuhiro Iwamatsu 	/* clear ESG */
771086bfa9SNobuhiro Iwamatsu 	writel(MCR_MDBS | MCR_MIE, &dev->icmcr);
781086bfa9SNobuhiro Iwamatsu 	/* start SCLclk */
791086bfa9SNobuhiro Iwamatsu 	writel(~(MSR_MAT | MSR_MDE), &dev->icmsr);
801086bfa9SNobuhiro Iwamatsu 
811086bfa9SNobuhiro Iwamatsu 	while (!(readl(&dev->icmsr) & MSR_MDE))
821086bfa9SNobuhiro Iwamatsu 		udelay(10);
831086bfa9SNobuhiro Iwamatsu }
841086bfa9SNobuhiro Iwamatsu 
rcar_i2c_raw_rw_finish(struct rcar_i2c * dev)851086bfa9SNobuhiro Iwamatsu static void rcar_i2c_raw_rw_finish(struct rcar_i2c *dev)
861086bfa9SNobuhiro Iwamatsu {
871086bfa9SNobuhiro Iwamatsu 	while (!(readl(&dev->icmsr) & MSR_MST))
881086bfa9SNobuhiro Iwamatsu 		udelay(10);
891086bfa9SNobuhiro Iwamatsu 
901086bfa9SNobuhiro Iwamatsu 	writel(0, &dev->icmcr);
911086bfa9SNobuhiro Iwamatsu }
921086bfa9SNobuhiro Iwamatsu 
931086bfa9SNobuhiro Iwamatsu static int
rcar_i2c_raw_write(struct rcar_i2c * dev,u8 chip,uint addr,u8 * val,int size)941086bfa9SNobuhiro Iwamatsu rcar_i2c_raw_write(struct rcar_i2c *dev, u8 chip, uint addr, u8 *val, int size)
951086bfa9SNobuhiro Iwamatsu {
961086bfa9SNobuhiro Iwamatsu 	rcar_i2c_raw_rw_common(dev, chip, addr);
971086bfa9SNobuhiro Iwamatsu 
981086bfa9SNobuhiro Iwamatsu 	/* set send date */
991086bfa9SNobuhiro Iwamatsu 	writel(*val, &dev->icrxdtxd);
1001086bfa9SNobuhiro Iwamatsu 	/* start SCLclk */
1011086bfa9SNobuhiro Iwamatsu 	writel(~MSR_MDE, &dev->icmsr);
1021086bfa9SNobuhiro Iwamatsu 
1031086bfa9SNobuhiro Iwamatsu 	while (!(readl(&dev->icmsr) & MSR_MDE))
1041086bfa9SNobuhiro Iwamatsu 		udelay(10);
1051086bfa9SNobuhiro Iwamatsu 
1061086bfa9SNobuhiro Iwamatsu 	/* set stop condition */
1071086bfa9SNobuhiro Iwamatsu 	writel(MCR_MDBS | MCR_MIE | MCR_FSB, &dev->icmcr);
1081086bfa9SNobuhiro Iwamatsu 	/* start SCLclk */
1091086bfa9SNobuhiro Iwamatsu 	writel(~MSR_MDE, &dev->icmsr);
1101086bfa9SNobuhiro Iwamatsu 
1111086bfa9SNobuhiro Iwamatsu 	rcar_i2c_raw_rw_finish(dev);
1121086bfa9SNobuhiro Iwamatsu 
1131086bfa9SNobuhiro Iwamatsu 	return 0;
1141086bfa9SNobuhiro Iwamatsu }
1151086bfa9SNobuhiro Iwamatsu 
1161086bfa9SNobuhiro Iwamatsu static u8
rcar_i2c_raw_read(struct rcar_i2c * dev,u8 chip,uint addr)1171086bfa9SNobuhiro Iwamatsu rcar_i2c_raw_read(struct rcar_i2c *dev, u8 chip, uint addr)
1181086bfa9SNobuhiro Iwamatsu {
1191086bfa9SNobuhiro Iwamatsu 	u8 ret;
1201086bfa9SNobuhiro Iwamatsu 
1211086bfa9SNobuhiro Iwamatsu 	rcar_i2c_raw_rw_common(dev, chip, addr);
1221086bfa9SNobuhiro Iwamatsu 
1231086bfa9SNobuhiro Iwamatsu 	/* set slave address, receive */
1241086bfa9SNobuhiro Iwamatsu 	writel((chip << 1) | 1, &dev->icmar);
1251086bfa9SNobuhiro Iwamatsu 	/* start master receive */
1261086bfa9SNobuhiro Iwamatsu 	writel(MCR_MDBS | MCR_MIE | MCR_ESG, &dev->icmcr);
127cd818a38SNobuhiro Iwamatsu 	/* clear status */
128cd818a38SNobuhiro Iwamatsu 	writel(0, &dev->icmsr);
1291086bfa9SNobuhiro Iwamatsu 
130ad5e14ecSHisashi Nakamura 	while ((readl(&dev->icmsr) & (MSR_MAT | MSR_MDR))
131ad5e14ecSHisashi Nakamura 		!= (MSR_MAT | MSR_MDR))
1321086bfa9SNobuhiro Iwamatsu 		udelay(10);
1331086bfa9SNobuhiro Iwamatsu 
1341086bfa9SNobuhiro Iwamatsu 	/* clear ESG */
1351086bfa9SNobuhiro Iwamatsu 	writel(MCR_MDBS | MCR_MIE, &dev->icmcr);
1361086bfa9SNobuhiro Iwamatsu 	/* prepare stop condition */
1371086bfa9SNobuhiro Iwamatsu 	writel(MCR_MDBS | MCR_MIE | MCR_FSB, &dev->icmcr);
1381086bfa9SNobuhiro Iwamatsu 	/* start SCLclk */
1391086bfa9SNobuhiro Iwamatsu 	writel(~(MSR_MAT | MSR_MDR), &dev->icmsr);
1401086bfa9SNobuhiro Iwamatsu 
1411086bfa9SNobuhiro Iwamatsu 	while (!(readl(&dev->icmsr) & MSR_MDR))
1421086bfa9SNobuhiro Iwamatsu 		udelay(10);
1431086bfa9SNobuhiro Iwamatsu 
1441086bfa9SNobuhiro Iwamatsu 	/* get receive data */
1451086bfa9SNobuhiro Iwamatsu 	ret = (u8)readl(&dev->icrxdtxd);
1461086bfa9SNobuhiro Iwamatsu 	/* start SCLclk */
1471086bfa9SNobuhiro Iwamatsu 	writel(~MSR_MDR, &dev->icmsr);
1481086bfa9SNobuhiro Iwamatsu 
1491086bfa9SNobuhiro Iwamatsu 	rcar_i2c_raw_rw_finish(dev);
1501086bfa9SNobuhiro Iwamatsu 
1511086bfa9SNobuhiro Iwamatsu 	return ret;
1521086bfa9SNobuhiro Iwamatsu }
1531086bfa9SNobuhiro Iwamatsu 
1541086bfa9SNobuhiro Iwamatsu /*
1551086bfa9SNobuhiro Iwamatsu  * SCL  = iicck / (20 + SCGD * 8 + F[(ticf + tr + intd) * iicck])
1561086bfa9SNobuhiro Iwamatsu  * iicck  : I2C internal clock < 20 MHz
1571086bfa9SNobuhiro Iwamatsu  * ticf : I2C SCL falling time: 35 ns
1581086bfa9SNobuhiro Iwamatsu  * tr   : I2C SCL rising time:  200 ns
1591086bfa9SNobuhiro Iwamatsu  * intd : LSI internal delay:   I2C0: 50 ns I2C1-3: 5
1601086bfa9SNobuhiro Iwamatsu  * F[n] : n rounded up to an integer
1611086bfa9SNobuhiro Iwamatsu  */
rcar_clock_gen(int i2c_no,u32 bus_speed)1621086bfa9SNobuhiro Iwamatsu static u32 rcar_clock_gen(int i2c_no, u32 bus_speed)
1631086bfa9SNobuhiro Iwamatsu {
1641086bfa9SNobuhiro Iwamatsu 	u32 iicck, f, scl, scgd;
1651086bfa9SNobuhiro Iwamatsu 	u32 intd = 5;
1661086bfa9SNobuhiro Iwamatsu 
1671086bfa9SNobuhiro Iwamatsu 	int bit = 0, cdf_width = 3;
1681086bfa9SNobuhiro Iwamatsu 	for (bit = 0; bit < (1 << cdf_width); bit++) {
1691086bfa9SNobuhiro Iwamatsu 		iicck = CONFIG_HP_CLK_FREQ / (1 + bit);
1701086bfa9SNobuhiro Iwamatsu 		if (iicck < 20000000)
1711086bfa9SNobuhiro Iwamatsu 			break;
1721086bfa9SNobuhiro Iwamatsu 	}
1731086bfa9SNobuhiro Iwamatsu 
1741086bfa9SNobuhiro Iwamatsu 	if (bit > (1 << cdf_width)) {
1751086bfa9SNobuhiro Iwamatsu 		puts("rcar-i2c: Can not get CDF\n");
1761086bfa9SNobuhiro Iwamatsu 		return 0;
1771086bfa9SNobuhiro Iwamatsu 	}
1781086bfa9SNobuhiro Iwamatsu 
1791086bfa9SNobuhiro Iwamatsu 	if (i2c_no == 0)
1801086bfa9SNobuhiro Iwamatsu 		intd = 50;
1811086bfa9SNobuhiro Iwamatsu 
1821086bfa9SNobuhiro Iwamatsu 	f = (35 + 200 + intd) * (iicck / 1000000000);
1831086bfa9SNobuhiro Iwamatsu 
1841086bfa9SNobuhiro Iwamatsu 	for (scgd = 0; scgd < 0x40; scgd++) {
1851086bfa9SNobuhiro Iwamatsu 		scl = iicck / (20 + (scgd * 8) + f);
1861086bfa9SNobuhiro Iwamatsu 		if (scl <= bus_speed)
1871086bfa9SNobuhiro Iwamatsu 			break;
1881086bfa9SNobuhiro Iwamatsu 	}
1891086bfa9SNobuhiro Iwamatsu 
1901086bfa9SNobuhiro Iwamatsu 	if (scgd > 0x40) {
1911086bfa9SNobuhiro Iwamatsu 		puts("rcar-i2c: Can not get SDGB\n");
1921086bfa9SNobuhiro Iwamatsu 		return 0;
1931086bfa9SNobuhiro Iwamatsu 	}
1941086bfa9SNobuhiro Iwamatsu 
1951086bfa9SNobuhiro Iwamatsu 	debug("%s: scl: %d\n", __func__, scl);
1961086bfa9SNobuhiro Iwamatsu 	debug("%s: bit %x\n", __func__, bit);
1971086bfa9SNobuhiro Iwamatsu 	debug("%s: scgd %x\n", __func__, scgd);
1981086bfa9SNobuhiro Iwamatsu 	debug("%s: iccr %x\n", __func__, (scgd << (cdf_width) | bit));
1991086bfa9SNobuhiro Iwamatsu 
2001086bfa9SNobuhiro Iwamatsu 	return scgd << (cdf_width) | bit;
2011086bfa9SNobuhiro Iwamatsu }
2021086bfa9SNobuhiro Iwamatsu 
2031086bfa9SNobuhiro Iwamatsu static void
rcar_i2c_init(struct i2c_adapter * adap,int speed,int slaveadd)2041086bfa9SNobuhiro Iwamatsu rcar_i2c_init(struct i2c_adapter *adap, int speed, int slaveadd)
2051086bfa9SNobuhiro Iwamatsu {
2061086bfa9SNobuhiro Iwamatsu 	struct rcar_i2c *dev = (struct rcar_i2c *)i2c_dev[adap->hwadapnr];
2071086bfa9SNobuhiro Iwamatsu 	u32 icccr = 0;
2081086bfa9SNobuhiro Iwamatsu 
2091086bfa9SNobuhiro Iwamatsu 	/* No i2c support prior to relocation */
2101086bfa9SNobuhiro Iwamatsu 	if (!(gd->flags & GD_FLG_RELOC))
2111086bfa9SNobuhiro Iwamatsu 		return;
2121086bfa9SNobuhiro Iwamatsu 
2131086bfa9SNobuhiro Iwamatsu 	/*
2141086bfa9SNobuhiro Iwamatsu 	 * reset slave mode.
2151086bfa9SNobuhiro Iwamatsu 	 * slave mode is not used on this driver
2161086bfa9SNobuhiro Iwamatsu 	 */
2171086bfa9SNobuhiro Iwamatsu 	writel(0, &dev->icsier);
2181086bfa9SNobuhiro Iwamatsu 	writel(0, &dev->icsar);
2191086bfa9SNobuhiro Iwamatsu 	writel(0, &dev->icscr);
2201086bfa9SNobuhiro Iwamatsu 	writel(0, &dev->icssr);
2211086bfa9SNobuhiro Iwamatsu 
2221086bfa9SNobuhiro Iwamatsu 	/* reset master mode */
2231086bfa9SNobuhiro Iwamatsu 	writel(0, &dev->icmier);
2241086bfa9SNobuhiro Iwamatsu 	writel(0, &dev->icmcr);
2251086bfa9SNobuhiro Iwamatsu 	writel(0, &dev->icmsr);
2261086bfa9SNobuhiro Iwamatsu 	writel(0, &dev->icmar);
2271086bfa9SNobuhiro Iwamatsu 
2281086bfa9SNobuhiro Iwamatsu 	icccr = rcar_clock_gen(adap->hwadapnr, adap->speed);
2291086bfa9SNobuhiro Iwamatsu 	if (icccr == 0)
2301086bfa9SNobuhiro Iwamatsu 		puts("I2C: Init failed\n");
2311086bfa9SNobuhiro Iwamatsu 	else
2321086bfa9SNobuhiro Iwamatsu 		writel(icccr, &dev->icccr);
2331086bfa9SNobuhiro Iwamatsu }
2341086bfa9SNobuhiro Iwamatsu 
rcar_i2c_read(struct i2c_adapter * adap,uint8_t chip,uint addr,int alen,u8 * data,int len)2351086bfa9SNobuhiro Iwamatsu static int rcar_i2c_read(struct i2c_adapter *adap, uint8_t chip,
2361086bfa9SNobuhiro Iwamatsu 			uint addr, int alen, u8 *data, int len)
2371086bfa9SNobuhiro Iwamatsu {
2381086bfa9SNobuhiro Iwamatsu 	struct rcar_i2c *dev = (struct rcar_i2c *)i2c_dev[adap->hwadapnr];
2391086bfa9SNobuhiro Iwamatsu 	int i;
2401086bfa9SNobuhiro Iwamatsu 
2411086bfa9SNobuhiro Iwamatsu 	for (i = 0; i < len; i++)
2421086bfa9SNobuhiro Iwamatsu 		data[i] = rcar_i2c_raw_read(dev, chip, addr + i);
2431086bfa9SNobuhiro Iwamatsu 
2441086bfa9SNobuhiro Iwamatsu 	return 0;
2451086bfa9SNobuhiro Iwamatsu }
2461086bfa9SNobuhiro Iwamatsu 
rcar_i2c_write(struct i2c_adapter * adap,uint8_t chip,uint addr,int alen,u8 * data,int len)2471086bfa9SNobuhiro Iwamatsu static int rcar_i2c_write(struct i2c_adapter *adap, uint8_t chip, uint addr,
2481086bfa9SNobuhiro Iwamatsu 			int alen, u8 *data, int len)
2491086bfa9SNobuhiro Iwamatsu {
2501086bfa9SNobuhiro Iwamatsu 	struct rcar_i2c *dev = (struct rcar_i2c *)i2c_dev[adap->hwadapnr];
2511086bfa9SNobuhiro Iwamatsu 	return rcar_i2c_raw_write(dev, chip, addr, data, len);
2521086bfa9SNobuhiro Iwamatsu }
2531086bfa9SNobuhiro Iwamatsu 
2541086bfa9SNobuhiro Iwamatsu static int
rcar_i2c_probe(struct i2c_adapter * adap,u8 dev)2551086bfa9SNobuhiro Iwamatsu rcar_i2c_probe(struct i2c_adapter *adap, u8 dev)
2561086bfa9SNobuhiro Iwamatsu {
2571086bfa9SNobuhiro Iwamatsu 	return rcar_i2c_read(adap, dev, 0, 0, NULL, 0);
2581086bfa9SNobuhiro Iwamatsu }
2591086bfa9SNobuhiro Iwamatsu 
rcar_i2c_set_bus_speed(struct i2c_adapter * adap,unsigned int speed)2601086bfa9SNobuhiro Iwamatsu static unsigned int rcar_i2c_set_bus_speed(struct i2c_adapter *adap,
2611086bfa9SNobuhiro Iwamatsu 			unsigned int speed)
2621086bfa9SNobuhiro Iwamatsu {
2631086bfa9SNobuhiro Iwamatsu 	struct rcar_i2c *dev = (struct rcar_i2c *)i2c_dev[adap->hwadapnr];
2641086bfa9SNobuhiro Iwamatsu 	u32 icccr;
2651086bfa9SNobuhiro Iwamatsu 	int ret = 0;
2661086bfa9SNobuhiro Iwamatsu 
2671086bfa9SNobuhiro Iwamatsu 	rcar_i2c_raw_rw_finish(dev);
2681086bfa9SNobuhiro Iwamatsu 
2691086bfa9SNobuhiro Iwamatsu 	icccr = rcar_clock_gen(adap->hwadapnr, speed);
2701086bfa9SNobuhiro Iwamatsu 	if (icccr == 0) {
2711086bfa9SNobuhiro Iwamatsu 		puts("I2C: Init failed\n");
2721086bfa9SNobuhiro Iwamatsu 		ret = -1;
2731086bfa9SNobuhiro Iwamatsu 	} else {
2741086bfa9SNobuhiro Iwamatsu 		writel(icccr, &dev->icccr);
2751086bfa9SNobuhiro Iwamatsu 	}
2761086bfa9SNobuhiro Iwamatsu 	return ret;
2771086bfa9SNobuhiro Iwamatsu }
2781086bfa9SNobuhiro Iwamatsu 
2791086bfa9SNobuhiro Iwamatsu /*
2801086bfa9SNobuhiro Iwamatsu  * Register RCAR i2c adapters
2811086bfa9SNobuhiro Iwamatsu  */
2821086bfa9SNobuhiro Iwamatsu U_BOOT_I2C_ADAP_COMPLETE(rcar_0, rcar_i2c_init, rcar_i2c_probe, rcar_i2c_read,
2831086bfa9SNobuhiro Iwamatsu 			 rcar_i2c_write, rcar_i2c_set_bus_speed,
2841086bfa9SNobuhiro Iwamatsu 			 CONFIG_SYS_RCAR_I2C0_SPEED, 0, 0)
2851086bfa9SNobuhiro Iwamatsu U_BOOT_I2C_ADAP_COMPLETE(rcar_1, rcar_i2c_init, rcar_i2c_probe, rcar_i2c_read,
2861086bfa9SNobuhiro Iwamatsu 			 rcar_i2c_write, rcar_i2c_set_bus_speed,
2871086bfa9SNobuhiro Iwamatsu 			 CONFIG_SYS_RCAR_I2C1_SPEED, 0, 1)
2881086bfa9SNobuhiro Iwamatsu U_BOOT_I2C_ADAP_COMPLETE(rcar_2, rcar_i2c_init, rcar_i2c_probe, rcar_i2c_read,
2891086bfa9SNobuhiro Iwamatsu 			 rcar_i2c_write, rcar_i2c_set_bus_speed,
2901086bfa9SNobuhiro Iwamatsu 			 CONFIG_SYS_RCAR_I2C2_SPEED, 0, 2)
2911086bfa9SNobuhiro Iwamatsu U_BOOT_I2C_ADAP_COMPLETE(rcar_3, rcar_i2c_init, rcar_i2c_probe, rcar_i2c_read,
2921086bfa9SNobuhiro Iwamatsu 			 rcar_i2c_write, rcar_i2c_set_bus_speed,
2931086bfa9SNobuhiro Iwamatsu 			 CONFIG_SYS_RCAR_I2C3_SPEED, 0, 3)
294