1/* 2 * Driver for the Renesas RCar I2C unit 3 * 4 * Copyright (C) 2014 Wolfram Sang <wsa@sang-engineering.com> 5 * 6 * Copyright (C) 2012-14 Renesas Solutions Corp. 7 * Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> 8 * 9 * This file is based on the drivers/i2c/busses/i2c-sh7760.c 10 * (c) 2005-2008 MSC Vertriebsges.m.b.H, Manuel Lauss <mlau@msc-ge.com> 11 * 12 * This file used out-of-tree driver i2c-rcar.c 13 * Copyright (C) 2011-2012 Renesas Electronics Corporation 14 * 15 * This program is free software; you can redistribute it and/or modify 16 * it under the terms of the GNU General Public License as published by 17 * the Free Software Foundation; version 2 of the License. 18 * 19 * This program is distributed in the hope that it will be useful, 20 * but WITHOUT ANY WARRANTY; without even the implied warranty of 21 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 22 * GNU General Public License for more details. 23 */ 24#include <linux/clk.h> 25#include <linux/delay.h> 26#include <linux/err.h> 27#include <linux/interrupt.h> 28#include <linux/io.h> 29#include <linux/i2c.h> 30#include <linux/kernel.h> 31#include <linux/module.h> 32#include <linux/of_device.h> 33#include <linux/platform_device.h> 34#include <linux/pm_runtime.h> 35#include <linux/slab.h> 36#include <linux/spinlock.h> 37 38/* register offsets */ 39#define ICSCR 0x00 /* slave ctrl */ 40#define ICMCR 0x04 /* master ctrl */ 41#define ICSSR 0x08 /* slave status */ 42#define ICMSR 0x0C /* master status */ 43#define ICSIER 0x10 /* slave irq enable */ 44#define ICMIER 0x14 /* master irq enable */ 45#define ICCCR 0x18 /* clock dividers */ 46#define ICSAR 0x1C /* slave address */ 47#define ICMAR 0x20 /* master address */ 48#define ICRXTX 0x24 /* data port */ 49 50/* ICSCR */ 51#define SDBS (1 << 3) /* slave data buffer select */ 52#define SIE (1 << 2) /* slave interface enable */ 53#define GCAE (1 << 1) /* general call address enable */ 54#define FNA (1 << 0) /* forced non acknowledgment */ 55 56/* ICMCR */ 57#define MDBS (1 << 7) /* non-fifo mode switch */ 58#define FSCL (1 << 6) /* override SCL pin */ 59#define FSDA (1 << 5) /* override SDA pin */ 60#define OBPC (1 << 4) /* override pins */ 61#define MIE (1 << 3) /* master if enable */ 62#define TSBE (1 << 2) 63#define FSB (1 << 1) /* force stop bit */ 64#define ESG (1 << 0) /* en startbit gen */ 65 66/* ICSSR (also for ICSIER) */ 67#define GCAR (1 << 6) /* general call received */ 68#define STM (1 << 5) /* slave transmit mode */ 69#define SSR (1 << 4) /* stop received */ 70#define SDE (1 << 3) /* slave data empty */ 71#define SDT (1 << 2) /* slave data transmitted */ 72#define SDR (1 << 1) /* slave data received */ 73#define SAR (1 << 0) /* slave addr received */ 74 75/* ICMSR (also for ICMIE) */ 76#define MNR (1 << 6) /* nack received */ 77#define MAL (1 << 5) /* arbitration lost */ 78#define MST (1 << 4) /* sent a stop */ 79#define MDE (1 << 3) 80#define MDT (1 << 2) 81#define MDR (1 << 1) 82#define MAT (1 << 0) /* slave addr xfer done */ 83 84 85#define RCAR_BUS_PHASE_START (MDBS | MIE | ESG) 86#define RCAR_BUS_PHASE_DATA (MDBS | MIE) 87#define RCAR_BUS_PHASE_STOP (MDBS | MIE | FSB) 88 89#define RCAR_IRQ_SEND (MNR | MAL | MST | MAT | MDE) 90#define RCAR_IRQ_RECV (MNR | MAL | MST | MAT | MDR) 91#define RCAR_IRQ_STOP (MST) 92 93#define RCAR_IRQ_ACK_SEND (~(MAT | MDE) & 0xFF) 94#define RCAR_IRQ_ACK_RECV (~(MAT | MDR) & 0xFF) 95 96#define ID_LAST_MSG (1 << 0) 97#define ID_IOERROR (1 << 1) 98#define ID_DONE (1 << 2) 99#define ID_ARBLOST (1 << 3) 100#define ID_NACK (1 << 4) 101 102enum rcar_i2c_type { 103 I2C_RCAR_GEN1, 104 I2C_RCAR_GEN2, 105 I2C_RCAR_GEN3, 106}; 107 108struct rcar_i2c_priv { 109 void __iomem *io; 110 struct i2c_adapter adap; 111 struct i2c_msg *msg; 112 struct clk *clk; 113 114 spinlock_t lock; 115 wait_queue_head_t wait; 116 117 int pos; 118 u32 icccr; 119 u32 flags; 120 enum rcar_i2c_type devtype; 121 struct i2c_client *slave; 122}; 123 124#define rcar_i2c_priv_to_dev(p) ((p)->adap.dev.parent) 125#define rcar_i2c_is_recv(p) ((p)->msg->flags & I2C_M_RD) 126 127#define rcar_i2c_flags_set(p, f) ((p)->flags |= (f)) 128#define rcar_i2c_flags_has(p, f) ((p)->flags & (f)) 129 130#define LOOP_TIMEOUT 1024 131 132 133static void rcar_i2c_write(struct rcar_i2c_priv *priv, int reg, u32 val) 134{ 135 writel(val, priv->io + reg); 136} 137 138static u32 rcar_i2c_read(struct rcar_i2c_priv *priv, int reg) 139{ 140 return readl(priv->io + reg); 141} 142 143static void rcar_i2c_init(struct rcar_i2c_priv *priv) 144{ 145 /* reset master mode */ 146 rcar_i2c_write(priv, ICMIER, 0); 147 rcar_i2c_write(priv, ICMCR, 0); 148 rcar_i2c_write(priv, ICMSR, 0); 149 rcar_i2c_write(priv, ICMAR, 0); 150} 151 152static int rcar_i2c_bus_barrier(struct rcar_i2c_priv *priv) 153{ 154 int i; 155 156 for (i = 0; i < LOOP_TIMEOUT; i++) { 157 /* make sure that bus is not busy */ 158 if (!(rcar_i2c_read(priv, ICMCR) & FSDA)) 159 return 0; 160 udelay(1); 161 } 162 163 return -EBUSY; 164} 165 166static int rcar_i2c_clock_calculate(struct rcar_i2c_priv *priv, 167 u32 bus_speed, 168 struct device *dev) 169{ 170 u32 scgd, cdf; 171 u32 round, ick; 172 u32 scl; 173 u32 cdf_width; 174 unsigned long rate; 175 176 switch (priv->devtype) { 177 case I2C_RCAR_GEN1: 178 cdf_width = 2; 179 break; 180 case I2C_RCAR_GEN2: 181 case I2C_RCAR_GEN3: 182 cdf_width = 3; 183 break; 184 default: 185 dev_err(dev, "device type error\n"); 186 return -EIO; 187 } 188 189 /* 190 * calculate SCL clock 191 * see 192 * ICCCR 193 * 194 * ick = clkp / (1 + CDF) 195 * SCL = ick / (20 + SCGD * 8 + F[(ticf + tr + intd) * ick]) 196 * 197 * ick : I2C internal clock < 20 MHz 198 * ticf : I2C SCL falling time = 35 ns here 199 * tr : I2C SCL rising time = 200 ns here 200 * intd : LSI internal delay = 50 ns here 201 * clkp : peripheral_clk 202 * F[] : integer up-valuation 203 */ 204 rate = clk_get_rate(priv->clk); 205 cdf = rate / 20000000; 206 if (cdf >= 1U << cdf_width) { 207 dev_err(dev, "Input clock %lu too high\n", rate); 208 return -EIO; 209 } 210 ick = rate / (cdf + 1); 211 212 /* 213 * it is impossible to calculate large scale 214 * number on u32. separate it 215 * 216 * F[(ticf + tr + intd) * ick] 217 * = F[(35 + 200 + 50)ns * ick] 218 * = F[285 * ick / 1000000000] 219 * = F[(ick / 1000000) * 285 / 1000] 220 */ 221 round = (ick + 500000) / 1000000 * 285; 222 round = (round + 500) / 1000; 223 224 /* 225 * SCL = ick / (20 + SCGD * 8 + F[(ticf + tr + intd) * ick]) 226 * 227 * Calculation result (= SCL) should be less than 228 * bus_speed for hardware safety 229 * 230 * We could use something along the lines of 231 * div = ick / (bus_speed + 1) + 1; 232 * scgd = (div - 20 - round + 7) / 8; 233 * scl = ick / (20 + (scgd * 8) + round); 234 * (not fully verified) but that would get pretty involved 235 */ 236 for (scgd = 0; scgd < 0x40; scgd++) { 237 scl = ick / (20 + (scgd * 8) + round); 238 if (scl <= bus_speed) 239 goto scgd_find; 240 } 241 dev_err(dev, "it is impossible to calculate best SCL\n"); 242 return -EIO; 243 244scgd_find: 245 dev_dbg(dev, "clk %d/%d(%lu), round %u, CDF:0x%x, SCGD: 0x%x\n", 246 scl, bus_speed, clk_get_rate(priv->clk), round, cdf, scgd); 247 248 /* 249 * keep icccr value 250 */ 251 priv->icccr = scgd << cdf_width | cdf; 252 253 return 0; 254} 255 256static void rcar_i2c_prepare_msg(struct rcar_i2c_priv *priv) 257{ 258 int read = !!rcar_i2c_is_recv(priv); 259 260 rcar_i2c_write(priv, ICMAR, (priv->msg->addr << 1) | read); 261 rcar_i2c_write(priv, ICMSR, 0); 262 rcar_i2c_write(priv, ICMCR, RCAR_BUS_PHASE_START); 263 rcar_i2c_write(priv, ICMIER, read ? RCAR_IRQ_RECV : RCAR_IRQ_SEND); 264} 265 266/* 267 * interrupt functions 268 */ 269static int rcar_i2c_irq_send(struct rcar_i2c_priv *priv, u32 msr) 270{ 271 struct i2c_msg *msg = priv->msg; 272 273 /* 274 * FIXME 275 * sometimes, unknown interrupt happened. 276 * Do nothing 277 */ 278 if (!(msr & MDE)) 279 return 0; 280 281 /* 282 * If address transfer phase finished, 283 * goto data phase. 284 */ 285 if (msr & MAT) 286 rcar_i2c_write(priv, ICMCR, RCAR_BUS_PHASE_DATA); 287 288 if (priv->pos < msg->len) { 289 /* 290 * Prepare next data to ICRXTX register. 291 * This data will go to _SHIFT_ register. 292 * 293 * * 294 * [ICRXTX] -> [SHIFT] -> [I2C bus] 295 */ 296 rcar_i2c_write(priv, ICRXTX, msg->buf[priv->pos]); 297 priv->pos++; 298 299 } else { 300 /* 301 * The last data was pushed to ICRXTX on _PREV_ empty irq. 302 * It is on _SHIFT_ register, and will sent to I2C bus. 303 * 304 * * 305 * [ICRXTX] -> [SHIFT] -> [I2C bus] 306 */ 307 308 if (priv->flags & ID_LAST_MSG) 309 /* 310 * If current msg is the _LAST_ msg, 311 * prepare stop condition here. 312 * ID_DONE will be set on STOP irq. 313 */ 314 rcar_i2c_write(priv, ICMCR, RCAR_BUS_PHASE_STOP); 315 else 316 /* 317 * If current msg is _NOT_ last msg, 318 * it doesn't call stop phase. 319 * thus, there is no STOP irq. 320 * return ID_DONE here. 321 */ 322 return ID_DONE; 323 } 324 325 rcar_i2c_write(priv, ICMSR, RCAR_IRQ_ACK_SEND); 326 327 return 0; 328} 329 330static int rcar_i2c_irq_recv(struct rcar_i2c_priv *priv, u32 msr) 331{ 332 struct i2c_msg *msg = priv->msg; 333 334 /* 335 * FIXME 336 * sometimes, unknown interrupt happened. 337 * Do nothing 338 */ 339 if (!(msr & MDR)) 340 return 0; 341 342 if (msr & MAT) { 343 /* 344 * Address transfer phase finished, 345 * but, there is no data at this point. 346 * Do nothing. 347 */ 348 } else if (priv->pos < msg->len) { 349 /* 350 * get received data 351 */ 352 msg->buf[priv->pos] = rcar_i2c_read(priv, ICRXTX); 353 priv->pos++; 354 } 355 356 /* 357 * If next received data is the _LAST_, 358 * go to STOP phase, 359 * otherwise, go to DATA phase. 360 */ 361 if (priv->pos + 1 >= msg->len) 362 rcar_i2c_write(priv, ICMCR, RCAR_BUS_PHASE_STOP); 363 else 364 rcar_i2c_write(priv, ICMCR, RCAR_BUS_PHASE_DATA); 365 366 rcar_i2c_write(priv, ICMSR, RCAR_IRQ_ACK_RECV); 367 368 return 0; 369} 370 371static bool rcar_i2c_slave_irq(struct rcar_i2c_priv *priv) 372{ 373 u32 ssr_raw, ssr_filtered; 374 u8 value; 375 376 ssr_raw = rcar_i2c_read(priv, ICSSR) & 0xff; 377 ssr_filtered = ssr_raw & rcar_i2c_read(priv, ICSIER); 378 379 if (!ssr_filtered) 380 return false; 381 382 /* address detected */ 383 if (ssr_filtered & SAR) { 384 /* read or write request */ 385 if (ssr_raw & STM) { 386 i2c_slave_event(priv->slave, I2C_SLAVE_READ_REQUESTED, &value); 387 rcar_i2c_write(priv, ICRXTX, value); 388 rcar_i2c_write(priv, ICSIER, SDE | SSR | SAR); 389 } else { 390 i2c_slave_event(priv->slave, I2C_SLAVE_WRITE_REQUESTED, &value); 391 rcar_i2c_read(priv, ICRXTX); /* dummy read */ 392 rcar_i2c_write(priv, ICSIER, SDR | SSR | SAR); 393 } 394 395 rcar_i2c_write(priv, ICSSR, ~SAR & 0xff); 396 } 397 398 /* master sent stop */ 399 if (ssr_filtered & SSR) { 400 i2c_slave_event(priv->slave, I2C_SLAVE_STOP, &value); 401 rcar_i2c_write(priv, ICSIER, SAR | SSR); 402 rcar_i2c_write(priv, ICSSR, ~SSR & 0xff); 403 } 404 405 /* master wants to write to us */ 406 if (ssr_filtered & SDR) { 407 int ret; 408 409 value = rcar_i2c_read(priv, ICRXTX); 410 ret = i2c_slave_event(priv->slave, I2C_SLAVE_WRITE_RECEIVED, &value); 411 /* Send NACK in case of error */ 412 rcar_i2c_write(priv, ICSCR, SIE | SDBS | (ret < 0 ? FNA : 0)); 413 rcar_i2c_write(priv, ICSSR, ~SDR & 0xff); 414 } 415 416 /* master wants to read from us */ 417 if (ssr_filtered & SDE) { 418 i2c_slave_event(priv->slave, I2C_SLAVE_READ_PROCESSED, &value); 419 rcar_i2c_write(priv, ICRXTX, value); 420 rcar_i2c_write(priv, ICSSR, ~SDE & 0xff); 421 } 422 423 return true; 424} 425 426static irqreturn_t rcar_i2c_irq(int irq, void *ptr) 427{ 428 struct rcar_i2c_priv *priv = ptr; 429 irqreturn_t result = IRQ_HANDLED; 430 u32 msr; 431 432 /*-------------- spin lock -----------------*/ 433 spin_lock(&priv->lock); 434 435 if (rcar_i2c_slave_irq(priv)) 436 goto exit; 437 438 msr = rcar_i2c_read(priv, ICMSR); 439 440 /* Only handle interrupts that are currently enabled */ 441 msr &= rcar_i2c_read(priv, ICMIER); 442 if (!msr) { 443 result = IRQ_NONE; 444 goto exit; 445 } 446 447 /* Arbitration lost */ 448 if (msr & MAL) { 449 rcar_i2c_flags_set(priv, (ID_DONE | ID_ARBLOST)); 450 goto out; 451 } 452 453 /* Nack */ 454 if (msr & MNR) { 455 /* go to stop phase */ 456 rcar_i2c_write(priv, ICMCR, RCAR_BUS_PHASE_STOP); 457 rcar_i2c_write(priv, ICMIER, RCAR_IRQ_STOP); 458 rcar_i2c_flags_set(priv, ID_NACK); 459 goto out; 460 } 461 462 /* Stop */ 463 if (msr & MST) { 464 rcar_i2c_flags_set(priv, ID_DONE); 465 goto out; 466 } 467 468 if (rcar_i2c_is_recv(priv)) 469 rcar_i2c_flags_set(priv, rcar_i2c_irq_recv(priv, msr)); 470 else 471 rcar_i2c_flags_set(priv, rcar_i2c_irq_send(priv, msr)); 472 473out: 474 if (rcar_i2c_flags_has(priv, ID_DONE)) { 475 rcar_i2c_write(priv, ICMIER, 0); 476 rcar_i2c_write(priv, ICMSR, 0); 477 wake_up(&priv->wait); 478 } 479 480exit: 481 spin_unlock(&priv->lock); 482 /*-------------- spin unlock -----------------*/ 483 484 return result; 485} 486 487static int rcar_i2c_master_xfer(struct i2c_adapter *adap, 488 struct i2c_msg *msgs, 489 int num) 490{ 491 struct rcar_i2c_priv *priv = i2c_get_adapdata(adap); 492 struct device *dev = rcar_i2c_priv_to_dev(priv); 493 unsigned long flags; 494 int i, ret; 495 long timeout; 496 497 pm_runtime_get_sync(dev); 498 499 /*-------------- spin lock -----------------*/ 500 spin_lock_irqsave(&priv->lock, flags); 501 502 rcar_i2c_init(priv); 503 /* start clock */ 504 rcar_i2c_write(priv, ICCCR, priv->icccr); 505 506 spin_unlock_irqrestore(&priv->lock, flags); 507 /*-------------- spin unlock -----------------*/ 508 509 ret = rcar_i2c_bus_barrier(priv); 510 if (ret < 0) 511 goto out; 512 513 for (i = 0; i < num; i++) { 514 /* This HW can't send STOP after address phase */ 515 if (msgs[i].len == 0) { 516 ret = -EOPNOTSUPP; 517 break; 518 } 519 520 /*-------------- spin lock -----------------*/ 521 spin_lock_irqsave(&priv->lock, flags); 522 523 /* init each data */ 524 priv->msg = &msgs[i]; 525 priv->pos = 0; 526 priv->flags = 0; 527 if (i == num - 1) 528 rcar_i2c_flags_set(priv, ID_LAST_MSG); 529 530 rcar_i2c_prepare_msg(priv); 531 532 spin_unlock_irqrestore(&priv->lock, flags); 533 /*-------------- spin unlock -----------------*/ 534 535 timeout = wait_event_timeout(priv->wait, 536 rcar_i2c_flags_has(priv, ID_DONE), 537 adap->timeout); 538 if (!timeout) { 539 ret = -ETIMEDOUT; 540 break; 541 } 542 543 if (rcar_i2c_flags_has(priv, ID_NACK)) { 544 ret = -ENXIO; 545 break; 546 } 547 548 if (rcar_i2c_flags_has(priv, ID_ARBLOST)) { 549 ret = -EAGAIN; 550 break; 551 } 552 553 if (rcar_i2c_flags_has(priv, ID_IOERROR)) { 554 ret = -EIO; 555 break; 556 } 557 558 ret = i + 1; /* The number of transfer */ 559 } 560out: 561 pm_runtime_put(dev); 562 563 if (ret < 0 && ret != -ENXIO) 564 dev_err(dev, "error %d : %x\n", ret, priv->flags); 565 566 return ret; 567} 568 569static int rcar_reg_slave(struct i2c_client *slave) 570{ 571 struct rcar_i2c_priv *priv = i2c_get_adapdata(slave->adapter); 572 573 if (priv->slave) 574 return -EBUSY; 575 576 if (slave->flags & I2C_CLIENT_TEN) 577 return -EAFNOSUPPORT; 578 579 pm_runtime_get_sync(rcar_i2c_priv_to_dev(priv)); 580 581 priv->slave = slave; 582 rcar_i2c_write(priv, ICSAR, slave->addr); 583 rcar_i2c_write(priv, ICSSR, 0); 584 rcar_i2c_write(priv, ICSIER, SAR | SSR); 585 rcar_i2c_write(priv, ICSCR, SIE | SDBS); 586 587 return 0; 588} 589 590static int rcar_unreg_slave(struct i2c_client *slave) 591{ 592 struct rcar_i2c_priv *priv = i2c_get_adapdata(slave->adapter); 593 594 WARN_ON(!priv->slave); 595 596 rcar_i2c_write(priv, ICSIER, 0); 597 rcar_i2c_write(priv, ICSCR, 0); 598 599 priv->slave = NULL; 600 601 pm_runtime_put(rcar_i2c_priv_to_dev(priv)); 602 603 return 0; 604} 605 606static u32 rcar_i2c_func(struct i2c_adapter *adap) 607{ 608 /* This HW can't do SMBUS_QUICK and NOSTART */ 609 return I2C_FUNC_I2C | I2C_FUNC_SLAVE | 610 (I2C_FUNC_SMBUS_EMUL & ~I2C_FUNC_SMBUS_QUICK); 611} 612 613static const struct i2c_algorithm rcar_i2c_algo = { 614 .master_xfer = rcar_i2c_master_xfer, 615 .functionality = rcar_i2c_func, 616 .reg_slave = rcar_reg_slave, 617 .unreg_slave = rcar_unreg_slave, 618}; 619 620static const struct of_device_id rcar_i2c_dt_ids[] = { 621 { .compatible = "renesas,i2c-rcar", .data = (void *)I2C_RCAR_GEN1 }, 622 { .compatible = "renesas,i2c-r8a7778", .data = (void *)I2C_RCAR_GEN1 }, 623 { .compatible = "renesas,i2c-r8a7779", .data = (void *)I2C_RCAR_GEN1 }, 624 { .compatible = "renesas,i2c-r8a7790", .data = (void *)I2C_RCAR_GEN2 }, 625 { .compatible = "renesas,i2c-r8a7791", .data = (void *)I2C_RCAR_GEN2 }, 626 { .compatible = "renesas,i2c-r8a7792", .data = (void *)I2C_RCAR_GEN2 }, 627 { .compatible = "renesas,i2c-r8a7793", .data = (void *)I2C_RCAR_GEN2 }, 628 { .compatible = "renesas,i2c-r8a7794", .data = (void *)I2C_RCAR_GEN2 }, 629 { .compatible = "renesas,i2c-r8a7795", .data = (void *)I2C_RCAR_GEN3 }, 630 {}, 631}; 632MODULE_DEVICE_TABLE(of, rcar_i2c_dt_ids); 633 634static int rcar_i2c_probe(struct platform_device *pdev) 635{ 636 struct rcar_i2c_priv *priv; 637 struct i2c_adapter *adap; 638 struct resource *res; 639 struct device *dev = &pdev->dev; 640 u32 bus_speed; 641 int irq, ret; 642 643 priv = devm_kzalloc(dev, sizeof(struct rcar_i2c_priv), GFP_KERNEL); 644 if (!priv) 645 return -ENOMEM; 646 647 priv->clk = devm_clk_get(dev, NULL); 648 if (IS_ERR(priv->clk)) { 649 dev_err(dev, "cannot get clock\n"); 650 return PTR_ERR(priv->clk); 651 } 652 653 bus_speed = 100000; /* default 100 kHz */ 654 of_property_read_u32(dev->of_node, "clock-frequency", &bus_speed); 655 656 priv->devtype = (enum rcar_i2c_type)of_match_device(rcar_i2c_dt_ids, dev)->data; 657 658 ret = rcar_i2c_clock_calculate(priv, bus_speed, dev); 659 if (ret < 0) 660 return ret; 661 662 res = platform_get_resource(pdev, IORESOURCE_MEM, 0); 663 priv->io = devm_ioremap_resource(dev, res); 664 if (IS_ERR(priv->io)) 665 return PTR_ERR(priv->io); 666 667 irq = platform_get_irq(pdev, 0); 668 init_waitqueue_head(&priv->wait); 669 spin_lock_init(&priv->lock); 670 671 adap = &priv->adap; 672 adap->nr = pdev->id; 673 adap->algo = &rcar_i2c_algo; 674 adap->class = I2C_CLASS_DEPRECATED; 675 adap->retries = 3; 676 adap->dev.parent = dev; 677 adap->dev.of_node = dev->of_node; 678 i2c_set_adapdata(adap, priv); 679 strlcpy(adap->name, pdev->name, sizeof(adap->name)); 680 681 ret = devm_request_irq(dev, irq, rcar_i2c_irq, 0, 682 dev_name(dev), priv); 683 if (ret < 0) { 684 dev_err(dev, "cannot get irq %d\n", irq); 685 return ret; 686 } 687 688 pm_runtime_enable(dev); 689 platform_set_drvdata(pdev, priv); 690 691 ret = i2c_add_numbered_adapter(adap); 692 if (ret < 0) { 693 dev_err(dev, "reg adap failed: %d\n", ret); 694 pm_runtime_disable(dev); 695 return ret; 696 } 697 698 dev_info(dev, "probed\n"); 699 700 return 0; 701} 702 703static int rcar_i2c_remove(struct platform_device *pdev) 704{ 705 struct rcar_i2c_priv *priv = platform_get_drvdata(pdev); 706 struct device *dev = &pdev->dev; 707 708 i2c_del_adapter(&priv->adap); 709 pm_runtime_disable(dev); 710 711 return 0; 712} 713 714static struct platform_driver rcar_i2c_driver = { 715 .driver = { 716 .name = "i2c-rcar", 717 .of_match_table = rcar_i2c_dt_ids, 718 }, 719 .probe = rcar_i2c_probe, 720 .remove = rcar_i2c_remove, 721}; 722 723module_platform_driver(rcar_i2c_driver); 724 725MODULE_LICENSE("GPL v2"); 726MODULE_DESCRIPTION("Renesas R-Car I2C bus driver"); 727MODULE_AUTHOR("Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>"); 728