i2c-designware-core.c 14.4 KB
Newer Older
1
/*
2
 * Synopsys DesignWare I2C adapter driver (master only).
3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
 *
 * Based on the TI DAVINCI I2C adapter driver.
 *
 * Copyright (C) 2006 Texas Instruments.
 * Copyright (C) 2007 MontaVista Software Inc.
 * Copyright (C) 2009 Provigent Ltd.
 *
 * ----------------------------------------------------------------------------
 *
 * 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
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * 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.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 * ----------------------------------------------------------------------------
 *
 */
#include <linux/clk.h>
#include <linux/errno.h>
#include <linux/err.h>
31
#include <linux/i2c.h>
32 33
#include <linux/interrupt.h>
#include <linux/io.h>
34 35
#include <linux/delay.h>
#include "i2c-designware-core.h"
36

37
static char *abort_sources[] = {
38
	[ABRT_7B_ADDR_NOACK] =
39
		"slave address not acknowledged (7bit mode)",
40
	[ABRT_10ADDR1_NOACK] =
41
		"first address byte not acknowledged (10bit mode)",
42
	[ABRT_10ADDR2_NOACK] =
43
		"second address byte not acknowledged (10bit mode)",
44
	[ABRT_TXDATA_NOACK] =
45
		"data not acknowledged",
46
	[ABRT_GCALL_NOACK] =
47
		"no acknowledgement for a general call",
48
	[ABRT_GCALL_READ] =
49
		"read after general call",
50
	[ABRT_SBYTE_ACKDET] =
51
		"start byte acknowledged",
52
	[ABRT_SBYTE_NORSTRT] =
53
		"trying to send start byte when restart is disabled",
54
	[ABRT_10B_RD_NORSTRT] =
55
		"trying to read when restart is disabled (10bit mode)",
56
	[ABRT_MASTER_DIS] =
57
		"trying to use disabled adapter",
58
	[ARB_LOST] =
59 60 61
		"lost arbitration",
};

62
u32 dw_readl(struct dw_i2c_dev *dev, int offset)
63
{
64 65 66 67 68 69
	u32 value = readl(dev->base + offset);

	if (dev->swab)
		return swab32(value);
	else
		return value;
70 71
}

72
void dw_writel(struct dw_i2c_dev *dev, u32 b, int offset)
73
{
74 75 76
	if (dev->swab)
		b = swab32(b);

77 78 79
	writel(b, dev->base + offset);
}

80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134
static u32
i2c_dw_scl_hcnt(u32 ic_clk, u32 tSYMBOL, u32 tf, int cond, int offset)
{
	/*
	 * DesignWare I2C core doesn't seem to have solid strategy to meet
	 * the tHD;STA timing spec.  Configuring _HCNT based on tHIGH spec
	 * will result in violation of the tHD;STA spec.
	 */
	if (cond)
		/*
		 * Conditional expression:
		 *
		 *   IC_[FS]S_SCL_HCNT + (1+4+3) >= IC_CLK * tHIGH
		 *
		 * This is based on the DW manuals, and represents an ideal
		 * configuration.  The resulting I2C bus speed will be
		 * faster than any of the others.
		 *
		 * If your hardware is free from tHD;STA issue, try this one.
		 */
		return (ic_clk * tSYMBOL + 5000) / 10000 - 8 + offset;
	else
		/*
		 * Conditional expression:
		 *
		 *   IC_[FS]S_SCL_HCNT + 3 >= IC_CLK * (tHD;STA + tf)
		 *
		 * This is just experimental rule; the tHD;STA period turned
		 * out to be proportinal to (_HCNT + 3).  With this setting,
		 * we could meet both tHIGH and tHD;STA timing specs.
		 *
		 * If unsure, you'd better to take this alternative.
		 *
		 * The reason why we need to take into account "tf" here,
		 * is the same as described in i2c_dw_scl_lcnt().
		 */
		return (ic_clk * (tSYMBOL + tf) + 5000) / 10000 - 3 + offset;
}

static u32 i2c_dw_scl_lcnt(u32 ic_clk, u32 tLOW, u32 tf, int offset)
{
	/*
	 * Conditional expression:
	 *
	 *   IC_[FS]S_SCL_LCNT + 1 >= IC_CLK * (tLOW + tf)
	 *
	 * DW I2C core starts counting the SCL CNTs for the LOW period
	 * of the SCL clock (tLOW) as soon as it pulls the SCL line.
	 * In order to meet the tLOW timing spec, we need to take into
	 * account the fall time of SCL signal (tf).  Default tf value
	 * should be 0.3 us, for safety.
	 */
	return ((ic_clk * (tLOW + tf) + 5000) / 10000) - 1 + offset;
}

