i2c-rcar.c 17.2 KB
Newer Older
1
/*
2
 * Driver for the Renesas RCar I2C unit
3
 *
4 5
 * Copyright (C) 2014-15 Wolfram Sang <wsa@sang-engineering.com>
 * Copyright (C) 2011-2015 Renesas Electronics Corporation
6 7
 *
 * Copyright (C) 2012-14 Renesas Solutions Corp.
8 9 10 11 12 13 14
 * Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
 *
 * This file is based on the drivers/i2c/busses/i2c-sh7760.c
 * (c) 2005-2008 MSC Vertriebsges.m.b.H, Manuel Lauss <mlau@msc-ge.com>
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
15
 * the Free Software Foundation; version 2 of the License.
16 17 18 19 20 21 22 23 24 25 26 27 28 29
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 */
#include <linux/clk.h>
#include <linux/delay.h>
#include <linux/err.h>
#include <linux/interrupt.h>
#include <linux/io.h>
#include <linux/i2c.h>
#include <linux/kernel.h>
#include <linux/module.h>
30
#include <linux/of_device.h>
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
#include <linux/platform_device.h>
#include <linux/pm_runtime.h>
#include <linux/slab.h>

/* register offsets */
#define ICSCR	0x00	/* slave ctrl */
#define ICMCR	0x04	/* master ctrl */
#define ICSSR	0x08	/* slave status */
#define ICMSR	0x0C	/* master status */
#define ICSIER	0x10	/* slave irq enable */
#define ICMIER	0x14	/* master irq enable */
#define ICCCR	0x18	/* clock dividers */
#define ICSAR	0x1C	/* slave address */
#define ICMAR	0x20	/* master address */
#define ICRXTX	0x24	/* data port */

W
Wolfram Sang 已提交
47 48 49 50 51 52
/* ICSCR */
#define SDBS	(1 << 3)	/* slave data buffer select */
#define SIE	(1 << 2)	/* slave interface enable */
#define GCAE	(1 << 1)	/* general call address enable */
#define FNA	(1 << 0)	/* forced non acknowledgment */

53 54 55 56 57 58 59 60 61 62
/* ICMCR */
#define MDBS	(1 << 7)	/* non-fifo mode switch */
#define FSCL	(1 << 6)	/* override SCL pin */
#define FSDA	(1 << 5)	/* override SDA pin */
#define OBPC	(1 << 4)	/* override pins */
#define MIE	(1 << 3)	/* master if enable */
#define TSBE	(1 << 2)
#define FSB	(1 << 1)	/* force stop bit */
#define ESG	(1 << 0)	/* en startbit gen */

W
Wolfram Sang 已提交
63 64 65 66 67 68 69 70 71
/* ICSSR (also for ICSIER) */
#define GCAR	(1 << 6)	/* general call received */
#define STM	(1 << 5)	/* slave transmit mode */
#define SSR	(1 << 4)	/* stop received */
#define SDE	(1 << 3)	/* slave data empty */
#define SDT	(1 << 2)	/* slave data transmitted */
#define SDR	(1 << 1)	/* slave data received */
#define SAR	(1 << 0)	/* slave addr received */

72
/* ICMSR (also for ICMIE) */
73 74 75 76 77 78 79 80 81
#define MNR	(1 << 6)	/* nack received */
#define MAL	(1 << 5)	/* arbitration lost */
#define MST	(1 << 4)	/* sent a stop */
#define MDE	(1 << 3)
#define MDT	(1 << 2)
#define MDR	(1 << 1)
#define MAT	(1 << 0)	/* slave addr xfer done */


82 83
#define RCAR_BUS_PHASE_START	(MDBS | MIE | ESG)
#define RCAR_BUS_PHASE_DATA	(MDBS | MIE)
84
#define RCAR_BUS_MASK_DATA	(~(ESG | FSB) & 0xFF)
85
#define RCAR_BUS_PHASE_STOP	(MDBS | MIE | FSB)
86

87 88 89
#define RCAR_IRQ_SEND	(MNR | MAL | MST | MAT | MDE)
#define RCAR_IRQ_RECV	(MNR | MAL | MST | MAT | MDR)
#define RCAR_IRQ_STOP	(MST)
90

