diff options
| author | Aravind Venkateswaran <aravindh@codeaurora.org> | 2013-02-28 16:54:01 -0800 |
|---|---|---|
| committer | David Keitel <dkeitel@codeaurora.org> | 2016-03-23 20:15:48 -0700 |
| commit | e67f3f592056baffa4aff30ec4df3cd8539a6c4f (patch) | |
| tree | 5682a98f9c3999b0964062d87e3fe8dd86362cd8 | |
| parent | 93a69336701503740392a6baa4ea2560d7eb7802 (diff) | |
mdss: hdmi: Use common header for resolution modes
HDMI driver needs to support multiple resolution modes
based on the target and the capabilities of a connected
sink. The video timing information pertaining to these
resolution modes needs to be shared between the driver
as well as corresponding userspace components. To avoid
having multiple copies of the timing information, use a
common header file that lists all the details of supported
resolution modes.
Change-Id: Ib0275222bfae670cd2f1960dec671a3aa74aa2d5
Signed-off-by: Aravind Venkateswaran <aravindh@codeaurora.org>
Signed-off-by: Manoj Rao <manojraj@codeaurora.org>
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_hdmi_edid.c | 30 | ||||
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_hdmi_tx.c | 62 | ||||
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_hdmi_util.c | 190 | ||||
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_hdmi_util.h | 189 |
4 files changed, 59 insertions, 412 deletions
diff --git a/drivers/video/fbdev/msm/mdss_hdmi_edid.c b/drivers/video/fbdev/msm/mdss_hdmi_edid.c index 08be33773d4c..e87f028a4a99 100644 --- a/drivers/video/fbdev/msm/mdss_hdmi_edid.c +++ b/drivers/video/fbdev/msm/mdss_hdmi_edid.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2010-2012, The Linux Foundation. All rights reserved. +/* Copyright (c) 2010-2013, 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 @@ -244,14 +244,14 @@ static ssize_t hdmi_edid_sysfs_rda_modes(struct device *dev, continue; if (ret > 0) ret += snprintf(buf+ret, PAGE_SIZE-ret, ",%d", - *video_mode++ + 1); + *video_mode++); else ret += snprintf(buf+ret, PAGE_SIZE-ret, "%d", - *video_mode++ + 1); + *video_mode++); } } else { ret += snprintf(buf+ret, PAGE_SIZE-ret, "%d", - edid_ctrl->video_resolution+1); + edid_ctrl->video_resolution); } DEV_DBG("%s: '%s'\n", __func__, buf); @@ -324,16 +324,16 @@ static ssize_t hdmi_edid_sysfs_rda_3d_modes(struct device *dev, buff_3d); if (ret > 0) ret += snprintf(buf+ret, PAGE_SIZE-ret, - ",%d=%s", *video_mode++ + 1, + ",%d=%s", *video_mode++, buff_3d); else ret += snprintf(buf+ret, PAGE_SIZE-ret, - "%d=%s", *video_mode++ + 1, + "%d=%s", *video_mode++, buff_3d); } } else { ret += snprintf(buf+ret, PAGE_SIZE-ret, "%d", - edid_ctrl->video_resolution+1); + edid_ctrl->video_resolution); } DEV_DBG("%s: '%s'\n", __func__, buf); @@ -817,25 +817,25 @@ static void hdmi_edid_add_sink_3d_format(struct hdmi_edid_sink_data *sink_data, hdmi_get_video_3d_fmt_2string(video_3d_format, string); DEV_DBG("%s: EDID[3D]: format: %d [%s], %s %s\n", __func__, - video_format, hdmi_get_video_fmt_2string(video_format), + video_format, msm_hdmi_mode_2string(video_format), string, added ? "added" : "NOT added"); } /* hdmi_edid_add_sink_3d_format */ static void hdmi_edid_add_sink_video_format( struct hdmi_edid_sink_data *sink_data, u32 video_format) { - const struct hdmi_disp_mode_timing_type *timing = + const struct msm_hdmi_mode_timing_info *timing = hdmi_get_supported_mode(video_format); u32 supported = timing != NULL; if (video_format >= HDMI_VFRMT_MAX) { DEV_ERR("%s: video format: %s is not supported\n", __func__, - hdmi_get_video_fmt_2string(video_format)); + msm_hdmi_mode_2string(video_format)); return; } DEV_DBG("%s: EDID: format: %d [%s], %s\n", __func__, - video_format, hdmi_get_video_fmt_2string(video_format), + video_format, msm_hdmi_mode_2string(video_format), supported ? "Supported" : "Not-Supported"); if (supported) { @@ -1050,7 +1050,7 @@ static void hdmi_edid_get_display_mode(struct hdmi_edid_ctrl *edid_ctrl, * while the Video identification code is 1 based in the * CEA_861D spec */ - video_format = (*svd & 0x7F) - 1; + video_format = (*svd & 0x7F); hdmi_edid_add_sink_video_format(sink_data, video_format); /* Make a note of the preferred video format */ @@ -1096,7 +1096,7 @@ static void hdmi_edid_get_display_mode(struct hdmi_edid_ctrl *edid_ctrl, DEV_DBG("[%s:%d] Block-0 Adding vid fmt = [%s]\n", __func__, __LINE__, - hdmi_get_video_fmt_2string(video_format)); + msm_hdmi_mode_2string(video_format)); hdmi_edid_add_sink_video_format(sink_data, video_format); @@ -1125,7 +1125,7 @@ static void hdmi_edid_get_display_mode(struct hdmi_edid_ctrl *edid_ctrl, DEV_DBG("[%s:%d] Block-0 Adding vid fmt = [%s]\n", __func__, __LINE__, - hdmi_get_video_fmt_2string(video_format)); + msm_hdmi_mode_2string(video_format)); hdmi_edid_add_sink_video_format(sink_data, video_format); @@ -1158,7 +1158,7 @@ static void hdmi_edid_get_display_mode(struct hdmi_edid_ctrl *edid_ctrl, DEV_DBG("[%s:%d] Block-1 Adding vid fmt = [%s]\n", __func__, __LINE__, - hdmi_get_video_fmt_2string(video_format)); + msm_hdmi_mode_2string(video_format)); hdmi_edid_add_sink_video_format(sink_data, video_format); diff --git a/drivers/video/fbdev/msm/mdss_hdmi_tx.c b/drivers/video/fbdev/msm/mdss_hdmi_tx.c index 1c177dcf9df1..b3715bd45e9f 100644 --- a/drivers/video/fbdev/msm/mdss_hdmi_tx.c +++ b/drivers/video/fbdev/msm/mdss_hdmi_tx.c @@ -207,7 +207,7 @@ static int hdmi_tx_get_vic_from_panel_info(struct hdmi_tx_ctrl *hdmi_ctrl, { int new_vic = -1; u32 h_total, v_total; - struct hdmi_disp_mode_timing_type timing; + struct msm_hdmi_mode_timing_info timing; if (!hdmi_ctrl || !pinfo) { DEV_ERR("%s: invalid input\n", __func__); @@ -215,13 +215,13 @@ static int hdmi_tx_get_vic_from_panel_info(struct hdmi_tx_ctrl *hdmi_ctrl, } if (pinfo->vic) { - if (hdmi_get_supported_mode(pinfo->vic - 1)) { - new_vic = pinfo->vic - 1; + if (hdmi_get_supported_mode(pinfo->vic)) { + new_vic = pinfo->vic; DEV_DBG("%s: %s is supported\n", __func__, - hdmi_get_video_fmt_2string(new_vic)); + msm_hdmi_mode_2string(new_vic)); } else { - DEV_ERR("%s: invalid or not supported vic\n", - __func__); + DEV_ERR("%s: invalid or not supported vic %d\n", + __func__, pinfo->vic); return -EPERM; } } else { @@ -580,7 +580,7 @@ static inline u32 hdmi_tx_is_controller_on(struct hdmi_tx_ctrl *hdmi_ctrl) static int hdmi_tx_init_panel_info(uint32_t resolution, struct mdss_panel_info *pinfo) { - const struct hdmi_disp_mode_timing_type *timing = + const struct msm_hdmi_mode_timing_info *timing = hdmi_get_supported_mode(resolution); if (!timing || !pinfo) { @@ -612,42 +612,12 @@ static int hdmi_tx_init_panel_info(uint32_t resolution, return 0; } /* hdmi_tx_init_panel_info */ -/* Table indicating the video format supported by the HDMI TX Core */ -/* Valid pclk rates (Mhz): 25.2, 27, 27.03, 74.25, 148.5, 268.5, 297 */ -static void hdmi_tx_setup_video_mode_lut(void) -{ - hdmi_init_supported_video_timings(); - - hdmi_set_supported_mode(HDMI_VFRMT_640x480p60_4_3); - hdmi_set_supported_mode(HDMI_VFRMT_720x480p60_4_3); - hdmi_set_supported_mode(HDMI_VFRMT_720x480p60_16_9); - hdmi_set_supported_mode(HDMI_VFRMT_720x576p50_4_3); - hdmi_set_supported_mode(HDMI_VFRMT_720x576p50_16_9); - hdmi_set_supported_mode(HDMI_VFRMT_1440x480i60_4_3); - hdmi_set_supported_mode(HDMI_VFRMT_1440x480i60_16_9); - hdmi_set_supported_mode(HDMI_VFRMT_1440x576i50_4_3); - hdmi_set_supported_mode(HDMI_VFRMT_1440x576i50_16_9); - hdmi_set_supported_mode(HDMI_VFRMT_1280x720p50_16_9); - hdmi_set_supported_mode(HDMI_VFRMT_1280x720p60_16_9); - hdmi_set_supported_mode(HDMI_VFRMT_1920x1080p24_16_9); - hdmi_set_supported_mode(HDMI_VFRMT_1920x1080p25_16_9); - hdmi_set_supported_mode(HDMI_VFRMT_1920x1080p30_16_9); - hdmi_set_supported_mode(HDMI_VFRMT_1920x1080p50_16_9); - hdmi_set_supported_mode(HDMI_VFRMT_1920x1080i60_16_9); - hdmi_set_supported_mode(HDMI_VFRMT_1920x1080p60_16_9); - hdmi_set_supported_mode(HDMI_VFRMT_2560x1600p60_16_9); - hdmi_set_supported_mode(HDMI_VFRMT_3840x2160p30_16_9); - hdmi_set_supported_mode(HDMI_VFRMT_3840x2160p25_16_9); - hdmi_set_supported_mode(HDMI_VFRMT_3840x2160p24_16_9); - hdmi_set_supported_mode(HDMI_VFRMT_4096x2160p24_16_9); -} /* hdmi_tx_setup_video_mode_lut */ - /* Table tuned to indicate video formats supported by the MHL Tx */ /* Valid pclk rates (Mhz): 25.2, 27, 27.03, 74.25 */ static void hdmi_tx_setup_mhl_video_mode_lut(struct hdmi_tx_ctrl *hdmi_ctrl) { u32 i; - struct hdmi_disp_mode_timing_type *temp_timing; + struct msm_hdmi_mode_timing_info *temp_timing; if (!hdmi_ctrl->mhl_max_pclk) { DEV_WARN("%s: mhl max pclk not set!\n", __func__); @@ -657,7 +627,7 @@ static void hdmi_tx_setup_mhl_video_mode_lut(struct hdmi_tx_ctrl *hdmi_ctrl) __func__, hdmi_ctrl->mhl_max_pclk); for (i = 0; i < HDMI_VFRMT_MAX; i++) { temp_timing = - (struct hdmi_disp_mode_timing_type *)hdmi_get_supported_mode(i); + (struct msm_hdmi_mode_timing_info *)hdmi_get_supported_mode(i); if (!temp_timing) continue; /* formats that exceed max mhl line clk bw */ @@ -765,7 +735,7 @@ static int hdmi_tx_set_video_fmt(struct hdmi_tx_ctrl *hdmi_ctrl, struct mdss_panel_info *pinfo) { int new_vic = -1; - const struct hdmi_disp_mode_timing_type *timing = NULL; + const struct msm_hdmi_mode_timing_info *timing = NULL; if (!hdmi_ctrl || !pinfo) { DEV_ERR("%s: invalid input\n", __func__); @@ -779,8 +749,8 @@ static int hdmi_tx_set_video_fmt(struct hdmi_tx_ctrl *hdmi_ctrl, } DEV_DBG("%s: switching from %s => %s", __func__, - hdmi_get_video_fmt_2string(hdmi_ctrl->video_resolution), - hdmi_get_video_fmt_2string(new_vic)); + msm_hdmi_mode_2string(hdmi_ctrl->video_resolution), + msm_hdmi_mode_2string(new_vic)); hdmi_ctrl->video_resolution = (u32)new_vic; @@ -808,7 +778,7 @@ static int hdmi_tx_video_setup(struct hdmi_tx_ctrl *hdmi_ctrl, u32 end_v = 0; struct dss_io_data *io = NULL; - const struct hdmi_disp_mode_timing_type *timing = + const struct msm_hdmi_mode_timing_info *timing = hdmi_get_supported_mode(video_format); if (timing == NULL) { DEV_ERR("%s: video format not supported: %d\n", __func__, @@ -1521,7 +1491,7 @@ static int hdmi_tx_audio_acr_setup(struct hdmi_tx_ctrl *hdmi_ctrl, acr_pck_ctrl_reg = DSS_REG_R(io, HDMI_ACR_PKT_CTRL); if (enabled) { - const struct hdmi_disp_mode_timing_type *timing = + const struct msm_hdmi_mode_timing_info *timing = hdmi_get_supported_mode(hdmi_ctrl->video_resolution); const struct hdmi_tx_audio_acr_arry *audio_acr = &hdmi_tx_audio_acr_lut[0]; @@ -2152,7 +2122,7 @@ static int hdmi_tx_power_on(struct mdss_panel_data *panel_data) hdmi_ctrl->hdcp_feature_on = hdcp_feature_on; - DEV_INFO("power: ON (%s)\n", hdmi_get_video_fmt_2string( + DEV_INFO("power: ON (%s)\n", msm_hdmi_mode_2string( hdmi_ctrl->video_resolution)); rc = hdmi_tx_core_on(hdmi_ctrl); @@ -2381,7 +2351,7 @@ static int hdmi_tx_dev_init(struct hdmi_tx_ctrl *hdmi_ctrl) /* irq enable/disable will be handled in hpd on/off */ hdmi_tx_hw.ptr = (void *)hdmi_ctrl; - hdmi_tx_setup_video_mode_lut(); + hdmi_setup_video_mode_lut(); mutex_init(&hdmi_ctrl->mutex); hdmi_ctrl->workq = create_workqueue("hdmi_tx_workq"); if (!hdmi_ctrl->workq) { diff --git a/drivers/video/fbdev/msm/mdss_hdmi_util.c b/drivers/video/fbdev/msm/mdss_hdmi_util.c index 07c2336b5206..0c8b0f849f00 100644 --- a/drivers/video/fbdev/msm/mdss_hdmi_util.c +++ b/drivers/video/fbdev/msm/mdss_hdmi_util.c @@ -15,38 +15,22 @@ #include <mach/board.h> #include "mdss_hdmi_util.h" -static struct hdmi_disp_mode_timing_type +static struct msm_hdmi_mode_timing_info hdmi_supported_video_mode_lut[HDMI_VFRMT_MAX]; -#define HDMI_SETUP_LUT(MODE) do { \ - struct hdmi_disp_mode_timing_type mode = HDMI_SETTINGS_##MODE; \ - hdmi_supported_video_mode_lut[mode.video_format] = mode; \ - } while (0) - -void hdmi_init_supported_video_timings(void) -{ - int i; - - for (i = 0; i < HDMI_VFRMT_MAX; i++) { - struct hdmi_disp_mode_timing_type mode = VFRMT_NOT_SUPPORTED(i); - - hdmi_supported_video_mode_lut[i] = mode; - } -} /* hdmi_init_supported_video_timings */ - void hdmi_del_supported_mode(u32 mode) { - struct hdmi_disp_mode_timing_type *ret = NULL; + struct msm_hdmi_mode_timing_info *ret = NULL; DEV_DBG("%s: removing %s\n", __func__, - hdmi_get_video_fmt_2string(mode)); + msm_hdmi_mode_2string(mode)); ret = &hdmi_supported_video_mode_lut[mode]; if (ret != NULL && ret->supported) ret->supported = false; } -const struct hdmi_disp_mode_timing_type *hdmi_get_supported_mode(u32 mode) +const struct msm_hdmi_mode_timing_info *hdmi_get_supported_mode(u32 mode) { - const struct hdmi_disp_mode_timing_type *ret = NULL; + const struct msm_hdmi_mode_timing_info *ret = NULL; if (mode >= HDMI_VFRMT_MAX) return NULL; @@ -59,7 +43,7 @@ const struct hdmi_disp_mode_timing_type *hdmi_get_supported_mode(u32 mode) return ret; } /* hdmi_get_supported_mode */ -int hdmi_get_video_id_code(struct hdmi_disp_mode_timing_type *timing_in) +int hdmi_get_video_id_code(struct msm_hdmi_mode_timing_info *timing_in) { int i, vic = -1; @@ -70,7 +54,7 @@ int hdmi_get_video_id_code(struct hdmi_disp_mode_timing_type *timing_in) /* active_low_h, active_low_v and interlaced are not checked against */ for (i = 0; i < HDMI_VFRMT_MAX; i++) { - struct hdmi_disp_mode_timing_type *supported_timing = + struct msm_hdmi_mode_timing_info *supported_timing = &hdmi_supported_video_mode_lut[i]; if (!supported_timing->supported) @@ -105,155 +89,29 @@ int hdmi_get_video_id_code(struct hdmi_disp_mode_timing_type *timing_in) exit: DEV_DBG("%s: vic = %d timing = %s\n", __func__, vic, - hdmi_get_video_fmt_2string((u32)vic)); + msm_hdmi_mode_2string((u32)vic)); return vic; } /* hdmi_get_video_id_code */ -void hdmi_set_supported_mode(u32 mode) +/* Table indicating the video format supported by the HDMI TX Core */ +/* Valid pclk rates (Mhz): 25.2, 27, 27.03, 74.25, 148.5, 268.5, 297 */ +void hdmi_setup_video_mode_lut(void) { - switch (mode) { - case HDMI_VFRMT_640x480p60_4_3: - HDMI_SETUP_LUT(640x480p60_4_3); - break; - case HDMI_VFRMT_720x480p60_4_3: - HDMI_SETUP_LUT(720x480p60_4_3); - break; - case HDMI_VFRMT_720x480p60_16_9: - HDMI_SETUP_LUT(720x480p60_16_9); - break; - case HDMI_VFRMT_720x576p50_4_3: - HDMI_SETUP_LUT(720x576p50_4_3); - break; - case HDMI_VFRMT_720x576p50_16_9: - HDMI_SETUP_LUT(720x576p50_16_9); - break; - case HDMI_VFRMT_1440x480i60_4_3: - HDMI_SETUP_LUT(1440x480i60_4_3); - break; - case HDMI_VFRMT_1440x480i60_16_9: - HDMI_SETUP_LUT(1440x480i60_16_9); - break; - case HDMI_VFRMT_1440x576i50_4_3: - HDMI_SETUP_LUT(1440x576i50_4_3); - break; - case HDMI_VFRMT_1440x576i50_16_9: - HDMI_SETUP_LUT(1440x576i50_16_9); - break; - case HDMI_VFRMT_1280x720p50_16_9: - HDMI_SETUP_LUT(1280x720p50_16_9); - break; - case HDMI_VFRMT_1280x720p60_16_9: - HDMI_SETUP_LUT(1280x720p60_16_9); - break; - case HDMI_VFRMT_1920x1080p24_16_9: - HDMI_SETUP_LUT(1920x1080p24_16_9); - break; - case HDMI_VFRMT_1920x1080p25_16_9: - HDMI_SETUP_LUT(1920x1080p25_16_9); - break; - case HDMI_VFRMT_1920x1080p30_16_9: - HDMI_SETUP_LUT(1920x1080p30_16_9); - break; - case HDMI_VFRMT_1920x1080p50_16_9: - HDMI_SETUP_LUT(1920x1080p50_16_9); - break; - case HDMI_VFRMT_1920x1080i60_16_9: - HDMI_SETUP_LUT(1920x1080i60_16_9); - break; - case HDMI_VFRMT_1920x1080p60_16_9: - HDMI_SETUP_LUT(1920x1080p60_16_9); - break; - case HDMI_VFRMT_2560x1600p60_16_9: - HDMI_SETUP_LUT(2560x1600p60_16_9); - break; - case HDMI_VFRMT_3840x2160p30_16_9: - HDMI_SETUP_LUT(3840x2160p30_16_9); - break; - case HDMI_VFRMT_3840x2160p25_16_9: - HDMI_SETUP_LUT(3840x2160p25_16_9); - break; - case HDMI_VFRMT_3840x2160p24_16_9: - HDMI_SETUP_LUT(3840x2160p24_16_9); - break; - case HDMI_VFRMT_4096x2160p24_16_9: - HDMI_SETUP_LUT(4096x2160p24_16_9); - break; - default: - DEV_ERR("%s: unsupported mode=%d\n", __func__, mode); - } -} /* hdmi_set_supported_mode */ + MSM_HDMI_MODES_INIT_TIMINGS(hdmi_supported_video_mode_lut); -const char *hdmi_get_video_fmt_2string(u32 format) -{ - switch (format) { - case HDMI_VFRMT_640x480p60_4_3: return " 640x 480 p60 4/3"; - case HDMI_VFRMT_720x480p60_4_3: return " 720x 480 p60 4/3"; - case HDMI_VFRMT_720x480p60_16_9: return " 720x 480 p60 16/9"; - case HDMI_VFRMT_1280x720p60_16_9: return "1280x 720 p60 16/9"; - case HDMI_VFRMT_1920x1080i60_16_9: return "1920x1080 i60 16/9"; - case HDMI_VFRMT_1440x480i60_4_3: return "1440x 480 i60 4/3"; - case HDMI_VFRMT_1440x480i60_16_9: return "1440x 480 i60 16/9"; - case HDMI_VFRMT_1440x240p60_4_3: return "1440x 240 p60 4/3"; - case HDMI_VFRMT_1440x240p60_16_9: return "1440x 240 p60 16/9"; - case HDMI_VFRMT_2880x480i60_4_3: return "2880x 480 i60 4/3"; - case HDMI_VFRMT_2880x480i60_16_9: return "2880x 480 i60 16/9"; - case HDMI_VFRMT_2880x240p60_4_3: return "2880x 240 p60 4/3"; - case HDMI_VFRMT_2880x240p60_16_9: return "2880x 240 p60 16/9"; - case HDMI_VFRMT_1440x480p60_4_3: return "1440x 480 p60 4/3"; - case HDMI_VFRMT_1440x480p60_16_9: return "1440x 480 p60 16/9"; - case HDMI_VFRMT_1920x1080p60_16_9: return "1920x1080 p60 16/9"; - case HDMI_VFRMT_720x576p50_4_3: return " 720x 576 p50 4/3"; - case HDMI_VFRMT_720x576p50_16_9: return " 720x 576 p50 16/9"; - case HDMI_VFRMT_1280x720p50_16_9: return "1280x 720 p50 16/9"; - case HDMI_VFRMT_1920x1080i50_16_9: return "1920x1080 i50 16/9"; - case HDMI_VFRMT_1440x576i50_4_3: return "1440x 576 i50 4/3"; - case HDMI_VFRMT_1440x576i50_16_9: return "1440x 576 i50 16/9"; - case HDMI_VFRMT_1440x288p50_4_3: return "1440x 288 p50 4/3"; - case HDMI_VFRMT_1440x288p50_16_9: return "1440x 288 p50 16/9"; - case HDMI_VFRMT_2880x576i50_4_3: return "2880x 576 i50 4/3"; - case HDMI_VFRMT_2880x576i50_16_9: return "2880x 576 i50 16/9"; - case HDMI_VFRMT_2880x288p50_4_3: return "2880x 288 p50 4/3"; - case HDMI_VFRMT_2880x288p50_16_9: return "2880x 288 p50 16/9"; - case HDMI_VFRMT_1440x576p50_4_3: return "1440x 576 p50 4/3"; - case HDMI_VFRMT_1440x576p50_16_9: return "1440x 576 p50 16/9"; - case HDMI_VFRMT_1920x1080p50_16_9: return "1920x1080 p50 16/9"; - case HDMI_VFRMT_1920x1080p24_16_9: return "1920x1080 p24 16/9"; - case HDMI_VFRMT_1920x1080p25_16_9: return "1920x1080 p25 16/9"; - case HDMI_VFRMT_1920x1080p30_16_9: return "1920x1080 p30 16/9"; - case HDMI_VFRMT_2880x480p60_4_3: return "2880x 480 p60 4/3"; - case HDMI_VFRMT_2880x480p60_16_9: return "2880x 480 p60 16/9"; - case HDMI_VFRMT_2880x576p50_4_3: return "2880x 576 p50 4/3"; - case HDMI_VFRMT_2880x576p50_16_9: return "2880x 576 p50 16/9"; - case HDMI_VFRMT_1920x1250i50_16_9: return "1920x1250 i50 16/9"; - case HDMI_VFRMT_1920x1080i100_16_9:return "1920x1080 i100 16/9"; - case HDMI_VFRMT_1280x720p100_16_9: return "1280x 720 p100 16/9"; - case HDMI_VFRMT_720x576p100_4_3: return " 720x 576 p100 4/3"; - case HDMI_VFRMT_720x576p100_16_9: return " 720x 576 p100 16/9"; - case HDMI_VFRMT_1440x576i100_4_3: return "1440x 576 i100 4/3"; - case HDMI_VFRMT_1440x576i100_16_9: return "1440x 576 i100 16/9"; - case HDMI_VFRMT_1920x1080i120_16_9:return "1920x1080 i120 16/9"; - case HDMI_VFRMT_1280x720p120_16_9: return "1280x 720 p120 16/9"; - case HDMI_VFRMT_720x480p120_4_3: return " 720x 480 p120 4/3"; - case HDMI_VFRMT_720x480p120_16_9: return " 720x 480 p120 16/9"; - case HDMI_VFRMT_1440x480i120_4_3: return "1440x 480 i120 4/3"; - case HDMI_VFRMT_1440x480i120_16_9: return "1440x 480 i120 16/9"; - case HDMI_VFRMT_720x576p200_4_3: return " 720x 576 p200 4/3"; - case HDMI_VFRMT_720x576p200_16_9: return " 720x 576 p200 16/9"; - case HDMI_VFRMT_1440x576i200_4_3: return "1440x 576 i200 4/3"; - case HDMI_VFRMT_1440x576i200_16_9: return "1440x 576 i200 16/9"; - case HDMI_VFRMT_720x480p240_4_3: return " 720x 480 p240 4/3"; - case HDMI_VFRMT_720x480p240_16_9: return " 720x 480 p240 16/9"; - case HDMI_VFRMT_1440x480i240_4_3: return "1440x 480 i240 4/3"; - case HDMI_VFRMT_1440x480i240_16_9: return "1440x 480 i240 16/9"; - case HDMI_VFRMT_2560x1600p60_16_9: return "2560x1600 p60 16/9"; - case HDMI_VFRMT_3840x2160p30_16_9: return "3840x2160 p30 16/9"; - case HDMI_VFRMT_3840x2160p25_16_9: return "3840x2160 p25 16/9"; - case HDMI_VFRMT_3840x2160p24_16_9: return "3840x2160 p24 16/9"; - case HDMI_VFRMT_4096x2160p24_16_9: return "4096x2160 p24 16/9"; - default: return "???"; - } -} /* hdmi_get_video_fmt_2string */ + /* Add all supported CEA modes to the lut */ + MSM_HDMI_MODES_SET_SUPP_TIMINGS( + hdmi_supported_video_mode_lut, MSM_HDMI_MODES_CEA); + + /* Add all supported extended hdmi modes to the lut */ + MSM_HDMI_MODES_SET_SUPP_TIMINGS( + hdmi_supported_video_mode_lut, MSM_HDMI_MODES_XTND); + + /* Add any other specific DVI timings (DVI modes, etc.) */ + MSM_HDMI_MODES_SET_TIMING(hdmi_supported_video_mode_lut, + HDMI_VFRMT_2560x1600p60_16_9); +} /* hdmi_setup_video_mode_lut */ const char *hdmi_get_single_video_3d_fmt_2string(u32 format) { diff --git a/drivers/video/fbdev/msm/mdss_hdmi_util.h b/drivers/video/fbdev/msm/mdss_hdmi_util.h index 914aac1a96c6..cf423465ce13 100644 --- a/drivers/video/fbdev/msm/mdss_hdmi_util.h +++ b/drivers/video/fbdev/msm/mdss_hdmi_util.h @@ -13,6 +13,7 @@ #ifndef __HDMI_UTIL_H__ #define __HDMI_UTIL_H__ #include "mdss_io_util.h" +#include "video/msm_hdmi_modes.h" /* HDMI_TX Registers */ #define HDMI_CTRL (0x00000000) @@ -218,166 +219,6 @@ #define HDCP_KSV_LSB (0x000060D8) #define HDCP_KSV_MSB (0x000060DC) -/* all video formats defined by EIA CEA-861-E */ -#define HDMI_VFRMT_640x480p60_4_3 0 -#define HDMI_VFRMT_720x480p60_4_3 1 -#define HDMI_VFRMT_720x480p60_16_9 2 -#define HDMI_VFRMT_1280x720p60_16_9 3 -#define HDMI_VFRMT_1920x1080i60_16_9 4 -#define HDMI_VFRMT_720x480i60_4_3 5 -#define HDMI_VFRMT_1440x480i60_4_3 HDMI_VFRMT_720x480i60_4_3 -#define HDMI_VFRMT_720x480i60_16_9 6 -#define HDMI_VFRMT_1440x480i60_16_9 HDMI_VFRMT_720x480i60_16_9 -#define HDMI_VFRMT_720x240p60_4_3 7 -#define HDMI_VFRMT_1440x240p60_4_3 HDMI_VFRMT_720x240p60_4_3 -#define HDMI_VFRMT_720x240p60_16_9 8 -#define HDMI_VFRMT_1440x240p60_16_9 HDMI_VFRMT_720x240p60_16_9 -#define HDMI_VFRMT_2880x480i60_4_3 9 -#define HDMI_VFRMT_2880x480i60_16_9 10 -#define HDMI_VFRMT_2880x240p60_4_3 11 -#define HDMI_VFRMT_2880x240p60_16_9 12 -#define HDMI_VFRMT_1440x480p60_4_3 13 -#define HDMI_VFRMT_1440x480p60_16_9 14 -#define HDMI_VFRMT_1920x1080p60_16_9 15 -#define HDMI_VFRMT_720x576p50_4_3 16 -#define HDMI_VFRMT_720x576p50_16_9 17 -#define HDMI_VFRMT_1280x720p50_16_9 18 -#define HDMI_VFRMT_1920x1080i50_16_9 19 -#define HDMI_VFRMT_720x576i50_4_3 20 -#define HDMI_VFRMT_1440x576i50_4_3 HDMI_VFRMT_720x576i50_4_3 -#define HDMI_VFRMT_720x576i50_16_9 21 -#define HDMI_VFRMT_1440x576i50_16_9 HDMI_VFRMT_720x576i50_16_9 -#define HDMI_VFRMT_720x288p50_4_3 22 -#define HDMI_VFRMT_1440x288p50_4_3 HDMI_VFRMT_720x288p50_4_3 -#define HDMI_VFRMT_720x288p50_16_9 23 -#define HDMI_VFRMT_1440x288p50_16_9 HDMI_VFRMT_720x288p50_16_9 -#define HDMI_VFRMT_2880x576i50_4_3 24 -#define HDMI_VFRMT_2880x576i50_16_9 25 -#define HDMI_VFRMT_2880x288p50_4_3 26 -#define HDMI_VFRMT_2880x288p50_16_9 27 -#define HDMI_VFRMT_1440x576p50_4_3 28 -#define HDMI_VFRMT_1440x576p50_16_9 29 -#define HDMI_VFRMT_1920x1080p50_16_9 30 -#define HDMI_VFRMT_1920x1080p24_16_9 31 -#define HDMI_VFRMT_1920x1080p25_16_9 32 -#define HDMI_VFRMT_1920x1080p30_16_9 33 -#define HDMI_VFRMT_2880x480p60_4_3 34 -#define HDMI_VFRMT_2880x480p60_16_9 35 -#define HDMI_VFRMT_2880x576p50_4_3 36 -#define HDMI_VFRMT_2880x576p50_16_9 37 -#define HDMI_VFRMT_1920x1250i50_16_9 38 -#define HDMI_VFRMT_1920x1080i100_16_9 39 -#define HDMI_VFRMT_1280x720p100_16_9 40 -#define HDMI_VFRMT_720x576p100_4_3 41 -#define HDMI_VFRMT_720x576p100_16_9 42 -#define HDMI_VFRMT_720x576i100_4_3 43 -#define HDMI_VFRMT_1440x576i100_4_3 HDMI_VFRMT_720x576i100_4_3 -#define HDMI_VFRMT_720x576i100_16_9 44 -#define HDMI_VFRMT_1440x576i100_16_9 HDMI_VFRMT_720x576i100_16_9 -#define HDMI_VFRMT_1920x1080i120_16_9 45 -#define HDMI_VFRMT_1280x720p120_16_9 46 -#define HDMI_VFRMT_720x480p120_4_3 47 -#define HDMI_VFRMT_720x480p120_16_9 48 -#define HDMI_VFRMT_720x480i120_4_3 49 -#define HDMI_VFRMT_1440x480i120_4_3 HDMI_VFRMT_720x480i120_4_3 -#define HDMI_VFRMT_720x480i120_16_9 50 -#define HDMI_VFRMT_1440x480i120_16_9 HDMI_VFRMT_720x480i120_16_9 -#define HDMI_VFRMT_720x576p200_4_3 51 -#define HDMI_VFRMT_720x576p200_16_9 52 -#define HDMI_VFRMT_720x576i200_4_3 53 -#define HDMI_VFRMT_1440x576i200_4_3 HDMI_VFRMT_720x576i200_4_3 -#define HDMI_VFRMT_720x576i200_16_9 54 -#define HDMI_VFRMT_1440x576i200_16_9 HDMI_VFRMT_720x576i200_16_9 -#define HDMI_VFRMT_720x480p240_4_3 55 -#define HDMI_VFRMT_720x480p240_16_9 56 -#define HDMI_VFRMT_720x480i240_4_3 57 -#define HDMI_VFRMT_1440x480i240_4_3 HDMI_VFRMT_720x480i240_4_3 -#define HDMI_VFRMT_720x480i240_16_9 58 -#define HDMI_VFRMT_1440x480i240_16_9 HDMI_VFRMT_720x480i240_16_9 -/* Video Identification Codes from 65-127 are reserved for the future */ -#define HDMI_VFRMT_END 127 -/* extended video formats */ -#define HDMI_VFRMT_3840x2160p30_16_9 (HDMI_VFRMT_END + 1) -#define HDMI_VFRMT_3840x2160p25_16_9 (HDMI_VFRMT_END + 2) -#define HDMI_VFRMT_3840x2160p24_16_9 (HDMI_VFRMT_END + 3) -#define HDMI_VFRMT_4096x2160p24_16_9 (HDMI_VFRMT_END + 4) -#define HDMI_EVFRMT_END HDMI_VFRMT_4096x2160p24_16_9 -/* DVI only resolutions */ -#define HDMI_VFRMT_2560x1600p60_16_9 (HDMI_EVFRMT_END + 1) -#define DVI_VFRMT_END HDMI_VFRMT_2560x1600p60_16_9 -#define HDMI_VFRMT_MAX (DVI_VFRMT_END + 1) -#define HDMI_VFRMT_FORCE_32BIT 0x7FFFFFFF - -#define VFRMT_NOT_SUPPORTED(VFRMT) \ - {VFRMT, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, false} - -#define HDMI_SETTINGS_640x480p60_4_3 \ - {HDMI_VFRMT_640x480p60_4_3, 640, 16, 96, 48, true, \ - 480, 10, 2, 33, true, 25200, 60000, false, true} -#define HDMI_SETTINGS_720x480p60_4_3 \ - {HDMI_VFRMT_720x480p60_4_3, 720, 16, 62, 60, true, \ - 480, 9, 6, 30, true, 27030, 60000, false, true} -#define HDMI_SETTINGS_720x480p60_16_9 \ - {HDMI_VFRMT_720x480p60_16_9, 720, 16, 62, 60, true, \ - 480, 9, 6, 30, true, 27030, 60000, false, true} -#define HDMI_SETTINGS_1280x720p60_16_9 \ - {HDMI_VFRMT_1280x720p60_16_9, 1280, 110, 40, 220, false, \ - 720, 5, 5, 20, false, 74250, 60000, false, true} -#define HDMI_SETTINGS_1920x1080i60_16_9 \ - {HDMI_VFRMT_1920x1080i60_16_9, 1920, 88, 44, 148, false, \ - 540, 2, 5, 5, false, 74250, 60000, false, true} -#define HDMI_SETTINGS_1440x480i60_4_3 \ - {HDMI_VFRMT_1440x480i60_4_3, 1440, 38, 124, 114, true, \ - 240, 4, 3, 15, true, 27000, 60000, true, true} -#define HDMI_SETTINGS_1440x480i60_16_9 \ - {HDMI_VFRMT_1440x480i60_16_9, 1440, 38, 124, 114, true, \ - 240, 4, 3, 15, true, 27000, 60000, true, true} -#define HDMI_SETTINGS_1920x1080p60_16_9 \ - {HDMI_VFRMT_1920x1080p60_16_9, 1920, 88, 44, 148, false, \ - 1080, 4, 5, 36, false, 148500, 60000, false, true} -#define HDMI_SETTINGS_720x576p50_4_3 \ - {HDMI_VFRMT_720x576p50_4_3, 720, 12, 64, 68, true, \ - 576, 5, 5, 39, true, 27000, 50000, false, true} -#define HDMI_SETTINGS_720x576p50_16_9 \ - {HDMI_VFRMT_720x576p50_16_9, 720, 12, 64, 68, true, \ - 576, 5, 5, 39, true, 27000, 50000, false, true} -#define HDMI_SETTINGS_1280x720p50_16_9 \ - {HDMI_VFRMT_1280x720p50_16_9, 1280, 440, 40, 220, false, \ - 720, 5, 5, 20, false, 74250, 50000, false, true} -#define HDMI_SETTINGS_1440x576i50_4_3 \ - {HDMI_VFRMT_1440x576i50_4_3, 1440, 24, 126, 138, true, \ - 288, 2, 3, 19, true, 27000, 50000, true, true} -#define HDMI_SETTINGS_1440x576i50_16_9 \ - {HDMI_VFRMT_1440x576i50_16_9, 1440, 24, 126, 138, true, \ - 288, 2, 3, 19, true, 27000, 50000, true, true} -#define HDMI_SETTINGS_1920x1080p50_16_9 \ - {HDMI_VFRMT_1920x1080p50_16_9, 1920, 528, 44, 148, false, \ - 1080, 4, 5, 36, false, 148500, 50000, false, true} -#define HDMI_SETTINGS_1920x1080p24_16_9 \ - {HDMI_VFRMT_1920x1080p24_16_9, 1920, 638, 44, 148, false, \ - 1080, 4, 5, 36, false, 74250, 24000, false, true} -#define HDMI_SETTINGS_1920x1080p25_16_9 \ - {HDMI_VFRMT_1920x1080p25_16_9, 1920, 528, 44, 148, false, \ - 1080, 4, 5, 36, false, 74250, 25000, false, true} -#define HDMI_SETTINGS_1920x1080p30_16_9 \ - {HDMI_VFRMT_1920x1080p30_16_9, 1920, 88, 44, 148, false, \ - 1080, 4, 5, 36, false, 74250, 30000, false, true} -#define HDMI_SETTINGS_2560x1600p60_16_9 \ - {HDMI_VFRMT_2560x1600p60_16_9, 2560, 48, 32, 80, false, \ - 1600, 3, 6, 37, false, 268500, 60000, false, true} -#define HDMI_SETTINGS_3840x2160p30_16_9 \ - {HDMI_VFRMT_3840x2160p30_16_9, 3840, 176, 88, 296, false, \ - 2160, 8, 10, 72, false, 297000, 30000, false, true} -#define HDMI_SETTINGS_3840x2160p25_16_9 \ - {HDMI_VFRMT_3840x2160p25_16_9, 3840, 1056, 88, 296, false, \ - 2160, 8, 10, 72, false, 297000, 25000, false, true} -#define HDMI_SETTINGS_3840x2160p24_16_9 \ - {HDMI_VFRMT_3840x2160p24_16_9, 3840, 1276, 88, 296, false, \ - 2160, 8, 10, 72, false, 297000, 24000, false, true} -#define HDMI_SETTINGS_4096x2160p24_16_9 \ - {HDMI_VFRMT_4096x2160p24_16_9, 4096, 1020, 88, 296, false, \ - 2160, 8, 10, 72, false, 297000, 24000, false, true} - #define TOP_AND_BOTTOM 0x10 #define FRAME_PACKING 0x20 #define SIDE_BY_SIDE_HALF 0x40 @@ -389,26 +230,6 @@ enum hdmi_tx_feature_type { HDMI_TX_FEAT_MAX, }; -struct hdmi_disp_mode_timing_type { - u32 video_format; - u32 active_h; - u32 front_porch_h; - u32 pulse_width_h; - u32 back_porch_h; - u32 active_low_h; - u32 active_v; - u32 front_porch_v; - u32 pulse_width_v; - u32 back_porch_v; - u32 active_low_v; - /* Must divide by 1000 to get the actual frequency in MHZ */ - u32 pixel_freq; - /* Must divide by 1000 to get the actual frequency in HZ */ - u32 refresh_rate; - u32 interlaced; - u32 supported; -}; - struct hdmi_tx_ddc_ctrl { struct dss_io_data *io; struct completion ddc_sw_done; @@ -426,12 +247,10 @@ struct hdmi_tx_ddc_data { }; /* video timing related utility routines */ -void hdmi_init_supported_video_timings(void); -int hdmi_get_video_id_code(struct hdmi_disp_mode_timing_type *timing_in); -const struct hdmi_disp_mode_timing_type *hdmi_get_supported_mode(u32 mode); -void hdmi_set_supported_mode(u32 mode); +void hdmi_setup_video_mode_lut(void); +int hdmi_get_video_id_code(struct msm_hdmi_mode_timing_info *timing_in); +const struct msm_hdmi_mode_timing_info *hdmi_get_supported_mode(u32 mode); void hdmi_del_supported_mode(u32 mode); -const char *hdmi_get_video_fmt_2string(u32 format); ssize_t hdmi_get_video_3d_fmt_2string(u32 format, char *buf); /* todo: Fix this. Right now this is defined in mdss_hdmi_tx.c */ |
