Re: [PATCH v2 08/12] drm: bridge: samsung-dsim: Add atomic_check

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 04.05.2022 13:40, Jagan Teki wrote:
Fixing up the mode flags is required in order to correlate the
correct sync flags of the surrounding components in the chain
to make sure the whole pipeline can work properly.

So, handle the mode flags via bridge, atomic_check.

v2:
* none

v1:
* fix mode flags in atomic_check instead of mode_fixup

Signed-off-by: Jagan Teki <jagan@xxxxxxxxxxxxxxxxxxxx>
---
  drivers/gpu/drm/bridge/samsung-dsim.c | 14 ++++++++++++++
  1 file changed, 14 insertions(+)

diff --git a/drivers/gpu/drm/bridge/samsung-dsim.c b/drivers/gpu/drm/bridge/samsung-dsim.c
index b618e52d0ee3..bd78cef890e4 100644
--- a/drivers/gpu/drm/bridge/samsung-dsim.c
+++ b/drivers/gpu/drm/bridge/samsung-dsim.c
@@ -1340,6 +1340,19 @@ static void samsung_dsim_atomic_post_disable(struct drm_bridge *bridge,
  	pm_runtime_put_sync(dsi->dev);
  }
+static int samsung_dsim_atomic_check(struct drm_bridge *bridge,
+				     struct drm_bridge_state *bridge_state,
+				     struct drm_crtc_state *crtc_state,
+				     struct drm_connector_state *conn_state)
+{
+	struct drm_display_mode *adjusted_mode = &crtc_state->adjusted_mode;
+
+	adjusted_mode->flags |= (DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC);
+	adjusted_mode->flags &= ~(DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC);


1. Shouldn't this be in mode_fixup callback?
2. Where this requirement comes from? As Marek says it breaks Samsung platforms and is against DSIM specification[1]:

"45.2.2.1.2 RGB Interface
Vsync, Hsync, and VDEN are active high signals"

[1]: https://chasinglulu.github.io/downloads/SEC_Exynos4412_Users%20Manual_Ver.1.00.00.pdf

Regards
Andrzej



+
+	return 0;
+}
+
  static void samsung_dsim_mode_set(struct drm_bridge *bridge,
  				  const struct drm_display_mode *mode,
  				  const struct drm_display_mode *adjusted_mode)
@@ -1361,6 +1374,7 @@ static const struct drm_bridge_funcs samsung_dsim_bridge_funcs = {
  	.atomic_duplicate_state		= drm_atomic_helper_bridge_duplicate_state,
  	.atomic_destroy_state		= drm_atomic_helper_bridge_destroy_state,
  	.atomic_reset			= drm_atomic_helper_bridge_reset,
+	.atomic_check			= samsung_dsim_atomic_check,
  	.atomic_pre_enable		= samsung_dsim_atomic_pre_enable,
  	.atomic_enable			= samsung_dsim_atomic_enable,
  	.atomic_disable			= samsung_dsim_atomic_disable,




[Index of Archives]     [Linux SoC Development]     [Linux Rockchip Development]     [Linux for Synopsys ARC Processors]    
  • [Linux on Unisoc (RDA Micro) SoCs]     [Linux Actions SoC]     [Linux USB Development]     [Video for Linux]     [Linux Audio Users]     [Linux SCSI]     [Yosemite News]

  •   Powered by Linux