91 92
#define RCAR_IRQ_ACK_SEND	(~(MAT | MDE) & 0xFF)
#define RCAR_IRQ_ACK_RECV	(~(MAT | MDR) & 0xFF)
93

94
#define ID_LAST_MSG	(1 << 0)
95
#define ID_FIRST_MSG	(1 << 1)
96 97 98 99
#define ID_DONE		(1 << 2)
#define ID_ARBLOST	(1 << 3)
#define ID_NACK		(1 << 4)

100
enum rcar_i2c_type {
101 102
	I2C_RCAR_GEN1,
	I2C_RCAR_GEN2,
103
	I2C_RCAR_GEN3,
104 105
};

106 107 108
struct rcar_i2c_priv {
	void __iomem *io;
	struct i2c_adapter adap;
W
Wolfram Sang 已提交
109 110
	struct i2c_msg *msg;
	int msgs_left;
111
	struct clk *clk;
112 113 114 115 116 117

	wait_queue_head_t wait;

	int pos;
	u32 icccr;
	u32 flags;
118
	enum rcar_i2c_type devtype;
W
Wolfram Sang 已提交
119
	struct i2c_client *slave;
120 121 122 123 124 125 126 127 128 129
};

#define rcar_i2c_priv_to_dev(p)		((p)->adap.dev.parent)
#define rcar_i2c_is_recv(p)		((p)->msg->flags & I2C_M_RD)

#define rcar_i2c_flags_set(p, f)	((p)->flags |= (f))
#define rcar_i2c_flags_has(p, f)	((p)->flags & (f))

#define LOOP_TIMEOUT	1024

130

131 132 133 134 135 136 137 138 139 140 141 142 143 144
static void rcar_i2c_write(struct rcar_i2c_priv *priv, int reg, u32 val)
{
	writel(val, priv->io + reg);
}

static u32 rcar_i2c_read(struct rcar_i2c_priv *priv, int reg)
{
	return readl(priv->io + reg);
}

static void rcar_i2c_init(struct rcar_i2c_priv *priv)
{
	/* reset master mode */
	rcar_i2c_write(priv, ICMIER, 0);
W
Wolfram Sang 已提交
145
	rcar_i2c_write(priv, ICMCR, MDBS);
146
	rcar_i2c_write(priv, ICMSR, 0);
W
Wolfram Sang 已提交
147 148
	/* start clock */
	rcar_i2c_write(priv, ICCCR, priv->icccr);
149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171
}

static int rcar_i2c_bus_barrier(struct rcar_i2c_priv *priv)
{
	int i;

	for (i = 0; i < LOOP_TIMEOUT; i++) {
		/* make sure that bus is not busy */
		if (!(rcar_i2c_read(priv, ICMCR) & FSDA))
			return 0;
		udelay(1);
	}

	return -EBUSY;
}

static int rcar_i2c_clock_calculate(struct rcar_i2c_priv *priv,
				    u32 bus_speed,
				    struct device *dev)
{
	u32 scgd, cdf;
	u32 round, ick;
	u32 scl;
172
	u32 cdf_width;
173
	unsigned long rate;
174

175
	switch (priv->devtype) {
176
	case I2C_RCAR_GEN1:
177 178
		cdf_width = 2;
		break;
179
	case I2C_RCAR_GEN2:
180
	case I2C_RCAR_GEN3:
181 182 183 184 185 186 187
		cdf_width = 3;
		break;
	default:
		dev_err(dev, "device type error\n");
		return -EIO;
	}

188 189 190 191 192 193 194 195 196 197 198 199 200 201 202
	/*
	 * calculate SCL clock
	 * see
	 *	ICCCR
	 *
	 * ick	= clkp / (1 + CDF)
	 * SCL	= ick / (20 + SCGD * 8 + F[(ticf + tr + intd) * ick])
	 *
	 * ick  : I2C internal clock < 20 MHz
	 * ticf : I2C SCL falling time  =  35 ns here
	 * tr   : I2C SCL rising  time  = 200 ns here
	 * intd : LSI internal delay    =  50 ns here
	 * clkp : peripheral_clk
	 * F[]  : integer up-valuation
	 */
203
	rate = clk_get_rate(priv->clk);
204
	cdf = rate / 20000000;
205
	if (cdf >= 1U << cdf_width) {
206 207
		dev_err(dev, "Input clock %lu too high\n", rate);
		return -EIO;
208
	}
209
	ick = rate / (cdf + 1);
210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227

