intel_i2c.c 17.4 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
};

J
Jani Nikula 已提交
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
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];
	else
		return &gmbus_pins[pin];
}

68 69 70
bool intel_gmbus_is_valid_pin(struct drm_i915_private *dev_priv,
			      unsigned int pin)
{
J
Jani Nikula 已提交
71 72 73 74 75 76 77 78
	unsigned int size;

	if (IS_BROXTON(dev_priv))
		size = ARRAY_SIZE(gmbus_pins_bxt);
	else
		size = ARRAY_SIZE(gmbus_pins);

	return pin < size && get_gmbus_pin(dev_priv, pin)->reg;
79 80
}

81 82
/* Intel GPIO access functions */

J
Jean Delvare 已提交
83
#define I2C_RISEFALL_TIME 10
84

C
Chris Wilson 已提交
85 86 87 88 89 90
static inline struct intel_gmbus *
to_intel_gmbus(struct i2c_adapter *i2c)
{
	return container_of(i2c, struct intel_gmbus, adapter);
}

91 92
void
intel_i2c_reset(struct drm_device *dev)
93 94
{
	struct drm_i915_private *dev_priv = dev->dev_private;
95

96
	I915_WRITE(dev_priv->gpio_mmio_base + GMBUS0, 0);
97
	I915_WRITE(dev_priv->gpio_mmio_base + GMBUS4, 0);
98 99 100 101
}

static void intel_i2c_quirk_set(struct drm_i915_private *dev_priv, bool enable)
{
102
	u32 val;
103 104

	/* When using bit bashing for I2C, this bit needs to be set to 1 */
105
	if (!IS_PINEVIEW(dev_priv->dev))
106
		return;
107 108

	val = I915_READ(DSPCLK_GATE_D);
109
	if (enable)
110
		val |= DPCUNIT_CLOCK_GATE_DISABLE;
111
	else
112 113
		val &= ~DPCUNIT_CLOCK_GATE_DISABLE;
	I915_WRITE(DSPCLK_GATE_D, val);
114 115
}

116
static u32 get_reserved(struct intel_gmbus *bus)
C
Chris Wilson 已提交
117
{
118
	struct drm_i915_private *dev_priv = bus->dev_priv;
C
Chris Wilson 已提交
119 120 121 122 123
	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))
124
		reserved = I915_READ_NOTRACE(bus->gpio_reg) &
125 126
					     (GPIO_DATA_PULLUP_DISABLE |
					      GPIO_CLOCK_PULLUP_DISABLE);
C
Chris Wilson 已提交
127 128 129 130

	return reserved;
}

J
Jesse Barnes 已提交
131 132
static int get_clock(void *data)
{
133 134 135 136 137 138
	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 已提交
139 140 141 142
}

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

static void set_clock(void *data, int state_high)
{
153 154 155
	struct intel_gmbus *bus = data;
	struct drm_i915_private *dev_priv = bus->dev_priv;
	u32 reserved = get_reserved(bus);
C
Chris Wilson 已提交
156
	u32 clock_bits;
J
Jesse Barnes 已提交
157 158 159 160 161 162

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

164 165
	I915_WRITE_NOTRACE(bus->gpio_reg, reserved | clock_bits);
	POSTING_READ(bus->gpio_reg);
J
Jesse Barnes 已提交
166 167 168 169
}

static void set_data(void *data, int state_high)
{
170 171 172
	struct intel_gmbus *bus = data;
	struct drm_i915_private *dev_priv = bus->dev_priv;
	u32 reserved = get_reserved(bus);
C
Chris Wilson 已提交
173
	u32 data_bits;
J
Jesse Barnes 已提交
174 175 176 177 178 179 180

	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;

181 182
	I915_WRITE_NOTRACE(bus->gpio_reg, reserved | data_bits);
	POSTING_READ(bus->gpio_reg);
J
Jesse Barnes 已提交
183 184
}

185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213
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);
}

