1 /* 2 * Copyright (C) 2011 Renesas Solutions Corp. 3 * Copyright (C) 2011 Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com> 4 * 5 * This program is free software; you can redistribute it and/or 6 * modify it under the terms of the GNU General Public License as 7 * published by the Free Software Foundation; either version 2 of 8 * the License, or (at your option) any later version. 9 * 10 * This program is distributed in the hope that it will be useful, 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 * GNU General Public License for more details. 14 * 15 * You should have received a copy of the GNU General Public License 16 * along with this program; if not, write to the Free Software 17 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, 18 * MA 02111-1307 USA 19 */ 20 21 #include <common.h> 22 #include <asm/io.h> 23 24 /* Every register is 32bit aligned, but only 8bits in size */ 25 #define ureg(name) u8 name; u8 __pad_##name##0; u16 __pad_##name##1; 26 struct sh_i2c { 27 ureg(icdr); 28 ureg(iccr); 29 ureg(icsr); 30 ureg(icic); 31 ureg(iccl); 32 ureg(icch); 33 }; 34 #undef ureg 35 36 static struct sh_i2c *base; 37 38 /* ICCR */ 39 #define SH_I2C_ICCR_ICE (1 << 7) 40 #define SH_I2C_ICCR_RACK (1 << 6) 41 #define SH_I2C_ICCR_RTS (1 << 4) 42 #define SH_I2C_ICCR_BUSY (1 << 2) 43 #define SH_I2C_ICCR_SCP (1 << 0) 44 45 /* ICSR / ICIC */ 46 #define SH_IC_BUSY (1 << 3) 47 #define SH_IC_TACK (1 << 2) 48 #define SH_IC_WAIT (1 << 1) 49 #define SH_IC_DTE (1 << 0) 50 51 #ifdef CONFIG_SH_I2C_8BIT 52 /* store 8th bit of iccl and icch in ICIC register */ 53 #define SH_I2C_ICIC_ICCLB8 (1 << 7) 54 #define SH_I2C_ICIC_ICCHB8 (1 << 6) 55 #endif 56 57 static u16 iccl, icch; 58 59 #define IRQ_WAIT 1000 60 61 static void irq_dte(struct sh_i2c *base) 62 { 63 int i; 64 65 for (i = 0 ; i < IRQ_WAIT ; i++) { 66 if (SH_IC_DTE & readb(&base->icsr)) 67 break; 68 udelay(10); 69 } 70 } 71 72 static void irq_busy(struct sh_i2c *base) 73 { 74 int i; 75 76 for (i = 0 ; i < IRQ_WAIT ; i++) { 77 if (!(SH_IC_BUSY & readb(&base->icsr))) 78 break; 79 udelay(10); 80 } 81 } 82 83 static void i2c_set_addr(struct sh_i2c *base, u8 id, u8 reg, int stop) 84 { 85 u8 icic = 0; 86 87 writeb(readb(&base->iccr) & ~SH_I2C_ICCR_ICE, &base->iccr); 88 writeb(readb(&base->iccr) | SH_I2C_ICCR_ICE, &base->iccr); 89 90 writeb(iccl & 0xff, &base->iccl); 91 writeb(icch & 0xff, &base->icch); 92 #ifdef CONFIG_SH_I2C_8BIT 93 if (iccl > 0xff) 94 icic |= SH_I2C_ICIC_ICCLB8; 95 if (icch > 0xff) 96 icic |= SH_I2C_ICIC_ICCHB8; 97 #endif 98 writeb(icic, &base->icic); 99 100 writeb((SH_I2C_ICCR_ICE|SH_I2C_ICCR_RTS|SH_I2C_ICCR_BUSY), &base->iccr); 101 irq_dte(base); 102 103 writeb(id << 1, &base->icdr); 104 irq_dte(base); 105 106 writeb(reg, &base->icdr); 107 if (stop) 108 writeb((SH_I2C_ICCR_ICE|SH_I2C_ICCR_RTS), &base->iccr); 109 110 irq_dte(base); 111 } 112 113 static void i2c_finish(struct sh_i2c *base) 114 { 115 writeb(0, &base->icsr); 116 writeb(readb(&base->iccr) & ~SH_I2C_ICCR_ICE, &base->iccr); 117 } 118 119 static void i2c_raw_write(struct sh_i2c *base, u8 id, u8 reg, u8 val) 120 { 121 i2c_set_addr(base, id, reg, 0); 122 udelay(10); 123 124 writeb(val, &base->icdr); 125 irq_dte(base); 126 127 writeb((SH_I2C_ICCR_ICE | SH_I2C_ICCR_RTS), &base->iccr); 128 irq_dte(base); 129 irq_busy(base); 130 131 i2c_finish(base); 132 } 133 134 static u8 i2c_raw_read(struct sh_i2c *base, u8 id, u8 reg) 135 { 136 u8 ret; 137 138 i2c_set_addr(base, id, reg, 1); 139 udelay(100); 140 141 writeb((SH_I2C_ICCR_ICE|SH_I2C_ICCR_RTS|SH_I2C_ICCR_BUSY), &base->iccr); 142 irq_dte(base); 143 144 writeb(id << 1 | 0x01, &base->icdr); 145 irq_dte(base); 146 147 writeb((SH_I2C_ICCR_ICE|SH_I2C_ICCR_SCP), &base->iccr); 148 irq_dte(base); 149 150 ret = readb(&base->icdr); 151 152 writeb((SH_I2C_ICCR_ICE|SH_I2C_ICCR_RACK), &base->iccr); 153 readb(&base->icdr); /* Dummy read */ 154 irq_busy(base); 155 156 i2c_finish(base); 157 158 return ret; 159 } 160 161 #ifdef CONFIG_I2C_MULTI_BUS 162 static unsigned int current_bus; 163 164 /** 165 * i2c_set_bus_num - change active I2C bus 166 * @bus: bus index, zero based 167 * @returns: 0 on success, non-0 on failure 168 */ 169 int i2c_set_bus_num(unsigned int bus) 170 { 171 if ((bus < 0) || (bus >= CONFIG_SYS_MAX_I2C_BUS)) { 172 printf("Bad bus: %d\n", bus); 173 return -1; 174 } 175 176 switch (bus) { 177 case 0: 178 base = (void *)CONFIG_SH_I2C_BASE0; 179 break; 180 case 1: 181 base = (void *)CONFIG_SH_I2C_BASE1; 182 break; 183 default: 184 return -1; 185 } 186 current_bus = bus; 187 188 return 0; 189 } 190 191 /** 192 * i2c_get_bus_num - returns index of active I2C bus 193 */ 194 unsigned int i2c_get_bus_num(void) 195 { 196 return current_bus; 197 } 198 #endif 199 200 #define SH_I2C_ICCL_CALC(clk, date, t_low, t_high) \ 201 ((clk / rate) * (t_low / t_low + t_high)) 202 #define SH_I2C_ICCH_CALC(clk, date, t_low, t_high) \ 203 ((clk / rate) * (t_high / t_low + t_high)) 204 205 void i2c_init(int speed, int slaveaddr) 206 { 207 int num, denom, tmp; 208 209 #ifdef CONFIG_I2C_MULTI_BUS 210 current_bus = 0; 211 #endif 212 base = (struct sh_i2c *)CONFIG_SH_I2C_BASE0; 213 214 /* 215 * Calculate the value for iccl. From the data sheet: 216 * iccl = (p-clock / transfer-rate) * (L / (L + H)) 217 * where L and H are the SCL low and high ratio. 218 */ 219 num = CONFIG_SH_I2C_CLOCK * CONFIG_SH_I2C_DATA_LOW; 220 denom = speed * (CONFIG_SH_I2C_DATA_HIGH + CONFIG_SH_I2C_DATA_LOW); 221 tmp = num * 10 / denom; 222 if (tmp % 10 >= 5) 223 iccl = (u16)((num/denom) + 1); 224 else 225 iccl = (u16)(num/denom); 226 227 /* Calculate the value for icch. From the data sheet: 228 icch = (p clock / transfer rate) * (H / (L + H)) */ 229 num = CONFIG_SH_I2C_CLOCK * CONFIG_SH_I2C_DATA_HIGH; 230 tmp = num * 10 / denom; 231 if (tmp % 10 >= 5) 232 icch = (u16)((num/denom) + 1); 233 else 234 icch = (u16)(num/denom); 235 } 236 237 /* 238 * i2c_read: - Read multiple bytes from an i2c device 239 * 240 * The higher level routines take into account that this function is only 241 * called with len < page length of the device (see configuration file) 242 * 243 * @chip: address of the chip which is to be read 244 * @addr: i2c data address within the chip 245 * @alen: length of the i2c data address (1..2 bytes) 246 * @buffer: where to write the data 247 * @len: how much byte do we want to read 248 * @return: 0 in case of success 249 */ 250 int i2c_read(u8 chip, u32 addr, int alen, u8 *buffer, int len) 251 { 252 int i = 0; 253 for (i = 0 ; i < len ; i++) 254 buffer[i] = i2c_raw_read(base, chip, addr + i); 255 256 return 0; 257 } 258 259 /* 260 * i2c_write: - Write multiple bytes to an i2c device 261 * 262 * The higher level routines take into account that this function is only 263 * called with len < page length of the device (see configuration file) 264 * 265 * @chip: address of the chip which is to be written 266 * @addr: i2c data address within the chip 267 * @alen: length of the i2c data address (1..2 bytes) 268 * @buffer: where to find the data to be written 269 * @len: how much byte do we want to read 270 * @return: 0 in case of success 271 */ 272 int i2c_write(u8 chip, u32 addr, int alen, u8 *buffer, int len) 273 { 274 int i = 0; 275 for (i = 0; i < len ; i++) 276 i2c_raw_write(base, chip, addr + i, buffer[i]); 277 278 return 0; 279 } 280 281 /* 282 * i2c_probe: - Test if a chip answers for a given i2c address 283 * 284 * @chip: address of the chip which is searched for 285 * @return: 0 if a chip was found, -1 otherwhise 286 */ 287 int i2c_probe(u8 chip) 288 { 289 return 0; 290 } 291