intel_i2c.c 19.6 KB
Newer Older
J
Jesse Barnes 已提交
1 2
/*
 * Copyright (c) 2006 Dave Airlie <airlied@linux.ie>
3
 * Copyright © 2006-2008,2010 Intel Corporation
J
Jesse Barnes 已提交
4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
 *   Jesse Barnes <jesse.barnes@intel.com>
 *
 * Permission is hereby granted, free of charge, to any person obtaining a
 * copy of this software and associated documentation files (the "Software"),
 * to deal in the Software without restriction, including without limitation
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 * and/or sell copies of the Software, and to permit persons to whom the
 * Software is furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice (including the next
 * paragraph) shall be included in all copies or substantial portions of the
 * Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
 * DEALINGS IN THE SOFTWARE.
 *
 * Authors:
 *	Eric Anholt <eric@anholt.net>
27
 *	Chris Wilson <chris@chris-wilson.co.uk>
J
Jesse Barnes 已提交
28 29 30
 */
#include <linux/i2c.h>
#include <linux/i2c-algo-bit.h>
31
#include <linux/export.h>
32
#include <drm/drmP.h>
J
Jesse Barnes 已提交
33
#include "intel_drv.h"
34
#include <drm/i915_drm.h>
J
Jesse Barnes 已提交
35 36
#include "i915_drv.h"

37
struct gmbus_pin {
38
	const char *name;
39
	i915_reg_t reg;
40 41
};

42 43 44 45 46 47 48 49
/* Map gmbus pin pairs to names and registers. */
static const struct gmbus_pin gmbus_pins[] = {
	[GMBUS_PIN_SSC] = { "ssc", GPIOB },
	[GMBUS_PIN_VGADDC] = { "vga", GPIOA },
	[GMBUS_PIN_PANEL] = { "panel", GPIOC },
	[GMBUS_PIN_DPC] = { "dpc", GPIOD },
	[GMBUS_PIN_DPB] = { "dpb", GPIOE },
	[GMBUS_PIN_DPD] = { "dpd", GPIOF },
50 51
};

52 53 54 55 56 57 58
static const struct gmbus_pin gmbus_pins_bdw[] = {
	[GMBUS_PIN_VGADDC] = { "vga", GPIOA },
	[GMBUS_PIN_DPC] = { "dpc", GPIOD },
	[GMBUS_PIN_DPB] = { "dpb", GPIOE },
	[GMBUS_PIN_DPD] = { "dpd", GPIOF },
};

59 60 61 62 63 64
static const struct gmbus_pin gmbus_pins_skl[] = {
	[GMBUS_PIN_DPC] = { "dpc", GPIOD },
	[GMBUS_PIN_DPB] = { "dpb", GPIOE },
	[GMBUS_PIN_DPD] = { "dpd", GPIOF },
};

J
Jani Nikula 已提交
65
static const struct gmbus_pin gmbus_pins_bxt[] = {
66 67 68
	[GMBUS_PIN_1_BXT] = { "dpb", GPIOB },
	[GMBUS_PIN_2_BXT] = { "dpc", GPIOC },
	[GMBUS_PIN_3_BXT] = { "misc", GPIOD },
J
Jani Nikula 已提交
69 70
};

71 72 73 74 75 76 77
static const struct gmbus_pin gmbus_pins_cnp[] = {
	[GMBUS_PIN_1_BXT] = { "dpb", GPIOB },
	[GMBUS_PIN_2_BXT] = { "dpc", GPIOC },
	[GMBUS_PIN_3_BXT] = { "misc", GPIOD },
	[GMBUS_PIN_4_CNP] = { "dpd", GPIOE },
};

J
Jani Nikula 已提交
78 79 80 81
/* pin is expected to be valid */
static const struct gmbus_pin *get_gmbus_pin(struct drm_i915_private *dev_priv,
					     unsigned int pin)
{
82 83 84
	if (HAS_PCH_CNP(dev_priv))
		return &gmbus_pins_cnp[pin];
	else if (IS_GEN9_LP(dev_priv))
J
Jani Nikula 已提交
85
		return &gmbus_pins_bxt[pin];
86
	else if (IS_GEN9_BC(dev_priv))
87
		return &gmbus_pins_skl[pin];
88 89
	else if (IS_BROADWELL(dev_priv))
		return &gmbus_pins_bdw[pin];
J
Jani Nikula 已提交
90 91 92 93
	else
		return &gmbus_pins[pin];
}

