summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMidas Chien <midaschieh@google.com>2022-06-24 18:22:11 +0800
committerMidas Chien <midaschieh@google.com>2022-07-06 08:09:34 +0000
commitb2328d3515aa4a862680b40c8e0c88cbcbd4bea6 (patch)
treede7bc2c65ddb4a2ae8763d87fec7a26b49214c3d
parent5a9ab1590cdc67241db0681783213bd74bd7c73c (diff)
downloaddisplay-b2328d3515aa4a862680b40c8e0c88cbcbd4bea6.tar.gz
drm: samsung: add vrr switch duration property
Use property to indicate vrr switch transient duration. Bug: 237631661 Test: VtsHalGraphicsComposer3_TargetTest Test: CUJ Signed-off-by: Midas Chien <midaschieh@google.com> Change-Id: Ie2aa91367a6665f6dadbcbf4836eaf1b0b46c1ac
-rw-r--r--samsung/exynos_drm_connector.c5
-rw-r--r--samsung/exynos_drm_connector.h1
-rw-r--r--samsung/panel/panel-samsung-drv.c1
-rw-r--r--samsung/panel/panel-samsung-drv.h1
-rw-r--r--samsung/panel/panel-samsung-s6e3hc3-c10.c1
-rw-r--r--samsung/panel/panel-samsung-s6e3hc4.c1
6 files changed, 10 insertions, 0 deletions
diff --git a/samsung/exynos_drm_connector.c b/samsung/exynos_drm_connector.c
index 6fcef32..7998eaf 100644
--- a/samsung/exynos_drm_connector.c
+++ b/samsung/exynos_drm_connector.c
@@ -296,6 +296,11 @@ int exynos_drm_connector_create_properties(struct drm_device *dev)
if (IS_ERR(p->panel_idle_support))
return PTR_ERR(p->panel_idle_support);
+ p->vrr_switch_duration = drm_property_create_range(dev, DRM_MODE_PROP_IMMUTABLE,
+ "vrr_switch_duration", 0, UINT_MAX);
+ if (IS_ERR(p->vrr_switch_duration))
+ return PTR_ERR(p->vrr_switch_duration);
+
ret = exynos_drm_connector_create_luminance_properties(dev);
if (ret)
return ret;
diff --git a/samsung/exynos_drm_connector.h b/samsung/exynos_drm_connector.h
index 944f320..9e08f5d 100644
--- a/samsung/exynos_drm_connector.h
+++ b/samsung/exynos_drm_connector.h
@@ -60,6 +60,7 @@ struct exynos_drm_connector_properties {
struct drm_property *panel_idle_support;
struct drm_property *mipi_sync;
struct drm_property *panel_orientation;
+ struct drm_property *vrr_switch_duration;
};
struct exynos_display_dsc {
diff --git a/samsung/panel/panel-samsung-drv.c b/samsung/panel/panel-samsung-drv.c
index 852b8be..20c3387 100644
--- a/samsung/panel/panel-samsung-drv.c
+++ b/samsung/panel/panel-samsung-drv.c
@@ -3042,6 +3042,7 @@ static int exynos_panel_attach_properties(struct exynos_panel *ctx)
drm_object_attach_property(obj, p->is_partial, desc->is_partial);
drm_object_attach_property(obj, p->panel_idle_support, desc->is_panel_idle_supported);
drm_object_attach_property(obj, p->panel_orientation, ctx->orientation);
+ drm_object_attach_property(obj, p->vrr_switch_duration, desc->vrr_switch_duration);
if (desc->brt_capability) {
ret = exynos_panel_attach_brightness_capability(&ctx->exynos_connector,
diff --git a/samsung/panel/panel-samsung-drv.h b/samsung/panel/panel-samsung-drv.h
index 93d0966..832b387 100644
--- a/samsung/panel/panel-samsung-drv.h
+++ b/samsung/panel/panel-samsung-drv.h
@@ -475,6 +475,7 @@ struct exynos_panel_desc {
u32 max_brightness;
u32 min_brightness;
u32 dft_brightness; /* default brightness */
+ u32 vrr_switch_duration;
/* extra frame is needed to apply brightness change if it's not at next VSYNC */
bool dbv_extra_frame;
bool is_partial;
diff --git a/samsung/panel/panel-samsung-s6e3hc3-c10.c b/samsung/panel/panel-samsung-s6e3hc3-c10.c
index 9517055..4bfc112 100644
--- a/samsung/panel/panel-samsung-s6e3hc3-c10.c
+++ b/samsung/panel/panel-samsung-s6e3hc3-c10.c
@@ -1335,6 +1335,7 @@ const struct exynos_panel_desc samsung_s6e3hc3_c10 = {
.binned_lp = s6e3hc3_c10_binned_lp,
.num_binned_lp = ARRAY_SIZE(s6e3hc3_c10_binned_lp),
.is_panel_idle_supported = true,
+ .vrr_switch_duration = 1,
.panel_func = &s6e3hc3_c10_drm_funcs,
.exynos_panel_func = &s6e3hc3_c10_exynos_funcs,
};
diff --git a/samsung/panel/panel-samsung-s6e3hc4.c b/samsung/panel/panel-samsung-s6e3hc4.c
index 1c2b6b3..5cc5733 100644
--- a/samsung/panel/panel-samsung-s6e3hc4.c
+++ b/samsung/panel/panel-samsung-s6e3hc4.c
@@ -1474,6 +1474,7 @@ const struct exynos_panel_desc samsung_s6e3hc4 = {
.binned_lp = s6e3hc4_binned_lp,
.num_binned_lp = ARRAY_SIZE(s6e3hc4_binned_lp),
.is_panel_idle_supported = true,
+ .vrr_switch_duration = 1,
.panel_func = &s6e3hc4_drm_funcs,
.exynos_panel_func = &s6e3hc4_exynos_funcs,
};