linux-uconsole/drivers
Jani Nikula a0e4eeff39 drm/i915: Fix DDC probe for passive adapters
commit 3f5f1554ee upstream.

Passive DP->DVI/HDMI dongles on DP++ ports show up to the system as HDMI
devices, as they do not have a sink device in them to respond to any AUX
traffic. When probing these dongles over the DDC, sometimes they will
NAK the first attempt even though the transaction is valid and they
support the DDC protocol. The retry loop inside of
drm_do_probe_ddc_edid() would normally catch this case and try the
transaction again, resulting in success.

That, however, was thwarted by the fix for [1]:

commit 9292f37e1f
Author: Eugeni Dodonov <eugeni.dodonov@intel.com>
Date:   Thu Jan 5 09:34:28 2012 -0200

    drm: give up on edid retries when i2c bus is not responding

This added code to exit immediately if the return code from the
i2c_transfer function was -ENXIO in order to reduce the amount of time
spent in waiting for unresponsive or disconnected devices. That was
possible because the underlying i2c bit banging algorithm had retries of
its own (which, of course, were part of the reason for the bug the
commit fixes).

Since its introduction in

commit f899fc64cd
Author: Chris Wilson <chris@chris-wilson.co.uk>
Date:   Tue Jul 20 15:44:45 2010 -0700

    drm/i915: use GMBUS to manage i2c links

we've been flipping back and forth enabling the GMBUS transfers, but
we've settled since then. The GMBUS implementation does not do any
retries, however, bailing out of the drm_do_probe_ddc_edid() retry loop
on first encounter of -ENXIO. This, combined with Eugeni's commit, broke
the retry on -ENXIO.

Retry GMBUS once on -ENXIO on first message to mitigate the issues with
passive adapters.

This patch is based on the work, and commit message, by Todd Previte
<tprevite@gmail.com>.

[1] https://bugs.freedesktop.org/show_bug.cgi?id=41059

v2: Don't retry if using bit banging.

v3: Move retry within gmbux_xfer, retry only on first message.

v4: Initialize GMBUS0 on retry (Ville).