94 95 96
bool intel_gmbus_is_valid_pin(struct drm_i915_private *dev_priv,
			      unsigned int pin)
{
J
Jani Nikula 已提交
97 98
	unsigned int size;

99 100 101
	if (HAS_PCH_CNP(dev_priv))
		size = ARRAY_SIZE(gmbus_pins_cnp);
	else if (IS_GEN9_LP(dev_priv))
J
Jani Nikula 已提交
102
		size = ARRAY_SIZE(gmbus_pins_bxt);
103
	else if (IS_GEN9_BC(dev_priv))
104
		size = ARRAY_SIZE(gmbus_pins_skl);
105 106
	else if (IS_BROADWELL(dev_priv))
		size = ARRAY_SIZE(gmbus_pins_bdw);
J
Jani Nikula 已提交
107 108 109
	else
		size = ARRAY_SIZE(gmbus_pins);

110 111
	return pin < size &&
		i915_mmio_reg_valid(get_gmbus_pin(dev_priv, pin)->reg);
112 113
}

114 115
/* Intel GPIO access functions */

J
Jean Delvare 已提交
116
#define I2C_RISEFALL_TIME 10
117

C
Chris Wilson 已提交
118 119 120 121 122 123
static inline struct intel_gmbus *
to_intel_gmbus(struct i2c_adapter *i2c)
{
	return container_of(i2c, struct intel_gmbus, adapter);
}

124
void
125
intel_i2c_reset(struct drm_i915_private *dev_priv)
126
{
127 128
	I915_WRITE(GMBUS0, 0);
	I915_WRITE(GMBUS4, 0);
129 130 131 132
}

static void intel_i2c_quirk_set(struct drm_i915_private *dev_priv, bool enable)
{
133
	u32 val;
134 135

	/* When using bit bashing for I2C, this bit needs to be set to 1 */
136
	if (!IS_PINEVIEW(dev_priv))
137
		return;
138 139

	val = I915_READ(DSPCLK_GATE_D);
140
	if (enable)
141
		val |= DPCUNIT_CLOCK_GATE_DISABLE;
142
	else
143 144
		val &= ~DPCUNIT_CLOCK_GATE_DISABLE;
	I915_WRITE(DSPCLK_GATE_D, val);
145 146
}

147
static u32 get_reserved(struct intel_gmbus *bus)
C
Chris Wilson 已提交
148
{
149
	struct drm_i915_private *dev_priv = bus->dev_priv;
C
Chris Wilson 已提交
150 151 152
	u32 reserved = 0;

	/* On most chips, these bits must be preserved in software. */
153
	if (!IS_I830(dev_priv) && !IS_I845G(dev_priv))
154
		reserved = I915_READ_NOTRACE(bus->gpio_reg) &
155 156
					     (GPIO_DATA_PULLUP_DISABLE |
					      GPIO_CLOCK_PULLUP_DISABLE);
C
Chris Wilson 已提交
157 158 159 160

	return reserved;
}

J
Jesse Barnes 已提交
161 162
static int get_clock(void *data)
{
163 164 165 166 167 168
	struct intel_gmbus *bus = data;
	struct drm_i915_private *dev_priv = bus->dev_priv;
	u32 reserved = get_reserved(bus);
	I915_WRITE_NOTRACE(bus->gpio_reg, reserved | GPIO_CLOCK_DIR_MASK);
	I915_WRITE_NOTRACE(bus->gpio_reg, reserved);
	return (I915_READ_NOTRACE(bus->gpio_reg) & GPIO_CLOCK_VAL_IN) != 0;
J
Jesse Barnes 已提交
169 170 171 172
}

