linux-stable/drivers/gpu/drm
Laurent Pinchart b0e583e5b6 drm: bridge: dw-hdmi: Fix the PHY power down sequence
The PHY requires us to wait for the PHY to switch to low power mode
after deasserting TXPWRON and before asserting PDDQ in the power down
sequence, otherwise power down will fail.

The PHY power down can be monitored though the TX_READY bit, available
through I2C in the PHY registers, or the TX_PHY_LOCK bit, available
through the HDMI TX registers. As the two are equivalent, let's pick the
easier solution of polling the TX_PHY_LOCK bit.

The power down code is currently duplicated in multiple places. To avoid
spreading multiple calls to a TX_PHY_LOCK poll function, we have to
refactor the power down code and group it all in a single function.

Tests showed that one poll iteration was enough for TX_PHY_LOCK to
become low, without requiring any additional delay. Retrying the read
five times with a 1ms to 2ms delay between each attempt should thus be
more than enough.

Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Tested-by: Neil Armstrong <narmstrong@baylibre.com>
Reviewed-by: Jose Abreu <joabreu@synopsys.com>
Signed-off-by: Archit Taneja <architt@codeaurora.org>
Link: http://patchwork.freedesktop.org/patch/msgid/20170305233539.11898-1-laurent.pinchart+renesas@ideasonboard.com
2017-03-10 14:24:50 +05:30
..
amd Merge airlied/drm-next into drm-misc-next 2017-02-26 21:34:42 +01:00
arc drm: remove drm_vblank_no_hw_counter assignment from driver code 2017-02-07 21:43:55 +01:00
arm drm: Constify drm_mode_config atomic helper private pointer 2017-02-12 12:05:23 +01:00
armada drm/armada: Remove armada_drm_debugfs_cleanup() 2017-03-01 16:09:51 +01:00
ast Merge airlied/drm-next into drm-misc-next 2017-02-26 21:34:42 +01:00
atmel-hlcdc drm/atmel-hlcdc: Simplify the HLCDC layer logic 2017-02-28 11:57:56 +01:00
bochs drm/fb-helper: Automatically clean up fb_info 2017-02-07 21:36:28 +01:00
bridge drm: bridge: dw-hdmi: Fix the PHY power down sequence 2017-03-10 14:24:50 +05:30
cirrus drm/fb-helper: Automatically clean up fb_info 2017-02-07 21:36:28 +01:00
etnaviv drm: Improve drm_mm search (and fix topdown allocation) with rbtrees 2017-02-03 11:10:32 +01:00
exynos Merge airlied/drm-next into drm-misc-next 2017-02-26 21:34:42 +01:00
fsl-dcu Merge airlied/drm-next into drm-misc-next 2017-02-26 21:34:42 +01:00
gma500 gpu: drm: drivers: Convert printk(KERN_<LEVEL> to pr_<level> 2017-03-01 09:44:11 +01:00
hisilicon drm: kirin: use vblank hooks in struct drm_crtc_funcs 2017-02-21 11:17:45 -05:00
i2c
i810
i915 Revert "drm/i915: Implement Link Rate fallback on Link training failure" 2017-03-02 09:17:16 +01:00
imx Merge airlied/drm-next into drm-misc-next 2017-02-26 21:34:42 +01:00
lib
mediatek drm: mediatek: use vblank hooks in struct drm_crtc_funcs 2017-02-21 11:17:54 -05:00
meson drm: meson: use vblank hooks in struct drm_crtc_funcs 2017-02-09 16:08:09 +08:00
mga
mgag200 gpu: drm: drivers: Convert printk(KERN_<LEVEL> to pr_<level> 2017-03-01 09:44:11 +01:00
msm drm/msm: Remove msm_debugfs_cleanup() 2017-03-08 11:24:45 +01:00
mxsfb drm: remove drm_vblank_no_hw_counter assignment from driver code 2017-02-07 21:43:55 +01:00
nouveau drm/nouveau: Remove nouveau_drm_debugfs_cleanup() 2017-03-01 16:09:52 +01:00
omapdrm gpu: drm: drivers: Convert printk(KERN_<LEVEL> to pr_<level> 2017-03-01 09:44:11 +01:00
panel
qxl drm/qxl: Remove qxl_debugfs_remove_files() 2017-03-09 09:01:00 +01:00
r128 gpu: drm: drivers: Convert printk(KERN_<LEVEL> to pr_<level> 2017-03-01 09:44:11 +01:00
radeon Merge airlied/drm-next into drm-misc-next 2017-02-26 21:34:42 +01:00
rcar-du drm: rcar-du: use vblank hooks in struct drm_crtc_funcs 2017-02-09 16:08:44 +08:00
rockchip drm/rockchip: Fix link error when CONFIG_DRM_ANALOGIX_DP undefined 2017-03-06 18:18:03 -05:00
savage
selftests drm: kselftest: fix spelling mistake: "misalinged" -> "misaligned" 2017-02-26 22:54:47 +01:00
shmobile drm: shmobile: use vblank hooks in struct drm_crtc_funcs 2017-02-09 16:10:16 +08:00
sis drm: Improve drm_mm search (and fix topdown allocation) with rbtrees 2017-02-03 11:10:32 +01:00
sti drm: sti: make driver use devm_of_platform_populate() 2017-02-27 17:20:29 +01:00
sun4i drm: sun4i: use vblank hooks in struct drm_crtc_funcs 2017-02-09 16:10:52 +08:00
tdfx
tegra drm: tegra: use vblank hooks in struct drm_crtc_funcs 2017-02-09 16:11:31 +08:00
tilcdc drm: tilcdc: use vblank hooks in struct drm_crtc_funcs 2017-02-09 16:12:01 +08:00
tinydrm drm/tinydrm: fix semicolon.cocci warnings 2017-02-26 22:55:41 +01:00
ttm gpu: drm: drivers: Convert printk(KERN_<LEVEL> to pr_<level> 2017-03-01 09:44:11 +01:00
udl drm/fb-helper: Automatically clean up fb_info 2017-02-07 21:36:28 +01:00
vc4 drm/vc4: Fix OOPSes from trying to cache a partially constructed BO. 2017-03-02 09:57:23 -08:00
vgem
via drm/via: use get_user_pages_unlocked() 2017-02-28 10:00:50 +01:00
virtio drm: virtio: use kmem_cache 2017-03-07 07:09:18 +01:00
vmwgfx gpu: drm: drivers: Convert printk(KERN_<LEVEL> to pr_<level> 2017-03-01 09:44:11 +01:00
zte drm: zte: use vblank hooks in struct drm_crtc_funcs 2017-02-09 16:13:20 +08:00
ati_pcigart.c
drm_agpsupport.c
drm_atomic.c drm/atomic: Convert get_existing_state callers to get_old/new_state, v4. 2017-03-06 11:43:05 +01:00
drm_atomic_helper.c drm/atomic: Convert get_existing_state callers to get_old/new_state, v4. 2017-03-06 11:43:05 +01:00
drm_auth.c
drm_blend.c drm/blend: Use new atomic iterator macros. 2017-03-06 11:43:43 +01:00
drm_bridge.c
drm_bufs.c
drm_cache.c gpu: drm: core: Convert printk(KERN_<LEVEL> to pr_<level> 2017-02-28 14:32:19 +01:00
drm_color_mgmt.c drm/color: un-inline drm_color_lut_extract() 2017-01-31 15:31:58 +02:00
drm_connector.c drm: Rename connector list iterator API 2017-02-28 16:16:48 +01:00
drm_context.c
drm_crtc.c drm: Introduce drm_framebuffer_{get,put}() 2017-02-28 16:15:03 +01:00
drm_crtc_helper.c drm: Rename connector list iterator API 2017-02-28 16:16:48 +01:00
drm_crtc_helper_internal.h
drm_crtc_internal.h drm: Rename drm_mode_object_get() 2017-02-28 16:14:53 +01:00
drm_debugfs.c drm/debugfs: Remove the drm_driver.debugfs_cleanup callback 2017-03-08 11:29:08 +01:00
drm_debugfs_crc.c
drm_dma.c
drm_dp_aux_dev.c
drm_dp_dual_mode_helper.c drm: Add name for DRM_DP_DUAL_MODE_LSPCON 2017-02-23 11:06:12 -05:00
drm_dp_helper.c drm/dp: Add missing description to parameter 2017-03-07 16:38:16 -05:00
drm_dp_mst_topology.c
drm_drv.c Linux 4.10-rc8 2017-02-23 12:10:12 +10:00
drm_dumb_buffers.c
drm_edid.c gpu: drm: core: Convert printk(KERN_<LEVEL> to pr_<level> 2017-02-28 14:32:19 +01:00
drm_edid_load.c drm: move edid property update and add modes out of edid firmware loader 2017-02-21 15:41:24 +02:00
drm_encoder.c drm: Rename connector list iterator API 2017-02-28 16:16:48 +01:00
drm_encoder_slave.c
drm_fb_cma_helper.c drm: Update drm_fbdev_cma_init documentation 2017-03-01 23:52:35 +01:00
drm_fb_helper.c drm/fb-helper: implement ioctl FBIO_WAITFORVSYNC 2017-03-02 08:12:15 +01:00
drm_file.c drm: Extract drm_file.h 2017-03-09 16:18:02 +01:00
drm_flip_work.c
drm_fourcc.c
drm_framebuffer.c drm: Introduce drm_framebuffer_{get,put}() 2017-02-28 16:15:03 +01:00
drm_gem.c drm: Introduce drm_gem_object_{get,put}() 2017-02-28 16:16:43 +01:00
drm_gem_cma_helper.c drm: Introduce drm_gem_object_{get,put}() 2017-02-28 16:16:43 +01:00
drm_global.c
drm_hashtab.c
drm_info.c
drm_internal.h drm: rename drm_fops.c to drm_file.c 2017-03-09 16:18:02 +01:00
drm_ioc32.c gpu: drm: core: Convert printk(KERN_<LEVEL> to pr_<level> 2017-02-28 14:32:19 +01:00
drm_ioctl.c
drm_irq.c drm: unexport function drm_vblank_no_hw_counter() 2017-02-07 21:45:02 +01:00
drm_kms_helper_common.c drm: Remove drmP.h include from drm_kms_helper_common.c 2017-03-09 16:18:02 +01:00
drm_legacy.h
drm_lock.c
drm_memory.c
drm_mipi_dsi.c
drm_mm.c drm: Micro-optimise drm_mm_for_each_node_in_range() 2017-02-06 16:57:37 +01:00
drm_mode_config.c drm: Rename connector list iterator API 2017-02-28 16:16:48 +01:00
drm_mode_object.c drm: Introduce drm_mode_object_{get,put}() 2017-02-28 16:14:55 +01:00
drm_modes.c drm: Rename drm_mode_object_get() 2017-02-28 16:14:53 +01:00
drm_modeset_helper.c
drm_modeset_lock.c
drm_of.c
drm_panel.c
drm_pci.c drm: Extract drm_pci.h 2017-03-09 16:18:02 +01:00
drm_plane.c drm: Introduce drm_framebuffer_{get,put}() 2017-02-28 16:15:03 +01:00
drm_plane_helper.c drm/atomic: Make drm_atomic_plane_disabling easier to understand. 2017-03-06 11:41:55 +01:00
drm_platform.c
drm_prime.c drm: Extract drm_prime.h 2017-03-09 16:18:02 +01:00
drm_print.c drm: drm_printer: add __printf validation 2017-02-26 21:43:08 +01:00
drm_probe_helper.c drm: Rename connector list iterator API 2017-02-28 16:16:48 +01:00
drm_property.c drm: Introduce drm_property_blob_{get,put}() 2017-02-28 16:16:46 +01:00
drm_rect.c
drm_scatter.c
drm_simple_kms_helper.c drm/atomic: Convert get_existing_state callers to get_old/new_state, v4. 2017-03-06 11:43:05 +01:00
drm_sysfs.c
drm_trace.h
drm_trace_points.c
drm_vm.c
drm_vma_manager.c drm: Improve drm_mm search (and fix topdown allocation) with rbtrees 2017-02-03 11:10:32 +01:00
Kconfig drm/fb-helper: Add multi buffer support for cma fbdev 2017-02-26 22:11:37 +01:00
Makefile drm: rename drm_fops.c to drm_file.c 2017-03-09 16:18:02 +01:00