135 136 137 138 139 140 141 142
/**
 * i2c_dw_init() - initialize the designware i2c master hardware
 * @dev: device private data
 *
 * This functions configures and enables the I2C master.
 * This function is called during I2C init function, and in case of timeout at
 * run time.
 */
143
int i2c_dw_init(struct dw_i2c_dev *dev)
144
{
145
	u32 input_clock_khz;
146
	u32 hcnt, lcnt;
147 148
	u32 reg;

149 150
	input_clock_khz = dev->get_clk_rate_khz(dev);

151 152 153 154 155 156 157 158 159 160 161 162
	/* Configure register endianess access */
	reg = dw_readl(dev, DW_IC_COMP_TYPE);
	if (reg == ___constant_swab32(DW_IC_COMP_TYPE_VALUE)) {
		dev->swab = 1;
		reg = DW_IC_COMP_TYPE_VALUE;
	}

	if (reg != DW_IC_COMP_TYPE_VALUE) {
		dev_err(dev->dev, "Unknown Synopsys component type: "
			"0x%08x\n", reg);
		return -ENODEV;
	}
163 164

	/* Disable the adapter */
165
	dw_writel(dev, 0, DW_IC_ENABLE);
166 167

	/* set standard and fast speed deviders for high/low periods */
168 169 170 171 172 173 174 175 176 177 178

	/* Standard-mode */
	hcnt = i2c_dw_scl_hcnt(input_clock_khz,
				40,	/* tHD;STA = tHIGH = 4.0 us */
				3,	/* tf = 0.3 us */
				0,	/* 0: DW default, 1: Ideal */
				0);	/* No offset */
	lcnt = i2c_dw_scl_lcnt(input_clock_khz,
				47,	/* tLOW = 4.7 us */
				3,	/* tf = 0.3 us */
				0);	/* No offset */
179 180
	dw_writel(dev, hcnt, DW_IC_SS_SCL_HCNT);
	dw_writel(dev, lcnt, DW_IC_SS_SCL_LCNT);
181 182 183 184 185 186 187 188 189 190 191 192
	dev_dbg(dev->dev, "Standard-mode HCNT:LCNT = %d:%d\n", hcnt, lcnt);

	/* Fast-mode */
	hcnt = i2c_dw_scl_hcnt(input_clock_khz,
				6,	/* tHD;STA = tHIGH = 0.6 us */
				3,	/* tf = 0.3 us */
				0,	/* 0: DW default, 1: Ideal */
				0);	/* No offset */
	lcnt = i2c_dw_scl_lcnt(input_clock_khz,
				13,	/* tLOW = 1.3 us */
				3,	/* tf = 0.3 us */
				0);	/* No offset */
193 194
	dw_writel(dev, hcnt, DW_IC_FS_SCL_HCNT);
	dw_writel(dev, lcnt, DW_IC_FS_SCL_LCNT);
195
	dev_dbg(dev->dev, "Fast-mode HCNT:LCNT = %d:%d\n", hcnt, lcnt);
196

197
	/* Configure Tx/Rx FIFO threshold levels */
198 199
	dw_writel(dev, dev->tx_fifo_depth - 1, DW_IC_TX_TL);
	dw_writel(dev, 0, DW_IC_RX_TL);
200

201
	/* configure the i2c master */
202
	dw_writel(dev, dev->master_cfg , DW_IC_CON);
203
	return 0;
204 205 206 207 208 209 210 211 212
}

/*
 * Waiting for bus not busy
 */
static int i2c_dw_wait_bus_not_busy(struct dw_i2c_dev *dev)
{
	int timeout = TIMEOUT;

213
	while (dw_readl(dev, DW_IC_STATUS) & DW_IC_STATUS_ACTIVITY) {
214 215 216 217 218 219 220 221 222 223 224
		if (timeout <= 0) {
			dev_warn(dev->dev, "timeout waiting for bus ready\n");
			return -ETIMEDOUT;
		}
		timeout--;
		mdelay(1);
	}

	return 0;
}