static int get_data(void *data)
{
173 174 175 176 177 178
	struct intel_gmbus *bus = data;
	struct drm_i915_private *dev_priv = bus->dev_priv;
	u32 reserved = get_reserved(bus);
	I915_WRITE_NOTRACE(bus->gpio_reg, reserved | GPIO_DATA_DIR_MASK);
	I915_WRITE_NOTRACE(bus->gpio_reg, reserved);
	return (I915_READ_NOTRACE(bus->gpio_reg) & GPIO_DATA_VAL_IN) != 0;
J
Jesse Barnes 已提交
179 180 181 182
}

static void set_clock(void *data, int state_high)
{
183 184 185
	struct intel_gmbus *bus = data;
	struct drm_i915_private *dev_priv = bus->dev_priv;
	u32 reserved = get_reserved(bus);
C
Chris Wilson 已提交
186
	u32 clock_bits;
J
Jesse Barnes 已提交
187 188 189 190 191 192

	if (state_high)
		clock_bits = GPIO_CLOCK_DIR_IN | GPIO_CLOCK_DIR_MASK;
	else
		clock_bits = GPIO_CLOCK_DIR_OUT | GPIO_CLOCK_DIR_MASK |
			GPIO_CLOCK_VAL_MASK;
193

194 195
	I915_WRITE_NOTRACE(bus->gpio_reg, reserved | clock_bits);
	POSTING_READ(bus->gpio_reg);
J
Jesse Barnes 已提交
196 197 198 199
}

static void set_data(void *data, int state_high)
{
200 201 202
	struct intel_gmbus *bus = data;
	struct drm_i915_private *dev_priv = bus->dev_priv;
	u32 reserved = get_reserved(bus);
C
Chris Wilson 已提交
203
	u32 data_bits;
J
Jesse Barnes 已提交
204 205 206 207 208 209 210

	if (state_high)
		data_bits = GPIO_DATA_DIR_IN | GPIO_DATA_DIR_MASK;
	else
		data_bits = GPIO_DATA_DIR_OUT | GPIO_DATA_DIR_MASK |
			GPIO_DATA_VAL_MASK;

211 212
	I915_WRITE_NOTRACE(bus->gpio_reg, reserved | data_bits);
	POSTING_READ(bus->gpio_reg);
J
Jesse Barnes 已提交
213 214
}

215 216 217 218 219 220 221 222
static int
intel_gpio_pre_xfer(struct i2c_adapter *adapter)
{
	struct intel_gmbus *bus = container_of(adapter,
					       struct intel_gmbus,
					       adapter);
	struct drm_i915_private *dev_priv = bus->dev_priv;

223
	intel_i2c_reset(dev_priv);
224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243
	intel_i2c_quirk_set(dev_priv, true);
	set_data(bus, 1);
	set_clock(bus, 1);
	udelay(I2C_RISEFALL_TIME);
	return 0;
}

static void
intel_gpio_post_xfer(struct i2c_adapter *adapter)
{
	struct intel_gmbus *bus = container_of(adapter,
					       struct intel_gmbus,
					       adapter);
	struct drm_i915_private *dev_priv = bus->dev_priv;

	set_data(bus, 1);
	set_clock(bus, 1);
	intel_i2c_quirk_set(dev_priv, false);
}

244
static void
245
intel_gpio_setup(struct intel_gmbus *bus, unsigned int pin)
246
{
247 248
	struct drm_i915_private *dev_priv = bus->dev_priv;
	struct i2c_algo_bit_data *algo;
249

250
	algo = &bus->bit_algo;
251

252 253
	bus->gpio_reg = _MMIO(dev_priv->gpio_mmio_base +
			      i915_mmio_reg_offset(get_gmbus_pin(dev_priv, pin)->reg));
254
	bus->adapter.algo_data = algo;
255 256 257 258
	algo->setsda = set_data;
	algo->setscl = set_clock;
	algo->getsda = get_data;
	algo->getscl = get_clock;
259 260
	algo->pre_xfer = intel_gpio_pre_xfer;
	algo->post_xfer = intel_gpio_post_xfer;
261 262 263
	algo->udelay = I2C_RISEFALL_TIME;
	algo->timeout = usecs_to_jiffies(2200);
	algo->data = bus;
J
Jesse Barnes 已提交
264 265
}

