From 55116b1535ca983204cadb8ecf5aa77a6360ef3c Mon Sep 17 00:00:00 2001 From: Zheng Yang Date: Fri, 25 Nov 2016 15:17:36 +0800 Subject: [PATCH] video: rockchip: hdmi: support modify color mode and depth simultaneously Use following command: echo mode= > /sys/class/display/HDMI/mode is decimal digits, lower 8bit is color mode, upper 8bit is depth. For example: value = 131 = 0x83 means YCbCr444 8bit output value = 164 = 0xa4 means YCbCr422 10bit output value = 0 means restore auto mode(8bit, priority YCbCr444) Change-Id: I256906d91f7075defb4d785cfc15926ca5627093 Signed-off-by: Zheng Yang (cherry picked from commit c3620a88e55c3ade4a823adea08b0bb2acc4737e) --- drivers/video/rockchip/hdmi/rockchip-hdmi-core.c | 3 +-- drivers/video/rockchip/hdmi/rockchip-hdmi-sysfs.c | 11 ++++++++--- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/drivers/video/rockchip/hdmi/rockchip-hdmi-core.c b/drivers/video/rockchip/hdmi/rockchip-hdmi-core.c index c3f396ddb898..fcd6ae99f9f5 100644 --- a/drivers/video/rockchip/hdmi/rockchip-hdmi-core.c +++ b/drivers/video/rockchip/hdmi/rockchip-hdmi-core.c @@ -174,8 +174,7 @@ static void hdmi_wq_set_video(struct hdmi *hdmi) } if ((hdmi->property->feature & SUPPORT_DEEP_10BIT) && (deepcolor & HDMI_DEEP_COLOR_30BITS) && - (hdmi->colordepth == HDMI_DEPP_COLOR_AUTO || - hdmi->colordepth == 10)) + hdmi->colordepth == 10) video->color_output_depth = 10; } pr_info("hdmi output corlor mode is %d\n", video->color_output); diff --git a/drivers/video/rockchip/hdmi/rockchip-hdmi-sysfs.c b/drivers/video/rockchip/hdmi/rockchip-hdmi-sysfs.c index 37162320b05a..2f9147e461c8 100644 --- a/drivers/video/rockchip/hdmi/rockchip-hdmi-sysfs.c +++ b/drivers/video/rockchip/hdmi/rockchip-hdmi-sysfs.c @@ -237,10 +237,15 @@ static int hdmi_set_color(struct rk_display_device *device, if (!strncmp(buf, "mode", 4)) { if (sscanf(buf, "mode=%d", &value) == -1) return -1; - pr_debug("current mode is %d input mode is %d\n", + pr_debug("current mode is %d input mode is %x\n", hdmi->colormode, value); - if (hdmi->colormode != value) - hdmi->colormode = value; + if (hdmi->colormode != (value & 0xff)) + hdmi->colormode = value & 0xff; + if (hdmi->colordepth != ((value >> 8) & 0xff)) { + pr_debug("current depth is %d input mode is %d\n", + hdmi->colordepth, ((value >> 8) & 0xff)); + hdmi->colordepth = ((value >> 8) & 0xff); + } } else if (!strncmp(buf, "depth", 5)) { if (sscanf(buf, "depth=%d", &value) == -1) return -1; -- 2.34.1