[Intel-gfx] [PATCH 1/4] drm/i915: Add fixed panel mode parsed from EDID for eDP without fixed mode in VBT
From: Zhao Yakui yakui.z...@intel.com Signed-off-by: Zhao Yakui yakui.z...@intel.com Reviewed-by: Chris Wilson ch...@chris-wilson.co.uk Cc: sta...@kernel.org --- drivers/gpu/drm/i915/intel_dp.c | 16 +++- 1 files changed, 15 insertions(+), 1 deletions(-) diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c index b4f0282..74d026c 100644 --- a/drivers/gpu/drm/i915/intel_dp.c +++ b/drivers/gpu/drm/i915/intel_dp.c @@ -1325,8 +1325,22 @@ static int intel_dp_get_modes(struct drm_connector *connector) */ ret = intel_ddc_get_modes(connector, intel_encoder-ddc_bus); - if (ret) + if (ret) { + if ((IS_eDP(intel_encoder) || IS_PCH_eDP(dp_priv)) + !dev_priv-panel_fixed_mode) { + struct drm_display_mode *newmode; + list_for_each_entry(newmode, connector-probed_modes, + head) { + if (newmode-type DRM_MODE_TYPE_PREFERRED) { + dev_priv-panel_fixed_mode = + drm_mode_duplicate(dev, newmode); + break; + } + } + } + return ret; + } /* if eDP has no EDID, try to use fixed panel mode from VBT */ if (IS_eDP(intel_encoder) || IS_PCH_eDP(dp_priv)) { -- 1.7.1 ___ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/intel-gfx
[Intel-gfx] [PATCH 4/7] drm/i915/sdvo: Use an integer mapping for supported tv format modes
Signed-off-by: Chris Wilson ch...@chris-wilson.co.uk --- drivers/gpu/drm/i915/intel_sdvo.c | 34 +++--- 1 files changed, 11 insertions(+), 23 deletions(-) diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c index ba50755..a30d751 100644 --- a/drivers/gpu/drm/i915/intel_sdvo.c +++ b/drivers/gpu/drm/i915/intel_sdvo.c @@ -98,7 +98,7 @@ struct intel_sdvo { bool is_tv; /* This is for current tv format name */ - char *tv_format_name; + int tv_format_index; /** * This is set if we treat the device as HDMI, instead of DVI. @@ -141,7 +141,7 @@ struct intel_sdvo_connector { uint16_t output_flag; /* This contains all current supported TV format */ - char *tv_format_supported[TV_FORMAT_NUM]; + u8 tv_format_supported[TV_FORMAT_NUM]; int format_supported_num; struct drm_property *tv_format_property; struct drm_property *tv_format_name_property[TV_FORMAT_NUM]; @@ -958,13 +958,9 @@ static bool intel_sdvo_set_avi_infoframe(struct intel_sdvo *intel_sdvo, static bool intel_sdvo_set_tv_format(struct intel_sdvo *intel_sdvo) { struct intel_sdvo_tv_format format; - uint32_t format_map, i; - - for (i = 0; i TV_FORMAT_NUM; i++) - if (tv_format_names[i] == intel_sdvo-tv_format_name) - break; + uint32_t format_map; - format_map = 1 i; + format_map = 1 intel_sdvo-tv_format_index; memset(format, 0, sizeof(format)); memcpy(format, format_map, min(sizeof(format), sizeof(format_map))); @@ -1612,11 +1608,7 @@ static void intel_sdvo_get_tv_modes(struct drm_connector *connector) /* Read the list of supported input resolutions for the selected TV * format. */ - for (i = 0; i TV_FORMAT_NUM; i++) - if (tv_format_names[i] == intel_sdvo-tv_format_name) - break; - - format_map = (1 i); + format_map = 1 intel_sdvo-tv_format_index; memcpy(tv_res, format_map, min(sizeof(format_map), sizeof(struct intel_sdvo_sdtv_resolution_request))); @@ -1638,7 +1630,6 @@ static void intel_sdvo_get_tv_modes(struct drm_connector *connector) if (nmode) drm_mode_probed_add(connector, nmode); } - } static void intel_sdvo_get_lvds_modes(struct drm_connector *connector) @@ -1766,11 +1757,11 @@ intel_sdvo_set_property(struct drm_connector *connector, if (val = TV_FORMAT_NUM) return -EINVAL; - if (intel_sdvo-tv_format_name == + if (intel_sdvo-tv_format_index == intel_sdvo_connector-tv_format_supported[val]) return 0; - intel_sdvo-tv_format_name = intel_sdvo_connector-tv_format_supported[val]; + intel_sdvo-tv_format_index = intel_sdvo_connector-tv_format_supported[val]; changed = true; } else if (IS_TV_OR_LVDS(intel_sdvo_connector)) { cmd = 0; @@ -2269,11 +2260,8 @@ static bool intel_sdvo_tv_create_property(struct intel_sdvo *intel_sdvo, intel_sdvo_connector-format_supported_num = 0; for (i = 0 ; i TV_FORMAT_NUM; i++) - if (format_map (1 i)) { - intel_sdvo_connector-tv_format_supported - [intel_sdvo_connector-format_supported_num++] = - tv_format_names[i]; - } + if (format_map (1 i)) + intel_sdvo_connector-tv_format_supported[intel_sdvo_connector-format_supported_num++] = i; intel_sdvo_connector-tv_format_property = @@ -2283,9 +2271,9 @@ static bool intel_sdvo_tv_create_property(struct intel_sdvo *intel_sdvo, for (i = 0; i intel_sdvo_connector-format_supported_num; i++) drm_property_add_enum( intel_sdvo_connector-tv_format_property, i, - i, intel_sdvo_connector-tv_format_supported[i]); + i, tv_format_names[intel_sdvo_connector-tv_format_supported[i]]); - intel_sdvo-tv_format_name = intel_sdvo_connector-tv_format_supported[0]; + intel_sdvo-tv_format_index = intel_sdvo_connector-tv_format_supported[0]; drm_connector_attach_property(intel_sdvo_connector-base.base, intel_sdvo_connector-tv_format_property, 0); return true; -- 1.7.1 ___ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/intel-gfx
[Intel-gfx] [PATCH 6/7] drm/i915/sdvo: Add missing TV filters
Reference: Bug 28634 - missing TV parameter Flicker Filter https://bugs.freedesktop.org/show_bug.cgi?id=28634 Signed-off-by: Chris Wilson ch...@chris-wilson.co.uk --- drivers/gpu/drm/i915/intel_sdvo.c | 644 ++-- drivers/gpu/drm/i915/intel_sdvo_regs.h | 48 ++-- 2 files changed, 308 insertions(+), 384 deletions(-) diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c index d5f1b27..39ef9ce 100644 --- a/drivers/gpu/drm/i915/intel_sdvo.c +++ b/drivers/gpu/drm/i915/intel_sdvo.c @@ -143,31 +143,31 @@ struct intel_sdvo_connector { /* This contains all current supported TV format */ u8 tv_format_supported[TV_FORMAT_NUM]; int format_supported_num; - struct drm_property *tv_format_property; - struct drm_property *tv_format_name_property[TV_FORMAT_NUM]; - - /** -* Returned SDTV resolutions allowed for the current format, if the -* device reported it. -*/ - struct intel_sdvo_sdtv_resolution_reply sdtv_resolutions; + struct drm_property *tv_format; /* add the property for the SDVO-TV */ - struct drm_property *left_property; - struct drm_property *right_property; - struct drm_property *top_property; - struct drm_property *bottom_property; - struct drm_property *hpos_property; - struct drm_property *vpos_property; + struct drm_property *left; + struct drm_property *right; + struct drm_property *top; + struct drm_property *bottom; + struct drm_property *hpos; + struct drm_property *vpos; + struct drm_property *contrast; + struct drm_property *saturation; + struct drm_property *hue; + struct drm_property *sharpness; + struct drm_property *flicker_filter; + struct drm_property *flicker_filter_adaptive; + struct drm_property *flicker_filter_2d; + struct drm_property *tv_chroma_filter; + struct drm_property *tv_luma_filter; /* add the property for the SDVO-TV/LVDS */ - struct drm_property *brightness_property; - struct drm_property *contrast_property; - struct drm_property *saturation_property; - struct drm_property *hue_property; + struct drm_property *brightness; /* Add variable to record current setting for the above property */ u32 left_margin, right_margin, top_margin, bottom_margin; + /* this is to get the range of margin.*/ u32 max_hscan, max_vscan; u32 max_hpos, cur_hpos; @@ -176,6 +176,12 @@ struct intel_sdvo_connector { u32 cur_contrast, max_contrast; u32 cur_saturation, max_saturation; u32 cur_hue,max_hue; + u32 cur_sharpness, max_sharpness; + u32 cur_flicker_filter, max_flicker_filter; + u32 cur_flicker_filter_adaptive,max_flicker_filter_adaptive; + u32 cur_flicker_filter_2d, max_flicker_filter_2d; + u32 cur_tv_chroma_filter, max_tv_chroma_filter; + u32 cur_tv_luma_filter, max_tv_luma_filter; }; static struct intel_sdvo *enc_to_intel_sdvo(struct drm_encoder *encoder) @@ -329,13 +335,14 @@ static const struct _sdvo_cmd_name { SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_SDTV_RESOLUTION_SUPPORT), SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_SCALED_HDTV_RESOLUTION_SUPPORT), SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_SUPPORTED_ENHANCEMENTS), + /* Add the op code for SDVO enhancements */ -SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_MAX_POSITION_H), -SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_POSITION_H), -SDVO_CMD_NAME_ENTRY(SDVO_CMD_SET_POSITION_H), -SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_MAX_POSITION_V), -SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_POSITION_V), -SDVO_CMD_NAME_ENTRY(SDVO_CMD_SET_POSITION_V), +SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_MAX_HPOS), +SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_HPOS), +SDVO_CMD_NAME_ENTRY(SDVO_CMD_SET_HPOS), +SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_MAX_VPOS), +SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_VPOS), +SDVO_CMD_NAME_ENTRY(SDVO_CMD_SET_VPOS), SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_MAX_SATURATION), SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_SATURATION), SDVO_CMD_NAME_ENTRY(SDVO_CMD_SET_SATURATION), @@ -354,6 +361,27 @@ static const struct _sdvo_cmd_name { SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_MAX_OVERSCAN_V), SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_OVERSCAN_V), SDVO_CMD_NAME_ENTRY(SDVO_CMD_SET_OVERSCAN_V), +SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_MAX_FLICKER_FILTER), +SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_FLICKER_FILTER), +SDVO_CMD_NAME_ENTRY(SDVO_CMD_SET_FLICKER_FILTER), +SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_MAX_FLICKER_FILTER_ADAPTIVE), +SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_FLICKER_FILTER_ADAPTIVE), +SDVO_CMD_NAME_ENTRY(SDVO_CMD_SET_FLICKER_FILTER_ADAPTIVE), +SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_MAX_FLICKER_FILTER_2D), +SDVO_CMD_NAME_ENTRY(SDVO_CMD_GET_FLICKER_FILTER_2D), +