intel_i2c.c 17.8 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 39 40 41
	const char *name;
	int reg;
};

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 },
};

J
Jani Nikula 已提交
59 60 61 62 63 64 65 66 67 68 69 70
static const struct gmbus_pin gmbus_pins_bxt[] = {
	[GMBUS_PIN_1_BXT] = { "dpb", PCH_GPIOB },
	[GMBUS_PIN_2_BXT] = { "dpc", PCH_GPIOC },
	[GMBUS_PIN_3_BXT] = { "misc", PCH_GPIOD },
};

/* pin is expected to be valid */
static const struct gmbus_pin *get_gmbus_pin(struct drm_i915_private *dev_priv,
					     unsigned int pin)
{
	if (IS_BROXTON(dev_priv))
		return &gmbus_pins_bxt[pin];
71 72
	else if (IS_BROADWELL(dev_priv))
		return &gmbus_pins_bdw[pin];
J
Jani Nikula 已提交
73 74 75 76
	else
		return &gmbus_pins[pin];
}

77 78 79
bool intel_gmbus_is_valid_pin(struct drm_i915_private *dev_priv,
			      unsigned int pin)
{
J
Jani Nikula 已提交
80 81 82 83
	unsigned int size;

	if (IS_BROXTON(dev_priv))
		size = ARRAY_SIZE(gmbus_pins_bxt);
84 85
	else if (IS_BROADWELL(dev_priv))
		size = ARRAY_SIZE(gmbus_pins_bdw);
J
Jani Nikula 已提交
86 87 88 89
	else
		size = ARRAY_SIZE(gmbus_pins);

	return pin < size && get_gmbus_pin(dev_priv, pin)->reg;
90 91
}

92 93
/* Intel GPIO access functions */

J
Jean Delvare 已提交
94
#define I2C_RISEFALL_TIME 10
95

C
Chris Wilson 已提交
96 97 98 99 100 101
static inline struct intel_gmbus *
to_intel_gmbus(struct i2c_adapter *i2c)
{
	return container_of(i2c, struct intel_gmbus, adapter);
}

102 103
void
intel_i2c_reset(struct drm_device *dev)
104 105
{
	struct drm_i915_private *dev_priv = dev->dev_private;
106

107
	I915_WRITE(dev_priv->gpio_mmio_base + GMBUS0, 0);
108
	I915_WRITE(dev_priv->gpio_mmio_base + GMBUS4, 0);
109 110 111 112
}

static void intel_i2c_quirk_set(struct drm_i915_private *dev_priv, bool enable)
{
113
	u32 val;
114 115

	/* When using bit bashing for I2C, this bit needs to be set to 1 */
116
	if (!IS_PINEVIEW(dev_priv->dev))
117
		return;
118 119

	val = I915_READ(DSPCLK_GATE_D);
120
	if (enable)
121
		val |= DPCUNIT_CLOCK_GATE_DISABLE;
122
	else
123 124
		val &= ~DPCUNIT_CLOCK_GATE_DISABLE;
	I915_WRITE(DSPCLK_GATE_D, val);
125 126
}

127
static u32 get_reserved(struct intel_gmbus *bus)
C
Chris Wilson 已提交
128
{
129
	struct drm_i915_private *dev_priv = bus->dev_priv;
C
Chris Wilson 已提交
130 131 132 133 134
	struct drm_device *dev = dev_priv->dev;
	u32 reserved = 0;

	/* On most chips, these bits must be preserved in software. */
	if (!IS_I830(dev) && !IS_845G(dev))
135
		reserved = I915_READ_NOTRACE(bus->gpio_reg) &
136 137
					     (GPIO_DATA_PULLUP_DISABLE |
					      GPIO_CLOCK_PULLUP_DISABLE);
C
Chris Wilson 已提交
138 139 140 141

	return reserved;
}

J
Jesse Barnes 已提交
142 143
static int get_clock(void *data)
{
144 145 146 147 148 149
	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 已提交
150 151 152 153
}

static int get_data(void *data)
{
154 155 156 157 158 159
	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 已提交
160 161 162 163
}

static void set_clock(void *data, int state_high)
{
164 165 166
	struct intel_gmbus *bus = data;
	struct drm_i915_private *dev_priv = bus->dev_priv;
	u32 reserved = get_reserved(bus);
C
Chris Wilson 已提交
167
	u32 clock_bits;
J
Jesse Barnes 已提交
168 169 170 171 172 173

	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;
174

175 176
	I915_WRITE_NOTRACE(bus->gpio_reg, reserved | clock_bits);
	POSTING_READ(bus->gpio_reg);
J
Jesse Barnes 已提交
177 178 179 180
}

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

	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;

192 193
	I915_WRITE_NOTRACE(bus->gpio_reg, reserved | data_bits);
	POSTING_READ(bus->gpio_reg);