225 226 227 228 229 230
static void i2c_dw_xfer_init(struct dw_i2c_dev *dev)
{
	struct i2c_msg *msgs = dev->msgs;
	u32 ic_con;

	/* Disable the adapter */
231
	dw_writel(dev, 0, DW_IC_ENABLE);
232 233

	/* set the slave (target) address */
234
	dw_writel(dev, msgs[dev->msg_write_idx].addr, DW_IC_TAR);
235 236

	/* if the slave address is ten bit address, enable 10BITADDR */
237
	ic_con = dw_readl(dev, DW_IC_CON);
238 239 240 241
	if (msgs[dev->msg_write_idx].flags & I2C_M_TEN)
		ic_con |= DW_IC_CON_10BITADDR_MASTER;
	else
		ic_con &= ~DW_IC_CON_10BITADDR_MASTER;
242
	dw_writel(dev, ic_con, DW_IC_CON);
243 244

	/* Enable the adapter */
245
	dw_writel(dev, 1, DW_IC_ENABLE);
246 247

	/* Enable interrupts */
248
	dw_writel(dev, DW_IC_INTR_DEFAULT_MASK, DW_IC_INTR_MASK);
249 250
}

251
/*
252 253 254 255
 * Initiate (and continue) low level master read/write transaction.
 * This function is only called from i2c_dw_isr, and pumping i2c_msg
 * messages into the tx buffer.  Even if the size of i2c_msg data is
 * longer than the size of the tx buffer, it handles everything.
256
 */
257
void
258
i2c_dw_xfer_msg(struct dw_i2c_dev *dev)
259 260
{
	struct i2c_msg *msgs = dev->msgs;
261
	u32 intr_mask;
262
	int tx_limit, rx_limit;
263 264
	u32 addr = msgs[dev->msg_write_idx].addr;
	u32 buf_len = dev->tx_buf_len;
265
	u8 *buf = dev->tx_buf;
266

267
	intr_mask = DW_IC_INTR_DEFAULT_MASK;
268

269
	for (; dev->msg_write_idx < dev->msgs_num; dev->msg_write_idx++) {
270 271
		/*
		 * if target address has changed, we need to
272 273 274
		 * reprogram the target address in the i2c
		 * adapter when we are done with this transfer
		 */
275 276 277 278 279 280
		if (msgs[dev->msg_write_idx].addr != addr) {
			dev_err(dev->dev,
				"%s: invalid target address\n", __func__);
			dev->msg_err = -EINVAL;
			break;
		}
281 282 283 284 285

		if (msgs[dev->msg_write_idx].len == 0) {
			dev_err(dev->dev,
				"%s: invalid message length\n", __func__);
			dev->msg_err = -EINVAL;
286
			break;
287 288 289 290
		}

		if (!(dev->status & STATUS_WRITE_IN_PROGRESS)) {
			/* new i2c_msg */
291
			buf = msgs[dev->msg_write_idx].buf;
292 293 294
			buf_len = msgs[dev->msg_write_idx].len;
		}

295 296
		tx_limit = dev->tx_fifo_depth - dw_readl(dev, DW_IC_TXFLR);
		rx_limit = dev->rx_fifo_depth - dw_readl(dev, DW_IC_RXFLR);
297

298 299
		while (buf_len > 0 && tx_limit > 0 && rx_limit > 0) {
			if (msgs[dev->msg_write_idx].flags & I2C_M_RD) {
300
				dw_writel(dev, 0x100, DW_IC_DATA_CMD);
301 302
				rx_limit--;
			} else
303
				dw_writel(dev, *buf++, DW_IC_DATA_CMD);
304 305
			tx_limit--; buf_len--;
		}
306

307
		dev->tx_buf = buf;
308 309 310 311 312 313
		dev->tx_buf_len = buf_len;

		if (buf_len > 0) {
			/* more bytes to be written */
			dev->status |= STATUS_WRITE_IN_PROGRESS;
			break;
314
		} else
315
			dev->status &= ~STATUS_WRITE_IN_PROGRESS;
316 317
	}

318 319 320 321 322 323 324
	/*
	 * If i2c_msg index search is completed, we don't need TX_EMPTY
	 * interrupt any more.
	 */
	if (dev->msg_write_idx == dev->msgs_num)
		intr_mask &= ~DW_IC_INTR_TX_EMPTY;

325 326 327
	if (dev->msg_err)
		intr_mask = 0;

328
	dw_writel(dev, intr_mask,  DW_IC_INTR_MASK);
329 330 331
}