214
static void
215
intel_gpio_setup(struct intel_gmbus *bus, unsigned int pin)
216
{
217 218
	struct drm_i915_private *dev_priv = bus->dev_priv;
	struct i2c_algo_bit_data *algo;
219

220
	algo = &bus->bit_algo;
221

J
Jani Nikula 已提交
222 223
	bus->gpio_reg = dev_priv->gpio_mmio_base +
		get_gmbus_pin(dev_priv, pin)->reg;
J
Jesse Barnes 已提交
224

225
	bus->adapter.algo_data = algo;
226 227 228 229
	algo->setsda = set_data;
	algo->setscl = set_clock;
	algo->getsda = get_data;
	algo->getscl = get_clock;
230 231
	algo->pre_xfer = intel_gpio_pre_xfer;
	algo->post_xfer = intel_gpio_post_xfer;
232 233 234
	algo->udelay = I2C_RISEFALL_TIME;
	algo->timeout = usecs_to_jiffies(2200);
	algo->data = bus;
J
Jesse Barnes 已提交
235 236
}

237 238
static int
gmbus_wait_hw_status(struct drm_i915_private *dev_priv,
239 240
		     u32 gmbus2_status,
		     u32 gmbus4_irq_en)
241
{
242
	int i;
243
	int reg_offset = dev_priv->gpio_mmio_base;
244 245 246
	u32 gmbus2 = 0;
	DEFINE_WAIT(wait);

247 248 249
	if (!HAS_GMBUS_IRQ(dev_priv->dev))
		gmbus4_irq_en = 0;

250 251 252 253 254
	/* 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);

255
	for (i = 0; i < msecs_to_jiffies_timeout(50); i++) {
256 257 258
		prepare_to_wait(&dev_priv->gmbus_wait_queue, &wait,
				TASK_UNINTERRUPTIBLE);

259
		gmbus2 = I915_READ_NOTRACE(GMBUS2 + reg_offset);
260 261
		if (gmbus2 & (GMBUS_SATOER | gmbus2_status))
			break;
262

263 264 265 266 267
		schedule_timeout(1);
	}
	finish_wait(&dev_priv->gmbus_wait_queue, &wait);

	I915_WRITE(GMBUS4 + reg_offset, 0);
268 269 270

	if (gmbus2 & GMBUS_SATOER)
		return -ENXIO;
271 272 273
	if (gmbus2 & gmbus2_status)
		return 0;
	return -ETIMEDOUT;
274 275
}

276 277 278 279 280 281
static int
gmbus_wait_idle(struct drm_i915_private *dev_priv)
{
	int ret;
	int reg_offset = dev_priv->gpio_mmio_base;

282
#define C ((I915_READ_NOTRACE(GMBUS2 + reg_offset) & GMBUS_ACTIVE) == 0)
283 284 285 286 287 288 289

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

290 291
	ret = wait_event_timeout(dev_priv->gmbus_wait_queue, C,
				 msecs_to_jiffies_timeout(10));
292 293 294 295 296 297 298 299 300 301

	I915_WRITE(GMBUS4 + reg_offset, 0);

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

302
static int
303 304 305
gmbus_xfer_read_chunk(struct drm_i915_private *dev_priv,
		      unsigned short addr, u8 *buf, unsigned int len,
		      u32 gmbus1_index)
306 307 308 309
{
	int reg_offset = dev_priv->gpio_mmio_base;

	I915_WRITE(GMBUS1 + reg_offset,
310
		   gmbus1_index |
311 312
		   GMBUS_CYCLE_WAIT |
		   (len << GMBUS_BYTE_COUNT_SHIFT) |
313
		   (addr << GMBUS_SLAVE_ADDR_SHIFT) |
314
		   GMBUS_SLAVE_READ | GMBUS_SW_RDY);
315
	while (len) {
316
		int ret;
317 318
		u32 val, loop = 0;

319 320
		ret = gmbus_wait_hw_status(dev_priv, GMBUS_HW_RDY,
					   GMBUS_HW_RDY_EN);
321
		if (ret)
322
			return ret;
323 324 325 326 327 328

		val = I915_READ(GMBUS3 + reg_offset);
		do {
			*buf++ = val & 0xff;
			val >>= 8;
		} while (--len && ++loop < 4);
329
	}
330 331 332 333 334

	return 0;
}

static int
335 336
gmbus_xfer_read(struct drm_i915_private *dev_priv, struct i2c_msg *msg,
		u32 gmbus1_index)
337 338
{
	u8 *buf = msg->buf;
339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363
	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;
364 365 366
	u32 val, loop;

	val = loop = 0;
367 368 369 370
	while (len && loop < 4) {
		val |= *buf++ << (8 * loop++);
		len -= 1;
	}
371 372 373 374

	I915_WRITE(GMBUS3 + reg_offset, val);
	I915_WRITE(GMBUS1 + reg_offset,
		   GMBUS_CYCLE_WAIT |
375 376
		   (chunk_size << GMBUS_BYTE_COUNT_SHIFT) |
		   (addr << GMBUS_SLAVE_ADDR_SHIFT) |
377 378
		   GMBUS_SLAVE_WRITE | GMBUS_SW_RDY);
	while (len) {
379 380
		int ret;

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

		I915_WRITE(GMBUS3 + reg_offset, val);
387

388 389
		ret = gmbus_wait_hw_status(dev_priv, GMBUS_HW_RDY,
					   GMBUS_HW_RDY_EN);
390
		if (ret)
391
			return ret;
392
	}
393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415

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

416 417 418
	return 0;
}

419 420 421 422 423 424 425 426 427 428 429 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
/*
 * 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;
}

459 460 461 462 463 464 465 466
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);
467
	struct drm_i915_private *dev_priv = bus->dev_priv;
468 469
	int i, reg_offset;
	int ret = 0;
470

471
	intel_aux_display_runtime_get(dev_priv);
472 473 474
	mutex_lock(&dev_priv->gmbus_mutex);

	if (bus->force_bit) {
475
		ret = i2c_bit_algo.master_xfer(adapter, msgs, num);
476 477
		goto out;
	}
478

479
	reg_offset = dev_priv->gpio_mmio_base;
480

C
Chris Wilson 已提交
481
	I915_WRITE(GMBUS0 + reg_offset, bus->reg0);
482 483

	for (i = 0; i < num; i++) {
484 485 486 487 488 489
		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 {
490
			ret = gmbus_xfer_write(dev_priv, &msgs[i]);
491
		}
492 493 494 495 496 497

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

498 499
		ret = gmbus_wait_hw_status(dev_priv, GMBUS_HW_WAIT_PHASE,
					   GMBUS_HW_WAIT_EN);
500 501
		if (ret == -ENXIO)
			goto clear_err;
502
		if (ret)
503 504 505
			goto timeout;
	}

506 507 508 509 510 511
	/* 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);

512 513 514 515
	/* 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.
	 */
516
	if (gmbus_wait_idle(dev_priv)) {
517
		DRM_DEBUG_KMS("GMBUS [%s] timed out waiting for idle\n",
518
			 adapter->name);
519 520
		ret = -ETIMEDOUT;
	}
521
	I915_WRITE(GMBUS0 + reg_offset, 0);
522
	ret = ret ?: i;
523
	goto out;
524 525

clear_err:
526 527 528 529
	/*
	 * 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.
530 531 532 533 534 535 536 537
	 *
	 * 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.
538
	 */
539
	ret = -ENXIO;
540
	if (gmbus_wait_idle(dev_priv)) {
541 542
		DRM_DEBUG_KMS("GMBUS [%s] timed out after NAK\n",
			      adapter->name);
543 544
		ret = -ETIMEDOUT;
	}
545

546 547 548 549 550 551
	/* 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);
552
	I915_WRITE(GMBUS0 + reg_offset, 0);
553

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

558
	goto out;
559 560

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

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

569 570
out:
	mutex_unlock(&dev_priv->gmbus_mutex);
571
	intel_aux_display_runtime_put(dev_priv);
572
	return ret;
573 574 575 576
}

static u32 gmbus_func(struct i2c_adapter *adapter)
{
577 578
	return i2c_bit_algo.functionality(adapter) &
		(I2C_FUNC_I2C | I2C_FUNC_SMBUS_EMUL |
579 580 581 582 583 584 585 586 587 588
		/* 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 已提交
589
/**
590 591
 * intel_gmbus_setup - instantiate all Intel i2c GMBuses
 * @dev: DRM device
J
Jesse Barnes 已提交
592
 */
593 594 595
int intel_setup_gmbus(struct drm_device *dev)
{
	struct drm_i915_private *dev_priv = dev->dev_private;
596 597 598
	struct intel_gmbus *bus;
	unsigned int pin;
	int ret;
599

600 601 602
	if (HAS_PCH_NOP(dev))
		return 0;
	else if (HAS_PCH_SPLIT(dev))
603
		dev_priv->gpio_mmio_base = PCH_GPIOA - GPIOA;
604 605
	else if (IS_VALLEYVIEW(dev))
		dev_priv->gpio_mmio_base = VLV_DISPLAY_BASE;
606 607 608
	else
		dev_priv->gpio_mmio_base = 0;

609
	mutex_init(&dev_priv->gmbus_mutex);
610
	init_waitqueue_head(&dev_priv->gmbus_wait_queue);
611

612
	for (pin = 0; pin < ARRAY_SIZE(dev_priv->gmbus); pin++) {
613
		if (!intel_gmbus_is_valid_pin(dev_priv, pin))
614 615 616
			continue;

		bus = &dev_priv->gmbus[pin];
617 618 619 620

		bus->adapter.owner = THIS_MODULE;
		bus->adapter.class = I2C_CLASS_DDC;
		snprintf(bus->adapter.name,
621 622
			 sizeof(bus->adapter.name),
			 "i915 gmbus %s",
J
Jani Nikula 已提交
623
			 get_gmbus_pin(dev_priv, pin)->name);
624 625

		bus->adapter.dev.parent = &dev->pdev->dev;
626
		bus->dev_priv = dev_priv;
627 628 629

		bus->adapter.algo = &gmbus_algorithm;

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

D
Daniel Vetter 已提交
633 634
		/* gmbus seems to be broken on i830 */
		if (IS_I830(dev))
635
			bus->force_bit = 1;
D
Daniel Vetter 已提交
636

637
		intel_gpio_setup(bus, pin);
638 639 640 641

		ret = i2c_add_adapter(&bus->adapter);
		if (ret)
			goto err;
642 643 644 645 646 647 648
	}

	intel_i2c_reset(dev_priv->dev);

	return 0;

err:
649
	while (--pin) {
650
		if (!intel_gmbus_is_valid_pin(dev_priv, pin))
651 652 653
			continue;

		bus = &dev_priv->gmbus[pin];
654 655 656 657 658
		i2c_del_adapter(&bus->adapter);
	}
	return ret;
}

659
struct i2c_adapter *intel_gmbus_get_adapter(struct drm_i915_private *dev_priv,
660
					    unsigned int pin)
661
{
662
	if (WARN_ON(!intel_gmbus_is_valid_pin(dev_priv, pin)))
663 664 665
		return NULL;

	return &dev_priv->gmbus[pin].adapter;
666 667
}

C
Chris Wilson 已提交
668 669 670 671
void intel_gmbus_set_speed(struct i2c_adapter *adapter, int speed)
{
	struct intel_gmbus *bus = to_intel_gmbus(adapter);

672
	bus->reg0 = (bus->reg0 & ~(0x3 << 8)) | speed;
C
Chris Wilson 已提交
673 674 675 676 677 678
}

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

679 680 681 682
	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 已提交
683 684
}

685
void intel_teardown_gmbus(struct drm_device *dev)
J
Jesse Barnes 已提交
686
{
687
	struct drm_i915_private *dev_priv = dev->dev_private;
688 689 690 691
	struct intel_gmbus *bus;
	unsigned int pin;

	for (pin = 0; pin < ARRAY_SIZE(dev_priv->gmbus); pin++) {
692
		if (!intel_gmbus_is_valid_pin(dev_priv, pin))
693
			continue;
694

695
		bus = &dev_priv->gmbus[pin];
696 697
		i2c_del_adapter(&bus->adapter);
	}
J
Jesse Barnes 已提交
698
}