1 /* 2 * Copyright (C) 2014 Broadcom Corporation 3 * 4 * This program is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU General Public License as 6 * published by the Free Software Foundation version 2. 7 * 8 * This program is distributed "as is" WITHOUT ANY WARRANTY of any 9 * kind, whether express or implied; without even the implied warranty 10 * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 * GNU General Public License for more details. 12 */ 13 14 #include <linux/delay.h> 15 #include <linux/i2c.h> 16 #include <linux/interrupt.h> 17 #include <linux/io.h> 18 #include <linux/kernel.h> 19 #include <linux/module.h> 20 #include <linux/of_device.h> 21 #include <linux/platform_device.h> 22 #include <linux/slab.h> 23 24 #define IDM_CTRL_DIRECT_OFFSET 0x00 25 #define CFG_OFFSET 0x00 26 #define CFG_RESET_SHIFT 31 27 #define CFG_EN_SHIFT 30 28 #define CFG_SLAVE_ADDR_0_SHIFT 28 29 #define CFG_M_RETRY_CNT_SHIFT 16 30 #define CFG_M_RETRY_CNT_MASK 0x0f 31 32 #define TIM_CFG_OFFSET 0x04 33 #define TIM_CFG_MODE_400_SHIFT 31 34 #define TIM_RAND_SLAVE_STRETCH_SHIFT 24 35 #define TIM_RAND_SLAVE_STRETCH_MASK 0x7f 36 #define TIM_PERIODIC_SLAVE_STRETCH_SHIFT 16 37 #define TIM_PERIODIC_SLAVE_STRETCH_MASK 0x7f 38 39 #define S_CFG_SMBUS_ADDR_OFFSET 0x08 40 #define S_CFG_EN_NIC_SMB_ADDR3_SHIFT 31 41 #define S_CFG_NIC_SMB_ADDR3_SHIFT 24 42 #define S_CFG_NIC_SMB_ADDR3_MASK 0x7f 43 #define S_CFG_EN_NIC_SMB_ADDR2_SHIFT 23 44 #define S_CFG_NIC_SMB_ADDR2_SHIFT 16 45 #define S_CFG_NIC_SMB_ADDR2_MASK 0x7f 46 #define S_CFG_EN_NIC_SMB_ADDR1_SHIFT 15 47 #define S_CFG_NIC_SMB_ADDR1_SHIFT 8 48 #define S_CFG_NIC_SMB_ADDR1_MASK 0x7f 49 #define S_CFG_EN_NIC_SMB_ADDR0_SHIFT 7 50 #define S_CFG_NIC_SMB_ADDR0_SHIFT 0 51 #define S_CFG_NIC_SMB_ADDR0_MASK 0x7f 52 53 #define M_FIFO_CTRL_OFFSET 0x0c 54 #define M_FIFO_RX_FLUSH_SHIFT 31 55 #define M_FIFO_TX_FLUSH_SHIFT 30 56 #define M_FIFO_RX_CNT_SHIFT 16 57 #define M_FIFO_RX_CNT_MASK 0x7f 58 #define M_FIFO_RX_THLD_SHIFT 8 59 #define M_FIFO_RX_THLD_MASK 0x3f 60 61 #define S_FIFO_CTRL_OFFSET 0x10 62 #define S_FIFO_RX_FLUSH_SHIFT 31 63 #define S_FIFO_TX_FLUSH_SHIFT 30 64 #define S_FIFO_RX_CNT_SHIFT 16 65 #define S_FIFO_RX_CNT_MASK 0x7f 66 #define S_FIFO_RX_THLD_SHIFT 8 67 #define S_FIFO_RX_THLD_MASK 0x3f 68 69 #define M_CMD_OFFSET 0x30 70 #define M_CMD_START_BUSY_SHIFT 31 71 #define M_CMD_STATUS_SHIFT 25 72 #define M_CMD_STATUS_MASK 0x07 73 #define M_CMD_STATUS_SUCCESS 0x0 74 #define M_CMD_STATUS_LOST_ARB 0x1 75 #define M_CMD_STATUS_NACK_ADDR 0x2 76 #define M_CMD_STATUS_NACK_DATA 0x3 77 #define M_CMD_STATUS_TIMEOUT 0x4 78 #define M_CMD_STATUS_FIFO_UNDERRUN 0x5 79 #define M_CMD_STATUS_RX_FIFO_FULL 0x6 80 #define M_CMD_PROTOCOL_SHIFT 9 81 #define M_CMD_PROTOCOL_MASK 0xf 82 #define M_CMD_PROTOCOL_BLK_WR 0x7 83 #define M_CMD_PROTOCOL_BLK_RD 0x8 84 #define M_CMD_PROTOCOL_PROCESS 0xa 85 #define M_CMD_PEC_SHIFT 8 86 #define M_CMD_RD_CNT_SHIFT 0 87 #define M_CMD_RD_CNT_MASK 0xff 88 89 #define S_CMD_OFFSET 0x34 90 #define S_CMD_START_BUSY_SHIFT 31 91 #define S_CMD_STATUS_SHIFT 23 92 #define S_CMD_STATUS_MASK 0x07 93 #define S_CMD_STATUS_SUCCESS 0x0 94 #define S_CMD_STATUS_TIMEOUT 0x5 95 96 #define IE_OFFSET 0x38 97 #define IE_M_RX_FIFO_FULL_SHIFT 31 98 #define IE_M_RX_THLD_SHIFT 30 99 #define IE_M_START_BUSY_SHIFT 28 100 #define IE_M_TX_UNDERRUN_SHIFT 27 101 #define IE_S_RX_FIFO_FULL_SHIFT 26 102 #define IE_S_RX_THLD_SHIFT 25 103 #define IE_S_RX_EVENT_SHIFT 24 104 #define IE_S_START_BUSY_SHIFT 23 105 #define IE_S_TX_UNDERRUN_SHIFT 22 106 #define IE_S_RD_EVENT_SHIFT 21 107 108 #define IS_OFFSET 0x3c 109 #define IS_M_RX_FIFO_FULL_SHIFT 31 110 #define IS_M_RX_THLD_SHIFT 30 111 #define IS_M_START_BUSY_SHIFT 28 112 #define IS_M_TX_UNDERRUN_SHIFT 27 113 #define IS_S_RX_FIFO_FULL_SHIFT 26 114 #define IS_S_RX_THLD_SHIFT 25 115 #define IS_S_RX_EVENT_SHIFT 24 116 #define IS_S_START_BUSY_SHIFT 23 117 #define IS_S_TX_UNDERRUN_SHIFT 22 118 #define IS_S_RD_EVENT_SHIFT 21 119 120 #define M_TX_OFFSET 0x40 121 #define M_TX_WR_STATUS_SHIFT 31 122 #define M_TX_DATA_SHIFT 0 123 #define M_TX_DATA_MASK 0xff 124 125 #define M_RX_OFFSET 0x44 126 #define M_RX_STATUS_SHIFT 30 127 #define M_RX_STATUS_MASK 0x03 128 #define M_RX_PEC_ERR_SHIFT 29 129 #define M_RX_DATA_SHIFT 0 130 #define M_RX_DATA_MASK 0xff 131 132 #define S_TX_OFFSET 0x48 133 #define S_TX_WR_STATUS_SHIFT 31 134 #define S_TX_DATA_SHIFT 0 135 #define S_TX_DATA_MASK 0xff 136 137 #define S_RX_OFFSET 0x4c 138 #define S_RX_STATUS_SHIFT 30 139 #define S_RX_STATUS_MASK 0x03 140 #define S_RX_PEC_ERR_SHIFT 29 141 #define S_RX_DATA_SHIFT 0 142 #define S_RX_DATA_MASK 0xff 143 144 #define I2C_TIMEOUT_MSEC 50000 145 #define M_TX_RX_FIFO_SIZE 64 146 #define M_RX_FIFO_MAX_THLD_VALUE (M_TX_RX_FIFO_SIZE - 1) 147 148 #define M_RX_MAX_READ_LEN 255 149 #define M_RX_FIFO_THLD_VALUE 50 150 151 #define IE_M_ALL_INTERRUPT_SHIFT 27 152 #define IE_M_ALL_INTERRUPT_MASK 0x1e 153 154 #define SLAVE_READ_WRITE_BIT_MASK 0x1 155 #define SLAVE_READ_WRITE_BIT_SHIFT 0x1 156 #define SLAVE_MAX_SIZE_TRANSACTION 64 157 #define SLAVE_CLOCK_STRETCH_TIME 25 158 159 #define IE_S_ALL_INTERRUPT_SHIFT 21 160 #define IE_S_ALL_INTERRUPT_MASK 0x3f 161 162 enum i2c_slave_read_status { 163 I2C_SLAVE_RX_FIFO_EMPTY = 0, 164 I2C_SLAVE_RX_START, 165 I2C_SLAVE_RX_DATA, 166 I2C_SLAVE_RX_END, 167 }; 168 169 enum bus_speed_index { 170 I2C_SPD_100K = 0, 171 I2C_SPD_400K, 172 }; 173 174 enum bcm_iproc_i2c_type { 175 IPROC_I2C, 176 IPROC_I2C_NIC 177 }; 178 179 struct bcm_iproc_i2c_dev { 180 struct device *device; 181 enum bcm_iproc_i2c_type type; 182 int irq; 183 184 void __iomem *base; 185 void __iomem *idm_base; 186 187 u32 ape_addr_mask; 188 189 /* lock for indirect access through IDM */ 190 spinlock_t idm_lock; 191 192 struct i2c_adapter adapter; 193 unsigned int bus_speed; 194 195 struct completion done; 196 int xfer_is_done; 197 198 struct i2c_msg *msg; 199 200 struct i2c_client *slave; 201 202 /* bytes that have been transferred */ 203 unsigned int tx_bytes; 204 /* bytes that have been read */ 205 unsigned int rx_bytes; 206 unsigned int thld_bytes; 207 }; 208 209 /* 210 * Can be expanded in the future if more interrupt status bits are utilized 211 */ 212 #define ISR_MASK (BIT(IS_M_START_BUSY_SHIFT) | BIT(IS_M_TX_UNDERRUN_SHIFT)\ 213 | BIT(IS_M_RX_THLD_SHIFT)) 214 215 #define ISR_MASK_SLAVE (BIT(IS_S_START_BUSY_SHIFT)\ 216 | BIT(IS_S_RX_EVENT_SHIFT) | BIT(IS_S_RD_EVENT_SHIFT)\ 217 | BIT(IS_S_TX_UNDERRUN_SHIFT)) 218 219 static int bcm_iproc_i2c_reg_slave(struct i2c_client *slave); 220 static int bcm_iproc_i2c_unreg_slave(struct i2c_client *slave); 221 static void bcm_iproc_i2c_enable_disable(struct bcm_iproc_i2c_dev *iproc_i2c, 222 bool enable); 223 224 static inline u32 iproc_i2c_rd_reg(struct bcm_iproc_i2c_dev *iproc_i2c, 225 u32 offset) 226 { 227 u32 val; 228 229 if (iproc_i2c->idm_base) { 230 spin_lock(&iproc_i2c->idm_lock); 231 writel(iproc_i2c->ape_addr_mask, 232 iproc_i2c->idm_base + IDM_CTRL_DIRECT_OFFSET); 233 val = readl(iproc_i2c->base + offset); 234 spin_unlock(&iproc_i2c->idm_lock); 235 } else { 236 val = readl(iproc_i2c->base + offset); 237 } 238 239 return val; 240 } 241 242 static inline void iproc_i2c_wr_reg(struct bcm_iproc_i2c_dev *iproc_i2c, 243 u32 offset, u32 val) 244 { 245 if (iproc_i2c->idm_base) { 246 spin_lock(&iproc_i2c->idm_lock); 247 writel(iproc_i2c->ape_addr_mask, 248 iproc_i2c->idm_base + IDM_CTRL_DIRECT_OFFSET); 249 writel(val, iproc_i2c->base + offset); 250 spin_unlock(&iproc_i2c->idm_lock); 251 } else { 252 writel(val, iproc_i2c->base + offset); 253 } 254 } 255 256 static void bcm_iproc_i2c_slave_init( 257 struct bcm_iproc_i2c_dev *iproc_i2c, bool need_reset) 258 { 259 u32 val; 260 261 if (need_reset) { 262 /* put controller in reset */ 263 val = iproc_i2c_rd_reg(iproc_i2c, CFG_OFFSET); 264 val |= BIT(CFG_RESET_SHIFT); 265 iproc_i2c_wr_reg(iproc_i2c, CFG_OFFSET, val); 266 267 /* wait 100 usec per spec */ 268 udelay(100); 269 270 /* bring controller out of reset */ 271 val &= ~(BIT(CFG_RESET_SHIFT)); 272 iproc_i2c_wr_reg(iproc_i2c, CFG_OFFSET, val); 273 } 274 275 /* flush TX/RX FIFOs */ 276 val = (BIT(S_FIFO_RX_FLUSH_SHIFT) | BIT(S_FIFO_TX_FLUSH_SHIFT)); 277 iproc_i2c_wr_reg(iproc_i2c, S_FIFO_CTRL_OFFSET, val); 278 279 /* Maximum slave stretch time */ 280 val = iproc_i2c_rd_reg(iproc_i2c, TIM_CFG_OFFSET); 281 val &= ~(TIM_RAND_SLAVE_STRETCH_MASK << TIM_RAND_SLAVE_STRETCH_SHIFT); 282 val |= (SLAVE_CLOCK_STRETCH_TIME << TIM_RAND_SLAVE_STRETCH_SHIFT); 283 iproc_i2c_wr_reg(iproc_i2c, TIM_CFG_OFFSET, val); 284 285 /* Configure the slave address */ 286 val = iproc_i2c_rd_reg(iproc_i2c, S_CFG_SMBUS_ADDR_OFFSET); 287 val |= BIT(S_CFG_EN_NIC_SMB_ADDR3_SHIFT); 288 val &= ~(S_CFG_NIC_SMB_ADDR3_MASK << S_CFG_NIC_SMB_ADDR3_SHIFT); 289 val |= (iproc_i2c->slave->addr << S_CFG_NIC_SMB_ADDR3_SHIFT); 290 iproc_i2c_wr_reg(iproc_i2c, S_CFG_SMBUS_ADDR_OFFSET, val); 291 292 /* clear all pending slave interrupts */ 293 iproc_i2c_wr_reg(iproc_i2c, IS_OFFSET, ISR_MASK_SLAVE); 294 295 /* Enable interrupt register to indicate a valid byte in receive fifo */ 296 val = BIT(IE_S_RX_EVENT_SHIFT); 297 /* Enable interrupt register for the Slave BUSY command */ 298 val |= BIT(IE_S_START_BUSY_SHIFT); 299 iproc_i2c_wr_reg(iproc_i2c, IE_OFFSET, val); 300 } 301 302 static void bcm_iproc_i2c_check_slave_status( 303 struct bcm_iproc_i2c_dev *iproc_i2c) 304 { 305 u32 val; 306 307 val = iproc_i2c_rd_reg(iproc_i2c, S_CMD_OFFSET); 308 /* status is valid only when START_BUSY is cleared after it was set */ 309 if (val & BIT(S_CMD_START_BUSY_SHIFT)) 310 return; 311 312 val = (val >> S_CMD_STATUS_SHIFT) & S_CMD_STATUS_MASK; 313 if (val == S_CMD_STATUS_TIMEOUT) { 314 dev_err(iproc_i2c->device, "slave random stretch time timeout\n"); 315 316 /* re-initialize i2c for recovery */ 317 bcm_iproc_i2c_enable_disable(iproc_i2c, false); 318 bcm_iproc_i2c_slave_init(iproc_i2c, true); 319 bcm_iproc_i2c_enable_disable(iproc_i2c, true); 320 } 321 } 322 323 static bool bcm_iproc_i2c_slave_isr(struct bcm_iproc_i2c_dev *iproc_i2c, 324 u32 status) 325 { 326 u32 val; 327 u8 value, rx_status; 328 329 /* Slave RX byte receive */ 330 if (status & BIT(IS_S_RX_EVENT_SHIFT)) { 331 val = iproc_i2c_rd_reg(iproc_i2c, S_RX_OFFSET); 332 rx_status = (val >> S_RX_STATUS_SHIFT) & S_RX_STATUS_MASK; 333 if (rx_status == I2C_SLAVE_RX_START) { 334 /* Start of SMBUS for Master write */ 335 i2c_slave_event(iproc_i2c->slave, 336 I2C_SLAVE_WRITE_REQUESTED, &value); 337 338 val = iproc_i2c_rd_reg(iproc_i2c, S_RX_OFFSET); 339 value = (u8)((val >> S_RX_DATA_SHIFT) & S_RX_DATA_MASK); 340 i2c_slave_event(iproc_i2c->slave, 341 I2C_SLAVE_WRITE_RECEIVED, &value); 342 } else if (status & BIT(IS_S_RD_EVENT_SHIFT)) { 343 /* Start of SMBUS for Master Read */ 344 i2c_slave_event(iproc_i2c->slave, 345 I2C_SLAVE_READ_REQUESTED, &value); 346 iproc_i2c_wr_reg(iproc_i2c, S_TX_OFFSET, value); 347 348 val = BIT(S_CMD_START_BUSY_SHIFT); 349 iproc_i2c_wr_reg(iproc_i2c, S_CMD_OFFSET, val); 350 351 /* 352 * Enable interrupt for TX FIFO becomes empty and 353 * less than PKT_LENGTH bytes were output on the SMBUS 354 */ 355 val = iproc_i2c_rd_reg(iproc_i2c, IE_OFFSET); 356 val |= BIT(IE_S_TX_UNDERRUN_SHIFT); 357 iproc_i2c_wr_reg(iproc_i2c, IE_OFFSET, val); 358 } else { 359 /* Master write other than start */ 360 value = (u8)((val >> S_RX_DATA_SHIFT) & S_RX_DATA_MASK); 361 i2c_slave_event(iproc_i2c->slave, 362 I2C_SLAVE_WRITE_RECEIVED, &value); 363 } 364 } else if (status & BIT(IS_S_TX_UNDERRUN_SHIFT)) { 365 /* Master read other than start */ 366 i2c_slave_event(iproc_i2c->slave, 367 I2C_SLAVE_READ_PROCESSED, &value); 368 369 iproc_i2c_wr_reg(iproc_i2c, S_TX_OFFSET, value); 370 val = BIT(S_CMD_START_BUSY_SHIFT); 371 iproc_i2c_wr_reg(iproc_i2c, S_CMD_OFFSET, val); 372 } 373 374 /* Stop */ 375 if (status & BIT(IS_S_START_BUSY_SHIFT)) { 376 i2c_slave_event(iproc_i2c->slave, I2C_SLAVE_STOP, &value); 377 /* 378 * Enable interrupt for TX FIFO becomes empty and 379 * less than PKT_LENGTH bytes were output on the SMBUS 380 */ 381 val = iproc_i2c_rd_reg(iproc_i2c, IE_OFFSET); 382 val &= ~BIT(IE_S_TX_UNDERRUN_SHIFT); 383 iproc_i2c_wr_reg(iproc_i2c, IE_OFFSET, val); 384 } 385 386 /* clear interrupt status */ 387 iproc_i2c_wr_reg(iproc_i2c, IS_OFFSET, status); 388 389 bcm_iproc_i2c_check_slave_status(iproc_i2c); 390 return true; 391 } 392 393 static void bcm_iproc_i2c_read_valid_bytes(struct bcm_iproc_i2c_dev *iproc_i2c) 394 { 395 struct i2c_msg *msg = iproc_i2c->msg; 396 uint32_t val; 397 398 /* Read valid data from RX FIFO */ 399 while (iproc_i2c->rx_bytes < msg->len) { 400 val = iproc_i2c_rd_reg(iproc_i2c, M_RX_OFFSET); 401 402 /* rx fifo empty */ 403 if (!((val >> M_RX_STATUS_SHIFT) & M_RX_STATUS_MASK)) 404 break; 405 406 msg->buf[iproc_i2c->rx_bytes] = 407 (val >> M_RX_DATA_SHIFT) & M_RX_DATA_MASK; 408 iproc_i2c->rx_bytes++; 409 } 410 } 411 412 static void bcm_iproc_i2c_send(struct bcm_iproc_i2c_dev *iproc_i2c) 413 { 414 struct i2c_msg *msg = iproc_i2c->msg; 415 unsigned int tx_bytes = msg->len - iproc_i2c->tx_bytes; 416 unsigned int i; 417 u32 val; 418 419 /* can only fill up to the FIFO size */ 420 tx_bytes = min_t(unsigned int, tx_bytes, M_TX_RX_FIFO_SIZE); 421 for (i = 0; i < tx_bytes; i++) { 422 /* start from where we left over */ 423 unsigned int idx = iproc_i2c->tx_bytes + i; 424 425 val = msg->buf[idx]; 426 427 /* mark the last byte */ 428 if (idx == msg->len - 1) { 429 val |= BIT(M_TX_WR_STATUS_SHIFT); 430 431 if (iproc_i2c->irq) { 432 u32 tmp; 433 434 /* 435 * Since this is the last byte, we should now 436 * disable TX FIFO underrun interrupt 437 */ 438 tmp = iproc_i2c_rd_reg(iproc_i2c, IE_OFFSET); 439 tmp &= ~BIT(IE_M_TX_UNDERRUN_SHIFT); 440 iproc_i2c_wr_reg(iproc_i2c, IE_OFFSET, 441 tmp); 442 } 443 } 444 445 /* load data into TX FIFO */ 446 iproc_i2c_wr_reg(iproc_i2c, M_TX_OFFSET, val); 447 } 448 449 /* update number of transferred bytes */ 450 iproc_i2c->tx_bytes += tx_bytes; 451 } 452 453 static void bcm_iproc_i2c_read(struct bcm_iproc_i2c_dev *iproc_i2c) 454 { 455 struct i2c_msg *msg = iproc_i2c->msg; 456 u32 bytes_left, val; 457 458 bcm_iproc_i2c_read_valid_bytes(iproc_i2c); 459 bytes_left = msg->len - iproc_i2c->rx_bytes; 460 if (bytes_left == 0) { 461 if (iproc_i2c->irq) { 462 /* finished reading all data, disable rx thld event */ 463 val = iproc_i2c_rd_reg(iproc_i2c, IE_OFFSET); 464 val &= ~BIT(IS_M_RX_THLD_SHIFT); 465 iproc_i2c_wr_reg(iproc_i2c, IE_OFFSET, val); 466 } 467 } else if (bytes_left < iproc_i2c->thld_bytes) { 468 /* set bytes left as threshold */ 469 val = iproc_i2c_rd_reg(iproc_i2c, M_FIFO_CTRL_OFFSET); 470 val &= ~(M_FIFO_RX_THLD_MASK << M_FIFO_RX_THLD_SHIFT); 471 val |= (bytes_left << M_FIFO_RX_THLD_SHIFT); 472 iproc_i2c_wr_reg(iproc_i2c, M_FIFO_CTRL_OFFSET, val); 473 iproc_i2c->thld_bytes = bytes_left; 474 } 475 /* 476 * bytes_left >= iproc_i2c->thld_bytes, 477 * hence no need to change the THRESHOLD SET. 478 * It will remain as iproc_i2c->thld_bytes itself 479 */ 480 } 481 482 static void bcm_iproc_i2c_process_m_event(struct bcm_iproc_i2c_dev *iproc_i2c, 483 u32 status) 484 { 485 /* TX FIFO is empty and we have more data to send */ 486 if (status & BIT(IS_M_TX_UNDERRUN_SHIFT)) 487 bcm_iproc_i2c_send(iproc_i2c); 488 489 /* RX FIFO threshold is reached and data needs to be read out */ 490 if (status & BIT(IS_M_RX_THLD_SHIFT)) 491 bcm_iproc_i2c_read(iproc_i2c); 492 493 /* transfer is done */ 494 if (status & BIT(IS_M_START_BUSY_SHIFT)) { 495 iproc_i2c->xfer_is_done = 1; 496 if (iproc_i2c->irq) 497 complete(&iproc_i2c->done); 498 } 499 } 500 501 static irqreturn_t bcm_iproc_i2c_isr(int irq, void *data) 502 { 503 struct bcm_iproc_i2c_dev *iproc_i2c = data; 504 u32 status = iproc_i2c_rd_reg(iproc_i2c, IS_OFFSET); 505 bool ret; 506 u32 sl_status = status & ISR_MASK_SLAVE; 507 508 if (sl_status) { 509 ret = bcm_iproc_i2c_slave_isr(iproc_i2c, sl_status); 510 if (ret) 511 return IRQ_HANDLED; 512 else 513 return IRQ_NONE; 514 } 515 516 status &= ISR_MASK; 517 if (!status) 518 return IRQ_NONE; 519 520 /* process all master based events */ 521 bcm_iproc_i2c_process_m_event(iproc_i2c, status); 522 iproc_i2c_wr_reg(iproc_i2c, IS_OFFSET, status); 523 524 return IRQ_HANDLED; 525 } 526 527 static int bcm_iproc_i2c_init(struct bcm_iproc_i2c_dev *iproc_i2c) 528 { 529 u32 val; 530 531 /* put controller in reset */ 532 val = iproc_i2c_rd_reg(iproc_i2c, CFG_OFFSET); 533 val |= BIT(CFG_RESET_SHIFT); 534 val &= ~(BIT(CFG_EN_SHIFT)); 535 iproc_i2c_wr_reg(iproc_i2c, CFG_OFFSET, val); 536 537 /* wait 100 usec per spec */ 538 udelay(100); 539 540 /* bring controller out of reset */ 541 val &= ~(BIT(CFG_RESET_SHIFT)); 542 iproc_i2c_wr_reg(iproc_i2c, CFG_OFFSET, val); 543 544 /* flush TX/RX FIFOs and set RX FIFO threshold to zero */ 545 val = (BIT(M_FIFO_RX_FLUSH_SHIFT) | BIT(M_FIFO_TX_FLUSH_SHIFT)); 546 iproc_i2c_wr_reg(iproc_i2c, M_FIFO_CTRL_OFFSET, val); 547 /* disable all interrupts */ 548 val = iproc_i2c_rd_reg(iproc_i2c, IE_OFFSET); 549 val &= ~(IE_M_ALL_INTERRUPT_MASK << 550 IE_M_ALL_INTERRUPT_SHIFT); 551 iproc_i2c_wr_reg(iproc_i2c, IE_OFFSET, val); 552 553 /* clear all pending interrupts */ 554 iproc_i2c_wr_reg(iproc_i2c, IS_OFFSET, 0xffffffff); 555 556 return 0; 557 } 558 559 static void bcm_iproc_i2c_enable_disable(struct bcm_iproc_i2c_dev *iproc_i2c, 560 bool enable) 561 { 562 u32 val; 563 564 val = iproc_i2c_rd_reg(iproc_i2c, CFG_OFFSET); 565 if (enable) 566 val |= BIT(CFG_EN_SHIFT); 567 else 568 val &= ~BIT(CFG_EN_SHIFT); 569 iproc_i2c_wr_reg(iproc_i2c, CFG_OFFSET, val); 570 } 571 572 static int bcm_iproc_i2c_check_status(struct bcm_iproc_i2c_dev *iproc_i2c, 573 struct i2c_msg *msg) 574 { 575 u32 val; 576 577 val = iproc_i2c_rd_reg(iproc_i2c, M_CMD_OFFSET); 578 val = (val >> M_CMD_STATUS_SHIFT) & M_CMD_STATUS_MASK; 579 580 switch (val) { 581 case M_CMD_STATUS_SUCCESS: 582 return 0; 583 584 case M_CMD_STATUS_LOST_ARB: 585 dev_dbg(iproc_i2c->device, "lost bus arbitration\n"); 586 return -EAGAIN; 587 588 case M_CMD_STATUS_NACK_ADDR: 589 dev_dbg(iproc_i2c->device, "NAK addr:0x%02x\n", msg->addr); 590 return -ENXIO; 591 592 case M_CMD_STATUS_NACK_DATA: 593 dev_dbg(iproc_i2c->device, "NAK data\n"); 594 return -ENXIO; 595 596 case M_CMD_STATUS_TIMEOUT: 597 dev_dbg(iproc_i2c->device, "bus timeout\n"); 598 return -ETIMEDOUT; 599 600 case M_CMD_STATUS_FIFO_UNDERRUN: 601 dev_dbg(iproc_i2c->device, "FIFO under-run\n"); 602 return -ENXIO; 603 604 case M_CMD_STATUS_RX_FIFO_FULL: 605 dev_dbg(iproc_i2c->device, "RX FIFO full\n"); 606 return -ETIMEDOUT; 607 608 default: 609 dev_dbg(iproc_i2c->device, "unknown error code=%d\n", val); 610 611 /* re-initialize i2c for recovery */ 612 bcm_iproc_i2c_enable_disable(iproc_i2c, false); 613 bcm_iproc_i2c_init(iproc_i2c); 614 bcm_iproc_i2c_enable_disable(iproc_i2c, true); 615 616 return -EIO; 617 } 618 } 619 620 static int bcm_iproc_i2c_xfer_wait(struct bcm_iproc_i2c_dev *iproc_i2c, 621 struct i2c_msg *msg, 622 u32 cmd) 623 { 624 unsigned long time_left = msecs_to_jiffies(I2C_TIMEOUT_MSEC); 625 u32 val, status; 626 int ret; 627 628 iproc_i2c_wr_reg(iproc_i2c, M_CMD_OFFSET, cmd); 629 630 if (iproc_i2c->irq) { 631 time_left = wait_for_completion_timeout(&iproc_i2c->done, 632 time_left); 633 /* disable all interrupts */ 634 iproc_i2c_wr_reg(iproc_i2c, IE_OFFSET, 0); 635 /* read it back to flush the write */ 636 iproc_i2c_rd_reg(iproc_i2c, IE_OFFSET); 637 /* make sure the interrupt handler isn't running */ 638 synchronize_irq(iproc_i2c->irq); 639 640 } else { /* polling mode */ 641 unsigned long timeout = jiffies + time_left; 642 643 do { 644 status = iproc_i2c_rd_reg(iproc_i2c, 645 IS_OFFSET) & ISR_MASK; 646 bcm_iproc_i2c_process_m_event(iproc_i2c, status); 647 iproc_i2c_wr_reg(iproc_i2c, IS_OFFSET, status); 648 649 if (time_after(jiffies, timeout)) { 650 time_left = 0; 651 break; 652 } 653 654 cpu_relax(); 655 cond_resched(); 656 } while (!iproc_i2c->xfer_is_done); 657 } 658 659 if (!time_left && !iproc_i2c->xfer_is_done) { 660 dev_err(iproc_i2c->device, "transaction timed out\n"); 661 662 /* flush both TX/RX FIFOs */ 663 val = BIT(M_FIFO_RX_FLUSH_SHIFT) | BIT(M_FIFO_TX_FLUSH_SHIFT); 664 iproc_i2c_wr_reg(iproc_i2c, M_FIFO_CTRL_OFFSET, val); 665 return -ETIMEDOUT; 666 } 667 668 ret = bcm_iproc_i2c_check_status(iproc_i2c, msg); 669 if (ret) { 670 /* flush both TX/RX FIFOs */ 671 val = BIT(M_FIFO_RX_FLUSH_SHIFT) | BIT(M_FIFO_TX_FLUSH_SHIFT); 672 iproc_i2c_wr_reg(iproc_i2c, M_FIFO_CTRL_OFFSET, val); 673 return ret; 674 } 675 676 return 0; 677 } 678 679 /* 680 * If 'process_call' is true, then this is a multi-msg transfer that requires 681 * a repeated start between the messages. 682 * More specifically, it must be a write (reg) followed by a read (data). 683 * The i2c quirks are set to enforce this rule. 684 */ 685 static int bcm_iproc_i2c_xfer_internal(struct bcm_iproc_i2c_dev *iproc_i2c, 686 struct i2c_msg *msgs, bool process_call) 687 { 688 int i; 689 u8 addr; 690 u32 val, tmp, val_intr_en; 691 unsigned int tx_bytes; 692 struct i2c_msg *msg = &msgs[0]; 693 694 /* check if bus is busy */ 695 if (!!(iproc_i2c_rd_reg(iproc_i2c, 696 M_CMD_OFFSET) & BIT(M_CMD_START_BUSY_SHIFT))) { 697 dev_warn(iproc_i2c->device, "bus is busy\n"); 698 return -EBUSY; 699 } 700 701 iproc_i2c->msg = msg; 702 703 /* format and load slave address into the TX FIFO */ 704 addr = i2c_8bit_addr_from_msg(msg); 705 iproc_i2c_wr_reg(iproc_i2c, M_TX_OFFSET, addr); 706 707 /* 708 * For a write transaction, load data into the TX FIFO. Only allow 709 * loading up to TX FIFO size - 1 bytes of data since the first byte 710 * has been used up by the slave address 711 */ 712 tx_bytes = min_t(unsigned int, msg->len, M_TX_RX_FIFO_SIZE - 1); 713 if (!(msg->flags & I2C_M_RD)) { 714 for (i = 0; i < tx_bytes; i++) { 715 val = msg->buf[i]; 716 717 /* mark the last byte */ 718 if (!process_call && (i == msg->len - 1)) 719 val |= 1 << M_TX_WR_STATUS_SHIFT; 720 721 iproc_i2c_wr_reg(iproc_i2c, M_TX_OFFSET, val); 722 } 723 iproc_i2c->tx_bytes = tx_bytes; 724 } 725 726 /* Process the read message if this is process call */ 727 if (process_call) { 728 msg++; 729 iproc_i2c->msg = msg; /* point to second msg */ 730 731 /* 732 * The last byte to be sent out should be a slave 733 * address with read operation 734 */ 735 addr = i2c_8bit_addr_from_msg(msg); 736 /* mark it the last byte out */ 737 val = addr | (1 << M_TX_WR_STATUS_SHIFT); 738 iproc_i2c_wr_reg(iproc_i2c, M_TX_OFFSET, val); 739 } 740 741 /* mark as incomplete before starting the transaction */ 742 if (iproc_i2c->irq) 743 reinit_completion(&iproc_i2c->done); 744 745 iproc_i2c->xfer_is_done = 0; 746 747 /* 748 * Enable the "start busy" interrupt, which will be triggered after the 749 * transaction is done, i.e., the internal start_busy bit, transitions 750 * from 1 to 0. 751 */ 752 val_intr_en = BIT(IE_M_START_BUSY_SHIFT); 753 754 /* 755 * If TX data size is larger than the TX FIFO, need to enable TX 756 * underrun interrupt, which will be triggerred when the TX FIFO is 757 * empty. When that happens we can then pump more data into the FIFO 758 */ 759 if (!process_call && !(msg->flags & I2C_M_RD) && 760 msg->len > iproc_i2c->tx_bytes) 761 val_intr_en |= BIT(IE_M_TX_UNDERRUN_SHIFT); 762 763 /* 764 * Now we can activate the transfer. For a read operation, specify the 765 * number of bytes to read 766 */ 767 val = BIT(M_CMD_START_BUSY_SHIFT); 768 if (msg->flags & I2C_M_RD) { 769 u32 protocol; 770 771 iproc_i2c->rx_bytes = 0; 772 if (msg->len > M_RX_FIFO_MAX_THLD_VALUE) 773 iproc_i2c->thld_bytes = M_RX_FIFO_THLD_VALUE; 774 else 775 iproc_i2c->thld_bytes = msg->len; 776 777 /* set threshold value */ 778 tmp = iproc_i2c_rd_reg(iproc_i2c, M_FIFO_CTRL_OFFSET); 779 tmp &= ~(M_FIFO_RX_THLD_MASK << M_FIFO_RX_THLD_SHIFT); 780 tmp |= iproc_i2c->thld_bytes << M_FIFO_RX_THLD_SHIFT; 781 iproc_i2c_wr_reg(iproc_i2c, M_FIFO_CTRL_OFFSET, tmp); 782 783 /* enable the RX threshold interrupt */ 784 val_intr_en |= BIT(IE_M_RX_THLD_SHIFT); 785 786 protocol = process_call ? 787 M_CMD_PROTOCOL_PROCESS : M_CMD_PROTOCOL_BLK_RD; 788 789 val |= (protocol << M_CMD_PROTOCOL_SHIFT) | 790 (msg->len << M_CMD_RD_CNT_SHIFT); 791 } else { 792 val |= (M_CMD_PROTOCOL_BLK_WR << M_CMD_PROTOCOL_SHIFT); 793 } 794 795 if (iproc_i2c->irq) 796 iproc_i2c_wr_reg(iproc_i2c, IE_OFFSET, val_intr_en); 797 798 return bcm_iproc_i2c_xfer_wait(iproc_i2c, msg, val); 799 } 800 801 static int bcm_iproc_i2c_xfer(struct i2c_adapter *adapter, 802 struct i2c_msg msgs[], int num) 803 { 804 struct bcm_iproc_i2c_dev *iproc_i2c = i2c_get_adapdata(adapter); 805 bool process_call = false; 806 int ret; 807 808 if (num == 2) { 809 /* Repeated start, use process call */ 810 process_call = true; 811 if (msgs[1].flags & I2C_M_NOSTART) { 812 dev_err(iproc_i2c->device, "Invalid repeated start\n"); 813 return -EOPNOTSUPP; 814 } 815 } 816 817 ret = bcm_iproc_i2c_xfer_internal(iproc_i2c, msgs, process_call); 818 if (ret) { 819 dev_dbg(iproc_i2c->device, "xfer failed\n"); 820 return ret; 821 } 822 823 return num; 824 } 825 826 static uint32_t bcm_iproc_i2c_functionality(struct i2c_adapter *adap) 827 { 828 u32 val; 829 830 /* We do not support the SMBUS Quick command */ 831 val = I2C_FUNC_I2C | (I2C_FUNC_SMBUS_EMUL & ~I2C_FUNC_SMBUS_QUICK); 832 833 if (adap->algo->reg_slave) 834 val |= I2C_FUNC_SLAVE; 835 836 return val; 837 } 838 839 static struct i2c_algorithm bcm_iproc_algo = { 840 .master_xfer = bcm_iproc_i2c_xfer, 841 .functionality = bcm_iproc_i2c_functionality, 842 .reg_slave = bcm_iproc_i2c_reg_slave, 843 .unreg_slave = bcm_iproc_i2c_unreg_slave, 844 }; 845 846 static const struct i2c_adapter_quirks bcm_iproc_i2c_quirks = { 847 .flags = I2C_AQ_COMB_WRITE_THEN_READ, 848 .max_comb_1st_msg_len = M_TX_RX_FIFO_SIZE, 849 .max_read_len = M_RX_MAX_READ_LEN, 850 }; 851 852 static int bcm_iproc_i2c_cfg_speed(struct bcm_iproc_i2c_dev *iproc_i2c) 853 { 854 unsigned int bus_speed; 855 u32 val; 856 int ret = of_property_read_u32(iproc_i2c->device->of_node, 857 "clock-frequency", &bus_speed); 858 if (ret < 0) { 859 dev_info(iproc_i2c->device, 860 "unable to interpret clock-frequency DT property\n"); 861 bus_speed = I2C_MAX_STANDARD_MODE_FREQ; 862 } 863 864 if (bus_speed < I2C_MAX_STANDARD_MODE_FREQ) { 865 dev_err(iproc_i2c->device, "%d Hz bus speed not supported\n", 866 bus_speed); 867 dev_err(iproc_i2c->device, 868 "valid speeds are 100khz and 400khz\n"); 869 return -EINVAL; 870 } else if (bus_speed < I2C_MAX_FAST_MODE_FREQ) { 871 bus_speed = I2C_MAX_STANDARD_MODE_FREQ; 872 } else { 873 bus_speed = I2C_MAX_FAST_MODE_FREQ; 874 } 875 876 iproc_i2c->bus_speed = bus_speed; 877 val = iproc_i2c_rd_reg(iproc_i2c, TIM_CFG_OFFSET); 878 val &= ~BIT(TIM_CFG_MODE_400_SHIFT); 879 val |= (bus_speed == I2C_MAX_FAST_MODE_FREQ) << TIM_CFG_MODE_400_SHIFT; 880 iproc_i2c_wr_reg(iproc_i2c, TIM_CFG_OFFSET, val); 881 882 dev_info(iproc_i2c->device, "bus set to %u Hz\n", bus_speed); 883 884 return 0; 885 } 886 887 static int bcm_iproc_i2c_probe(struct platform_device *pdev) 888 { 889 int irq, ret = 0; 890 struct bcm_iproc_i2c_dev *iproc_i2c; 891 struct i2c_adapter *adap; 892 struct resource *res; 893 894 iproc_i2c = devm_kzalloc(&pdev->dev, sizeof(*iproc_i2c), 895 GFP_KERNEL); 896 if (!iproc_i2c) 897 return -ENOMEM; 898 899 platform_set_drvdata(pdev, iproc_i2c); 900 iproc_i2c->device = &pdev->dev; 901 iproc_i2c->type = 902 (enum bcm_iproc_i2c_type)of_device_get_match_data(&pdev->dev); 903 init_completion(&iproc_i2c->done); 904 905 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 906 iproc_i2c->base = devm_ioremap_resource(iproc_i2c->device, res); 907 if (IS_ERR(iproc_i2c->base)) 908 return PTR_ERR(iproc_i2c->base); 909 910 if (iproc_i2c->type == IPROC_I2C_NIC) { 911 res = platform_get_resource(pdev, IORESOURCE_MEM, 1); 912 iproc_i2c->idm_base = devm_ioremap_resource(iproc_i2c->device, 913 res); 914 if (IS_ERR(iproc_i2c->idm_base)) 915 return PTR_ERR(iproc_i2c->idm_base); 916 917 ret = of_property_read_u32(iproc_i2c->device->of_node, 918 "brcm,ape-hsls-addr-mask", 919 &iproc_i2c->ape_addr_mask); 920 if (ret < 0) { 921 dev_err(iproc_i2c->device, 922 "'brcm,ape-hsls-addr-mask' missing\n"); 923 return -EINVAL; 924 } 925 926 spin_lock_init(&iproc_i2c->idm_lock); 927 928 /* no slave support */ 929 bcm_iproc_algo.reg_slave = NULL; 930 bcm_iproc_algo.unreg_slave = NULL; 931 } 932 933 ret = bcm_iproc_i2c_init(iproc_i2c); 934 if (ret) 935 return ret; 936 937 ret = bcm_iproc_i2c_cfg_speed(iproc_i2c); 938 if (ret) 939 return ret; 940 941 irq = platform_get_irq(pdev, 0); 942 if (irq > 0) { 943 ret = devm_request_irq(iproc_i2c->device, irq, 944 bcm_iproc_i2c_isr, 0, pdev->name, 945 iproc_i2c); 946 if (ret < 0) { 947 dev_err(iproc_i2c->device, 948 "unable to request irq %i\n", irq); 949 return ret; 950 } 951 952 iproc_i2c->irq = irq; 953 } else { 954 dev_warn(iproc_i2c->device, 955 "no irq resource, falling back to poll mode\n"); 956 } 957 958 bcm_iproc_i2c_enable_disable(iproc_i2c, true); 959 960 adap = &iproc_i2c->adapter; 961 i2c_set_adapdata(adap, iproc_i2c); 962 snprintf(adap->name, sizeof(adap->name), 963 "Broadcom iProc (%s)", 964 of_node_full_name(iproc_i2c->device->of_node)); 965 adap->algo = &bcm_iproc_algo; 966 adap->quirks = &bcm_iproc_i2c_quirks; 967 adap->dev.parent = &pdev->dev; 968 adap->dev.of_node = pdev->dev.of_node; 969 970 return i2c_add_adapter(adap); 971 } 972 973 static int bcm_iproc_i2c_remove(struct platform_device *pdev) 974 { 975 struct bcm_iproc_i2c_dev *iproc_i2c = platform_get_drvdata(pdev); 976 977 if (iproc_i2c->irq) { 978 /* 979 * Make sure there's no pending interrupt when we remove the 980 * adapter 981 */ 982 iproc_i2c_wr_reg(iproc_i2c, IE_OFFSET, 0); 983 iproc_i2c_rd_reg(iproc_i2c, IE_OFFSET); 984 synchronize_irq(iproc_i2c->irq); 985 } 986 987 i2c_del_adapter(&iproc_i2c->adapter); 988 bcm_iproc_i2c_enable_disable(iproc_i2c, false); 989 990 return 0; 991 } 992 993 #ifdef CONFIG_PM_SLEEP 994 995 static int bcm_iproc_i2c_suspend(struct device *dev) 996 { 997 struct bcm_iproc_i2c_dev *iproc_i2c = dev_get_drvdata(dev); 998 999 if (iproc_i2c->irq) { 1000 /* 1001 * Make sure there's no pending interrupt when we go into 1002 * suspend 1003 */ 1004 iproc_i2c_wr_reg(iproc_i2c, IE_OFFSET, 0); 1005 iproc_i2c_rd_reg(iproc_i2c, IE_OFFSET); 1006 synchronize_irq(iproc_i2c->irq); 1007 } 1008 1009 /* now disable the controller */ 1010 bcm_iproc_i2c_enable_disable(iproc_i2c, false); 1011 1012 return 0; 1013 } 1014 1015 static int bcm_iproc_i2c_resume(struct device *dev) 1016 { 1017 struct bcm_iproc_i2c_dev *iproc_i2c = dev_get_drvdata(dev); 1018 int ret; 1019 u32 val; 1020 1021 /* 1022 * Power domain could have been shut off completely in system deep 1023 * sleep, so re-initialize the block here 1024 */ 1025 ret = bcm_iproc_i2c_init(iproc_i2c); 1026 if (ret) 1027 return ret; 1028 1029 /* configure to the desired bus speed */ 1030 val = iproc_i2c_rd_reg(iproc_i2c, TIM_CFG_OFFSET); 1031 val &= ~BIT(TIM_CFG_MODE_400_SHIFT); 1032 val |= (iproc_i2c->bus_speed == I2C_MAX_FAST_MODE_FREQ) << TIM_CFG_MODE_400_SHIFT; 1033 iproc_i2c_wr_reg(iproc_i2c, TIM_CFG_OFFSET, val); 1034 1035 bcm_iproc_i2c_enable_disable(iproc_i2c, true); 1036 1037 return 0; 1038 } 1039 1040 static const struct dev_pm_ops bcm_iproc_i2c_pm_ops = { 1041 .suspend_late = &bcm_iproc_i2c_suspend, 1042 .resume_early = &bcm_iproc_i2c_resume 1043 }; 1044 1045 #define BCM_IPROC_I2C_PM_OPS (&bcm_iproc_i2c_pm_ops) 1046 #else 1047 #define BCM_IPROC_I2C_PM_OPS NULL 1048 #endif /* CONFIG_PM_SLEEP */ 1049 1050 1051 static int bcm_iproc_i2c_reg_slave(struct i2c_client *slave) 1052 { 1053 struct bcm_iproc_i2c_dev *iproc_i2c = i2c_get_adapdata(slave->adapter); 1054 1055 if (iproc_i2c->slave) 1056 return -EBUSY; 1057 1058 if (slave->flags & I2C_CLIENT_TEN) 1059 return -EAFNOSUPPORT; 1060 1061 iproc_i2c->slave = slave; 1062 bcm_iproc_i2c_slave_init(iproc_i2c, false); 1063 return 0; 1064 } 1065 1066 static int bcm_iproc_i2c_unreg_slave(struct i2c_client *slave) 1067 { 1068 u32 tmp; 1069 struct bcm_iproc_i2c_dev *iproc_i2c = i2c_get_adapdata(slave->adapter); 1070 1071 if (!iproc_i2c->slave) 1072 return -EINVAL; 1073 1074 iproc_i2c->slave = NULL; 1075 1076 /* disable all slave interrupts */ 1077 tmp = iproc_i2c_rd_reg(iproc_i2c, IE_OFFSET); 1078 tmp &= ~(IE_S_ALL_INTERRUPT_MASK << 1079 IE_S_ALL_INTERRUPT_SHIFT); 1080 iproc_i2c_wr_reg(iproc_i2c, IE_OFFSET, tmp); 1081 1082 /* Erase the slave address programmed */ 1083 tmp = iproc_i2c_rd_reg(iproc_i2c, S_CFG_SMBUS_ADDR_OFFSET); 1084 tmp &= ~BIT(S_CFG_EN_NIC_SMB_ADDR3_SHIFT); 1085 iproc_i2c_wr_reg(iproc_i2c, S_CFG_SMBUS_ADDR_OFFSET, tmp); 1086 1087 return 0; 1088 } 1089 1090 static const struct of_device_id bcm_iproc_i2c_of_match[] = { 1091 { 1092 .compatible = "brcm,iproc-i2c", 1093 .data = (int *)IPROC_I2C, 1094 }, { 1095 .compatible = "brcm,iproc-nic-i2c", 1096 .data = (int *)IPROC_I2C_NIC, 1097 }, 1098 { /* sentinel */ } 1099 }; 1100 MODULE_DEVICE_TABLE(of, bcm_iproc_i2c_of_match); 1101 1102 static struct platform_driver bcm_iproc_i2c_driver = { 1103 .driver = { 1104 .name = "bcm-iproc-i2c", 1105 .of_match_table = bcm_iproc_i2c_of_match, 1106 .pm = BCM_IPROC_I2C_PM_OPS, 1107 }, 1108 .probe = bcm_iproc_i2c_probe, 1109 .remove = bcm_iproc_i2c_remove, 1110 }; 1111 module_platform_driver(bcm_iproc_i2c_driver); 1112 1113 MODULE_AUTHOR("Ray Jui <rjui@broadcom.com>"); 1114 MODULE_DESCRIPTION("Broadcom iProc I2C Driver"); 1115 MODULE_LICENSE("GPL v2"); 1116