266
static int gmbus_wait(struct drm_i915_private *dev_priv, u32 status, u32 irq_en)
267
{
268
	DEFINE_WAIT(wait);
269 270
	u32 gmbus2;
	int ret;
271

272 273
	/* Important: The hw handles only the first bit, so set only one! Since
	 * we also need to check for NAKs besides the hw ready/idle signal, we
274 275 276 277
	 * need to wake up periodically and check that ourselves.
	 */
	if (!HAS_GMBUS_IRQ(dev_priv))
		irq_en = 0;
278

279 280
	add_wait_queue(&dev_priv->gmbus_wait_queue, &wait);
	I915_WRITE_FW(GMBUS4, irq_en);
281

282 283 284 285
	status |= GMBUS_SATOER;
	ret = wait_for_us((gmbus2 = I915_READ_FW(GMBUS2)) & status, 2);
	if (ret)
		ret = wait_for((gmbus2 = I915_READ_FW(GMBUS2)) & status, 50);
286

287 288
	I915_WRITE_FW(GMBUS4, 0);
	remove_wait_queue(&dev_priv->gmbus_wait_queue, &wait);
289 290 291

	if (gmbus2 & GMBUS_SATOER)
		return -ENXIO;
292 293

	return ret;
294 295
}

296 297 298
static int
gmbus_wait_idle(struct drm_i915_private *dev_priv)
{
299 300
	DEFINE_WAIT(wait);
	u32 irq_enable;
301 302 303
	int ret;

	/* Important: The hw handles only the first bit, so set only one! */
304 305 306
	irq_enable = 0;
	if (HAS_GMBUS_IRQ(dev_priv))
		irq_enable = GMBUS_IDLE_EN;
307

308 309
	add_wait_queue(&dev_priv->gmbus_wait_queue, &wait);
	I915_WRITE_FW(GMBUS4, irq_enable);
310

311 312 313
	ret = intel_wait_for_register_fw(dev_priv,
					 GMBUS2, GMBUS_ACTIVE, 0,
					 10);
314

315 316 317 318
	I915_WRITE_FW(GMBUS4, 0);
	remove_wait_queue(&dev_priv->gmbus_wait_queue, &wait);

	return ret;
319 320
}

321
static int
322 323 324
gmbus_xfer_read_chunk(struct drm_i915_private *dev_priv,
		      unsigned short addr, u8 *buf, unsigned int len,
		      u32 gmbus1_index)
325
{
326 327 328 329 330 331
	I915_WRITE_FW(GMBUS1,
		      gmbus1_index |
		      GMBUS_CYCLE_WAIT |
		      (len << GMBUS_BYTE_COUNT_SHIFT) |
		      (addr << GMBUS_SLAVE_ADDR_SHIFT) |
		      GMBUS_SLAVE_READ | GMBUS_SW_RDY);
332
	while (len) {
333
		int ret;
334 335
		u32 val, loop = 0;

336
		ret = gmbus_wait(dev_priv, GMBUS_HW_RDY, GMBUS_HW_RDY_EN);
337
		if (ret)
338
			return ret;
339

340
		val = I915_READ_FW(GMBUS3);
341 342 343 344
		do {
			*buf++ = val & 0xff;
			val >>= 8;
		} while (--len && ++loop < 4);
345
	}
346 347 348 349 350

	return 0;
}

static int
351 352
gmbus_xfer_read(struct drm_i915_private *dev_priv, struct i2c_msg *msg,
		u32 gmbus1_index)
353 354
{
	u8 *buf = msg->buf;
355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378
	unsigned int rx_size = msg->len;
	unsigned int len;
	int ret;

	do {
		len = min(rx_size, GMBUS_BYTE_COUNT_MAX);

		ret = gmbus_xfer_read_chunk(dev_priv, msg->addr,
					    buf, len, gmbus1_index);
		if (ret)
			return ret;

		rx_size -= len;
		buf += len;
	} while (rx_size != 0);

	return 0;
}