	/*
	 * it is impossible to calculate large scale
	 * number on u32. separate it
	 *
	 * F[(ticf + tr + intd) * ick]
	 *  = F[(35 + 200 + 50)ns * ick]
	 *  = F[285 * ick / 1000000000]
	 *  = F[(ick / 1000000) * 285 / 1000]
	 */
	round = (ick + 500000) / 1000000 * 285;
	round = (round + 500) / 1000;

	/*
	 * SCL	= ick / (20 + SCGD * 8 + F[(ticf + tr + intd) * ick])
	 *
	 * Calculation result (= SCL) should be less than
	 * bus_speed for hardware safety
228 229 230 231 232 233
	 *
	 * We could use something along the lines of
	 *	div = ick / (bus_speed + 1) + 1;
	 *	scgd = (div - 20 - round + 7) / 8;
	 *	scl = ick / (20 + (scgd * 8) + round);
	 * (not fully verified) but that would get pretty involved
234 235 236 237 238 239 240 241 242 243 244
	 */
	for (scgd = 0; scgd < 0x40; scgd++) {
		scl = ick / (20 + (scgd * 8) + round);
		if (scl <= bus_speed)
			goto scgd_find;
	}
	dev_err(dev, "it is impossible to calculate best SCL\n");
	return -EIO;

scgd_find:
	dev_dbg(dev, "clk %d/%d(%lu), round %u, CDF:0x%x, SCGD: 0x%x\n",
245
		scl, bus_speed, clk_get_rate(priv->clk), round, cdf, scgd);
246

247
	/* keep icccr value */
248
	priv->icccr = scgd << cdf_width | cdf;
249 250 251 252

	return 0;
}

253
static void rcar_i2c_prepare_msg(struct rcar_i2c_priv *priv)
254
{
255
	int read = !!rcar_i2c_is_recv(priv);
256

W
Wolfram Sang 已提交
257 258 259 260
	priv->pos = 0;
	if (priv->msgs_left == 1)
		rcar_i2c_flags_set(priv, ID_LAST_MSG);

261
	rcar_i2c_write(priv, ICMAR, (priv->msg->addr << 1) | read);
262 263 264 265 266 267 268 269 270 271 272 273
	/*
	 * We don't have a testcase but the HW engineers say that the write order
	 * of ICMSR and ICMCR depends on whether we issue START or REP_START. Since
	 * it didn't cause a drawback for me, let's rather be safe than sorry.
	 */
	if (rcar_i2c_flags_has(priv, ID_FIRST_MSG)) {
		rcar_i2c_write(priv, ICMSR, 0);
		rcar_i2c_write(priv, ICMCR, RCAR_BUS_PHASE_START);
	} else {
		rcar_i2c_write(priv, ICMCR, RCAR_BUS_PHASE_START);
		rcar_i2c_write(priv, ICMSR, 0);
	}
274
	rcar_i2c_write(priv, ICMIER, read ? RCAR_IRQ_RECV : RCAR_IRQ_SEND);
275 276
}

W
Wolfram Sang 已提交
277 278 279 280
static void rcar_i2c_next_msg(struct rcar_i2c_priv *priv)
{
	priv->msg++;
	priv->msgs_left--;
281
	priv->flags = 0;
W
Wolfram Sang 已提交
282 283 284
	rcar_i2c_prepare_msg(priv);
}

285 286 287
/*
 *		interrupt functions
 */
