View | Details | Raw Unified | Return to bug 94921 | Differences between
and this patch

Collapse All | Expand All

(-)a/drivers/gpu/drm/i915/i915_drv.h (-3 / +2 lines)
Lines 3287-3295 int intel_freq_opcode(struct drm_i915_private *dev_priv, int val); Link Here
3287
#define POSTING_READ16(reg)	(void)I915_READ16_NOTRACE(reg)
3287
#define POSTING_READ16(reg)	(void)I915_READ16_NOTRACE(reg)
3288
3288
3289
/* "Broadcast RGB" property */
3289
/* "Broadcast RGB" property */
3290
#define INTEL_BROADCAST_RGB_AUTO 0
3290
#define INTEL_BROADCAST_RGB_FULL 0
3291
#define INTEL_BROADCAST_RGB_FULL 1
3291
#define INTEL_BROADCAST_RGB_LIMITED 1
3292
#define INTEL_BROADCAST_RGB_LIMITED 2
3293
3292
3294
static inline uint32_t i915_vgacntrl_reg(struct drm_device *dev)
3293
static inline uint32_t i915_vgacntrl_reg(struct drm_device *dev)
3295
{
3294
{
(-)a/drivers/gpu/drm/i915/intel_dp.c (-21 / +2 lines)
Lines 1238-1255 intel_dp_compute_config(struct intel_encoder *encoder, Link Here
1238
	return false;
1238
	return false;
1239
1239
1240
found:
1240
found:
1241
	if (intel_dp->color_range_auto) {
1242
		/*
1243
		 * See:
1244
		 * CEA-861-E - 5.1 Default Encoding Parameters
1245
		 * VESA DisplayPort Ver.1.2a - 5.1.1.1 Video Colorimetry
1246
		 */
1247
		if (bpp != 18 && drm_match_cea_mode(adjusted_mode) > 1)
1248
			intel_dp->color_range = DP_COLOR_RANGE_16_235;
1249
		else
1250
			intel_dp->color_range = 0;
1251
	}
1252
1253
	if (intel_dp->color_range)
1241
	if (intel_dp->color_range)
1254
		pipe_config->limited_color_range = true;
1242
		pipe_config->limited_color_range = true;
1255
1243
Lines 4220-4246 intel_dp_set_property(struct drm_connector *connector, Link Here
4220
	}
4208
	}
4221
4209
4222
	if (property == dev_priv->broadcast_rgb_property) {
4210
	if (property == dev_priv->broadcast_rgb_property) {
4223
		bool old_auto = intel_dp->color_range_auto;
4224
		uint32_t old_range = intel_dp->color_range;
4211
		uint32_t old_range = intel_dp->color_range;
4225
4212
4226
		switch (val) {
4213
		switch (val) {
4227
		case INTEL_BROADCAST_RGB_AUTO:
4228
			intel_dp->color_range_auto = true;
4229
			break;
4230
		case INTEL_BROADCAST_RGB_FULL:
4214
		case INTEL_BROADCAST_RGB_FULL:
4231
			intel_dp->color_range_auto = false;
4232
			intel_dp->color_range = 0;
4215
			intel_dp->color_range = 0;
4233
			break;
4216
			break;
4234
		case INTEL_BROADCAST_RGB_LIMITED:
4217
		case INTEL_BROADCAST_RGB_LIMITED:
4235
			intel_dp->color_range_auto = false;
4236
			intel_dp->color_range = DP_COLOR_RANGE_16_235;
4218
			intel_dp->color_range = DP_COLOR_RANGE_16_235;
4237
			break;
4219
			break;
4238
		default:
4220
		default:
4239
			return -EINVAL;
4221
			return -EINVAL;
4240
		}
4222
		}
4241
4223
4242
		if (old_auto == intel_dp->color_range_auto &&
4224
		if (old_range == intel_dp->color_range)
4243
		    old_range == intel_dp->color_range)
4244
			return 0;
4225
			return 0;
4245
4226
4246
		goto done;
4227
		goto done;
Lines 4548-4554 intel_dp_add_properties(struct intel_dp *intel_dp, struct drm_connector *connect Link Here
4548
4529
4549
	intel_attach_force_audio_property(connector);
4530
	intel_attach_force_audio_property(connector);
4550
	intel_attach_broadcast_rgb_property(connector);
4531
	intel_attach_broadcast_rgb_property(connector);
4551
	intel_dp->color_range_auto = true;
4532
	intel_dp->color_range = 0;
4552
4533
4553
	if (is_edp(intel_dp)) {
4534
	if (is_edp(intel_dp)) {
4554
		drm_mode_create_scaling_mode_property(connector->dev);
4535
		drm_mode_create_scaling_mode_property(connector->dev);
(-)a/drivers/gpu/drm/i915/intel_hdmi.c (-18 / +2 lines)
Lines 990-1004 bool intel_hdmi_compute_config(struct intel_encoder *encoder, Link Here
990
	if (pipe_config->has_hdmi_sink)
990
	if (pipe_config->has_hdmi_sink)
991
		pipe_config->has_infoframe = true;
991
		pipe_config->has_infoframe = true;
992
992
993
	if (intel_hdmi->color_range_auto) {
994
		/* See CEA-861-E - 5.1 Default Encoding Parameters */
995
		if (pipe_config->has_hdmi_sink &&
996
		    drm_match_cea_mode(adjusted_mode) > 1)
997
			intel_hdmi->color_range = HDMI_COLOR_RANGE_16_235;
998
		else
999
			intel_hdmi->color_range = 0;
1000
	}
1001
1002
	if (adjusted_mode->flags & DRM_MODE_FLAG_DBLCLK) {
993
	if (adjusted_mode->flags & DRM_MODE_FLAG_DBLCLK) {
1003
		pipe_config->pixel_multiplier = 2;
994
		pipe_config->pixel_multiplier = 2;
1004
	}
995
	}
Lines 1196-1222 intel_hdmi_set_property(struct drm_connector *connector, Link Here
1196
	}
1187
	}
1197
1188
1198
	if (property == dev_priv->broadcast_rgb_property) {
1189
	if (property == dev_priv->broadcast_rgb_property) {
1199
		bool old_auto = intel_hdmi->color_range_auto;
1200
		uint32_t old_range = intel_hdmi->color_range;
1190
		uint32_t old_range = intel_hdmi->color_range;
1201
1191
1202
		switch (val) {
1192
		switch (val) {
1203
		case INTEL_BROADCAST_RGB_AUTO:
1204
			intel_hdmi->color_range_auto = true;
1205
			break;
1206
		case INTEL_BROADCAST_RGB_FULL:
1193
		case INTEL_BROADCAST_RGB_FULL:
1207
			intel_hdmi->color_range_auto = false;
1208
			intel_hdmi->color_range = 0;
1194
			intel_hdmi->color_range = 0;
1209
			break;
1195
			break;
1210
		case INTEL_BROADCAST_RGB_LIMITED:
1196
		case INTEL_BROADCAST_RGB_LIMITED:
1211
			intel_hdmi->color_range_auto = false;
1212
			intel_hdmi->color_range = HDMI_COLOR_RANGE_16_235;
1197
			intel_hdmi->color_range = HDMI_COLOR_RANGE_16_235;
1213
			break;
1198
			break;
1214
		default:
1199
		default:
1215
			return -EINVAL;
1200
			return -EINVAL;
1216
		}
1201
		}
1217
1202
1218
		if (old_auto == intel_hdmi->color_range_auto &&
1203
		if (old_range == intel_hdmi->color_range)
1219
		    old_range == intel_hdmi->color_range)
1220
			return 0;
1204
			return 0;
1221
1205
1222
		goto done;
1206
		goto done;
Lines 1644-1650 intel_hdmi_add_properties(struct intel_hdmi *intel_hdmi, struct drm_connector *c Link Here
1644
{
1628
{
1645
	intel_attach_force_audio_property(connector);
1629
	intel_attach_force_audio_property(connector);
1646
	intel_attach_broadcast_rgb_property(connector);
1630
	intel_attach_broadcast_rgb_property(connector);
1647
	intel_hdmi->color_range_auto = true;
1631
	intel_hdmi->color_range = 0;
1648
	intel_attach_aspect_ratio_property(connector);
1632
	intel_attach_aspect_ratio_property(connector);
1649
	intel_hdmi->aspect_ratio = HDMI_PICTURE_ASPECT_NONE;
1633
	intel_hdmi->aspect_ratio = HDMI_PICTURE_ASPECT_NONE;
1650
}
1634
}
(-)a/drivers/gpu/drm/i915/intel_modes.c (-1 lines)
Lines 100-106 intel_attach_force_audio_property(struct drm_connector *connector) Link Here
100
}
100
}
101
101
102
static const struct drm_prop_enum_list broadcast_rgb_names[] = {
102
static const struct drm_prop_enum_list broadcast_rgb_names[] = {
103
	{ INTEL_BROADCAST_RGB_AUTO, "Automatic" },
104
	{ INTEL_BROADCAST_RGB_FULL, "Full" },
103
	{ INTEL_BROADCAST_RGB_FULL, "Full" },
105
	{ INTEL_BROADCAST_RGB_LIMITED, "Limited 16:235" },
104
	{ INTEL_BROADCAST_RGB_LIMITED, "Limited 16:235" },
106
};
105
};
(-)a/drivers/gpu/drm/i915/intel_sdvo.c (-24 / +5 lines)
Lines 104-110 struct intel_sdvo { Link Here
104
	 * It is only valid when using TMDS encoding and 8 bit per color mode.
104
	 * It is only valid when using TMDS encoding and 8 bit per color mode.
105
	 */
105
	 */
106
	uint32_t color_range;
106
	uint32_t color_range;
107
	bool color_range_auto;
108
107
109
	/**
108
	/**
110
	 * This is set if we're going to treat the device as TV-out.
109
	 * This is set if we're going to treat the device as TV-out.
Lines 1156-1173 static bool intel_sdvo_compute_config(struct intel_encoder *encoder, Link Here
1156
1155
1157
	pipe_config->has_hdmi_sink = intel_sdvo->has_hdmi_monitor;
1156
	pipe_config->has_hdmi_sink = intel_sdvo->has_hdmi_monitor;
1158
1157
1159
	if (intel_sdvo->color_range_auto) {
1158
	if (pipe_config->has_hdmi_sink &&
1160
		/* See CEA-861-E - 5.1 Default Encoding Parameters */
1159
	    intel_sdvo->color_range == HDMI_COLOR_RANGE_16_235)
1161
		/* FIXME: This bit is only valid when using TMDS encoding and 8
1160
		pipe_config->limited_color_range = true;
1162
		 * bit per color mode. */
1163
		if (pipe_config->has_hdmi_sink &&
1164
		    drm_match_cea_mode(adjusted_mode) > 1)
1165
			pipe_config->limited_color_range = true;
1166
	} else {
1167
		if (pipe_config->has_hdmi_sink &&
1168
		    intel_sdvo->color_range == HDMI_COLOR_RANGE_16_235)
1169
			pipe_config->limited_color_range = true;
1170
	}
1171
1161
1172
	/* Clock computation needs to happen after pixel multiplier. */
1162
	/* Clock computation needs to happen after pixel multiplier. */
1173
	if (intel_sdvo->is_tv)
1163
	if (intel_sdvo->is_tv)
Lines 2058-2086 intel_sdvo_set_property(struct drm_connector *connector, Link Here
2058
	}
2048
	}
2059
2049
2060
	if (property == dev_priv->broadcast_rgb_property) {
2050
	if (property == dev_priv->broadcast_rgb_property) {
2061
		bool old_auto = intel_sdvo->color_range_auto;
2062
		uint32_t old_range = intel_sdvo->color_range;
2051
		uint32_t old_range = intel_sdvo->color_range;
2063
2052
2064
		switch (val) {
2053
		switch (val) {
2065
		case INTEL_BROADCAST_RGB_AUTO:
2066
			intel_sdvo->color_range_auto = true;
2067
			break;
2068
		case INTEL_BROADCAST_RGB_FULL:
2054
		case INTEL_BROADCAST_RGB_FULL:
2069
			intel_sdvo->color_range_auto = false;
2070
			intel_sdvo->color_range = 0;
2055
			intel_sdvo->color_range = 0;
2071
			break;
2056
			break;
2072
		case INTEL_BROADCAST_RGB_LIMITED:
2057
		case INTEL_BROADCAST_RGB_LIMITED:
2073
			intel_sdvo->color_range_auto = false;
2074
			/* FIXME: this bit is only valid when using TMDS
2075
			 * encoding and 8 bit per color mode. */
2076
			intel_sdvo->color_range = HDMI_COLOR_RANGE_16_235;
2058
			intel_sdvo->color_range = HDMI_COLOR_RANGE_16_235;
2077
			break;
2059
			break;
2078
		default:
2060
		default:
2079
			return -EINVAL;
2061
			return -EINVAL;
2080
		}
2062
		}
2081
2063
2082
		if (old_auto == intel_sdvo->color_range_auto &&
2064
		if (old_range == intel_sdvo->color_range)
2083
		    old_range == intel_sdvo->color_range)
2084
			return 0;
2065
			return 0;
2085
2066
2086
		goto done;
2067
		goto done;
Lines 2421-2427 intel_sdvo_add_hdmi_properties(struct intel_sdvo *intel_sdvo, Link Here
2421
	intel_attach_force_audio_property(&connector->base.base);
2402
	intel_attach_force_audio_property(&connector->base.base);
2422
	if (INTEL_INFO(dev)->gen >= 4 && IS_MOBILE(dev)) {
2403
	if (INTEL_INFO(dev)->gen >= 4 && IS_MOBILE(dev)) {
2423
		intel_attach_broadcast_rgb_property(&connector->base.base);
2404
		intel_attach_broadcast_rgb_property(&connector->base.base);
2424
		intel_sdvo->color_range_auto = true;
2405
		intel_sdvo->color_range = 0;
2425
	}
2406
	}
2426
}
2407
}
2427
2408

Return to bug 94921