static int
gmbus_xfer_write_chunk(struct drm_i915_private *dev_priv,
		       unsigned short addr, u8 *buf, unsigned int len)
{
	unsigned int chunk_size = len;
379 380 381
	u32 val, loop;

	val = loop = 0;
382 383 384 385
	while (len && loop < 4) {
		val |= *buf++ << (8 * loop++);
		len -= 1;
	}
386

387 388 389 390 391 392
	I915_WRITE_FW(GMBUS3, val);
	I915_WRITE_FW(GMBUS1,
		      GMBUS_CYCLE_WAIT |
		      (chunk_size << GMBUS_BYTE_COUNT_SHIFT) |
		      (addr << GMBUS_SLAVE_ADDR_SHIFT) |
		      GMBUS_SLAVE_WRITE | GMBUS_SW_RDY);
393
	while (len) {
394 395
		int ret;

396 397 398 399 400
		val = loop = 0;
		do {
			val |= *buf++ << (8 * loop);
		} while (--len && ++loop < 4);

401
		I915_WRITE_FW(GMBUS3, val);
402

403
		ret = gmbus_wait(dev_priv, GMBUS_HW_RDY, GMBUS_HW_RDY_EN);
404
		if (ret)
405
			return ret;
406
	}
407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429

	return 0;
}

static int
gmbus_xfer_write(struct drm_i915_private *dev_priv, struct i2c_msg *msg)
{
	u8 *buf = msg->buf;
	unsigned int tx_size = msg->len;
	unsigned int len;
	int ret;

	do {
		len = min(tx_size, GMBUS_BYTE_COUNT_MAX);

		ret = gmbus_xfer_write_chunk(dev_priv, msg->addr, buf, len);
		if (ret)
			return ret;

		buf += len;
		tx_size -= len;
	} while (tx_size != 0);

430 431 432
	return 0;
}

433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460
/*
 * The gmbus controller can combine a 1 or 2 byte write with a read that
 * immediately follows it by using an "INDEX" cycle.
 */
static bool
gmbus_is_index_read(struct i2c_msg *msgs, int i, int num)
{
	return (i + 1 < num &&
		!(msgs[i].flags & I2C_M_RD) && msgs[i].len <= 2 &&
		(msgs[i + 1].flags & I2C_M_RD));
}

static int
gmbus_xfer_index_read(struct drm_i915_private *dev_priv, struct i2c_msg *msgs)
{
	u32 gmbus1_index = 0;
	u32 gmbus5 = 0;
	int ret;

	if (msgs[0].len == 2)
		gmbus5 = GMBUS_2BYTE_INDEX_EN |
			 msgs[0].buf[1] | (msgs[0].buf[0] << 8);
	if (msgs[0].len == 1)
		gmbus1_index = GMBUS_CYCLE_INDEX |
			       (msgs[0].buf[0] << GMBUS_SLAVE_INDEX_SHIFT);

	/* GMBUS5 holds 16-bit index */
	if (gmbus5)
461
		I915_WRITE_FW(GMBUS5, gmbus5);
462 463 464 465 466

	ret = gmbus_xfer_read(dev_priv, &msgs[1], gmbus1_index);

	/* Clear GMBUS5 after each index transfer */
	if (gmbus5)
467
		I915_WRITE_FW(GMBUS5, 0);
468 469 470 471

	return ret;
}