W
Wolfram Sang 已提交
288
static void rcar_i2c_irq_send(struct rcar_i2c_priv *priv, u32 msr)
289 290 291
{
	struct i2c_msg *msg = priv->msg;

292
	/* FIXME: sometimes, unknown interrupt happened. Do nothing */
293
	if (!(msr & MDE))
W
Wolfram Sang 已提交
294
		return;
295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315

	if (priv->pos < msg->len) {
		/*
		 * Prepare next data to ICRXTX register.
		 * This data will go to _SHIFT_ register.
		 *
		 *    *
		 * [ICRXTX] -> [SHIFT] -> [I2C bus]
		 */
		rcar_i2c_write(priv, ICRXTX, msg->buf[priv->pos]);
		priv->pos++;

	} else {
		/*
		 * The last data was pushed to ICRXTX on _PREV_ empty irq.
		 * It is on _SHIFT_ register, and will sent to I2C bus.
		 *
		 *		  *
		 * [ICRXTX] -> [SHIFT] -> [I2C bus]
		 */

W
Wolfram Sang 已提交
316
		if (priv->flags & ID_LAST_MSG) {
317 318 319 320 321
			/*
			 * If current msg is the _LAST_ msg,
			 * prepare stop condition here.
			 * ID_DONE will be set on STOP irq.
			 */
322
			rcar_i2c_write(priv, ICMCR, RCAR_BUS_PHASE_STOP);
W
Wolfram Sang 已提交
323 324 325 326
		} else {
			rcar_i2c_next_msg(priv);
			return;
		}
327 328
	}

329
	rcar_i2c_write(priv, ICMSR, RCAR_IRQ_ACK_SEND);
330 331
}

W
Wolfram Sang 已提交
332
static void rcar_i2c_irq_recv(struct rcar_i2c_priv *priv, u32 msr)
333 334 335
{
	struct i2c_msg *msg = priv->msg;

336
	/* FIXME: sometimes, unknown interrupt happened. Do nothing */
337
	if (!(msr & MDR))
W
Wolfram Sang 已提交
338
		return;
339 340

	if (msr & MAT) {
341
		/* Address transfer phase finished, but no data at this point. */
342
	} else if (priv->pos < msg->len) {
343
		/* get received data */
344 345 346 347 348
		msg->buf[priv->pos] = rcar_i2c_read(priv, ICRXTX);
		priv->pos++;
	}

	/*
349 350 351
	 * If next received data is the _LAST_, go to STOP phase. Might be
	 * overwritten by REP START when setting up a new msg. Not elegant
	 * but the only stable sequence for REP START I have found so far.
352 353
	 */
	if (priv->pos + 1 >= msg->len)
354
		rcar_i2c_write(priv, ICMCR, RCAR_BUS_PHASE_STOP);
355

W
Wolfram Sang 已提交
356 357 358 359
	if (priv->pos == msg->len && !(priv->flags & ID_LAST_MSG))
		rcar_i2c_next_msg(priv);
	else
		rcar_i2c_write(priv, ICMSR, RCAR_IRQ_ACK_RECV);
360 361
}

W
Wolfram Sang 已提交
362 363 364 365 366 367 368 369 370 371 372 373 374 375 376
static bool rcar_i2c_slave_irq(struct rcar_i2c_priv *priv)
{
	u32 ssr_raw, ssr_filtered;
	u8 value;

	ssr_raw = rcar_i2c_read(priv, ICSSR) & 0xff;
	ssr_filtered = ssr_raw & rcar_i2c_read(priv, ICSIER);

	if (!ssr_filtered)
		return false;

	/* address detected */
	if (ssr_filtered & SAR) {
		/* read or write request */
		if (ssr_raw & STM) {
W
Wolfram Sang 已提交
377
			i2c_slave_event(priv->slave, I2C_SLAVE_READ_REQUESTED, &value);
W
Wolfram Sang 已提交
378 379 380
			rcar_i2c_write(priv, ICRXTX, value);
			rcar_i2c_write(priv, ICSIER, SDE | SSR | SAR);
		} else {
W
Wolfram Sang 已提交
381
			i2c_slave_event(priv->slave, I2C_SLAVE_WRITE_REQUESTED, &value);
W
Wolfram Sang 已提交
382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400
			rcar_i2c_read(priv, ICRXTX);	/* dummy read */
			rcar_i2c_write(priv, ICSIER, SDR | SSR | SAR);
		}

		rcar_i2c_write(priv, ICSSR, ~SAR & 0xff);
	}

	/* master sent stop */
	if (ssr_filtered & SSR) {
		i2c_slave_event(priv->slave, I2C_SLAVE_STOP, &value);
		rcar_i2c_write(priv, ICSIER, SAR | SSR);
		rcar_i2c_write(priv, ICSSR, ~SSR & 0xff);
	}

	/* master wants to write to us */
	if (ssr_filtered & SDR) {
		int ret;

		value = rcar_i2c_read(priv, ICRXTX);
W
Wolfram Sang 已提交
401
		ret = i2c_slave_event(priv->slave, I2C_SLAVE_WRITE_RECEIVED, &value);
W
Wolfram Sang 已提交
402 403 404 405 406 407 408
		/* Send NACK in case of error */
		rcar_i2c_write(priv, ICSCR, SIE | SDBS | (ret < 0 ? FNA : 0));
		rcar_i2c_write(priv, ICSSR, ~SDR & 0xff);
	}

	/* master wants to read from us */
	if (ssr_filtered & SDE) {
W
Wolfram Sang 已提交
409
		i2c_slave_event(priv->slave, I2C_SLAVE_READ_PROCESSED, &value);
W
Wolfram Sang 已提交
410 411 412 413 414 415 416
		rcar_i2c_write(priv, ICRXTX, value);
		rcar_i2c_write(priv, ICSSR, ~SDE & 0xff);
	}

	return true;
}

