summaryrefslogtreecommitdiff
path: root/drivers/video/fbdev
diff options
context:
space:
mode:
authorAravind Venkateswaran <aravindh@codeaurora.org>2017-01-15 18:44:38 -0800
committerAravind Venkateswaran <aravindh@codeaurora.org>2017-01-18 23:22:16 -0800
commit9be29e6aaa47042e2a4cc05a379c3fa9f78a8982 (patch)
treefc22f0e07118802a5396aaca0c3a641b8de8517e /drivers/video/fbdev
parentbc176f3364053e465518bc4491e10864a7d9a94b (diff)
msm: hdmi: edid: add API to override edid configuration
Add a new API to override the EDID configuration. This will allow clients to specify a particular resolution to be used for subsequent connections. CRs-Fixed: 1109812 Change-Id: Ie08ed509dd563bf265b32a2bfece86352b4e2b68 Signed-off-by: Aravind Venkateswaran <aravindh@codeaurora.org>
Diffstat (limited to 'drivers/video/fbdev')
-rw-r--r--drivers/video/fbdev/msm/mdss_hdmi_edid.c32
-rw-r--r--drivers/video/fbdev/msm/mdss_hdmi_edid.h18
2 files changed, 42 insertions, 8 deletions
diff --git a/drivers/video/fbdev/msm/mdss_hdmi_edid.c b/drivers/video/fbdev/msm/mdss_hdmi_edid.c
index 160898ee2b6c..36209e36b324 100644
--- a/drivers/video/fbdev/msm/mdss_hdmi_edid.c
+++ b/drivers/video/fbdev/msm/mdss_hdmi_edid.c
@@ -122,13 +122,6 @@ struct hdmi_edid_sink_caps {
bool ind_view_support;
};
-struct hdmi_edid_override_data {
- int scramble;
- int sink_mode;
- int format;
- int vic;
-};
-
struct hdmi_edid_ctrl {
u8 pt_scan_info;
u8 it_scan_info;
@@ -2597,6 +2590,31 @@ void hdmi_edid_set_video_resolution(void *input, u32 resolution, bool reset)
}
} /* hdmi_edid_set_video_resolution */
+void hdmi_edid_config_override(void *input, bool enable,
+ struct hdmi_edid_override_data *data)
+{
+ struct hdmi_edid_ctrl *edid_ctrl = (struct hdmi_edid_ctrl *)input;
+ struct hdmi_edid_override_data *ov_data = &edid_ctrl->override_data;
+
+ if ((!edid_ctrl) || (enable && !data)) {
+ DEV_ERR("%s: invalid input\n", __func__);
+ return;
+ }
+
+ edid_ctrl->edid_override = enable;
+ pr_debug("EDID override %s\n", enable ? "enabled" : "disabled");
+
+ if (enable) {
+ ov_data->scramble = data->scramble;
+ ov_data->sink_mode = data->sink_mode;
+ ov_data->format = data->format;
+ ov_data->vic = data->vic;
+ pr_debug("%s: Override data: scramble=%d sink_mode=%d format=%d vic=%d\n",
+ __func__, ov_data->scramble, ov_data->sink_mode,
+ ov_data->format, ov_data->vic);
+ }
+}
+
void hdmi_edid_deinit(void *input)
{
struct hdmi_edid_ctrl *edid_ctrl = (struct hdmi_edid_ctrl *)input;
diff --git a/drivers/video/fbdev/msm/mdss_hdmi_edid.h b/drivers/video/fbdev/msm/mdss_hdmi_edid.h
index 5ee77fcf2066..16efb6ee4014 100644
--- a/drivers/video/fbdev/msm/mdss_hdmi_edid.h
+++ b/drivers/video/fbdev/msm/mdss_hdmi_edid.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010-2016, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2010-2017, The Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
@@ -44,6 +44,20 @@ struct hdmi_edid_hdr_data {
u32 min_luminance;
};
+/*
+ * struct hdmi_override_data - Resolution Override Data
+ * @scramble - scrambler enable
+ * @sink_mode - 0 for DVI and 1 for HDMI
+ * @format - pixel format (refer to msm_hdmi_modes.h)
+ * @vic - resolution code
+ */
+struct hdmi_edid_override_data {
+ int scramble;
+ int sink_mode;
+ int format;
+ int vic;
+};
+
int hdmi_edid_parser(void *edid_ctrl);
u32 hdmi_edid_get_raw_data(void *edid_ctrl, u8 *buf, u32 size);
u8 hdmi_edid_get_sink_scaninfo(void *edid_ctrl, u32 resolution);
@@ -63,5 +77,7 @@ u8 hdmi_edid_get_deep_color(void *edid_ctrl);
u32 hdmi_edid_get_max_pclk(void *edid_ctrl);
void hdmi_edid_get_hdr_data(void *edid_ctrl,
struct hdmi_edid_hdr_data **hdr_data);
+void hdmi_edid_config_override(void *input, bool enable,
+ struct hdmi_edid_override_data *data);
#endif /* __HDMI_EDID_H__ */