History

Merge tag 'drm-intel-fixes-2015-06-11' of git://anongit.freedesktop.org/drm-intel into drm-fixes

Fix for the regression Linus called out, and another for probing dongles. * tag 'drm-intel-fixes-2015-06-11' of git://anongit.freedesktop.org/drm-intel: drm/i915: Fix DDC probe for passive adapters drm/i915: Properly initialize SDVO analog connectors

Dave Airlie committed 11 years ago

Commit 6e2eb002 parents 950c370 3f5f1552 files · +18 −4Browse files

Unified · Split

2 files
  1. drivers/gpu/drm/i915/intel_i2c.c +17 −3
  2. drivers/gpu/drm/i915/intel_sdvo.c +1 −1
drivers/gpu/drm/i915/intel_i2c.c+17−3
@@ -435,7 +435,7 @@ gmbus_xfer(struct i2c_adapter *adapter, · 434 unmodified lines
435435 struct intel_gmbus,
436436 adapter);
437437 struct drm_i915_private *dev_priv = bus->dev_priv;
438− int i, reg_offset;
438+ int i = 0, inc, try = 0, reg_offset;
439439 int ret = 0;
440440
441441 intel_aux_display_runtime_get(dev_priv);
@@ -448,12 +448,14 @@ gmbus_xfer(struct i2c_adapter *adapter, · 6 unmodified lines
448448
449449 reg_offset = dev_priv->gpio_mmio_base;
450450
451+retry:
451452 I915_WRITE(GMBUS0 + reg_offset, bus->reg0);
452453
453− for (i = 0; i < num; i++) {
454+ for (; i < num; i += inc) {
455+ inc = 1;
454456 if (gmbus_is_index_read(msgs, i, num)) {
455457 ret = gmbus_xfer_index_read(dev_priv, &msgs[i]);
456− i += 1; /* set i to the index of the read xfer */
458+ inc = 2; /* an index read is two msgs */
457459 } else if (msgs[i].flags & I2C_M_RD) {
458460 ret = gmbus_xfer_read(dev_priv, &msgs[i], 0);
459461 } else {
@@ -525,6 +527,18 @@ clear_err: · 65 unmodified lines
525527 adapter->name, msgs[i].addr,
526528 (msgs[i].flags & I2C_M_RD) ? 'r' : 'w', msgs[i].len);
527529
530+ /*
531+ * Passive adapters sometimes NAK the first probe. Retry the first
532+ * message once on -ENXIO for GMBUS transfers; the bit banging algorithm
533+ * has retries internally. See also the retry loop in
534+ * drm_do_probe_ddc_edid, which bails out on the first -ENXIO.
535+ */
536+ if (ret == -ENXIO && i == 0 && try++ == 0) {
537+ DRM_DEBUG_KMS("GMBUS [%s] NAK on first message, retry\n",
538+ adapter->name);
539+ goto retry;
540+ }
541+
528542 goto out;
529543
530544 timeout:
drivers/gpu/drm/i915/intel_sdvo.c+1−1
@@ -2550,7 +2550,7 @@ intel_sdvo_analog_init(struct intel_sdvo *intel_sdvo, int device) · 2549 unmodified lines
25502550
25512551 DRM_DEBUG_KMS("initialising analog device %d\n", device);
25522552
2553− intel_sdvo_connector = kzalloc(sizeof(*intel_sdvo_connector), GFP_KERNEL);
2553+ intel_sdvo_connector = intel_sdvo_connector_alloc();
25542554 if (!intel_sdvo_connector)
25552555 return false;
25562556

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t