From 3cc26c4bbce737102a11869fa81d78ed4a24c466 Mon Sep 17 00:00:00 2001 From: Wyon Bi Date: Fri, 19 Nov 2021 19:08:35 +0800 Subject: [PATCH] drm/rockchip: drv: Add helper function drm_mode_convert_to_{split,origin}_mode() Signed-off-by: Wyon Bi Change-Id: I1a40d0d296c5e82cc5d40378af002132d9949e04 --- drivers/gpu/drm/rockchip/rockchip_drm_drv.c | 35 +++++++++++++++++++++ drivers/gpu/drm/rockchip/rockchip_drm_drv.h | 2 ++ 2 files changed, 37 insertions(+) diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c index 574bd83a8dae..882ec39ccbd1 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c +++ b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c @@ -47,6 +47,41 @@ static bool is_support_iommu = true; static struct drm_driver rockchip_drm_driver; +void drm_mode_convert_to_split_mode(struct drm_display_mode *mode) +{ + u16 hactive, hfp, hsync, hbp; + + hactive = mode->hdisplay; + hfp = mode->hsync_start - mode->hdisplay; + hsync = mode->hsync_end - mode->hsync_start; + hbp = mode->htotal - mode->hsync_end; + + mode->clock *= 2; + mode->hdisplay = hactive * 2; + mode->hsync_start = mode->hdisplay + hfp * 2; + mode->hsync_end = mode->hsync_start + hsync * 2; + mode->htotal = mode->hsync_end + hbp * 2; + drm_mode_set_name(mode); +} +EXPORT_SYMBOL(drm_mode_convert_to_split_mode); + +void drm_mode_convert_to_origin_mode(struct drm_display_mode *mode) +{ + u16 hactive, hfp, hsync, hbp; + + hactive = mode->hdisplay; + hfp = mode->hsync_start - mode->hdisplay; + hsync = mode->hsync_end - mode->hsync_start; + hbp = mode->htotal - mode->hsync_end; + + mode->clock /= 2; + mode->hdisplay = hactive / 2; + mode->hsync_start = mode->hdisplay + hfp / 2; + mode->hsync_end = mode->hsync_start + hsync / 2; + mode->htotal = mode->hsync_end + hbp / 2; +} +EXPORT_SYMBOL(drm_mode_convert_to_origin_mode); + /** * drm_connector_oob_hotplug_event - Report out-of-band hotplug event to connector * @connector: connector to report the event on diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_drv.h b/drivers/gpu/drm/rockchip/rockchip_drm_drv.h index 183728233a01..41c84025ac6a 100644 --- a/drivers/gpu/drm/rockchip/rockchip_drm_drv.h +++ b/drivers/gpu/drm/rockchip/rockchip_drm_drv.h @@ -400,6 +400,8 @@ void rockchip_drm_register_sub_dev(struct rockchip_drm_sub_dev *sub_dev); void rockchip_drm_unregister_sub_dev(struct rockchip_drm_sub_dev *sub_dev); struct rockchip_drm_sub_dev *rockchip_drm_get_sub_dev(struct device_node *node); int rockchip_drm_add_modes_noedid(struct drm_connector *connector); +void drm_mode_convert_to_split_mode(struct drm_display_mode *mode); +void drm_mode_convert_to_origin_mode(struct drm_display_mode *mode); #if IS_ENABLED(CONFIG_DRM_ROCKCHIP) int rockchip_drm_get_sub_dev_type(void); #else