v5: Take index reads into account (Ville).

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=85924
Cc: Todd Previte <tprevite@gmail.com>
Tested-by: Oliver Grafe <oliver.grafe@ge.com> (v2)
Tested-by: Jim Bride <jim.bride@linux.intel.com>
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2015-06-22 16:55:54 -07:00
..
accessibility
acpi ACPI / init: Fix the ordering of acpi_reserve_resources() 2015-06-05 23:20:00 -07:00
amba
ata pata_octeon_cf: fix broken build 2015-06-22 16:55:54 -07:00
atm atm: idt77252: fix dev refcnt leak 2013-12-08 07:29:25 -08:00
auxdisplay
base driver core: Fix unbalanced device reference in drivers_probe 2015-01-16 06:59:01 -08:00
bcma
block rbd: end I/O the entire obj_request on error 2015-05-13 05:15:41 -07:00
bluetooth Bluetooth: Ignore isochronous endpoints for Intel USB bootloader 2015-04-29 10:33:59 +02:00
bus bus: mvebu-mbus: fix support of MBus window 13 2015-01-29 17:40:56 -08:00
cdrom
char tpm/ibmvtpm: Additional LE support for tpm_ibmvtpm_send 2015-03-26 15:00:58 +01:00
clk clk: sunxi: Support factor clocks with N factor starting not from 0 2015-03-18 13:22:34 +01:00
clocksource clocksource: exynos_mct: Fix bitmask regression for exynos4_mct_write 2015-01-29 17:40:56 -08:00
connector net: Use netlink_ns_capable to verify the permisions of netlink messages 2014-06-26 15:12:37 -04:00
cpufreq cpufreq: speedstep-smi: enable interrupts when waiting 2015-03-06 14:40:48 -08:00
cpuidle cpuidle: Check the result of cpuidle_get_driver() against NULL 2014-04-14 06:42:15 -07:00
crypto crypto: prefix module autoloading with "crypto-" 2015-01-29 17:40:57 -08:00
dca
devfreq
dio
dma dmaengine: omap-dma: Fix memory leak when terminating running transfer 2015-04-19 10:10:49 +02:00
edac sb_edac: avoid INTERNAL ERROR message in EDAC with unspecified channel 2015-04-29 10:34:01 +02:00
eisa Revert "EISA: Initialize device before its resources" 2014-02-13 13:47:59 -08:00
extcon extcon: max77693: Fix two NULL pointer exceptions on missing pdata 2014-07-06 18:54:15 -07:00
firewire firewire: cdev: prevent kernel stack leaking into ioctl arguments 2014-11-21 09:22:53 -08:00
firmware efi-pstore: Make efi-pstore return a unique id 2015-02-05 22:35:40 -08:00
gpio gpio: sysfs: fix memory leaks and device hotplug 2015-05-17 09:51:32 -07:00
gpu drm/i915: Fix DDC probe for passive adapters 2015-06-22 16:55:54 -07:00
hid HID: fixup the conflicting keyboard mappings quirk 2015-03-18 13:22:35 +01:00
hsi
hv Drivers: hv: vmbus: Don't wait after requesting offers 2015-05-13 05:15:43 -07:00
hwmon hwmon: (ntc_thermistor) Ensure iio channel is of type IIO_VOLTAGE 2015-06-05 23:19:54 -07:00
hwspinlock
i2c i2c: core: Export bus recovery functions 2015-05-06 21:56:27 +02:00
ide
idle x86 idle: Repair large-server 50-watt idle-power regression 2014-01-09 12:24:21 -08:00
iio iio: adis16400: Compute the scan mask from channel indices 2015-06-22 16:55:52 -07:00
infiniband IB/mlx4: Fix WQE LSO segment calculation 2015-05-06 21:56:27 +02:00
input Input: elantech - fix detection of touchpads where the revision matches a known rate 2015-06-22 16:55:52 -07:00
iommu iommu/vt-d: Fix an off-by-one bug in __domain_mapping() 2015-01-16 06:59:01 -08:00
ipack
irqchip irqchip: gic: Fix core ID calculation when topology is read from DT 2014-07-28 08:00:06 -07:00
isdn isdnloop: several buffer overflows 2014-04-14 06:42:18 -07:00
leds leds: leds-pwm: properly clean up after probe failure 2014-06-07 13:25:34 -07:00
lguest lguest: fix out-by-one error in address checking. 2015-06-05 23:19:54 -07:00
macintosh
mailbox
md md/raid5: don't record new size if resize_stripes fails. 2015-06-05 23:19:59 -07:00
media stk1160: Make sure current buffer is released 2015-05-06 21:56:27 +02:00
memory
memstick memstick: mspro_block: add missing curly braces 2015-05-06 21:56:28 +02:00
message mptfusion: enable no_write_same for vmware scsi disks 2014-10-30 09:35:10 -07:00
mfd mfd: tc6393xb: Fail ohci suspend if full state restore is required 2015-01-08 09:58:15 -08:00
misc mei: bus: fix possible boundaries violation 2014-11-21 09:22:55 -08:00
mmc mmc: atmel-mci: fix bad variable type for clkdiv 2015-06-05 23:19:57 -07:00
mtd UBI: fix soft lockup in ubi_check_volume() 2015-05-13 05:15:43 -07:00
net xen: netback: read hotplug script once at start of day. 2015-06-22 16:55:51 -07:00
nfc NFC: microread: Potential overflows in microread_target_discovered() 2014-10-05 14:54:12 -07:00
ntb NTB: Correct debugfs to work with more than 1 NTB Device 2013-11-13 12:05:35 +09:00
nubus
of of/base: Fix PowerPC address parsing hack 2014-12-06 15:05:47 -08:00
oprofile
parisc
parport drivers: parport: Kconfig: exclude arm64 for PARPORT_PC 2015-05-06 21:56:26 +02:00
pci PCI: Fix infinite loop with ROM image of size 0 2015-03-06 14:40:48 -08:00
pcmcia
pinctrl pinctrl: Don't just pretend to protect pinctrl_maps, do it for real 2015-05-17 09:51:33 -07:00
platform hp_accel: Add support for HP ZBook 15 2015-01-27 07:52:31 -08:00
pnp PNP / ACPI: proper handling of ACPI IO/Memory resource parsing failures 2014-03-23 21:38:22 -07:00
power power_supply: lp8788-charger: Fix leaked power supply on probe fail 2015-05-06 21:56:21 +02:00
pps
ps3
ptp
pwm
rapidio rapidio/tsi721_dma: fix failure to obtain transaction descriptor 2014-08-07 14:30:25 -07:00
regulator regulator: core: Fix enable GPIO reference counting 2015-03-26 15:00:59 +01:00
remoteproc
reset
rpmsg
rtc rtc: rtc-at91rm9200: fix infinite wait for ACKUPD irq 2014-06-26 15:12:37 -04:00
s390 crypto: prefix module autoloading with "crypto-" 2015-01-29 17:40:57 -08:00
sbus bbc-i2c: Fix BBC I2C envctrl on SunBlade 2000 2014-08-14 09:24:16 +08:00
scsi 3w-sas: fix command completion race 2015-05-13 05:15:42 -07:00
sfi
sh
sn
spi spi: spidev: fix possible arithmetic overflow for multi-transfer message 2015-05-06 21:56:21 +02:00
ssb
ssbi
staging ozwpan: unchecked signed subtraction leads to DoS 2015-06-22 16:55:54 -07:00
target target/pscsi: Don't leak scsi_host if hba is VIRTUAL_HOST 2015-06-05 23:19:55 -07:00
tc
thermal
tty xen/console: Update console event channel on resume 2015-05-17 09:51:32 -07:00
uio Fix a few incorrectly checked [io_]remap_pfn_range() calls 2013-11-13 12:05:33 +09:00
usb USB: serial: ftdi_sio: Add support for a Motion Tracker Development Board 2015-06-22 16:55:53 -07:00
uwb
vfio vfio-pci: Fix the check on pci device type in vfio_pci_probe() 2015-01-27 07:52:32 -08:00
vhost vhost-scsi: Add missing virtio-scsi -> TCM attribute conversion 2015-02-05 22:35:40 -08:00
video video: vgacon: Don't build on arm64 2015-05-06 21:56:25 +02:00
virt
virtio virtio_pci: fix virtio spec compliance on restore 2014-11-14 08:47:55 -08:00
vlynq
vme VME: Correct read/write alignment algorithm 2014-02-22 12:41:28 -08:00
w1 w1: fix w1_send_slave dropping a slave id 2014-05-06 07:55:28 -07:00
watchdog watchdog: ath79_wdt: avoid spurious restarts on AR934x 2014-07-06 18:54:14 -07:00
xen xen-pciback: limit guest control of command register 2015-03-26 15:00:59 +01:00
zorro
Kconfig
Makefile