472
static int
473
do_gmbus_xfer(struct i2c_adapter *adapter, struct i2c_msg *msgs, int num)
474 475 476 477
{
	struct intel_gmbus *bus = container_of(adapter,
					       struct intel_gmbus,
					       adapter);
478
	struct drm_i915_private *dev_priv = bus->dev_priv;
479
	int i = 0, inc, try = 0;
480
	int ret = 0;
481

482
retry:
483
	I915_WRITE_FW(GMBUS0, bus->reg0);
484

485 486
	for (; i < num; i += inc) {
		inc = 1;
487 488
		if (gmbus_is_index_read(msgs, i, num)) {
			ret = gmbus_xfer_index_read(dev_priv, &msgs[i]);
489
			inc = 2; /* an index read is two msgs */
490 491 492
		} else if (msgs[i].flags & I2C_M_RD) {
			ret = gmbus_xfer_read(dev_priv, &msgs[i], 0);
		} else {
493
			ret = gmbus_xfer_write(dev_priv, &msgs[i]);
494
		}
495

496
		if (!ret)
497 498
			ret = gmbus_wait(dev_priv,
					 GMBUS_HW_WAIT_PHASE, GMBUS_HW_WAIT_EN);
499 500
		if (ret == -ETIMEDOUT)
			goto timeout;
501
		else if (ret)
502
			goto clear_err;
503 504
	}

505 506 507 508
	/* Generate a STOP condition on the bus. Note that gmbus can't generata
	 * a STOP on the very first cycle. To simplify the code we
	 * unconditionally generate the STOP condition with an additional gmbus
	 * cycle. */
509
	I915_WRITE_FW(GMBUS1, GMBUS_CYCLE_STOP | GMBUS_SW_RDY);
510

511 512 513 514
	/* Mark the GMBUS interface as disabled after waiting for idle.
	 * We will re-enable it at the start of the next xfer,
	 * till then let it sleep.
	 */
515
	if (gmbus_wait_idle(dev_priv)) {
516
		DRM_DEBUG_KMS("GMBUS [%s] timed out waiting for idle\n",
517
			 adapter->name);
518 519
		ret = -ETIMEDOUT;
	}
520
	I915_WRITE_FW(GMBUS0, 0);
521
	ret = ret ?: i;
522
	goto out;
523 524

clear_err:
525 526 527 528
	/*
	 * Wait for bus to IDLE before clearing NAK.
	 * If we clear the NAK while bus is still active, then it will stay
	 * active and the next transaction may fail.
529 530 531 532 533 534 535 536
	 *
	 * If no ACK is received during the address phase of a transaction, the
	 * adapter must report -ENXIO. It is not clear what to return if no ACK
	 * is received at other times. But we have to be careful to not return
	 * spurious -ENXIO because that will prevent i2c and drm edid functions
	 * from retrying. So return -ENXIO only when gmbus properly quiescents -
	 * timing out seems to happen when there _is_ a ddc chip present, but
	 * it's slow responding and only answers on the 2nd retry.
537
	 */
538
	ret = -ENXIO;
539
	if (gmbus_wait_idle(dev_priv)) {
540 541
		DRM_DEBUG_KMS("GMBUS [%s] timed out after NAK\n",
			      adapter->name);
542 543
		ret = -ETIMEDOUT;
	}
544

545 546 547 548
	/* Toggle the Software Clear Interrupt bit. This has the effect
	 * of resetting the GMBUS controller and so clearing the
	 * BUS_ERROR raised by the slave's NAK.
	 */
549 550 551
	I915_WRITE_FW(GMBUS1, GMBUS_SW_CLR_INT);
	I915_WRITE_FW(GMBUS1, 0);
	I915_WRITE_FW(GMBUS0, 0);
552

553
	DRM_DEBUG_KMS("GMBUS [%s] NAK for addr: %04x %c(%d)\n",
554 555 556
			 adapter->name, msgs[i].addr,
			 (msgs[i].flags & I2C_M_RD) ? 'r' : 'w', msgs[i].len);

557 558 559 560 561 562 563 564 565 566 567 568
	/*
	 * Passive adapters sometimes NAK the first probe. Retry the first
	 * message once on -ENXIO for GMBUS transfers; the bit banging algorithm
	 * has retries internally. See also the retry loop in
	 * drm_do_probe_ddc_edid, which bails out on the first -ENXIO.
	 */
	if (ret == -ENXIO && i == 0 && try++ == 0) {
		DRM_DEBUG_KMS("GMBUS [%s] NAK on first message, retry\n",
			      adapter->name);
		goto retry;
	}

569
	goto out;
570 571

timeout:
572 573
	DRM_DEBUG_KMS("GMBUS [%s] timed out, falling back to bit banging on pin %d\n",
		      bus->adapter.name, bus->reg0 & 0xff);
574
	I915_WRITE_FW(GMBUS0, 0);
575

576 577 578 579 580
	/*
	 * Hardware may not support GMBUS over these pins? Try GPIO bitbanging
	 * instead. Use EAGAIN to have i2c core retry.
	 */
	ret = -EAGAIN;
581

582
out:
583 584 585 586 587 588 589 590 591 592 593 594 595
	return ret;
}

