aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/intel_sdvo.c
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2010-08-04 08:50:29 -0400
committerEric Anholt <eric@anholt.net>2010-08-09 14:24:29 -0400
commite044218a8ecb560b6fad65912a4e7e509db40414 (patch)
treedb1ade3dedc4a2dd20662e6150eb2361e4a775b8 /drivers/gpu/drm/i915/intel_sdvo.c
parentc55217064eb728fc9348de781979b533e7cc116c (diff)
drm/i915/sdvo: Add dot crawl property
This property is slightly unusual in that it is a boolean and so has no GET_MAX command. Reference: Bug 28636 - missing TV parameter "Dot Crawl freeze" https://bugs.freedesktop.org/show_bug.cgi?id=28636 Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Signed-off-by: Eric Anholt <eric@anholt.net>
Diffstat (limited to 'drivers/gpu/drm/i915/intel_sdvo.c')
-rw-r--r--drivers/gpu/drm/i915/intel_sdvo.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c
index 2344fb05679..1e31724d161 100644
--- a/drivers/gpu/drm/i915/intel_sdvo.c
+++ b/drivers/gpu/drm/i915/intel_sdvo.c
@@ -161,6 +161,7 @@ struct intel_sdvo_connector {
161 struct drm_property *flicker_filter_2d; 161 struct drm_property *flicker_filter_2d;
162 struct drm_property *tv_chroma_filter; 162 struct drm_property *tv_chroma_filter;
163 struct drm_property *tv_luma_filter; 163 struct drm_property *tv_luma_filter;
164 struct drm_property *dot_crawl;
164 165
165 /* add the property for the SDVO-TV/LVDS */ 166 /* add the property for the SDVO-TV/LVDS */
166 struct drm_property *brightness; 167 struct drm_property *brightness;
@@ -182,6 +183,7 @@ struct intel_sdvo_connector {
182 u32 cur_flicker_filter_2d, max_flicker_filter_2d; 183 u32 cur_flicker_filter_2d, max_flicker_filter_2d;
183 u32 cur_tv_chroma_filter, max_tv_chroma_filter; 184 u32 cur_tv_chroma_filter, max_tv_chroma_filter;
184 u32 cur_tv_luma_filter, max_tv_luma_filter; 185 u32 cur_tv_luma_filter, max_tv_luma_filter;
186 u32 cur_dot_crawl, max_dot_crawl;
185}; 187};
186 188
187static struct intel_sdvo *enc_to_intel_sdvo(struct drm_encoder *encoder) 189static struct intel_sdvo *enc_to_intel_sdvo(struct drm_encoder *encoder)
@@ -1751,6 +1753,8 @@ intel_sdvo_destroy_enhance_property(struct drm_connector *connector)
1751 drm_property_destroy(dev, intel_sdvo_connector->tv_luma_filter); 1753 drm_property_destroy(dev, intel_sdvo_connector->tv_luma_filter);
1752 if (intel_sdvo_connector->tv_chroma_filter) 1754 if (intel_sdvo_connector->tv_chroma_filter)
1753 drm_property_destroy(dev, intel_sdvo_connector->tv_chroma_filter); 1755 drm_property_destroy(dev, intel_sdvo_connector->tv_chroma_filter);
1756 if (intel_sdvo_connector->dot_crawl)
1757 drm_property_destroy(dev, intel_sdvo_connector->dot_crawl);
1754 if (intel_sdvo_connector->brightness) 1758 if (intel_sdvo_connector->brightness)
1755 drm_property_destroy(dev, intel_sdvo_connector->brightness); 1759 drm_property_destroy(dev, intel_sdvo_connector->brightness);
1756} 1760}
@@ -1867,6 +1871,7 @@ intel_sdvo_set_property(struct drm_connector *connector,
1867 CHECK_PROPERTY(flicker_filter_adaptive, FLICKER_FILTER_ADAPTIVE) 1871 CHECK_PROPERTY(flicker_filter_adaptive, FLICKER_FILTER_ADAPTIVE)
1868 CHECK_PROPERTY(tv_chroma_filter, TV_CHROMA_FILTER) 1872 CHECK_PROPERTY(tv_chroma_filter, TV_CHROMA_FILTER)
1869 CHECK_PROPERTY(tv_luma_filter, TV_LUMA_FILTER) 1873 CHECK_PROPERTY(tv_luma_filter, TV_LUMA_FILTER)
1874 CHECK_PROPERTY(dot_crawl, DOT_CRAWL)
1870 } 1875 }
1871 1876
1872 return -EINVAL; /* unknown property */ 1877 return -EINVAL; /* unknown property */
@@ -2439,6 +2444,25 @@ intel_sdvo_create_enhance_property_tv(struct intel_sdvo *intel_sdvo,
2439 ENHANCEMENT(tv_chroma_filter, TV_CHROMA_FILTER); 2444 ENHANCEMENT(tv_chroma_filter, TV_CHROMA_FILTER);
2440 ENHANCEMENT(tv_luma_filter, TV_LUMA_FILTER); 2445 ENHANCEMENT(tv_luma_filter, TV_LUMA_FILTER);
2441 2446
2447 if (enhancements.dot_crawl) {
2448 if (!intel_sdvo_get_value(intel_sdvo, SDVO_CMD_GET_DOT_CRAWL, &response, 2))
2449 return false;
2450
2451 intel_sdvo_connector->max_dot_crawl = 1;
2452 intel_sdvo_connector->cur_dot_crawl = response & 0x1;
2453 intel_sdvo_connector->dot_crawl =
2454 drm_property_create(dev, DRM_MODE_PROP_RANGE, "dot_crawl", 2);
2455 if (!intel_sdvo_connector->dot_crawl)
2456 return false;
2457
2458 intel_sdvo_connector->dot_crawl->values[0] = 0;
2459 intel_sdvo_connector->dot_crawl->values[1] = 1;
2460 drm_connector_attach_property(connector,
2461 intel_sdvo_connector->dot_crawl,
2462 intel_sdvo_connector->cur_dot_crawl);
2463 DRM_DEBUG_KMS("dot crawl: current %d\n", response);
2464 }
2465
2442 return true; 2466 return true;
2443} 2467}
2444 2468