J
Jesse Barnes 已提交
194 195
}

196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224
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;

	intel_i2c_reset(dev_priv->dev);
	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);
}

225
static void
226
intel_gpio_setup(struct intel_gmbus *bus, unsigned int pin)
227
{
228 229
	struct drm_i915_private *dev_priv = bus->dev_priv;
	struct i2c_algo_bit_data *algo;
230

231
	algo = &bus->bit_algo;
232

J
Jani Nikula 已提交
233 234
	bus->gpio_reg = dev_priv->gpio_mmio_base +
		get_gmbus_pin(dev_priv, pin)->reg;
J
Jesse Barnes 已提交
235

236
	bus->adapter.algo_data = algo;
237 238 239 240
	algo->setsda = set_data;
	algo->setscl = set_clock;
	algo->getsda = get_data;
	algo->getscl = get_clock;
241 242
	algo->pre_xfer = intel_gpio_pre_xfer;
	algo->post_xfer = intel_gpio_post_xfer;
243 244 245
	algo->udelay = I2C_RISEFALL_TIME;
	algo->timeout = usecs_to_jiffies(2200);
	algo->data = bus;
J
Jesse Barnes 已提交
246 247
}

248 249
static int
gmbus_wait_hw_status(struct drm_i915_private *dev_priv,
250 251
		     u32 gmbus2_status,
		     u32 gmbus4_irq_en)
252
{
253
	int i;
254
	int reg_offset = dev_priv->gpio_mmio_base;
255 256 257
	u32 gmbus2 = 0;
	DEFINE_WAIT(wait);

258 259 260
	if (!HAS_GMBUS_IRQ(dev_priv->dev))
		gmbus4_irq_en = 0;

261 262 263 264 265
	/* 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
	 * need to wake up periodically and check that ourselves. */
	I915_WRITE(GMBUS4 + reg_offset, gmbus4_irq_en);

266
	for (i = 0; i < msecs_to_jiffies_timeout(50); i++) {
267 268 269
		prepare_to_wait(&dev_priv->gmbus_wait_queue, &wait,
				TASK_UNINTERRUPTIBLE);

270
		gmbus2 = I915_READ_NOTRACE(GMBUS2 + reg_offset);
271 272
		if (gmbus2 & (GMBUS_SATOER | gmbus2_status))
			break;
273

274 275 276 277 278
		schedule_timeout(1);
	}
	finish_wait(&dev_priv->gmbus_wait_queue, &wait);

	I915_WRITE(GMBUS4 + reg_offset, 0);
279 280 281

	if (gmbus2 & GMBUS_SATOER)
		return -ENXIO;
282 283 284
	if (gmbus2 & gmbus2_status)
		return 0;
	return -ETIMEDOUT;
285 286
}

287 288 289 290 291 292
static int
gmbus_wait_idle(struct drm_i915_private *dev_priv)
{
	int ret;
	int reg_offset = dev_priv->gpio_mmio_base;

293
#define C ((I915_READ_NOTRACE(GMBUS2 + reg_offset) & GMBUS_ACTIVE) == 0)
294 295 296 297 298 299 300

	if (!HAS_GMBUS_IRQ(dev_priv->dev))
		return wait_for(C, 10);

	/* Important: The hw handles only the first bit, so set only one! */
	I915_WRITE(GMBUS4 + reg_offset, GMBUS_IDLE_EN);

301 302
	ret = wait_event_timeout(dev_priv->gmbus_wait_queue, C,
				 msecs_to_jiffies_timeout(10));
303 304 305 306 307 308 309 310 311 312

	I915_WRITE(GMBUS4 + reg_offset, 0);

	if (ret)
		return 0;
	else
		return -ETIMEDOUT;
#undef C
}

313
static int
314 315 316
gmbus_xfer_read_chunk(struct drm_i915_private *dev_priv,
		      unsigned short addr, u8 *buf, unsigned int len,
		      u32 gmbus1_index)
317 318 319 320
{
	int reg_offset = dev_priv->gpio_mmio_base;

	I915_WRITE(GMBUS1 + reg_offset,
321
		   gmbus1_index |
322 323
		   GMBUS_CYCLE_WAIT |
		   (len << GMBUS_BYTE_COUNT_SHIFT) |
324
		   (addr << GMBUS_SLAVE_ADDR_SHIFT) |
325
		   GMBUS_SLAVE_READ | GMBUS_SW_RDY);
326
	while (len) {
327
		int ret;
328 329
		u32 val, loop = 0;

330 331
		ret = gmbus_wait_hw_status(dev_priv, GMBUS_HW_RDY,
					   GMBUS_HW_RDY_EN);
332
		if (ret)
333
			return ret;
334 335 336 337 338 339

		val = I915_READ(GMBUS3 + reg_offset);
		do {
			*buf++ = val & 0xff;
			val >>= 8;
		} while (--len && ++loop < 4);
340
	}
341 342 343 344 345

	return 0;
}

