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