static int
gmbus_xfer(struct i2c_adapter *adapter, struct i2c_msg *msgs, int num)
{
	struct intel_gmbus *bus = container_of(adapter, struct intel_gmbus,
					       adapter);
	struct drm_i915_private *dev_priv = bus->dev_priv;
	int ret;

	intel_display_power_get(dev_priv, POWER_DOMAIN_GMBUS);

596
	if (bus->force_bit) {
597
		ret = i2c_bit_algo.master_xfer(adapter, msgs, num);
598 599 600
		if (ret < 0)
			bus->force_bit &= ~GMBUS_FORCE_BIT_RETRY;
	} else {
601
		ret = do_gmbus_xfer(adapter, msgs, num);
602 603 604
		if (ret == -EAGAIN)
			bus->force_bit |= GMBUS_FORCE_BIT_RETRY;
	}
605 606 607

	intel_display_power_put(dev_priv, POWER_DOMAIN_GMBUS);

608
	return ret;
609 610 611 612
}

static u32 gmbus_func(struct i2c_adapter *adapter)
{
613 614
	return i2c_bit_algo.functionality(adapter) &
		(I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL |
615 616 617 618 619 620 621 622 623 624
		/* I2C_FUNC_10BIT_ADDR | */
		I2C_FUNC_SMBUS_READ_BLOCK_DATA |
		I2C_FUNC_SMBUS_BLOCK_PROC_CALL);
}

static const struct i2c_algorithm gmbus_algorithm = {
	.master_xfer	= gmbus_xfer,
	.functionality	= gmbus_func
};

625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657
static void gmbus_lock_bus(struct i2c_adapter *adapter,
			   unsigned int flags)
{
	struct intel_gmbus *bus = to_intel_gmbus(adapter);
	struct drm_i915_private *dev_priv = bus->dev_priv;

	mutex_lock(&dev_priv->gmbus_mutex);
}

static int gmbus_trylock_bus(struct i2c_adapter *adapter,
			     unsigned int flags)
{
	struct intel_gmbus *bus = to_intel_gmbus(adapter);
	struct drm_i915_private *dev_priv = bus->dev_priv;

	return mutex_trylock(&dev_priv->gmbus_mutex);
}

static void gmbus_unlock_bus(struct i2c_adapter *adapter,
			     unsigned int flags)
{
	struct intel_gmbus *bus = to_intel_gmbus(adapter);
	struct drm_i915_private *dev_priv = bus->dev_priv;

	mutex_unlock(&dev_priv->gmbus_mutex);
}

const struct i2c_lock_operations gmbus_lock_ops = {
	.lock_bus =    gmbus_lock_bus,
	.trylock_bus = gmbus_trylock_bus,
	.unlock_bus =  gmbus_unlock_bus,
};

J
Jesse Barnes 已提交
658
/**
659
 * intel_gmbus_setup - instantiate all Intel i2c GMBuses
660
 * @dev_priv: i915 device private
J
Jesse Barnes 已提交
661
 */
662
int intel_setup_gmbus(struct drm_i915_private *dev_priv)
663
{
D
David Weinehall 已提交
664
	struct pci_dev *pdev = dev_priv->drm.pdev;
665 666 667
	struct intel_gmbus *bus;
	unsigned int pin;
	int ret;
668

669
	if (HAS_PCH_NOP(dev_priv))
670
		return 0;
671

672
	if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv))
673
		dev_priv->gpio_mmio_base = VLV_DISPLAY_BASE;
674 675 676 677
	else if (!HAS_GMCH_DISPLAY(dev_priv))
		dev_priv->gpio_mmio_base =
			i915_mmio_reg_offset(PCH_GPIOA) -
			i915_mmio_reg_offset(GPIOA);
678

679
	mutex_init(&dev_priv->gmbus_mutex);
680
	init_waitqueue_head(&dev_priv->gmbus_wait_queue);
