linux/drivers/gpu/drm/tegra
Thierry Reding e2215321ff drm/tegra: Implement race-free hotplug detection
A race condition currently exists on Tegra, where it can happen that a
monitor attached via HDMI isn't detected during the initial FB helper
setup, but the hotplug event happens too early to be processed by the
poll helpers because they haven't been initialized yet. This happens
because on some boards the HDMI driver can control the regulator that
supplies the +5V pin on the HDMI connector. Therefore depending on the
timing between the initialization of the HDMI driver and the rest of
DRM, it's possible that the monitor returns the hotplug signal right
within the window where we would miss it.

Unfortunately, drm_kms_helper_poll_init() will wreak havoc when called
before at least some parts of the FB helpers have been set up.

This commit fixes this by splitting out the minimum of initialization
required to make drm_kms_helper_poll_init() work into a separate
function that can be called early. It is then safe to move all of the
poll helper initialization to an earlier point in time (before the
HDMI output driver has a chance to enable the +5V supply). That way if
the hotplug signal is returned before the initial FB helper setup, the
monitor will be forcefully detected at that point, and if the hotplug
signal is returned after that it will be properly handled by the poll
helpers.

Signed-off-by: Thierry Reding <treding@nvidia.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
2014-07-08 11:31:36 +10:00
..
dc.c drm/tegra: Add hardware cursor support 2014-06-05 23:14:47 +02:00
dc.h drm/tegra: Add hardware cursor support 2014-06-05 23:14:47 +02:00
dpaux.c drm/tegra: dp - Mark the connector as hotplug capable 2014-06-05 23:14:48 +02:00
dpaux.h drm/tegra: dp: Support address-only I2C-over-AUX transactions 2014-04-08 16:12:36 +02:00
drm.c drm/tegra: Implement race-free hotplug detection 2014-07-08 11:31:36 +10:00
drm.h drm/tegra: Implement race-free hotplug detection 2014-07-08 11:31:36 +10:00
dsi.c drm/tegra: Remove host1x drm_bus implementation 2014-06-05 23:14:46 +02:00
dsi.h drm/tegra: dsi - Use internal pixel format 2014-06-05 23:09:26 +02:00
fb.c drm/tegra: Implement race-free hotplug detection 2014-07-08 11:31:36 +10:00
gem.c drm/tegra: gem - Make tegra_bo_import() static 2014-06-05 23:09:36 +02:00
gem.h drm/tegra: Relicense under GPL v2 2014-04-04 09:12:51 +02:00
gr2d.c drm/tegra: Remove host1x drm_bus implementation 2014-06-05 23:14:46 +02:00
gr2d.h drm/tegra: Use symbolic names for gr2d registers 2013-10-31 09:55:44 +01:00
gr3d.c drm/tegra: Remove host1x drm_bus implementation 2014-06-05 23:14:46 +02:00
gr3d.h drm/tegra: Add 3D support 2013-10-31 09:55:45 +01:00
hdmi.c drm/tegra: Remove host1x drm_bus implementation 2014-06-05 23:14:46 +02:00
hdmi.h drm/tegra: hdmi - Disable LVDS mode 2014-06-05 23:09:25 +02:00
Kconfig drm/tegra: Make legacy fbdev support optional 2013-12-20 15:56:05 +01:00
Makefile drm/tegra: Remove host1x drm_bus implementation 2014-06-05 23:14:46 +02:00
mipi-phy.c drm/tegra: Relicense under GPL v2 2014-04-04 09:12:51 +02:00
mipi-phy.h drm/tegra: Relicense under GPL v2 2014-04-04 09:12:51 +02:00
output.c drm: add register and unregister functions for connectors 2014-06-19 08:55:28 +02:00
rgb.c drm/tegra: dc - Compute shift clock divider in output drivers 2014-06-05 23:09:33 +02:00
sor.c drm/tegra: sor - Remove obsolete comment 2014-06-09 12:02:51 +02:00
sor.h drm/tegra: sor - Add CRC debugfs support 2014-06-05 23:09:17 +02:00