static void
332
i2c_dw_read(struct dw_i2c_dev *dev)
333 334
{
	struct i2c_msg *msgs = dev->msgs;
335
	int rx_valid;
336

337
	for (; dev->msg_read_idx < dev->msgs_num; dev->msg_read_idx++) {
338
		u32 len;
339 340 341 342 343 344 345 346 347 348 349 350 351
		u8 *buf;

		if (!(msgs[dev->msg_read_idx].flags & I2C_M_RD))
			continue;

		if (!(dev->status & STATUS_READ_IN_PROGRESS)) {
			len = msgs[dev->msg_read_idx].len;
			buf = msgs[dev->msg_read_idx].buf;
		} else {
			len = dev->rx_buf_len;
			buf = dev->rx_buf;
		}

352
		rx_valid = dw_readl(dev, DW_IC_RXFLR);
353

354
		for (; len > 0 && rx_valid > 0; len--, rx_valid--)
355
			*buf++ = dw_readl(dev, DW_IC_DATA_CMD);
356 357 358 359 360 361 362 363 364 365 366

		if (len > 0) {
			dev->status |= STATUS_READ_IN_PROGRESS;
			dev->rx_buf_len = len;
			dev->rx_buf = buf;
			return;
		} else
			dev->status &= ~STATUS_READ_IN_PROGRESS;
	}
}

367 368 369 370 371
static int i2c_dw_handle_tx_abort(struct dw_i2c_dev *dev)
{
	unsigned long abort_source = dev->abort_source;
	int i;

372
	if (abort_source & DW_IC_TX_ABRT_NOACK) {
373
		for_each_set_bit(i, &abort_source, ARRAY_SIZE(abort_sources))
374 375 376 377 378
			dev_dbg(dev->dev,
				"%s: %s\n", __func__, abort_sources[i]);
		return -EREMOTEIO;
	}

379
	for_each_set_bit(i, &abort_source, ARRAY_SIZE(abort_sources))
380 381 382 383 384 385 386 387 388 389
		dev_err(dev->dev, "%s: %s\n", __func__, abort_sources[i]);

	if (abort_source & DW_IC_TX_ARB_LOST)
		return -EAGAIN;
	else if (abort_source & DW_IC_TX_ABRT_GCALL_READ)
		return -EINVAL; /* wrong msgs[] data */
	else
		return -EIO;
}

390 391 392
/*
 * Prepare controller for a transaction and call i2c_dw_xfer_msg
 */
393
int
394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410
i2c_dw_xfer(struct i2c_adapter *adap, struct i2c_msg msgs[], int num)
{
	struct dw_i2c_dev *dev = i2c_get_adapdata(adap);
	int ret;

	dev_dbg(dev->dev, "%s: msgs: %d\n", __func__, num);

	mutex_lock(&dev->lock);

	INIT_COMPLETION(dev->cmd_complete);
	dev->msgs = msgs;
	dev->msgs_num = num;
	dev->cmd_err = 0;
	dev->msg_write_idx = 0;
	dev->msg_read_idx = 0;
	dev->msg_err = 0;
	dev->status = STATUS_IDLE;
411
	dev->abort_source = 0;
412 413 414 415 416 417

	ret = i2c_dw_wait_bus_not_busy(dev);
	if (ret < 0)
		goto done;

	/* start the transfers */
418
	i2c_dw_xfer_init(dev);
419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436

	/* wait for tx to complete */
	ret = wait_for_completion_interruptible_timeout(&dev->cmd_complete, HZ);
	if (ret == 0) {
		dev_err(dev->dev, "controller timed out\n");
		i2c_dw_init(dev);
		ret = -ETIMEDOUT;
		goto done;
	} else if (ret < 0)
		goto done;

	if (dev->msg_err) {
		ret = dev->msg_err;
		goto done;
	}

	/* no error */
	if (likely(!dev->cmd_err)) {
437
		/* Disable the adapter */
438
		dw_writel(dev, 0, DW_IC_ENABLE);
439 440 441 442 443 444
		ret = num;
		goto done;
	}

	/* We have an error */
	if (dev->cmd_err == DW_IC_ERR_TX_ABRT) {
445 446
		ret = i2c_dw_handle_tx_abort(dev);
		goto done;
447 448 449 450 451 452 453 454 455
	}
	ret = -EIO;

done:
	mutex_unlock(&dev->lock);

	return ret;
}

456
u32 i2c_dw_func(struct i2c_adapter *adap)
457
{
458 459
	struct dw_i2c_dev *dev = i2c_get_adapdata(adap);
	return dev->functionality;
460 461
}