417 418 419
static irqreturn_t rcar_i2c_irq(int irq, void *ptr)
{
	struct rcar_i2c_priv *priv = ptr;
420 421 422 423 424
	u32 msr, val;

	/* Clear START or STOP as soon as we can */
	val = rcar_i2c_read(priv, ICMCR);
	rcar_i2c_write(priv, ICMCR, val & RCAR_BUS_MASK_DATA);
425

426
	msr = rcar_i2c_read(priv, ICMSR);
427

428 429
	/* Only handle interrupts that are currently enabled */
	msr &= rcar_i2c_read(priv, ICMIER);
430
	if (!msr) {
431 432 433 434
		if (rcar_i2c_slave_irq(priv))
			return IRQ_HANDLED;

		return IRQ_NONE;
435
	}
436

437
	/* Arbitration lost */
438 439 440 441 442
	if (msr & MAL) {
		rcar_i2c_flags_set(priv, (ID_DONE | ID_ARBLOST));
		goto out;
	}

443
	/* Nack */
444
	if (msr & MNR) {
445
		/* HW automatically sends STOP after received NACK */
446
		rcar_i2c_write(priv, ICMIER, RCAR_IRQ_STOP);
447 448 449 450
		rcar_i2c_flags_set(priv, ID_NACK);
		goto out;
	}

451 452
	/* Stop */
	if (msr & MST) {
W
Wolfram Sang 已提交
453
		priv->msgs_left--; /* The last message also made it */
454 455 456 457
		rcar_i2c_flags_set(priv, ID_DONE);
		goto out;
	}

458
	if (rcar_i2c_is_recv(priv))
W
Wolfram Sang 已提交
459
		rcar_i2c_irq_recv(priv, msr);
460
	else
W
Wolfram Sang 已提交
461
		rcar_i2c_irq_send(priv, msr);
462 463 464

out:
	if (rcar_i2c_flags_has(priv, ID_DONE)) {
465
		rcar_i2c_write(priv, ICMIER, 0);
466
		rcar_i2c_write(priv, ICMSR, 0);
467 468 469
		wake_up(&priv->wait);
	}

470
	return IRQ_HANDLED;
471 472 473 474 475 476 477 478
}

