linux-stable/drivers/gpu/drm/tegra
Thierry Reding 87904c3e82 drm/tegra: dsi: Enhance runtime power management
The MIPI DSI output on Tegra SoCs requires some external logic to
calibrate the MIPI pads before a video signal can be transmitted. This
MIPI calibration logic requires to be powered on while the MIPI pads are
being used, which is currently done as part of the DSI driver's probe
implementation.

This is suboptimal because it will leave the MIPI calibration logic
powered up even if the DSI output is never used.

On Tegra114 and earlier this behaviour also causes the driver to hang
while trying to power up the MIPI calibration logic because the power
partition that contains the MIPI calibration logic will be powered on
by the display controller at output pipeline configuration time. Thus
the power up sequence for the MIPI calibration logic happens before
it's power partition is guaranteed to be enabled.

Fix this by splitting up the API into a request/free pair of functions
that manage the runtime dependency between the DSI and the calibration
modules (no registers are accessed) and a set of enable, calibrate and
disable functions that program the MIPI calibration logic at points in
time where the power partition is really enabled.

While at it, make sure that the runtime power management also works in
ganged mode, which is currently also broken.

Reported-by: Jonathan Hunter <jonathanh@nvidia.com>
Tested-by: Jonathan Hunter <jonathanh@nvidia.com>
Signed-off-by: Thierry Reding <treding@nvidia.com>
2016-08-24 15:58:57 +02:00
..
dc.c drm/tegra: dc: Implement runtime PM 2016-07-04 11:35:46 +02:00
dc.h drm/tegra: sor: Add HDMI support 2015-08-13 13:49:37 +02:00
dpaux.c drm/tegra: dpaux: Add pinctrl support 2016-06-30 22:13:14 +02:00
dpaux.h drm/tegra: dpaux: Configure pads as I2C by default 2015-08-13 13:47:47 +02:00
drm.c drm/tegra: Changes for v4.8-rc1 2016-07-16 11:23:50 +10:00
drm.h drm: tegra: Rely on the default ->best_encoder() behavior 2016-06-10 17:24:48 +02:00
dsi.c drm/tegra: dsi: Enhance runtime power management 2016-08-24 15:58:57 +02:00
dsi.h drm/tegra: dsi: Add Tegra210 support 2015-08-13 13:47:45 +02:00
fb.c drm/tegra: Delete an unnecessary check before the function call "vunmap" 2016-07-18 09:11:30 +02:00
gem.c drm: Remove unused drm_device from drm_gem_object_lookup() 2016-05-17 08:47:30 +02:00
gem.h drm/tegra: gem: Use more consistent data types 2014-11-13 16:18:32 +01:00
gr2d.c drm/tegra: add MODULE_DEVICE_TABLEs 2014-08-04 10:07:39 +02:00
gr2d.h
gr3d.c ARM: SoC cleanups for 3.17 2014-08-08 11:00:26 -07:00
gr3d.h
hdmi.c drm/tegra: Changes for v4.8-rc1 2016-07-16 11:23:50 +10:00
hdmi.h drm/tegra: hdmi: Enable audio over HDMI 2016-07-04 11:34:31 +02:00
Kconfig drm/tegra: Remove local fbdev emulation Kconfig option 2015-11-24 11:41:50 +01:00
Makefile drm/tegra: Remove host1x drm_bus implementation 2014-06-05 23:14:46 +02:00
mipi-phy.c drm/tegra: dsi: Adjust D-PHY timing 2015-01-27 10:14:40 +01:00
mipi-phy.h drm/tegra: Relicense under GPL v2 2014-04-04 09:12:51 +02:00
output.c drm/tegra: Changes for v4.8-rc1 2016-07-16 11:23:50 +10:00
rgb.c drm: tegra: Rely on the default ->best_encoder() behavior 2016-06-10 17:24:48 +02:00
sor.c drm/tegra: Changes for v4.8-rc1 2016-07-16 11:23:50 +10:00
sor.h drm/tegra: sor: Do not support deep color modes 2016-07-04 11:33:21 +02:00