681

682
	for (pin = 0; pin < ARRAY_SIZE(dev_priv->gmbus); pin++) {
683
		if (!intel_gmbus_is_valid_pin(dev_priv, pin))
684 685 686
			continue;

		bus = &dev_priv->gmbus[pin];
687 688 689 690

		bus->adapter.owner = THIS_MODULE;
		bus->adapter.class = I2C_CLASS_DDC;
		snprintf(bus->adapter.name,
691 692
			 sizeof(bus->adapter.name),
			 "i915 gmbus %s",
J
Jani Nikula 已提交
693
			 get_gmbus_pin(dev_priv, pin)->name);
694

D
David Weinehall 已提交
695
		bus->adapter.dev.parent = &pdev->dev;
696
		bus->dev_priv = dev_priv;
697 698

		bus->adapter.algo = &gmbus_algorithm;
699
		bus->adapter.lock_ops = &gmbus_lock_ops;
700

701 702 703 704 705 706
		/*
		 * We wish to retry with bit banging
		 * after a timed out GMBUS attempt.
		 */
		bus->adapter.retries = 1;

C
Chris Wilson 已提交
707
		/* By default use a conservative clock rate */
708
		bus->reg0 = pin | GMBUS_RATE_100KHZ;
709

D
Daniel Vetter 已提交
710
		/* gmbus seems to be broken on i830 */
711
		if (IS_I830(dev_priv))
712
			bus->force_bit = 1;
D
Daniel Vetter 已提交
713

714
		intel_gpio_setup(bus, pin);
715 716 717 718

		ret = i2c_add_adapter(&bus->adapter);
		if (ret)
			goto err;
719 720
	}

721
	intel_i2c_reset(dev_priv);
722 723 724 725

	return 0;

err:
726
	while (pin--) {
727
		if (!intel_gmbus_is_valid_pin(dev_priv, pin))
728 729 730
			continue;

		bus = &dev_priv->gmbus[pin];
731 732 733 734 735
		i2c_del_adapter(&bus->adapter);
	}
	return ret;
}

736
struct i2c_adapter *intel_gmbus_get_adapter(struct drm_i915_private *dev_priv,
737
					    unsigned int pin)
738
{
739
	if (WARN_ON(!intel_gmbus_is_valid_pin(dev_priv, pin)))
740 741 742
		return NULL;

	return &dev_priv->gmbus[pin].adapter;
743 744
}

C
Chris Wilson 已提交
745 746 747 748
void intel_gmbus_set_speed(struct i2c_adapter *adapter, int speed)
{
	struct intel_gmbus *bus = to_intel_gmbus(adapter);

749
	bus->reg0 = (bus->reg0 & ~(0x3 << 8)) | speed;
C
Chris Wilson 已提交
750 751 752 753 754
}

void intel_gmbus_force_bit(struct i2c_adapter *adapter, bool force_bit)
{
	struct intel_gmbus *bus = to_intel_gmbus(adapter);
755 756 757
	struct drm_i915_private *dev_priv = bus->dev_priv;

	mutex_lock(&dev_priv->gmbus_mutex);
C
Chris Wilson 已提交
758

759 760 761 762
	bus->force_bit += force_bit ? 1 : -1;
	DRM_DEBUG_KMS("%sabling bit-banging on %s. force bit now %d\n",
		      force_bit ? "en" : "dis", adapter->name,
		      bus->force_bit);
763 764

	mutex_unlock(&dev_priv->gmbus_mutex);
C
Chris Wilson 已提交
765 766
}

767
void intel_teardown_gmbus(struct drm_i915_private *dev_priv)
J
Jesse Barnes 已提交
768
{
769 770 771 772
	struct intel_gmbus *bus;
	unsigned int pin;

	for (pin = 0; pin < ARRAY_SIZE(dev_priv->gmbus); pin++) {
773
		if (!intel_gmbus_is_valid_pin(dev_priv, pin))
774
			continue;
775

776
		bus = &dev_priv->gmbus[pin];
777 778
		i2c_del_adapter(&bus->adapter);
	}
J
Jesse Barnes 已提交
779
}