static int
346 347
gmbus_xfer_read(struct drm_i915_private *dev_priv, struct i2c_msg *msg,
		u32 gmbus1_index)
348 349
{
	u8 *buf = msg->buf;
350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374
	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)
{
	int reg_offset = dev_priv->gpio_mmio_base;
	unsigned int chunk_size = len;
375 376 377
	u32 val, loop;

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

	I915_WRITE(GMBUS3 + reg_offset, val);
	I915_WRITE(GMBUS1 + reg_offset,
		   GMBUS_CYCLE_WAIT |
386 387
		   (chunk_size << GMBUS_BYTE_COUNT_SHIFT) |
		   (addr << GMBUS_SLAVE_ADDR_SHIFT) |
388 389
		   GMBUS_SLAVE_WRITE | GMBUS_SW_RDY);
	while (len) {
390 391
		int ret;

392 393 394 395 396 397
		val = loop = 0;
		do {
			val |= *buf++ << (8 * loop);
		} while (--len && ++loop < 4);

		I915_WRITE(GMBUS3 + reg_offset, val);
398

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

	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);

427 428 429
	return 0;
}

430 431 432 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 461 462 463 464 465 466 467 468 469
/*
 * 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)
{
	int reg_offset = dev_priv->gpio_mmio_base;
	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)
		I915_WRITE(GMBUS5 + reg_offset, gmbus5);

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

	/* Clear GMBUS5 after each index transfer */
	if (gmbus5)
		I915_WRITE(GMBUS5 + reg_offset, 0);

	return ret;
}

470 471 472 473 474 475 476 477
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);
478
	struct drm_i915_private *dev_priv = bus->dev_priv;
479 480
	int i, reg_offset;
	int ret = 0;
481

482
	intel_aux_display_runtime_get(dev_priv);
483 484 485
	mutex_lock(&dev_priv->gmbus_mutex);

	if (bus->force_bit) {
486
		ret = i2c_bit_algo.master_xfer(adapter, msgs, num);
487 488
		goto out;
	}
489

490
	reg_offset = dev_priv->gpio_mmio_base;
491

C
Chris Wilson 已提交
492
	I915_WRITE(GMBUS0 + reg_offset, bus->reg0);
493 494

	for (i = 0; i < num; i++) {
495 496 497 498 499 500
		if (gmbus_is_index_read(msgs, i, num)) {
			ret = gmbus_xfer_index_read(dev_priv, &msgs[i]);
			i += 1;  /* set i to the index of the read xfer */
		} else if (msgs[i].flags & I2C_M_RD) {
			ret = gmbus_xfer_read(dev_priv, &msgs[i], 0);
		} else {
501
			ret = gmbus_xfer_write(dev_priv, &msgs[i]);
502
		}
503 504 505 506 507 508

		if (ret == -ETIMEDOUT)
			goto timeout;
		if (ret == -ENXIO)
			goto clear_err;

509 510
		ret = gmbus_wait_hw_status(dev_priv, GMBUS_HW_WAIT_PHASE,
					   GMBUS_HW_WAIT_EN);
511 512
		if (ret == -ENXIO)
			goto clear_err;
513
		if (ret)
514 515 516
			goto timeout;
	}

517 518 519 520 521 522
	/* 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. */
	I915_WRITE(GMBUS1 + reg_offset, GMBUS_CYCLE_STOP | GMBUS_SW_RDY);

523 524 525 526
	/* 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.
	 */
527
	if (gmbus_wait_idle(dev_priv)) {
528
		DRM_DEBUG_KMS("GMBUS [%s] timed out waiting for idle\n",
529
			 adapter->name);
530 531
		ret = -ETIMEDOUT;
	}
532
	I915_WRITE(GMBUS0 + reg_offset, 0);
533
	ret = ret ?: i;
534
	goto out;
535 536

clear_err:
537 538 539 540
	/*
	 * 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.
541 542 543 544 545 546 547 548
	 *
	 * 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.
549
	 */
550
	ret = -ENXIO;
551
	if (gmbus_wait_idle(dev_priv)) {
552 553
		DRM_DEBUG_KMS("GMBUS [%s] timed out after NAK\n",
			      adapter->name);
554 555
		ret = -ETIMEDOUT;
	}
556

557 558 559 560 561 562
	/* 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.
	 */
	I915_WRITE(GMBUS1 + reg_offset, GMBUS_SW_CLR_INT);
	I915_WRITE(GMBUS1 + reg_offset, 0);
563
	I915_WRITE(GMBUS0 + reg_offset, 0);
564

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

569
	goto out;
570 571

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

576
	/* Hardware may not support GMBUS over these pins? Try GPIO bitbanging instead. */