462 463 464 465 466 467 468 469 470 471
static u32 i2c_dw_read_clear_intrbits(struct dw_i2c_dev *dev)
{
	u32 stat;

	/*
	 * The IC_INTR_STAT register just indicates "enabled" interrupts.
	 * Ths unmasked raw version of interrupt status bits are available
	 * in the IC_RAW_INTR_STAT register.
	 *
	 * That is,
472
	 *   stat = dw_readl(IC_INTR_STAT);
473
	 * equals to,
474
	 *   stat = dw_readl(IC_RAW_INTR_STAT) & dw_readl(IC_INTR_MASK);
475 476 477
	 *
	 * The raw version might be useful for debugging purposes.
	 */
478
	stat = dw_readl(dev, DW_IC_INTR_STAT);
479 480 481 482

	/*
	 * Do not use the IC_CLR_INTR register to clear interrupts, or
	 * you'll miss some interrupts, triggered during the period from
483
	 * dw_readl(IC_INTR_STAT) to dw_readl(IC_CLR_INTR).
484 485 486 487
	 *
	 * Instead, use the separately-prepared IC_CLR_* registers.
	 */
	if (stat & DW_IC_INTR_RX_UNDER)
488
		dw_readl(dev, DW_IC_CLR_RX_UNDER);
489
	if (stat & DW_IC_INTR_RX_OVER)
490
		dw_readl(dev, DW_IC_CLR_RX_OVER);
491
	if (stat & DW_IC_INTR_TX_OVER)
492
		dw_readl(dev, DW_IC_CLR_TX_OVER);
493
	if (stat & DW_IC_INTR_RD_REQ)
494
		dw_readl(dev, DW_IC_CLR_RD_REQ);
495 496 497 498 499
	if (stat & DW_IC_INTR_TX_ABRT) {
		/*
		 * The IC_TX_ABRT_SOURCE register is cleared whenever
		 * the IC_CLR_TX_ABRT is read.  Preserve it beforehand.
		 */
500 501
		dev->abort_source = dw_readl(dev, DW_IC_TX_ABRT_SOURCE);
		dw_readl(dev, DW_IC_CLR_TX_ABRT);
502 503
	}
	if (stat & DW_IC_INTR_RX_DONE)
504
		dw_readl(dev, DW_IC_CLR_RX_DONE);
505
	if (stat & DW_IC_INTR_ACTIVITY)
506
		dw_readl(dev, DW_IC_CLR_ACTIVITY);
507
	if (stat & DW_IC_INTR_STOP_DET)
508
		dw_readl(dev, DW_IC_CLR_STOP_DET);
509
	if (stat & DW_IC_INTR_START_DET)
510
		dw_readl(dev, DW_IC_CLR_START_DET);
511
	if (stat & DW_IC_INTR_GEN_CALL)
512
		dw_readl(dev, DW_IC_CLR_GEN_CALL);
513 514 515 516

	return stat;
}

517 518 519 520
/*
 * Interrupt service routine. This gets called whenever an I2C interrupt
 * occurs.
 */
521
irqreturn_t i2c_dw_isr(int this_irq, void *dev_id)
522 523
{
	struct dw_i2c_dev *dev = dev_id;
524 525 526 527 528 529 530 531
	u32 stat, enabled;

	enabled = dw_readl(dev, DW_IC_ENABLE);
	stat = dw_readl(dev, DW_IC_RAW_INTR_STAT);
	dev_dbg(dev->dev, "%s:  %s enabled= 0x%x stat=0x%x\n", __func__,
		dev->adapter.name, enabled, stat);
	if (!enabled || !(stat & ~DW_IC_INTR_ACTIVITY))
		return IRQ_NONE;
532

533 534
	stat = i2c_dw_read_clear_intrbits(dev);

535 536 537
	if (stat & DW_IC_INTR_TX_ABRT) {
		dev->cmd_err |= DW_IC_ERR_TX_ABRT;
		dev->status = STATUS_IDLE;
538 539 540 541 542

		/*
		 * Anytime TX_ABRT is set, the contents of the tx/rx
		 * buffers are flushed.  Make sure to skip them.
		 */
543
		dw_writel(dev, 0, DW_IC_INTR_MASK);
544
		goto tx_aborted;
545 546
	}

547
	if (stat & DW_IC_INTR_RX_FULL)
548
		i2c_dw_read(dev);
549 550

	if (stat & DW_IC_INTR_TX_EMPTY)
551 552 553 554 555 556 557
		i2c_dw_xfer_msg(dev);

	/*
	 * No need to modify or disable the interrupt mask here.
	 * i2c_dw_xfer_msg() will take care of it according to
	 * the current transmit status.
	 */
558

559
tx_aborted:
560
	if ((stat & (DW_IC_INTR_TX_ABRT | DW_IC_INTR_STOP_DET)) || dev->msg_err)
561 562 563 564
		complete(&dev->cmd_complete);

	return IRQ_HANDLED;
}