[Intel-gfx] [PATCH 1/4] drm/i915: Add fixed panel mode parsed from EDID for eDP without fixed mode in VBT

2010-07-19 Thread Chris Wilson
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

2010-07-19 Thread Chris Wilson
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

2010-07-19 Thread Chris Wilson
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),
+