mirror-linux/drivers/gpu/drm
Stephen Boyd e2d967b42a drm/panel: boe-tv101wum-nl6: Ensure DSI writes succeed during disable
[ Upstream commit a3ee9e0b57 ]

The unprepare sequence has started to fail after moving to panel bridge
code in the msm drm driver (commit 007ac0262b ("drm/msm/dsi: switch to
DRM_PANEL_BRIDGE")). You'll see messages like this in the kernel logs:

   panel-boe-tv101wum-nl6 ae94000.dsi.0: failed to set panel off: -22

This is because boe_panel_enter_sleep_mode() needs an operating DSI link
to set the panel into sleep mode. Performing those writes in the
unprepare phase of bridge ops is too late, because the link has already
been torn down by the DSI controller in post_disable, i.e. the PHY has
been disabled, etc. See dsi_mgr_bridge_post_disable() for more details
on the DSI .

Split the unprepare function into a disable part and an unprepare part.
For now, just the DSI writes to enter sleep mode are put in the disable
function. This fixes the panel off routine and keeps the panel happy.

My Wormdingler has an integrated touchscreen that stops responding to
touch if the panel is only half disabled too. This patch fixes it. And
finally, this saves power when the screen is off because without this
fix the regulators for the panel are left enabled when nothing is being
displayed on the screen.

Fixes: 007ac0262b ("drm/msm/dsi: switch to DRM_PANEL_BRIDGE")
Fixes: a869b9db7a ("drm/panel: support for boe tv101wum-nl6 wuxga dsi video mode panel")
Cc: yangcong <yangcong5@huaqin.corp-partner.google.com>
Cc: Douglas Anderson <dianders@chromium.org>
Cc: Jitao Shi <jitao.shi@mediatek.com>
Cc: Sam Ravnborg <sam@ravnborg.org>
Cc: Rob Clark <robdclark@chromium.org>
Cc: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Signed-off-by: Stephen Boyd <swboyd@chromium.org>
Reviewed-by: Douglas Anderson <dianders@chromium.org>
Signed-off-by: Douglas Anderson <dianders@chromium.org>
Link: https://patchwork.freedesktop.org/patch/msgid/20230106030108.2542081-1-swboyd@chromium.org
(cherry picked from commit c913cd5489)
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
Signed-off-by: Sasha Levin <sashal@kernel.org>
2023-02-09 11:28:09 +01:00
..
amd amdgpu: fix build on non-DCN platforms. 2023-02-01 08:34:51 +01:00
arm
armada
aspeed
ast drm/ast: make ast_modeset static 2022-09-26 09:11:47 +02:00
atmel-hlcdc
bridge drm/bridge: it6505: Initialize AUX channel in it6505_i2c_probe 2022-12-31 13:32:03 +01:00
display drm/display/dp_mst: Correct the kref of port. 2023-02-01 08:34:40 +01:00
etnaviv drm/etnaviv: reap idle mapping if it doesn't match the softpin address 2023-01-07 11:11:57 +01:00
exynos IOMMU Updates for Linux v6.1: 2022-10-10 13:20:53 -07:00
fsl-dcu drm/fsl-dcu: Fix return type of fsl_dcu_drm_connector_mode_valid() 2022-12-31 13:33:06 +01:00
gma500 drm pull for 6.1-rc1 2022-10-05 11:24:12 -07:00
gud
hisilicon drm pull for 6.1-rc1 2022-10-05 11:24:12 -07:00
hyperv hyperv-next for 6.1 2022-10-10 13:59:01 -07:00
i2c
i810
i915 drm/i915/adlp: Fix typo for reference clock 2023-02-09 11:28:07 +01:00
imx drm/imx: ipuv3-plane: Fix overlay plane width 2023-01-12 12:02:27 +01:00
ingenic drm/ingenic: Fix missing platform_driver_unregister() call in ingenic_drm_init() 2023-01-07 11:11:57 +01:00
kmb
lib
lima drm/lima: Fix opp clkname setting in case of missing regulator 2022-11-14 19:08:21 +08:00
logicvc
mcde
mediatek drm/mediatek: Fix return type of mtk_hdmi_bridge_mode_valid() 2022-12-31 13:33:01 +01:00
meson drm/meson: Reduce the FIFO lines held when AFBC is not used 2023-01-12 12:02:22 +01:00
mga
mgag200 drm/mgag200: Fix PLL setup for G200_SE_A rev >=4 2023-01-07 11:11:57 +01:00
msm drm/msm/a6xx: Avoid gx gbit halt during rpm suspend 2023-02-01 08:34:29 +01:00
mxsfb drm: lcdif: Set and enable FIFO Panic threshold 2022-12-31 13:32:09 +01:00
nouveau nouveau: fix migrate_to_ram() for faulting page 2022-10-20 21:27:24 -07:00
omapdrm drm/omap: dmm_tiler:Remove the print function dev_err() 2022-09-09 16:23:21 +03:00
panel drm/panel: boe-tv101wum-nl6: Ensure DSI writes succeed during disable 2023-02-09 11:28:09 +01:00
panfrost drm/panfrost: fix GENERIC_ATOMIC64 dependency 2023-02-01 08:34:23 +01:00
pl111
qxl drm/qxl: drop set_prod_notify parameter from qxl_ring_create 2022-09-23 13:16:37 +02:00
r128
radeon drm/radeon: Fix PCI device refcount leak in radeon_atrm_get_bios() 2022-12-31 13:32:19 +01:00
rcar-du drm: rcar-du: Drop leftovers dependencies from Kconfig 2022-12-31 13:32:09 +01:00
rockchip drm/rockchip: Use drm_mode_copy() 2022-12-31 13:33:01 +01:00
savage
scheduler drm/scheduler: fix fence ref counting 2022-10-25 13:14:36 +02:00
shmobile drm/plane: Remove drm_plane_init() 2022-09-20 09:37:12 +02:00
sis
solomon drm/ssd130x: Init display before the SSD130X_DISPLAY_ON command 2023-02-09 11:28:02 +01:00
sprd
sti drm/sti: Fix return type of sti_{dvo,hda,hdmi}_connector_mode_valid() 2022-12-31 13:33:06 +01:00
stm
sun4i Merge tag 'drm-misc-next-2022-09-09' of git://anongit.freedesktop.org/drm/drm-misc into drm-next 2022-09-11 22:03:07 +10:00
tdfx
tegra drm/tegra: Add missing clk_disable_unprepare() in tegra_dc_probe() 2022-12-31 13:32:17 +01:00
tests drm: tests: Fix a buffer overflow in format_helper_test 2022-10-20 09:56:05 +02:00
tidss drm/tidss: fix repeated words in comments 2022-09-09 16:23:26 +03:00
tilcdc drm/plane: Remove drm_plane_init() 2022-09-20 09:37:12 +02:00
tiny drm/simpledrm: Synchronize access to GEM BOs 2022-09-27 10:27:00 +02:00
ttm drm pull for 6.1-rc1 2022-10-05 11:24:12 -07:00
tve200
udl drm/udl: Sync pending URBs at the end of suspend 2022-09-10 21:45:53 +02:00
v3d
vboxvideo drm/vboxvideo: fix repeated words in comments 2022-09-17 15:01:24 +02:00
vc4 drm/vc4: hdmi: make CEC adapter name unique 2023-02-09 11:28:02 +01:00
vgem
via drm/via: Add new condition to via_dma_cleanup() 2022-09-07 07:01:16 +02:00
virtio drm/virtio: Fix GEM handle creation UAF 2023-01-18 11:58:12 +01:00
vkms Merge drm/drm-next into drm-misc-next 2022-09-14 12:22:18 +01:00
vmwgfx treewide: fix up files incorrectly marked executable 2023-02-01 08:34:49 +01:00
xen
xlnx
Kconfig Driver core changes for 6.1-rc1 2022-10-07 17:04:10 -07:00
Makefile Driver core changes for 6.1-rc1 2022-10-07 17:04:10 -07:00
drm_agpsupport.c
drm_aperture.c drm/aperture: Fix some kerneldoc comments 2022-09-12 09:34:07 +02:00
drm_atomic.c
drm_atomic_helper.c drm/atomic-helper: Don't allocate new plane state in CRTC check 2022-12-31 13:32:01 +01:00
drm_atomic_state_helper.c
drm_atomic_uapi.c
drm_auth.c
drm_blend.c
drm_bridge.c
drm_bridge_connector.c
drm_buddy.c drm: Optimize drm buddy top-down allocation method 2023-01-18 11:58:13 +01:00
drm_bufs.c
drm_cache.c
drm_client.c
drm_client_modeset.c
drm_color_mgmt.c
drm_connector.c drm/connector: send hotplug uevent on connector cleanup 2023-01-07 11:11:56 +01:00
drm_context.c
drm_crtc.c
drm_crtc_helper.c Driver core changes for 6.1-rc1 2022-10-07 17:04:10 -07:00
drm_crtc_helper_internal.h
drm_crtc_internal.h
drm_damage_helper.c drm: Use original src rect while initializing damage iterator 2022-09-13 14:38:33 +03:00
drm_debugfs.c drm/edid: Handle EDID 1.4 range descriptor h/vfreq offsets 2022-09-02 16:38:51 +03:00
drm_debugfs_crc.c
drm_displayid.c
drm_dma.c
drm_drv.c drm/drv: Fix potential memory leak in drm_dev_init() 2022-11-10 18:49:01 -05:00
drm_dumb_buffers.c
drm_edid.c drm/edid: add a quirk for two LG monitors to get them to work on 10bpc 2022-12-31 13:32:59 +01:00
drm_edid_load.c
drm_encoder.c
drm_encoder_slave.c
drm_fb_dma_helper.c
drm_fb_helper.c
drm_file.c drm-misc-next for v6.1: 2022-09-06 10:56:04 +02:00
drm_flip_work.c
drm_format_helper.c drm/format-helper: Only advertise supported formats for conversion 2022-10-31 09:50:44 +01:00
drm_fourcc.c drm/fourcc: Fix vsub/hsub for Q410 and Q401 2022-12-31 13:32:11 +01:00
drm_framebuffer.c drm/framebuffer: convert to drm_dbg_kms() 2022-09-28 10:43:30 +02:00
drm_gem.c drm pull for 6.1-rc1 2022-10-05 11:24:12 -07:00
drm_gem_atomic_helper.c
drm_gem_dma_helper.c
drm_gem_framebuffer_helper.c
drm_gem_shmem_helper.c drm/shmem-helper: Avoid vm_open error paths 2022-12-04 18:56:53 +01:00
drm_gem_ttm_helper.c
drm_gem_vram_helper.c
drm_hashtab.c
drm_internal.h drm: Fix potential null-ptr-deref in drm_vblank_destroy_worker() 2022-11-10 18:49:02 -05:00
drm_ioc32.c
drm_ioctl.c
drm_irq.c
drm_kms_helper_common.c
drm_lease.c
drm_legacy.h
drm_legacy_misc.c
drm_lock.c
drm_managed.c
drm_memory.c
drm_mipi_dbi.c drm/probe-helper: Add drm_crtc_helper_mode_valid_fixed() 2022-09-12 09:14:26 +02:00
drm_mipi_dsi.c
drm_mm.c
drm_mode_config.c Revert "drm: hide unregistered connectors from GETCONNECTOR IOCTL" 2022-11-15 19:18:41 +01:00
drm_mode_object.c
drm_modes.c
drm_modeset_helper.c drm/plane-helper: Provide DRM_PLANE_NON_ATOMIC_FUNCS initializer macro 2022-09-20 09:42:31 +02:00
drm_modeset_lock.c
drm_nomodeset.c
drm_of.c
drm_panel.c
drm_panel_orientation_quirks.c drm: Add orientation quirk for Lenovo ideapad D330-10IGL 2023-02-01 08:34:29 +01:00
drm_pci.c
drm_plane.c drm/plane: Allocate planes with drm_universal_plane_alloc() 2022-09-20 09:41:06 +02:00
drm_plane_helper.c drm/plane-helper: Warn if atomic drivers call non-atomic helpers 2022-09-20 09:42:31 +02:00
drm_prime.c
drm_print.c drm_print: add _ddebug descriptor to drm_*dbg prototypes 2022-09-24 15:02:02 +02:00
drm_privacy_screen.c
drm_privacy_screen_x86.c
drm_probe_helper.c drm/probe-helper: Add drm_crtc_helper_mode_valid_fixed() 2022-09-12 09:14:26 +02:00
drm_property.c
drm_rect.c
drm_scatter.c
drm_self_refresh_helper.c
drm_simple_kms_helper.c
drm_syncobj.c
drm_sysfs.c
drm_trace.h
drm_trace_points.c
drm_vblank.c
drm_vblank_work.c
drm_vm.c
drm_vma_manager.c drm/drm_vma_manager: Add drm_vma_node_allow_once() 2023-02-01 08:34:42 +01:00
drm_writeback.c