Loading msm/dsi/dsi_drm.c +19 −5 Original line number Diff line number Diff line // SPDX-License-Identifier: GPL-2.0-only /* * Copyright (c) 2016-2019, The Linux Foundation. All rights reserved. * Copyright (c) 2016-2020, The Linux Foundation. All rights reserved. */ Loading @@ -11,6 +11,7 @@ #include "sde_connector.h" #include "dsi_drm.h" #include "sde_trace.h" #include "sde_encoder.h" #define to_dsi_bridge(x) container_of((x), struct dsi_bridge, base) #define to_dsi_state(x) container_of((x), struct dsi_connector_state, base) Loading Loading @@ -340,6 +341,8 @@ static bool dsi_bridge_mode_fixup(struct drm_bridge *bridge, struct dsi_display *display; struct dsi_display_mode dsi_mode, cur_dsi_mode, *panel_dsi_mode; struct drm_crtc_state *crtc_state; bool clone_mode = false; struct drm_encoder *encoder; crtc_state = container_of(mode, struct drm_crtc_state, mode); Loading Loading @@ -404,6 +407,14 @@ static bool dsi_bridge_mode_fixup(struct drm_bridge *bridge, return false; } drm_for_each_encoder(encoder, crtc_state->crtc->dev) { if (encoder->crtc != crtc_state->crtc) continue; if (sde_encoder_in_clone_mode(encoder)) clone_mode = true; } /* No panel mode switch when drm pipeline is changing */ if ((dsi_mode.panel_mode != cur_dsi_mode.panel_mode) && (!(dsi_mode.dsi_mode_flags & DSI_MODE_FLAG_VRR)) && Loading @@ -420,13 +431,16 @@ static bool dsi_bridge_mode_fixup(struct drm_bridge *bridge, dsi_mode.dsi_mode_flags |= DSI_MODE_FLAG_DMS; } /* Reject seamless transition when active changed */ if (crtc_state->active_changed && /* Reject seamless transition when active/connectors changed */ if ((crtc_state->active_changed || (crtc_state->connectors_changed && clone_mode)) && ((dsi_mode.dsi_mode_flags & DSI_MODE_FLAG_VRR) || (dsi_mode.dsi_mode_flags & DSI_MODE_FLAG_POMS) || (dsi_mode.dsi_mode_flags & DSI_MODE_FLAG_DYN_CLK))) { DSI_ERR("seamless upon active changed 0x%x %d\n", dsi_mode.dsi_mode_flags, crtc_state->active_changed); DSI_ERR("seamless on active/conn(%d/%d) changed 0x%x\n", crtc_state->active_changed, crtc_state->connectors_changed, dsi_mode.dsi_mode_flags); return false; } Loading Loading
msm/dsi/dsi_drm.c +19 −5 Original line number Diff line number Diff line // SPDX-License-Identifier: GPL-2.0-only /* * Copyright (c) 2016-2019, The Linux Foundation. All rights reserved. * Copyright (c) 2016-2020, The Linux Foundation. All rights reserved. */ Loading @@ -11,6 +11,7 @@ #include "sde_connector.h" #include "dsi_drm.h" #include "sde_trace.h" #include "sde_encoder.h" #define to_dsi_bridge(x) container_of((x), struct dsi_bridge, base) #define to_dsi_state(x) container_of((x), struct dsi_connector_state, base) Loading Loading @@ -340,6 +341,8 @@ static bool dsi_bridge_mode_fixup(struct drm_bridge *bridge, struct dsi_display *display; struct dsi_display_mode dsi_mode, cur_dsi_mode, *panel_dsi_mode; struct drm_crtc_state *crtc_state; bool clone_mode = false; struct drm_encoder *encoder; crtc_state = container_of(mode, struct drm_crtc_state, mode); Loading Loading @@ -404,6 +407,14 @@ static bool dsi_bridge_mode_fixup(struct drm_bridge *bridge, return false; } drm_for_each_encoder(encoder, crtc_state->crtc->dev) { if (encoder->crtc != crtc_state->crtc) continue; if (sde_encoder_in_clone_mode(encoder)) clone_mode = true; } /* No panel mode switch when drm pipeline is changing */ if ((dsi_mode.panel_mode != cur_dsi_mode.panel_mode) && (!(dsi_mode.dsi_mode_flags & DSI_MODE_FLAG_VRR)) && Loading @@ -420,13 +431,16 @@ static bool dsi_bridge_mode_fixup(struct drm_bridge *bridge, dsi_mode.dsi_mode_flags |= DSI_MODE_FLAG_DMS; } /* Reject seamless transition when active changed */ if (crtc_state->active_changed && /* Reject seamless transition when active/connectors changed */ if ((crtc_state->active_changed || (crtc_state->connectors_changed && clone_mode)) && ((dsi_mode.dsi_mode_flags & DSI_MODE_FLAG_VRR) || (dsi_mode.dsi_mode_flags & DSI_MODE_FLAG_POMS) || (dsi_mode.dsi_mode_flags & DSI_MODE_FLAG_DYN_CLK))) { DSI_ERR("seamless upon active changed 0x%x %d\n", dsi_mode.dsi_mode_flags, crtc_state->active_changed); DSI_ERR("seamless on active/conn(%d/%d) changed 0x%x\n", crtc_state->active_changed, crtc_state->connectors_changed, dsi_mode.dsi_mode_flags); return false; } Loading