13dab3e0eSNobuhiro Iwamatsu /* 2b55b8eefSNobuhiro Iwamatsu * Copyright (C) 2011, 2013 Renesas Solutions Corp. 3b55b8eefSNobuhiro Iwamatsu * Copyright (C) 2011, 2013 Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com> 43dab3e0eSNobuhiro Iwamatsu * 51a459660SWolfgang Denk * SPDX-License-Identifier: GPL-2.0+ 63dab3e0eSNobuhiro Iwamatsu */ 73dab3e0eSNobuhiro Iwamatsu 83dab3e0eSNobuhiro Iwamatsu #include <common.h> 9*2035d77dSNobuhiro Iwamatsu #include <i2c.h> 103dab3e0eSNobuhiro Iwamatsu #include <asm/io.h> 113dab3e0eSNobuhiro Iwamatsu 12b55b8eefSNobuhiro Iwamatsu DECLARE_GLOBAL_DATA_PTR; 13b55b8eefSNobuhiro Iwamatsu 143dab3e0eSNobuhiro Iwamatsu /* Every register is 32bit aligned, but only 8bits in size */ 153dab3e0eSNobuhiro Iwamatsu #define ureg(name) u8 name; u8 __pad_##name##0; u16 __pad_##name##1; 163dab3e0eSNobuhiro Iwamatsu struct sh_i2c { 173dab3e0eSNobuhiro Iwamatsu ureg(icdr); 183dab3e0eSNobuhiro Iwamatsu ureg(iccr); 193dab3e0eSNobuhiro Iwamatsu ureg(icsr); 203dab3e0eSNobuhiro Iwamatsu ureg(icic); 213dab3e0eSNobuhiro Iwamatsu ureg(iccl); 223dab3e0eSNobuhiro Iwamatsu ureg(icch); 233dab3e0eSNobuhiro Iwamatsu }; 243dab3e0eSNobuhiro Iwamatsu #undef ureg 253dab3e0eSNobuhiro Iwamatsu 263dab3e0eSNobuhiro Iwamatsu /* ICCR */ 273dab3e0eSNobuhiro Iwamatsu #define SH_I2C_ICCR_ICE (1 << 7) 283dab3e0eSNobuhiro Iwamatsu #define SH_I2C_ICCR_RACK (1 << 6) 293dab3e0eSNobuhiro Iwamatsu #define SH_I2C_ICCR_RTS (1 << 4) 303dab3e0eSNobuhiro Iwamatsu #define SH_I2C_ICCR_BUSY (1 << 2) 313dab3e0eSNobuhiro Iwamatsu #define SH_I2C_ICCR_SCP (1 << 0) 323dab3e0eSNobuhiro Iwamatsu 333dab3e0eSNobuhiro Iwamatsu /* ICSR / ICIC */ 3457d7c804STetsuyuki Kobayashi #define SH_IC_BUSY (1 << 4) 353dab3e0eSNobuhiro Iwamatsu #define SH_IC_TACK (1 << 2) 363dab3e0eSNobuhiro Iwamatsu #define SH_IC_WAIT (1 << 1) 373dab3e0eSNobuhiro Iwamatsu #define SH_IC_DTE (1 << 0) 383dab3e0eSNobuhiro Iwamatsu 39b1af67feSTetsuyuki Kobayashi #ifdef CONFIG_SH_I2C_8BIT 40b1af67feSTetsuyuki Kobayashi /* store 8th bit of iccl and icch in ICIC register */ 41b1af67feSTetsuyuki Kobayashi #define SH_I2C_ICIC_ICCLB8 (1 << 7) 42b1af67feSTetsuyuki Kobayashi #define SH_I2C_ICIC_ICCHB8 (1 << 6) 43b1af67feSTetsuyuki Kobayashi #endif 44b1af67feSTetsuyuki Kobayashi 45*2035d77dSNobuhiro Iwamatsu static const struct sh_i2c *i2c_dev[CONFIG_SYS_I2C_SH_NUM_CONTROLLERS] = { 46*2035d77dSNobuhiro Iwamatsu (struct sh_i2c *)CONFIG_SYS_I2C_SH_BASE0, 47*2035d77dSNobuhiro Iwamatsu #ifdef CONFIG_SYS_I2C_SH_BASE1 48*2035d77dSNobuhiro Iwamatsu (struct sh_i2c *)CONFIG_SYS_I2C_SH_BASE1, 49*2035d77dSNobuhiro Iwamatsu #endif 50*2035d77dSNobuhiro Iwamatsu #ifdef CONFIG_SYS_I2C_SH_BASE2 51*2035d77dSNobuhiro Iwamatsu (struct sh_i2c *)CONFIG_SYS_I2C_SH_BASE2, 52*2035d77dSNobuhiro Iwamatsu #endif 53*2035d77dSNobuhiro Iwamatsu #ifdef CONFIG_SYS_I2C_SH_BASE3 54*2035d77dSNobuhiro Iwamatsu (struct sh_i2c *)CONFIG_SYS_I2C_SH_BASE3, 55*2035d77dSNobuhiro Iwamatsu #endif 56*2035d77dSNobuhiro Iwamatsu #ifdef CONFIG_SYS_I2C_SH_BASE4 57*2035d77dSNobuhiro Iwamatsu (struct sh_i2c *)CONFIG_SYS_I2C_SH_BASE4, 58*2035d77dSNobuhiro Iwamatsu #endif 59*2035d77dSNobuhiro Iwamatsu }; 60*2035d77dSNobuhiro Iwamatsu 61b1af67feSTetsuyuki Kobayashi static u16 iccl, icch; 623dab3e0eSNobuhiro Iwamatsu 633dab3e0eSNobuhiro Iwamatsu #define IRQ_WAIT 1000 643dab3e0eSNobuhiro Iwamatsu 65*2035d77dSNobuhiro Iwamatsu static void sh_irq_dte(struct sh_i2c *dev) 663dab3e0eSNobuhiro Iwamatsu { 673dab3e0eSNobuhiro Iwamatsu int i; 683dab3e0eSNobuhiro Iwamatsu 693dab3e0eSNobuhiro Iwamatsu for (i = 0; i < IRQ_WAIT; i++) { 70*2035d77dSNobuhiro Iwamatsu if (SH_IC_DTE & readb(&dev->icsr)) 713dab3e0eSNobuhiro Iwamatsu break; 723dab3e0eSNobuhiro Iwamatsu udelay(10); 733dab3e0eSNobuhiro Iwamatsu } 743dab3e0eSNobuhiro Iwamatsu } 753dab3e0eSNobuhiro Iwamatsu 76*2035d77dSNobuhiro Iwamatsu static int sh_irq_dte_with_tack(struct sh_i2c *dev) 77d042d712STetsuyuki Kobayashi { 78d042d712STetsuyuki Kobayashi int i; 79d042d712STetsuyuki Kobayashi 80d042d712STetsuyuki Kobayashi for (i = 0; i < IRQ_WAIT; i++) { 81*2035d77dSNobuhiro Iwamatsu if (SH_IC_DTE & readb(&dev->icsr)) 82d042d712STetsuyuki Kobayashi break; 83*2035d77dSNobuhiro Iwamatsu if (SH_IC_TACK & readb(&dev->icsr)) 84d042d712STetsuyuki Kobayashi return -1; 85d042d712STetsuyuki Kobayashi udelay(10); 86d042d712STetsuyuki Kobayashi } 87d042d712STetsuyuki Kobayashi return 0; 88d042d712STetsuyuki Kobayashi } 89d042d712STetsuyuki Kobayashi 90*2035d77dSNobuhiro Iwamatsu static void sh_irq_busy(struct sh_i2c *dev) 913dab3e0eSNobuhiro Iwamatsu { 923dab3e0eSNobuhiro Iwamatsu int i; 933dab3e0eSNobuhiro Iwamatsu 943dab3e0eSNobuhiro Iwamatsu for (i = 0; i < IRQ_WAIT; i++) { 95*2035d77dSNobuhiro Iwamatsu if (!(SH_IC_BUSY & readb(&dev->icsr))) 963dab3e0eSNobuhiro Iwamatsu break; 973dab3e0eSNobuhiro Iwamatsu udelay(10); 983dab3e0eSNobuhiro Iwamatsu } 993dab3e0eSNobuhiro Iwamatsu } 1003dab3e0eSNobuhiro Iwamatsu 101*2035d77dSNobuhiro Iwamatsu static int sh_i2c_set_addr(struct sh_i2c *dev, u8 chip, u8 addr, int stop) 1023dab3e0eSNobuhiro Iwamatsu { 103d042d712STetsuyuki Kobayashi u8 icic = SH_IC_TACK; 104b1af67feSTetsuyuki Kobayashi 105*2035d77dSNobuhiro Iwamatsu debug("%s: chip: %x, addr: %x iccl: %x, icch %x\n", 106*2035d77dSNobuhiro Iwamatsu __func__, chip, addr, iccl, icch); 107*2035d77dSNobuhiro Iwamatsu clrbits_8(&dev->iccr, SH_I2C_ICCR_ICE); 108*2035d77dSNobuhiro Iwamatsu setbits_8(&dev->iccr, SH_I2C_ICCR_ICE); 1093dab3e0eSNobuhiro Iwamatsu 110*2035d77dSNobuhiro Iwamatsu writeb(iccl & 0xff, &dev->iccl); 111*2035d77dSNobuhiro Iwamatsu writeb(icch & 0xff, &dev->icch); 112b1af67feSTetsuyuki Kobayashi #ifdef CONFIG_SH_I2C_8BIT 113b1af67feSTetsuyuki Kobayashi if (iccl > 0xff) 114b1af67feSTetsuyuki Kobayashi icic |= SH_I2C_ICIC_ICCLB8; 115b1af67feSTetsuyuki Kobayashi if (icch > 0xff) 116b1af67feSTetsuyuki Kobayashi icic |= SH_I2C_ICIC_ICCHB8; 117b1af67feSTetsuyuki Kobayashi #endif 118*2035d77dSNobuhiro Iwamatsu writeb(icic, &dev->icic); 1193dab3e0eSNobuhiro Iwamatsu 120*2035d77dSNobuhiro Iwamatsu writeb((SH_I2C_ICCR_ICE|SH_I2C_ICCR_RTS|SH_I2C_ICCR_BUSY), &dev->iccr); 121*2035d77dSNobuhiro Iwamatsu sh_irq_dte(dev); 1223dab3e0eSNobuhiro Iwamatsu 123*2035d77dSNobuhiro Iwamatsu clrbits_8(&dev->icsr, SH_IC_TACK); 124*2035d77dSNobuhiro Iwamatsu writeb(chip << 1, &dev->icdr); 125*2035d77dSNobuhiro Iwamatsu if (sh_irq_dte_with_tack(dev) != 0) 126d042d712STetsuyuki Kobayashi return -1; 1273dab3e0eSNobuhiro Iwamatsu 128*2035d77dSNobuhiro Iwamatsu writeb(addr, &dev->icdr); 1293dab3e0eSNobuhiro Iwamatsu if (stop) 130*2035d77dSNobuhiro Iwamatsu writeb((SH_I2C_ICCR_ICE|SH_I2C_ICCR_RTS), &dev->iccr); 1313dab3e0eSNobuhiro Iwamatsu 132*2035d77dSNobuhiro Iwamatsu if (sh_irq_dte_with_tack(dev) != 0) 133d042d712STetsuyuki Kobayashi return -1; 134d042d712STetsuyuki Kobayashi return 0; 1353dab3e0eSNobuhiro Iwamatsu } 1363dab3e0eSNobuhiro Iwamatsu 137*2035d77dSNobuhiro Iwamatsu static void sh_i2c_finish(struct sh_i2c *dev) 1383dab3e0eSNobuhiro Iwamatsu { 139*2035d77dSNobuhiro Iwamatsu writeb(0, &dev->icsr); 140*2035d77dSNobuhiro Iwamatsu clrbits_8(&dev->iccr, SH_I2C_ICCR_ICE); 1413dab3e0eSNobuhiro Iwamatsu } 1423dab3e0eSNobuhiro Iwamatsu 143*2035d77dSNobuhiro Iwamatsu static int 144*2035d77dSNobuhiro Iwamatsu sh_i2c_raw_write(struct sh_i2c *dev, u8 chip, uint addr, u8 val) 1453dab3e0eSNobuhiro Iwamatsu { 1460e5fb33cSTetsuyuki Kobayashi int ret = -1; 147*2035d77dSNobuhiro Iwamatsu if (sh_i2c_set_addr(dev, chip, addr, 0) != 0) 1480e5fb33cSTetsuyuki Kobayashi goto exit0; 1493dab3e0eSNobuhiro Iwamatsu udelay(10); 1503dab3e0eSNobuhiro Iwamatsu 151*2035d77dSNobuhiro Iwamatsu writeb(val, &dev->icdr); 152*2035d77dSNobuhiro Iwamatsu if (sh_irq_dte_with_tack(dev) != 0) 1530e5fb33cSTetsuyuki Kobayashi goto exit0; 1543dab3e0eSNobuhiro Iwamatsu 155*2035d77dSNobuhiro Iwamatsu writeb((SH_I2C_ICCR_ICE | SH_I2C_ICCR_RTS), &dev->iccr); 156*2035d77dSNobuhiro Iwamatsu if (sh_irq_dte_with_tack(dev) != 0) 1570e5fb33cSTetsuyuki Kobayashi goto exit0; 158*2035d77dSNobuhiro Iwamatsu sh_irq_busy(dev); 1590e5fb33cSTetsuyuki Kobayashi ret = 0; 160*2035d77dSNobuhiro Iwamatsu 1610e5fb33cSTetsuyuki Kobayashi exit0: 162*2035d77dSNobuhiro Iwamatsu sh_i2c_finish(dev); 1630e5fb33cSTetsuyuki Kobayashi return ret; 1643dab3e0eSNobuhiro Iwamatsu } 1653dab3e0eSNobuhiro Iwamatsu 166*2035d77dSNobuhiro Iwamatsu static int sh_i2c_raw_read(struct sh_i2c *dev, u8 chip, u8 addr) 1673dab3e0eSNobuhiro Iwamatsu { 1680e5fb33cSTetsuyuki Kobayashi int ret = -1; 1693dab3e0eSNobuhiro Iwamatsu 1703ce2703dSTetsuyuki Kobayashi #if defined(CONFIG_SH73A0) 171*2035d77dSNobuhiro Iwamatsu if (sh_i2c_set_addr(dev, chip, addr, 0) != 0) 1720e5fb33cSTetsuyuki Kobayashi goto exit0; 1733ce2703dSTetsuyuki Kobayashi #else 174*2035d77dSNobuhiro Iwamatsu if (sh_i2c_set_addr(dev, chip, addr, 1) != 0) 1750e5fb33cSTetsuyuki Kobayashi goto exit0; 1763dab3e0eSNobuhiro Iwamatsu udelay(100); 1773ce2703dSTetsuyuki Kobayashi #endif 1783dab3e0eSNobuhiro Iwamatsu 179*2035d77dSNobuhiro Iwamatsu writeb((SH_I2C_ICCR_ICE|SH_I2C_ICCR_RTS|SH_I2C_ICCR_BUSY), &dev->iccr); 180*2035d77dSNobuhiro Iwamatsu sh_irq_dte(dev); 1813dab3e0eSNobuhiro Iwamatsu 182*2035d77dSNobuhiro Iwamatsu writeb(chip << 1 | 0x01, &dev->icdr); 183*2035d77dSNobuhiro Iwamatsu if (sh_irq_dte_with_tack(dev) != 0) 1840e5fb33cSTetsuyuki Kobayashi goto exit0; 1853dab3e0eSNobuhiro Iwamatsu 186*2035d77dSNobuhiro Iwamatsu writeb((SH_I2C_ICCR_ICE|SH_I2C_ICCR_SCP), &dev->iccr); 187*2035d77dSNobuhiro Iwamatsu if (sh_irq_dte_with_tack(dev) != 0) 1880e5fb33cSTetsuyuki Kobayashi goto exit0; 1893dab3e0eSNobuhiro Iwamatsu 190*2035d77dSNobuhiro Iwamatsu ret = readb(&dev->icdr) & 0xff; 1913dab3e0eSNobuhiro Iwamatsu 192*2035d77dSNobuhiro Iwamatsu writeb((SH_I2C_ICCR_ICE|SH_I2C_ICCR_RACK), &dev->iccr); 193*2035d77dSNobuhiro Iwamatsu readb(&dev->icdr); /* Dummy read */ 194*2035d77dSNobuhiro Iwamatsu sh_irq_busy(dev); 195*2035d77dSNobuhiro Iwamatsu 1960e5fb33cSTetsuyuki Kobayashi exit0: 197*2035d77dSNobuhiro Iwamatsu sh_i2c_finish(dev); 1983dab3e0eSNobuhiro Iwamatsu 1993dab3e0eSNobuhiro Iwamatsu return ret; 2003dab3e0eSNobuhiro Iwamatsu } 2013dab3e0eSNobuhiro Iwamatsu 202*2035d77dSNobuhiro Iwamatsu static void 203*2035d77dSNobuhiro Iwamatsu sh_i2c_init(struct i2c_adapter *adap, int speed, int slaveadd) 2043dab3e0eSNobuhiro Iwamatsu { 2053dab3e0eSNobuhiro Iwamatsu int num, denom, tmp; 2063dab3e0eSNobuhiro Iwamatsu 207b55b8eefSNobuhiro Iwamatsu /* No i2c support prior to relocation */ 208b55b8eefSNobuhiro Iwamatsu if (!(gd->flags & GD_FLG_RELOC)) 209b55b8eefSNobuhiro Iwamatsu return; 210b55b8eefSNobuhiro Iwamatsu 2113dab3e0eSNobuhiro Iwamatsu /* 2123dab3e0eSNobuhiro Iwamatsu * Calculate the value for iccl. From the data sheet: 2133dab3e0eSNobuhiro Iwamatsu * iccl = (p-clock / transfer-rate) * (L / (L + H)) 2143dab3e0eSNobuhiro Iwamatsu * where L and H are the SCL low and high ratio. 2153dab3e0eSNobuhiro Iwamatsu */ 2163dab3e0eSNobuhiro Iwamatsu num = CONFIG_SH_I2C_CLOCK * CONFIG_SH_I2C_DATA_LOW; 2173dab3e0eSNobuhiro Iwamatsu denom = speed * (CONFIG_SH_I2C_DATA_HIGH + CONFIG_SH_I2C_DATA_LOW); 2183dab3e0eSNobuhiro Iwamatsu tmp = num * 10 / denom; 2193dab3e0eSNobuhiro Iwamatsu if (tmp % 10 >= 5) 220b1af67feSTetsuyuki Kobayashi iccl = (u16)((num/denom) + 1); 2213dab3e0eSNobuhiro Iwamatsu else 222b1af67feSTetsuyuki Kobayashi iccl = (u16)(num/denom); 2233dab3e0eSNobuhiro Iwamatsu 2243dab3e0eSNobuhiro Iwamatsu /* Calculate the value for icch. From the data sheet: 2253dab3e0eSNobuhiro Iwamatsu icch = (p clock / transfer rate) * (H / (L + H)) */ 2263dab3e0eSNobuhiro Iwamatsu num = CONFIG_SH_I2C_CLOCK * CONFIG_SH_I2C_DATA_HIGH; 2273dab3e0eSNobuhiro Iwamatsu tmp = num * 10 / denom; 2283dab3e0eSNobuhiro Iwamatsu if (tmp % 10 >= 5) 229b1af67feSTetsuyuki Kobayashi icch = (u16)((num/denom) + 1); 2303dab3e0eSNobuhiro Iwamatsu else 231b1af67feSTetsuyuki Kobayashi icch = (u16)(num/denom); 232*2035d77dSNobuhiro Iwamatsu 233*2035d77dSNobuhiro Iwamatsu debug("clock: %d, speed %d, iccl: %x, icch: %x\n", 234*2035d77dSNobuhiro Iwamatsu CONFIG_SH_I2C_CLOCK, speed, iccl, icch); 2353dab3e0eSNobuhiro Iwamatsu } 2363dab3e0eSNobuhiro Iwamatsu 237*2035d77dSNobuhiro Iwamatsu static int sh_i2c_read(struct i2c_adapter *adap, uint8_t chip, 238*2035d77dSNobuhiro Iwamatsu uint addr, int alen, u8 *data, int len) 2393dab3e0eSNobuhiro Iwamatsu { 240*2035d77dSNobuhiro Iwamatsu int ret, i; 241*2035d77dSNobuhiro Iwamatsu struct sh_i2c *dev = (struct sh_i2c *)i2c_dev[adap->hwadapnr]; 242*2035d77dSNobuhiro Iwamatsu 2430e5fb33cSTetsuyuki Kobayashi for (i = 0; i < len; i++) { 244*2035d77dSNobuhiro Iwamatsu ret = sh_i2c_raw_read(dev, chip, addr + i); 2450e5fb33cSTetsuyuki Kobayashi if (ret < 0) 2460e5fb33cSTetsuyuki Kobayashi return -1; 247*2035d77dSNobuhiro Iwamatsu 248*2035d77dSNobuhiro Iwamatsu data[i] = ret & 0xff; 249*2035d77dSNobuhiro Iwamatsu debug("%s: data[%d]: %02x\n", __func__, i, data[i]); 2500e5fb33cSTetsuyuki Kobayashi } 251*2035d77dSNobuhiro Iwamatsu 2523dab3e0eSNobuhiro Iwamatsu return 0; 2533dab3e0eSNobuhiro Iwamatsu } 2543dab3e0eSNobuhiro Iwamatsu 255*2035d77dSNobuhiro Iwamatsu static int sh_i2c_write(struct i2c_adapter *adap, uint8_t chip, uint addr, 256*2035d77dSNobuhiro Iwamatsu int alen, u8 *data, int len) 2573dab3e0eSNobuhiro Iwamatsu { 258*2035d77dSNobuhiro Iwamatsu struct sh_i2c *dev = (struct sh_i2c *)i2c_dev[adap->hwadapnr]; 259*2035d77dSNobuhiro Iwamatsu int i; 260*2035d77dSNobuhiro Iwamatsu 261*2035d77dSNobuhiro Iwamatsu for (i = 0; i < len; i++) { 262*2035d77dSNobuhiro Iwamatsu debug("%s: data[%d]: %02x\n", __func__, i, data[i]); 263*2035d77dSNobuhiro Iwamatsu if (sh_i2c_raw_write(dev, chip, addr + i, data[i]) != 0) 2640e5fb33cSTetsuyuki Kobayashi return -1; 265*2035d77dSNobuhiro Iwamatsu } 266*2035d77dSNobuhiro Iwamatsu return 0; 267*2035d77dSNobuhiro Iwamatsu } 268*2035d77dSNobuhiro Iwamatsu 269*2035d77dSNobuhiro Iwamatsu static int 270*2035d77dSNobuhiro Iwamatsu sh_i2c_probe(struct i2c_adapter *adap, u8 dev) 271*2035d77dSNobuhiro Iwamatsu { 272*2035d77dSNobuhiro Iwamatsu return sh_i2c_read(adap, dev, 0, 0, NULL, 0); 273*2035d77dSNobuhiro Iwamatsu } 274*2035d77dSNobuhiro Iwamatsu 275*2035d77dSNobuhiro Iwamatsu static unsigned int sh_i2c_set_bus_speed(struct i2c_adapter *adap, 276*2035d77dSNobuhiro Iwamatsu unsigned int speed) 277*2035d77dSNobuhiro Iwamatsu { 278*2035d77dSNobuhiro Iwamatsu struct sh_i2c *dev = (struct sh_i2c *)i2c_dev[adap->hwadapnr]; 279*2035d77dSNobuhiro Iwamatsu 280*2035d77dSNobuhiro Iwamatsu sh_i2c_finish(dev); 281*2035d77dSNobuhiro Iwamatsu sh_i2c_init(adap, speed, 0); 282*2035d77dSNobuhiro Iwamatsu 2833dab3e0eSNobuhiro Iwamatsu return 0; 2843dab3e0eSNobuhiro Iwamatsu } 2853dab3e0eSNobuhiro Iwamatsu 2863dab3e0eSNobuhiro Iwamatsu /* 287*2035d77dSNobuhiro Iwamatsu * Register RCAR i2c adapters 2883dab3e0eSNobuhiro Iwamatsu */ 289*2035d77dSNobuhiro Iwamatsu U_BOOT_I2C_ADAP_COMPLETE(sh_0, sh_i2c_init, sh_i2c_probe, sh_i2c_read, 290*2035d77dSNobuhiro Iwamatsu sh_i2c_write, sh_i2c_set_bus_speed, CONFIG_SYS_I2C_SH_SPEED0, 0, 0) 291*2035d77dSNobuhiro Iwamatsu #ifdef CONFIG_SYS_I2C_SH_BASE1 292*2035d77dSNobuhiro Iwamatsu U_BOOT_I2C_ADAP_COMPLETE(sh_1, sh_i2c_init, sh_i2c_probe, sh_i2c_read, 293*2035d77dSNobuhiro Iwamatsu sh_i2c_write, sh_i2c_set_bus_speed, CONFIG_SYS_I2C_SH_SPEED1, 0, 1) 294*2035d77dSNobuhiro Iwamatsu #endif 295*2035d77dSNobuhiro Iwamatsu #ifdef CONFIG_SYS_I2C_SH_BASE2 296*2035d77dSNobuhiro Iwamatsu U_BOOT_I2C_ADAP_COMPLETE(sh_2, sh_i2c_init, sh_i2c_probe, sh_i2c_read, 297*2035d77dSNobuhiro Iwamatsu sh_i2c_write, sh_i2c_set_bus_speed, CONFIG_SYS_I2C_SH_SPEED2, 0, 2) 298*2035d77dSNobuhiro Iwamatsu #endif 299*2035d77dSNobuhiro Iwamatsu #ifdef CONFIG_SYS_I2C_SH_BASE3 300*2035d77dSNobuhiro Iwamatsu U_BOOT_I2C_ADAP_COMPLETE(sh_3, sh_i2c_init, sh_i2c_probe, sh_i2c_read, 301*2035d77dSNobuhiro Iwamatsu sh_i2c_write, sh_i2c_set_bus_speed, CONFIG_SYS_I2C_SH_SPEED3, 0, 3) 302*2035d77dSNobuhiro Iwamatsu #endif 303*2035d77dSNobuhiro Iwamatsu #ifdef CONFIG_SYS_I2C_SH_BASE4 304*2035d77dSNobuhiro Iwamatsu U_BOOT_I2C_ADAP_COMPLETE(sh_4, sh_i2c_init, sh_i2c_probe, sh_i2c_read, 305*2035d77dSNobuhiro Iwamatsu sh_i2c_write, sh_i2c_set_bus_speed, CONFIG_SYS_I2C_SH_SPEED4, 0, 4) 306*2035d77dSNobuhiro Iwamatsu #endif 307