577
	bus->force_bit = 1;
578
	ret = i2c_bit_algo.master_xfer(adapter, msgs, num);
579

580 581
out:
	mutex_unlock(&dev_priv->gmbus_mutex);
582
	intel_aux_display_runtime_put(dev_priv);
583
	return ret;
584 585 586 587
}

static u32 gmbus_func(struct i2c_adapter *adapter)
{
588 589
	return i2c_bit_algo.functionality(adapter) &
		(I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL |
590 591 592 593 594 595 596 597 598 599
		/* 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
};

J
Jesse Barnes 已提交
600
/**
601 602
 * intel_gmbus_setup - instantiate all Intel i2c GMBuses
 * @dev: DRM device
J
Jesse Barnes 已提交
603
 */
604 605 606
int intel_setup_gmbus(struct drm_device *dev)
{
	struct drm_i915_private *dev_priv = dev->dev_private;
607 608 609
	struct intel_gmbus *bus;
	unsigned int pin;
	int ret;
610

611 612 613
	if (HAS_PCH_NOP(dev))
		return 0;
	else if (HAS_PCH_SPLIT(dev))
614
		dev_priv->gpio_mmio_base = PCH_GPIOA - GPIOA;
615 616
	else if (IS_VALLEYVIEW(dev))
		dev_priv->gpio_mmio_base = VLV_DISPLAY_BASE;
617 618 619
	else
		dev_priv->gpio_mmio_base = 0;

620
	mutex_init(&dev_priv->gmbus_mutex);
621
	init_waitqueue_head(&dev_priv->gmbus_wait_queue);
622

623
	for (pin = 0; pin < ARRAY_SIZE(dev_priv->gmbus); pin++) {
624
		if (!intel_gmbus_is_valid_pin(dev_priv, pin))
625 626 627
			continue;

		bus = &dev_priv->gmbus[pin];
628 629 630 631

		bus->adapter.owner = THIS_MODULE;
		bus->adapter.class = I2C_CLASS_DDC;
		snprintf(bus->adapter.name,
632 633
			 sizeof(bus->adapter.name),
			 "i915 gmbus %s",
J
Jani Nikula 已提交
634
			 get_gmbus_pin(dev_priv, pin)->name);
635 636

		bus->adapter.dev.parent = &dev->pdev->dev;
637
		bus->dev_priv = dev_priv;
638 639 640

		bus->adapter.algo = &gmbus_algorithm;

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

D
Daniel Vetter 已提交
644 645
		/* gmbus seems to be broken on i830 */
		if (IS_I830(dev))
646
			bus->force_bit = 1;
D
Daniel Vetter 已提交
647

648
		intel_gpio_setup(bus, pin);
649 650 651 652

		ret = i2c_add_adapter(&bus->adapter);
		if (ret)
			goto err;
653 654 655 656 657 658 659
	}

	intel_i2c_reset(dev_priv->dev);

	return 0;

err:
660
	while (--pin) {
661
		if (!intel_gmbus_is_valid_pin(dev_priv, pin))
662 663 664
			continue;

		bus = &dev_priv->gmbus[pin];
665 666 667 668 669
		i2c_del_adapter(&bus->adapter);
	}
	return ret;
}

670
struct i2c_adapter *intel_gmbus_get_adapter(struct drm_i915_private *dev_priv,
671
					    unsigned int pin)
672
{
673
	if (WARN_ON(!intel_gmbus_is_valid_pin(dev_priv, pin)))
674 675 676
		return NULL;

	return &dev_priv->gmbus[pin].adapter;
677 678
}

C
Chris Wilson 已提交
679 680 681 682
void intel_gmbus_set_speed(struct i2c_adapter *adapter, int speed)
{
	struct intel_gmbus *bus = to_intel_gmbus(adapter);

683
	bus->reg0 = (bus->reg0 & ~(0x3 << 8)) | speed;
C
Chris Wilson 已提交
684 685 686 687 688 689
}

void intel_gmbus_force_bit(struct i2c_adapter *adapter, bool force_bit)
{
	struct intel_gmbus *bus = to_intel_gmbus(adapter);

690 691 692 693
	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);
C
Chris Wilson 已提交
694 695
}

696
void intel_teardown_gmbus(struct drm_device *dev)
J
Jesse Barnes 已提交
697
{
698
	struct drm_i915_private *dev_priv = dev->dev_private;
699 700 701 702
	struct intel_gmbus *bus;
	unsigned int pin;

	for (pin = 0; pin < ARRAY_SIZE(dev_priv->gmbus); pin++) {
703
		if (!intel_gmbus_is_valid_pin(dev_priv, pin))
704
			continue;
705

706
		bus = &dev_priv->gmbus[pin];
707 708
		i2c_del_adapter(&bus->adapter);
	}
J
Jesse Barnes 已提交
709
}