static int rcar_i2c_master_xfer(struct i2c_adapter *adap,
				struct i2c_msg *msgs,
				int num)
{
	struct rcar_i2c_priv *priv = i2c_get_adapdata(adap);
	struct device *dev = rcar_i2c_priv_to_dev(priv);
479
	int i, ret;
W
Wolfram Sang 已提交
480
	long time_left;
481 482 483

	pm_runtime_get_sync(dev);

484 485 486 487
	ret = rcar_i2c_bus_barrier(priv);
	if (ret < 0)
		goto out;

488
	for (i = 0; i < num; i++) {
489 490 491
		/* This HW can't send STOP after address phase */
		if (msgs[i].len == 0) {
			ret = -EOPNOTSUPP;
W
Wolfram Sang 已提交
492
			goto out;
493
		}
W
Wolfram Sang 已提交
494
	}
495

496
	/* init first message */
W
Wolfram Sang 已提交
497 498
	priv->msg = msgs;
	priv->msgs_left = num;
499
	priv->flags = ID_FIRST_MSG;
W
Wolfram Sang 已提交
500 501 502 503 504 505 506 507 508 509 510 511 512 513
	rcar_i2c_prepare_msg(priv);

	time_left = wait_event_timeout(priv->wait,
				     rcar_i2c_flags_has(priv, ID_DONE),
				     num * adap->timeout);
	if (!time_left) {
		rcar_i2c_init(priv);
		ret = -ETIMEDOUT;
	} else if (rcar_i2c_flags_has(priv, ID_NACK)) {
		ret = -ENXIO;
	} else if (rcar_i2c_flags_has(priv, ID_ARBLOST)) {
		ret = -EAGAIN;
	} else {
		ret = num - priv->msgs_left; /* The number of transfer */
514
	}
515
out:
516 517
	pm_runtime_put(dev);

B
Ben Dooks 已提交
518
	if (ret < 0 && ret != -ENXIO)
519 520 521 522 523
		dev_err(dev, "error %d : %x\n", ret, priv->flags);

	return ret;
}

W
Wolfram Sang 已提交
524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560
static int rcar_reg_slave(struct i2c_client *slave)
{
	struct rcar_i2c_priv *priv = i2c_get_adapdata(slave->adapter);

	if (priv->slave)
		return -EBUSY;

	if (slave->flags & I2C_CLIENT_TEN)
		return -EAFNOSUPPORT;

	pm_runtime_forbid(rcar_i2c_priv_to_dev(priv));

	priv->slave = slave;
	rcar_i2c_write(priv, ICSAR, slave->addr);
	rcar_i2c_write(priv, ICSSR, 0);
	rcar_i2c_write(priv, ICSIER, SAR | SSR);
	rcar_i2c_write(priv, ICSCR, SIE | SDBS);

	return 0;
}

static int rcar_unreg_slave(struct i2c_client *slave)
{
	struct rcar_i2c_priv *priv = i2c_get_adapdata(slave->adapter);

	WARN_ON(!priv->slave);

	rcar_i2c_write(priv, ICSIER, 0);
	rcar_i2c_write(priv, ICSCR, 0);

	priv->slave = NULL;

	pm_runtime_allow(rcar_i2c_priv_to_dev(priv));

	return 0;
}

561 562
static u32 rcar_i2c_func(struct i2c_adapter *adap)
{
563
	/* This HW can't do SMBUS_QUICK and NOSTART */
564 565
	return I2C_FUNC_I2C | I2C_FUNC_SLAVE |
		(I2C_FUNC_SMBUS_EMUL & ~I2C_FUNC_SMBUS_QUICK);
566 567 568 569 570
}

static const struct i2c_algorithm rcar_i2c_algo = {
	.master_xfer	= rcar_i2c_master_xfer,
	.functionality	= rcar_i2c_func,
W
Wolfram Sang 已提交
571 572
	.reg_slave	= rcar_reg_slave,
	.unreg_slave	= rcar_unreg_slave,
573 574
};

575
static const struct of_device_id rcar_i2c_dt_ids[] = {
576 577 578 579
	{ .compatible = "renesas,i2c-rcar", .data = (void *)I2C_RCAR_GEN1 },
	{ .compatible = "renesas,i2c-r8a7778", .data = (void *)I2C_RCAR_GEN1 },
	{ .compatible = "renesas,i2c-r8a7779", .data = (void *)I2C_RCAR_GEN1 },
	{ .compatible = "renesas,i2c-r8a7790", .data = (void *)I2C_RCAR_GEN2 },
580
	{ .compatible = "renesas,i2c-r8a7791", .data = (void *)I2C_RCAR_GEN2 },
581 582 583
	{ .compatible = "renesas,i2c-r8a7792", .data = (void *)I2C_RCAR_GEN2 },
	{ .compatible = "renesas,i2c-r8a7793", .data = (void *)I2C_RCAR_GEN2 },
	{ .compatible = "renesas,i2c-r8a7794", .data = (void *)I2C_RCAR_GEN2 },
584
	{ .compatible = "renesas,i2c-r8a7795", .data = (void *)I2C_RCAR_GEN3 },
585 586 587 588
	{},
};
MODULE_DEVICE_TABLE(of, rcar_i2c_dt_ids);

589
static int rcar_i2c_probe(struct platform_device *pdev)
590 591 592 593 594 595
{
	struct rcar_i2c_priv *priv;
	struct i2c_adapter *adap;
	struct resource *res;
	struct device *dev = &pdev->dev;
	u32 bus_speed;
596
	int irq, ret;
597 598

	priv = devm_kzalloc(dev, sizeof(struct rcar_i2c_priv), GFP_KERNEL);
599
	if (!priv)
600 601
		return -ENOMEM;

602 603 604 605 606 607
	priv->clk = devm_clk_get(dev, NULL);
	if (IS_ERR(priv->clk)) {
		dev_err(dev, "cannot get clock\n");
		return PTR_ERR(priv->clk);
	}

608 609 610 611 612
	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
	priv->io = devm_ioremap_resource(dev, res);
	if (IS_ERR(priv->io))
		return PTR_ERR(priv->io);

613
	bus_speed = 100000; /* default 100 kHz */
614
	of_property_read_u32(dev->of_node, "clock-frequency", &bus_speed);
615

616
	priv->devtype = (enum rcar_i2c_type)of_match_device(rcar_i2c_dt_ids, dev)->data;
617

618 619
	pm_runtime_enable(dev);
	pm_runtime_get_sync(dev);
620 621
	ret = rcar_i2c_clock_calculate(priv, bus_speed, dev);
	if (ret < 0)
622
		goto out_pm_put;
623

W
Wolfram Sang 已提交
624
	rcar_i2c_init(priv);
625
	pm_runtime_put(dev);
626

627
	irq = platform_get_irq(pdev, 0);
628 629
	init_waitqueue_head(&priv->wait);

630 631 632 633 634 635 636
	adap = &priv->adap;
	adap->nr = pdev->id;
	adap->algo = &rcar_i2c_algo;
	adap->class = I2C_CLASS_DEPRECATED;
	adap->retries = 3;
	adap->dev.parent = dev;
	adap->dev.of_node = dev->of_node;
637 638 639
	i2c_set_adapdata(adap, priv);
	strlcpy(adap->name, pdev->name, sizeof(adap->name));

640
	ret = devm_request_irq(dev, irq, rcar_i2c_irq, 0,
641 642
			       dev_name(dev), priv);
	if (ret < 0) {
643
		dev_err(dev, "cannot get irq %d\n", irq);
644
		goto out_pm_disable;
645 646
	}

647 648
	platform_set_drvdata(pdev, priv);

649 650 651
	ret = i2c_add_numbered_adapter(adap);
	if (ret < 0) {
		dev_err(dev, "reg adap failed: %d\n", ret);
652
		goto out_pm_disable;
653 654 655 656 657
	}

	dev_info(dev, "probed\n");

	return 0;
658 659 660 661 662 663

 out_pm_put:
	pm_runtime_put(dev);
 out_pm_disable:
	pm_runtime_disable(dev);
	return ret;
664 665
}

666
static int rcar_i2c_remove(struct platform_device *pdev)
667 668 669 670 671 672 673 674 675 676
{
	struct rcar_i2c_priv *priv = platform_get_drvdata(pdev);
	struct device *dev = &pdev->dev;

	i2c_del_adapter(&priv->adap);
	pm_runtime_disable(dev);

	return 0;
}

W
Wolfram Sang 已提交
677
static struct platform_driver rcar_i2c_driver = {
678 679
	.driver	= {
		.name	= "i2c-rcar",
680
		.of_match_table = rcar_i2c_dt_ids,
681 682
	},
	.probe		= rcar_i2c_probe,
683
	.remove		= rcar_i2c_remove,
684 685
};

W
Wolfram Sang 已提交
686
module_platform_driver(rcar_i2c_driver);
687

688
MODULE_LICENSE("GPL v2");
689 690
MODULE_DESCRIPTION("Renesas R-Car I2C bus driver");
MODULE_AUTHOR("Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>");