Subversion Repositories Kolibri OS

Rev

Rev 3764 | Rev 5271 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 3764 Rev 5078
Line 29... Line 29...
29
#include 
29
#include 
30
#include 
30
#include 
31
#include "radeon.h"
31
#include "radeon.h"
32
#include "atom.h"
32
#include "atom.h"
Line 33... Line -...
33
 
-
 
Line 34... Line -...
34
#define DISABLE_DP 0
-
 
35
 
-
 
36
 
-
 
37
extern void
-
 
38
radeon_combios_connected_scratch_regs(struct drm_connector *connector,
-
 
39
				      struct drm_encoder *encoder,
-
 
40
				      bool connected);
-
 
41
extern void
-
 
42
radeon_atombios_connected_scratch_regs(struct drm_connector *connector,
-
 
43
				       struct drm_encoder *encoder,
33
 
44
				       bool connected);
34
 
45
 
35
 
46
void radeon_connector_hotplug(struct drm_connector *connector)
36
void radeon_connector_hotplug(struct drm_connector *connector)
47
{
37
{
Line 56... Line 46...
56
		return;
46
		return;
Line 57... Line 47...
57
 
47
 
Line 58... Line 48...
58
		radeon_hpd_set_polarity(rdev, radeon_connector->hpd.hpd);
48
		radeon_hpd_set_polarity(rdev, radeon_connector->hpd.hpd);
-
 
49
 
59
 
50
	/* if the connector is already off, don't turn it back on */
60
	/* if the connector is already off, don't turn it back on */
51
	/* FIXME: This access isn't protected by any locks. */
Line 61... Line 52...
61
	if (connector->dpms != DRM_MODE_DPMS_ON)
52
	if (connector->dpms != DRM_MODE_DPMS_ON)
62
		return;
53
		return;
Line 97... Line 88...
97
{
88
{
98
	struct drm_crtc *crtc = encoder->crtc;
89
	struct drm_crtc *crtc = encoder->crtc;
Line 99... Line 90...
99
 
90
 
100
	if (crtc && crtc->enabled) {
91
	if (crtc && crtc->enabled) {
101
		drm_crtc_helper_set_mode(crtc, &crtc->mode,
92
		drm_crtc_helper_set_mode(crtc, &crtc->mode,
102
					 crtc->x, crtc->y, crtc->fb);
93
					 crtc->x, crtc->y, crtc->primary->fb);
103
	}
94
	}
Line 104... Line 95...
104
}
95
}
105
 
96
 
106
int radeon_get_monitor_bpc(struct drm_connector *connector)
97
int radeon_get_monitor_bpc(struct drm_connector *connector)
107
{
98
{
108
	struct drm_device *dev = connector->dev;
99
	struct drm_device *dev = connector->dev;
109
	struct radeon_device *rdev = dev->dev_private;
100
	struct radeon_device *rdev = dev->dev_private;
110
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
101
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
-
 
102
	struct radeon_connector_atom_dig *dig_connector;
Line 111... Line 103...
111
	struct radeon_connector_atom_dig *dig_connector;
103
	int bpc = 8;
112
	int bpc = 8;
104
	int mode_clock, max_tmds_clock;
113
 
105
 
114
	switch (connector->connector_type) {
106
	switch (connector->connector_type) {
115
	case DRM_MODE_CONNECTOR_DVII:
107
	case DRM_MODE_CONNECTOR_DVII:
116
	case DRM_MODE_CONNECTOR_HDMIB:
108
	case DRM_MODE_CONNECTOR_HDMIB:
117
		if (radeon_connector->use_digital) {
109
		if (radeon_connector->use_digital) {
118
			if (drm_detect_hdmi_monitor(radeon_connector->edid)) {
110
			if (drm_detect_hdmi_monitor(radeon_connector_edid(connector))) {
119
				if (connector->display_info.bpc)
111
				if (connector->display_info.bpc)
120
					bpc = connector->display_info.bpc;
112
					bpc = connector->display_info.bpc;
121
			}
113
			}
122
		}
114
		}
123
		break;
115
		break;
124
	case DRM_MODE_CONNECTOR_DVID:
116
	case DRM_MODE_CONNECTOR_DVID:
125
	case DRM_MODE_CONNECTOR_HDMIA:
117
	case DRM_MODE_CONNECTOR_HDMIA:
126
		if (drm_detect_hdmi_monitor(radeon_connector->edid)) {
118
		if (drm_detect_hdmi_monitor(radeon_connector_edid(connector))) {
127
			if (connector->display_info.bpc)
119
			if (connector->display_info.bpc)
128
				bpc = connector->display_info.bpc;
120
				bpc = connector->display_info.bpc;
129
		}
121
		}
130
		break;
122
		break;
131
	case DRM_MODE_CONNECTOR_DisplayPort:
123
	case DRM_MODE_CONNECTOR_DisplayPort:
132
		dig_connector = radeon_connector->con_priv;
124
		dig_connector = radeon_connector->con_priv;
133
		if ((dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) ||
125
		if ((dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) ||
134
		    (dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_eDP) ||
126
		    (dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_eDP) ||
135
		    drm_detect_hdmi_monitor(radeon_connector->edid)) {
127
		    drm_detect_hdmi_monitor(radeon_connector_edid(connector))) {
136
			if (connector->display_info.bpc)
128
			if (connector->display_info.bpc)
137
				bpc = connector->display_info.bpc;
129
				bpc = connector->display_info.bpc;
Line 153... Line 145...
153
			else if (dig->lcd_misc & ATOM_PANEL_MISC_V13_8BIT_PER_COLOR)
145
			else if (dig->lcd_misc & ATOM_PANEL_MISC_V13_8BIT_PER_COLOR)
154
				bpc = 8;
146
				bpc = 8;
155
		}
147
		}
156
		break;
148
		break;
157
	}
149
	}
-
 
150
 
-
 
151
	if (drm_detect_hdmi_monitor(radeon_connector_edid(connector))) {
-
 
152
		/* hdmi deep color only implemented on DCE4+ */
-
 
153
		if ((bpc > 8) && !ASIC_IS_DCE4(rdev)) {
-
 
154
			DRM_DEBUG("%s: HDMI deep color %d bpc unsupported. Using 8 bpc.\n",
-
 
155
					  connector->name, bpc);
-
 
156
			bpc = 8;
-
 
157
		}
-
 
158
 
-
 
159
		/*
-
 
160
		 * Pre DCE-8 hw can't handle > 12 bpc, and more than 12 bpc doesn't make
-
 
161
		 * much sense without support for > 12 bpc framebuffers. RGB 4:4:4 at
-
 
162
		 * 12 bpc is always supported on hdmi deep color sinks, as this is
-
 
163
		 * required by the HDMI-1.3 spec. Clamp to a safe 12 bpc maximum.
-
 
164
		 */
-
 
165
		if (bpc > 12) {
-
 
166
			DRM_DEBUG("%s: HDMI deep color %d bpc unsupported. Using 12 bpc.\n",
-
 
167
					  connector->name, bpc);
-
 
168
			bpc = 12;
-
 
169
		}
-
 
170
 
-
 
171
		/* Any defined maximum tmds clock limit we must not exceed? */
-
 
172
		if (connector->max_tmds_clock > 0) {
-
 
173
			/* mode_clock is clock in kHz for mode to be modeset on this connector */
-
 
174
			mode_clock = radeon_connector->pixelclock_for_modeset;
-
 
175
 
-
 
176
			/* Maximum allowable input clock in kHz */
-
 
177
			max_tmds_clock = connector->max_tmds_clock * 1000;
-
 
178
 
-
 
179
			DRM_DEBUG("%s: hdmi mode dotclock %d kHz, max tmds input clock %d kHz.\n",
-
 
180
					  connector->name, mode_clock, max_tmds_clock);
-
 
181
 
-
 
182
			/* Check if bpc is within clock limit. Try to degrade gracefully otherwise */
-
 
183
			if ((bpc == 12) && (mode_clock * 3/2 > max_tmds_clock)) {
-
 
184
				if ((connector->display_info.edid_hdmi_dc_modes & DRM_EDID_HDMI_DC_30) &&
-
 
185
					(mode_clock * 5/4 <= max_tmds_clock))
-
 
186
					bpc = 10;
-
 
187
				else
-
 
188
					bpc = 8;
-
 
189
 
-
 
190
				DRM_DEBUG("%s: HDMI deep color 12 bpc exceeds max tmds clock. Using %d bpc.\n",
-
 
191
						  connector->name, bpc);
-
 
192
			}
-
 
193
 
-
 
194
			if ((bpc == 10) && (mode_clock * 5/4 > max_tmds_clock)) {
-
 
195
				bpc = 8;
-
 
196
				DRM_DEBUG("%s: HDMI deep color 10 bpc exceeds max tmds clock. Using %d bpc.\n",
-
 
197
						  connector->name, bpc);
-
 
198
			}
-
 
199
		}
-
 
200
		else if (bpc > 8) {
-
 
201
			/* max_tmds_clock missing, but hdmi spec mandates it for deep color. */
-
 
202
			DRM_DEBUG("%s: Required max tmds clock for HDMI deep color missing. Using 8 bpc.\n",
-
 
203
					  connector->name);
-
 
204
			bpc = 8;
-
 
205
		}
-
 
206
	}
-
 
207
 
-
 
208
	if ((radeon_deep_color == 0) && (bpc > 8)) {
-
 
209
		DRM_DEBUG("%s: Deep color disabled. Set radeon module param deep_color=1 to enable.\n",
-
 
210
				  connector->name);
-
 
211
		bpc = 8;
-
 
212
	}
-
 
213
 
-
 
214
	DRM_DEBUG("%s: Display bpc=%d, returned bpc=%d\n",
-
 
215
			  connector->name, connector->display_info.bpc, bpc);
-
 
216
 
158
	return bpc;
217
	return bpc;
159
}
218
}
Line 160... Line 219...
160
 
219
 
161
static void
220
static void
Line 164... Line 223...
164
	struct drm_device *dev = connector->dev;
223
	struct drm_device *dev = connector->dev;
165
	struct radeon_device *rdev = dev->dev_private;
224
	struct radeon_device *rdev = dev->dev_private;
166
	struct drm_encoder *best_encoder = NULL;
225
	struct drm_encoder *best_encoder = NULL;
167
	struct drm_encoder *encoder = NULL;
226
	struct drm_encoder *encoder = NULL;
168
	struct drm_connector_helper_funcs *connector_funcs = connector->helper_private;
227
	struct drm_connector_helper_funcs *connector_funcs = connector->helper_private;
169
	struct drm_mode_object *obj;
-
 
170
	bool connected;
228
	bool connected;
171
	int i;
229
	int i;
Line 172... Line 230...
172
 
230
 
Line 173... Line 231...
173
	best_encoder = connector_funcs->best_encoder(connector);
231
	best_encoder = connector_funcs->best_encoder(connector);
174
 
232
 
175
	for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
233
	for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
Line 176... Line 234...
176
		if (connector->encoder_ids[i] == 0)
234
		if (connector->encoder_ids[i] == 0)
177
			break;
235
			break;
178
 
-
 
179
		obj = drm_mode_object_find(connector->dev,
236
 
180
					   connector->encoder_ids[i],
237
		encoder = drm_encoder_find(connector->dev,
Line 181... Line -...
181
					   DRM_MODE_OBJECT_ENCODER);
-
 
182
		if (!obj)
-
 
183
			continue;
238
					   connector->encoder_ids[i]);
184
 
239
		if (!encoder)
185
		encoder = obj_to_encoder(obj);
240
			continue;
186
 
241
 
Line 197... Line 252...
197
	}
252
	}
198
}
253
}
Line 199... Line 254...
199
 
254
 
200
static struct drm_encoder *radeon_find_encoder(struct drm_connector *connector, int encoder_type)
255
static struct drm_encoder *radeon_find_encoder(struct drm_connector *connector, int encoder_type)
201
{
-
 
202
	struct drm_mode_object *obj;
256
{
203
	struct drm_encoder *encoder;
257
	struct drm_encoder *encoder;
Line 204... Line 258...
204
	int i;
258
	int i;
205
 
259
 
206
	for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
260
	for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
Line 207... Line 261...
207
		if (connector->encoder_ids[i] == 0)
261
		if (connector->encoder_ids[i] == 0)
208
			break;
262
			break;
209
 
263
 
Line 210... Line -...
210
		obj = drm_mode_object_find(connector->dev, connector->encoder_ids[i], DRM_MODE_OBJECT_ENCODER);
-
 
211
		if (!obj)
264
		encoder = drm_encoder_find(connector->dev, connector->encoder_ids[i]);
212
			continue;
265
		if (!encoder)
213
 
266
			continue;
214
		encoder = obj_to_encoder(obj);
267
 
215
		if (encoder->encoder_type == encoder_type)
268
		if (encoder->encoder_type == encoder_type)
Line -... Line 269...
-
 
269
			return encoder;
-
 
270
	}
-
 
271
	return NULL;
-
 
272
}
-
 
273
 
-
 
274
struct edid *radeon_connector_edid(struct drm_connector *connector)
-
 
275
{
-
 
276
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
-
 
277
	struct drm_property_blob *edid_blob = connector->edid_blob_ptr;
-
 
278
 
-
 
279
	if (radeon_connector->edid) {
-
 
280
		return radeon_connector->edid;
-
 
281
	} else if (edid_blob) {
-
 
282
		struct edid *edid = kmemdup(edid_blob->data, edid_blob->length, GFP_KERNEL);
-
 
283
		if (edid)
-
 
284
			radeon_connector->edid = edid;
-
 
285
	}
-
 
286
	return radeon_connector->edid;
-
 
287
}
-
 
288
 
-
 
289
static void radeon_connector_get_edid(struct drm_connector *connector)
-
 
290
{
-
 
291
	struct drm_device *dev = connector->dev;
-
 
292
	struct radeon_device *rdev = dev->dev_private;
-
 
293
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
-
 
294
 
-
 
295
	if (radeon_connector->edid)
-
 
296
		return;
-
 
297
 
-
 
298
	/* on hw with routers, select right port */
-
 
299
	if (radeon_connector->router.ddc_valid)
-
 
300
		radeon_router_select_ddc_port(radeon_connector);
-
 
301
 
-
 
302
	if ((radeon_connector_encoder_get_dp_bridge_encoder_id(connector) !=
-
 
303
	     ENCODER_OBJECT_ID_NONE) &&
-
 
304
	    radeon_connector->ddc_bus->has_aux) {
-
 
305
		radeon_connector->edid = drm_get_edid(connector,
-
 
306
						      &radeon_connector->ddc_bus->aux.ddc);
-
 
307
	} else if ((connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort) ||
-
 
308
		   (connector->connector_type == DRM_MODE_CONNECTOR_eDP)) {
-
 
309
		struct radeon_connector_atom_dig *dig = radeon_connector->con_priv;
-
 
310
 
-
 
311
		if ((dig->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT ||
-
 
312
		     dig->dp_sink_type == CONNECTOR_OBJECT_ID_eDP) &&
-
 
313
		    radeon_connector->ddc_bus->has_aux)
-
 
314
			radeon_connector->edid = drm_get_edid(&radeon_connector->base,
-
 
315
							      &radeon_connector->ddc_bus->aux.ddc);
-
 
316
		else if (radeon_connector->ddc_bus)
-
 
317
			radeon_connector->edid = drm_get_edid(&radeon_connector->base,
-
 
318
							      &radeon_connector->ddc_bus->adapter);
-
 
319
	} else if (radeon_connector->ddc_bus) {
-
 
320
		radeon_connector->edid = drm_get_edid(&radeon_connector->base,
-
 
321
						      &radeon_connector->ddc_bus->adapter);
-
 
322
	}
-
 
323
 
-
 
324
	if (!radeon_connector->edid) {
-
 
325
		if (rdev->is_atom_bios) {
-
 
326
			/* some laptops provide a hardcoded edid in rom for LCDs */
-
 
327
			if (((connector->connector_type == DRM_MODE_CONNECTOR_LVDS) ||
-
 
328
			     (connector->connector_type == DRM_MODE_CONNECTOR_eDP)))
-
 
329
				radeon_connector->edid = radeon_bios_get_hardcoded_edid(rdev);
-
 
330
		} else {
-
 
331
			/* some servers provide a hardcoded edid in rom for KVMs */
-
 
332
			radeon_connector->edid = radeon_bios_get_hardcoded_edid(rdev);
-
 
333
		}
-
 
334
	}
-
 
335
}
-
 
336
 
-
 
337
static void radeon_connector_free_edid(struct drm_connector *connector)
-
 
338
{
-
 
339
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
-
 
340
 
-
 
341
	if (radeon_connector->edid) {
-
 
342
		kfree(radeon_connector->edid);
-
 
343
		radeon_connector->edid = NULL;
-
 
344
	}
-
 
345
}
-
 
346
 
-
 
347
static int radeon_ddc_get_modes(struct drm_connector *connector)
-
 
348
{
-
 
349
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
-
 
350
	int ret;
-
 
351
 
-
 
352
	if (radeon_connector->edid) {
-
 
353
		drm_mode_connector_update_edid_property(connector, radeon_connector->edid);
-
 
354
		ret = drm_add_edid_modes(connector, radeon_connector->edid);
-
 
355
		drm_edid_to_eld(connector, radeon_connector->edid);
-
 
356
		return ret;
216
			return encoder;
357
	}
217
	}
358
	drm_mode_connector_update_edid_property(connector, NULL);
218
	return NULL;
359
	return 0;
219
}
-
 
220
 
-
 
221
static struct drm_encoder *radeon_best_single_encoder(struct drm_connector *connector)
-
 
222
{
360
}
223
	int enc_id = connector->encoder_ids[0];
361
 
224
	struct drm_mode_object *obj;
362
static struct drm_encoder *radeon_best_single_encoder(struct drm_connector *connector)
225
	struct drm_encoder *encoder;
-
 
226
 
363
{
227
	/* pick the encoder ids */
-
 
228
	if (enc_id) {
-
 
229
		obj = drm_mode_object_find(connector->dev, enc_id, DRM_MODE_OBJECT_ENCODER);
364
	int enc_id = connector->encoder_ids[0];
-
 
365
	/* pick the encoder ids */
-
 
366
	if (enc_id)
-
 
367
		return drm_encoder_find(connector->dev, enc_id);
-
 
368
			return NULL;
-
 
369
}
-
 
370
 
-
 
371
static void radeon_get_native_mode(struct drm_connector *connector)
230
		if (!obj)
372
{
-
 
373
	struct drm_encoder *encoder = radeon_best_single_encoder(connector);
-
 
374
	struct radeon_encoder *radeon_encoder;
-
 
375
 
-
 
376
	if (encoder == NULL)
-
 
377
		return;
-
 
378
 
-
 
379
	radeon_encoder = to_radeon_encoder(encoder);
-
 
380
 
-
 
381
	if (!list_empty(&connector->probed_modes)) {
-
 
382
		struct drm_display_mode *preferred_mode =
-
 
383
			list_first_entry(&connector->probed_modes,
-
 
384
					 struct drm_display_mode, head);
231
			return NULL;
385
 
Line 232... Line 386...
232
		encoder = obj_to_encoder(obj);
386
		radeon_encoder->native_mode = *preferred_mode;
233
		return encoder;
387
	} else {
234
	}
388
		radeon_encoder->native_mode.clock = 0;
Line 268... Line 422...
268
 
422
 
269
				if (radeon_conflict->use_digital)
423
				if (radeon_conflict->use_digital)
Line 270... Line 424...
270
					continue;
424
					continue;
271
 
425
 
-
 
426
				if (priority == true) {
272
				if (priority == true) {
427
					DRM_DEBUG_KMS("1: conflicting encoders switching off %s\n",
-
 
428
						      conflict->name);
273
					DRM_DEBUG_KMS("1: conflicting encoders switching off %s\n", drm_get_connector_name(conflict));
429
					DRM_DEBUG_KMS("in favor of %s\n",
274
					DRM_DEBUG_KMS("in favor of %s\n", drm_get_connector_name(connector));
430
						      connector->name);
275
					conflict->status = connector_status_disconnected;
431
					conflict->status = connector_status_disconnected;
276
					radeon_connector_update_scratch_regs(conflict, connector_status_disconnected);
432
					radeon_connector_update_scratch_regs(conflict, connector_status_disconnected);
-
 
433
				} else {
277
				} else {
434
					DRM_DEBUG_KMS("2: conflicting encoders switching off %s\n",
-
 
435
						      connector->name);
278
					DRM_DEBUG_KMS("2: conflicting encoders switching off %s\n", drm_get_connector_name(connector));
436
					DRM_DEBUG_KMS("in favor of %s\n",
279
					DRM_DEBUG_KMS("in favor of %s\n", drm_get_connector_name(conflict));
437
						      conflict->name);
280
					current_status = connector_status_disconnected;
438
					current_status = connector_status_disconnected;
281
				}
439
				}
282
				break;
440
				break;
Line 397... Line 555...
397
			dig->coherent_mode = new_coherent_mode;
555
			dig->coherent_mode = new_coherent_mode;
398
		radeon_property_change_mode(&radeon_encoder->base);
556
		radeon_property_change_mode(&radeon_encoder->base);
399
	}
557
	}
400
	}
558
	}
Line -... Line 559...
-
 
559
 
-
 
560
	if (property == rdev->mode_info.audio_property) {
-
 
561
		struct radeon_connector *radeon_connector = to_radeon_connector(connector);
-
 
562
		/* need to find digital encoder on connector */
-
 
563
		encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TMDS);
-
 
564
		if (!encoder)
-
 
565
			return 0;
-
 
566
 
-
 
567
		radeon_encoder = to_radeon_encoder(encoder);
-
 
568
 
-
 
569
		if (radeon_connector->audio != val) {
-
 
570
			radeon_connector->audio = val;
-
 
571
			radeon_property_change_mode(&radeon_encoder->base);
-
 
572
		}
-
 
573
	}
-
 
574
 
-
 
575
	if (property == rdev->mode_info.dither_property) {
-
 
576
		struct radeon_connector *radeon_connector = to_radeon_connector(connector);
-
 
577
		/* need to find digital encoder on connector */
-
 
578
		encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TMDS);
-
 
579
		if (!encoder)
-
 
580
			return 0;
-
 
581
 
-
 
582
		radeon_encoder = to_radeon_encoder(encoder);
-
 
583
 
-
 
584
		if (radeon_connector->dither != val) {
-
 
585
			radeon_connector->dither = val;
-
 
586
			radeon_property_change_mode(&radeon_encoder->base);
-
 
587
		}
-
 
588
	}
401
 
589
 
402
	if (property == rdev->mode_info.underscan_property) {
590
	if (property == rdev->mode_info.underscan_property) {
403
		/* need to find digital encoder on connector */
591
		/* need to find digital encoder on connector */
404
		encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TMDS);
592
		encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TMDS);
405
		if (!encoder)
593
		if (!encoder)
Line 499... Line 687...
499
			radeon_legacy_get_tmds_info_from_table(radeon_encoder, tmds);
687
			radeon_legacy_get_tmds_info_from_table(radeon_encoder, tmds);
500
		}
688
		}
501
		radeon_property_change_mode(&radeon_encoder->base);
689
		radeon_property_change_mode(&radeon_encoder->base);
502
	}
690
	}
Line -... Line 691...
-
 
691
 
-
 
692
	if (property == dev->mode_config.scaling_mode_property) {
-
 
693
		enum radeon_rmx_type rmx_type;
-
 
694
 
-
 
695
		if (connector->encoder)
-
 
696
			radeon_encoder = to_radeon_encoder(connector->encoder);
-
 
697
		else {
-
 
698
			struct drm_connector_helper_funcs *connector_funcs = connector->helper_private;
-
 
699
			radeon_encoder = to_radeon_encoder(connector_funcs->best_encoder(connector));
-
 
700
		}
-
 
701
 
-
 
702
		switch (val) {
-
 
703
		default:
-
 
704
		case DRM_MODE_SCALE_NONE: rmx_type = RMX_OFF; break;
-
 
705
		case DRM_MODE_SCALE_CENTER: rmx_type = RMX_CENTER; break;
-
 
706
		case DRM_MODE_SCALE_ASPECT: rmx_type = RMX_ASPECT; break;
-
 
707
		case DRM_MODE_SCALE_FULLSCREEN: rmx_type = RMX_FULL; break;
-
 
708
		}
-
 
709
		if (radeon_encoder->rmx_type == rmx_type)
-
 
710
			return 0;
-
 
711
 
-
 
712
		if ((rmx_type != DRM_MODE_SCALE_NONE) &&
-
 
713
		    (radeon_encoder->native_mode.clock == 0))
-
 
714
			return 0;
-
 
715
 
-
 
716
		radeon_encoder->rmx_type = rmx_type;
-
 
717
 
-
 
718
		radeon_property_change_mode(&radeon_encoder->base);
-
 
719
	}
503
 
720
 
504
	return 0;
721
	return 0;
Line 505... Line 722...
505
}
722
}
506
 
723
 
Line 539... Line 756...
539
	}
756
	}
540
}
757
}
Line 541... Line 758...
541
 
758
 
542
static int radeon_lvds_get_modes(struct drm_connector *connector)
759
static int radeon_lvds_get_modes(struct drm_connector *connector)
543
{
-
 
544
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
760
{
545
	struct drm_encoder *encoder;
761
	struct drm_encoder *encoder;
546
	int ret = 0;
762
	int ret = 0;
Line 547... Line 763...
547
	struct drm_display_mode *mode;
763
	struct drm_display_mode *mode;
548
 
764
 
549
	if (radeon_connector->ddc_bus) {
765
	radeon_connector_get_edid(connector);
550
		ret = radeon_ddc_get_modes(radeon_connector);
766
	ret = radeon_ddc_get_modes(connector);
551
		if (ret > 0) {
767
		if (ret > 0) {
552
			encoder = radeon_best_single_encoder(connector);
768
			encoder = radeon_best_single_encoder(connector);
553
			if (encoder) {
769
			if (encoder) {
554
				radeon_fixup_lvds_native_mode(encoder, connector);
770
				radeon_fixup_lvds_native_mode(encoder, connector);
555
				/* add scaled modes */
771
				/* add scaled modes */
556
				radeon_add_common_modes(encoder, connector);
772
				radeon_add_common_modes(encoder, connector);
557
			}
773
			}
558
			return ret;
-
 
Line 559... Line 774...
559
		}
774
			return ret;
560
	}
775
		}
561
 
776
 
Line 624... Line 839...
624
			ret = connector_status_connected;
839
			ret = connector_status_connected;
Line 625... Line 840...
625
 
840
 
Line 626... Line 841...
626
	}
841
	}
-
 
842
 
627
 
843
	/* check for edid as well */
628
	/* check for edid as well */
844
	radeon_connector_get_edid(connector);
629
	if (radeon_connector->edid)
-
 
630
		ret = connector_status_connected;
-
 
631
	else {
-
 
632
		if (radeon_connector->ddc_bus) {
-
 
633
			radeon_connector->edid = drm_get_edid(&radeon_connector->base,
-
 
634
							      &radeon_connector->ddc_bus->adapter);
-
 
635
			if (radeon_connector->edid)
-
 
636
				ret = connector_status_connected;
-
 
637
		}
845
	if (radeon_connector->edid)
Line 638... Line 846...
638
	}
846
		ret = connector_status_connected;
639
	/* check acpi lid status ??? */
847
	/* check acpi lid status ??? */
640
 
848
 
Line 641... Line 849...
641
	radeon_connector_update_scratch_regs(connector, ret);
849
	radeon_connector_update_scratch_regs(connector, ret);
642
	return ret;
850
	return ret;
643
}
851
}
Line 644... Line 852...
644
 
852
 
645
static void radeon_connector_destroy(struct drm_connector *connector)
-
 
646
{
853
static void radeon_connector_destroy(struct drm_connector *connector)
647
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
854
{
648
 
855
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
649
	if (radeon_connector->edid)
856
 
650
		kfree(radeon_connector->edid);
857
	radeon_connector_free_edid(connector);
Line 651... Line 858...
651
	kfree(radeon_connector->con_priv);
858
	kfree(radeon_connector->con_priv);
Line 704... Line 911...
704
	.set_property = radeon_lvds_set_property,
911
	.set_property = radeon_lvds_set_property,
705
};
912
};
Line 706... Line 913...
706
 
913
 
707
static int radeon_vga_get_modes(struct drm_connector *connector)
914
static int radeon_vga_get_modes(struct drm_connector *connector)
708
{
-
 
709
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
915
{
Line -... Line 916...
-
 
916
	int ret;
710
	int ret;
917
 
-
 
918
	radeon_connector_get_edid(connector);
-
 
919
	ret = radeon_ddc_get_modes(connector);
Line 711... Line 920...
711
 
920
 
712
	ret = radeon_ddc_get_modes(radeon_connector);
921
	radeon_get_native_mode(connector);
Line 713... Line 922...
713
 
922
 
Line 745... Line 954...
745
 
954
 
746
	if (radeon_connector->ddc_bus)
955
	if (radeon_connector->ddc_bus)
747
		dret = radeon_ddc_probe(radeon_connector, false);
956
		dret = radeon_ddc_probe(radeon_connector, false);
748
	if (dret) {
957
	if (dret) {
749
		radeon_connector->detected_by_load = false;
958
		radeon_connector->detected_by_load = false;
750
		if (radeon_connector->edid) {
-
 
751
			kfree(radeon_connector->edid);
959
		radeon_connector_free_edid(connector);
752
			radeon_connector->edid = NULL;
-
 
753
		}
-
 
Line 754... Line 960...
754
		radeon_connector->edid = drm_get_edid(&radeon_connector->base, &radeon_connector->ddc_bus->adapter);
960
		radeon_connector_get_edid(connector);
755
 
961
 
756
		if (!radeon_connector->edid) {
962
		if (!radeon_connector->edid) {
757
			DRM_ERROR("%s: probed a monitor but no|invalid EDID\n",
963
			DRM_ERROR("%s: probed a monitor but no|invalid EDID\n",
758
				  drm_get_connector_name(connector));
964
					connector->name);
-
 
965
			ret = connector_status_connected;
759
			ret = connector_status_connected;
966
		} else {
Line 760... Line 967...
760
		} else {
967
			radeon_connector->use_digital =
761
			radeon_connector->use_digital = !!(radeon_connector->edid->input & DRM_EDID_INPUT_DIGITAL);
968
				!!(radeon_connector->edid->input & DRM_EDID_INPUT_DIGITAL);
762
 
969
 
763
			/* some oems have boards with separate digital and analog connectors
970
			/* some oems have boards with separate digital and analog connectors
764
			 * with a shared ddc line (often vga + hdmi)
-
 
765
			 */
971
			 * with a shared ddc line (often vga + hdmi)
766
			if (radeon_connector->use_digital && radeon_connector->shared_ddc) {
972
			 */
767
				kfree(radeon_connector->edid);
973
			if (radeon_connector->use_digital && radeon_connector->shared_ddc) {
768
				radeon_connector->edid = NULL;
974
				radeon_connector_free_edid(connector);
769
				ret = connector_status_disconnected;
975
				ret = connector_status_disconnected;
-
 
976
			} else {
770
			} else
977
		ret = connector_status_connected;
Line 771... Line 978...
771
		ret = connector_status_connected;
978
		}
772
		}
979
		}
773
	} else {
980
	} else {
774
 
981
 
775
		/* if we aren't forcing don't do destructive polling */
982
		/* if we aren't forcing don't do destructive polling */
776
		if (!force) {
983
		if (!force) {
777
			/* only return the previous status if we last
984
			/* only return the previous status if we last
778
			 * detected a monitor via load.
-
 
779
			 */
985
			 * detected a monitor via load.
780
			if (radeon_connector->detected_by_load)
986
			 */
Line 781... Line 987...
781
			return connector->status;
987
			if (radeon_connector->detected_by_load)
782
			else
988
				ret = connector->status;
783
				return ret;
989
			goto out;
Line 803... Line 1009...
803
	    rdev->mode_info.bios_hardcoded_edid_size) {
1009
	    rdev->mode_info.bios_hardcoded_edid_size) {
804
		ret = connector_status_connected;
1010
		ret = connector_status_connected;
805
	}
1011
	}
Line 806... Line 1012...
806
 
1012
 
-
 
1013
	radeon_connector_update_scratch_regs(connector, ret);
-
 
1014
 
807
	radeon_connector_update_scratch_regs(connector, ret);
1015
out:
808
	return ret;
1016
	return ret;
Line 809... Line 1017...
809
}
1017
}
810
 
1018
 
Line 859... Line 1067...
859
{
1067
{
860
	struct drm_encoder *encoder;
1068
	struct drm_encoder *encoder;
861
	struct drm_encoder_helper_funcs *encoder_funcs;
1069
	struct drm_encoder_helper_funcs *encoder_funcs;
862
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1070
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
863
	enum drm_connector_status ret = connector_status_disconnected;
1071
	enum drm_connector_status ret = connector_status_disconnected;
-
 
1072
	int r;
Line 864... Line 1073...
864
 
1073
 
865
	if (!radeon_connector->dac_load_detect)
1074
	if (!radeon_connector->dac_load_detect)
Line 866... Line 1075...
866
		return ret;
1075
		return ret;
Line 890... Line 1099...
890
	.fill_modes = drm_helper_probe_single_connector_modes,
1099
	.fill_modes = drm_helper_probe_single_connector_modes,
891
	.destroy = radeon_connector_destroy,
1100
	.destroy = radeon_connector_destroy,
892
	.set_property = radeon_connector_set_property,
1101
	.set_property = radeon_connector_set_property,
893
};
1102
};
Line 894... Line -...
894
 
-
 
895
static int radeon_dvi_get_modes(struct drm_connector *connector)
-
 
896
{
-
 
897
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
-
 
898
	int ret;
-
 
899
 
-
 
900
	ret = radeon_ddc_get_modes(radeon_connector);
-
 
901
	return ret;
-
 
902
}
-
 
903
 
1103
 
904
static bool radeon_check_hpd_status_unchanged(struct drm_connector *connector)
1104
static bool radeon_check_hpd_status_unchanged(struct drm_connector *connector)
905
{
1105
{
906
	struct drm_device *dev = connector->dev;
1106
	struct drm_device *dev = connector->dev;
907
	struct radeon_device *rdev = dev->dev_private;
1107
	struct radeon_device *rdev = dev->dev_private;
Line 939... Line 1139...
939
	struct drm_device *dev = connector->dev;
1139
	struct drm_device *dev = connector->dev;
940
	struct radeon_device *rdev = dev->dev_private;
1140
	struct radeon_device *rdev = dev->dev_private;
941
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1141
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
942
	struct drm_encoder *encoder = NULL;
1142
	struct drm_encoder *encoder = NULL;
943
	struct drm_encoder_helper_funcs *encoder_funcs;
1143
	struct drm_encoder_helper_funcs *encoder_funcs;
944
	struct drm_mode_object *obj;
-
 
945
	int i;
1144
	int i, r;
946
	enum drm_connector_status ret = connector_status_disconnected;
1145
	enum drm_connector_status ret = connector_status_disconnected;
947
	bool dret = false, broken_edid = false;
1146
	bool dret = false, broken_edid = false;
Line -... Line 1147...
-
 
1147
 
948
 
1148
 
949
	if (!force && radeon_check_hpd_status_unchanged(connector))
1149
	if (!force && radeon_check_hpd_status_unchanged(connector)) {
-
 
1150
		ret = connector->status;
-
 
1151
		goto exit;
Line 950... Line 1152...
950
		return connector->status;
1152
	}
951
 
1153
 
952
	if (radeon_connector->ddc_bus)
1154
	if (radeon_connector->ddc_bus)
953
		dret = radeon_ddc_probe(radeon_connector, false);
1155
		dret = radeon_ddc_probe(radeon_connector, false);
954
	if (dret) {
1156
	if (dret) {
955
		radeon_connector->detected_by_load = false;
-
 
956
		if (radeon_connector->edid) {
1157
		radeon_connector->detected_by_load = false;
957
			kfree(radeon_connector->edid);
-
 
958
			radeon_connector->edid = NULL;
-
 
Line 959... Line 1158...
959
		}
1158
		radeon_connector_free_edid(connector);
960
		radeon_connector->edid = drm_get_edid(&radeon_connector->base, &radeon_connector->ddc_bus->adapter);
1159
		radeon_connector_get_edid(connector);
961
 
1160
 
962
		if (!radeon_connector->edid) {
1161
		if (!radeon_connector->edid) {
963
			DRM_ERROR("%s: probed a monitor but no|invalid EDID\n",
1162
			DRM_ERROR("%s: probed a monitor but no|invalid EDID\n",
964
				  drm_get_connector_name(connector));
1163
					connector->name);
-
 
1164
			/* rs690 seems to have a problem with connectors not existing and always
965
			/* rs690 seems to have a problem with connectors not existing and always
1165
			 * return a block of 0's. If we see this just stop polling on this output */
966
			 * return a block of 0's. If we see this just stop polling on this output */
1166
			if ((rdev->family == CHIP_RS690 || rdev->family == CHIP_RS740) &&
-
 
1167
			    radeon_connector->base.null_edid_counter) {
967
			if ((rdev->family == CHIP_RS690 || rdev->family == CHIP_RS740) && radeon_connector->base.null_edid_counter) {
1168
				ret = connector_status_disconnected;
968
				ret = connector_status_disconnected;
1169
				DRM_ERROR("%s: detected RS690 floating bus bug, stopping ddc detect\n",
969
				DRM_ERROR("%s: detected RS690 floating bus bug, stopping ddc detect\n", drm_get_connector_name(connector));
1170
					  connector->name);
970
				radeon_connector->ddc_bus = NULL;
1171
				radeon_connector->ddc_bus = NULL;
971
			} else {
1172
			} else {
972
				ret = connector_status_connected;
1173
				ret = connector_status_connected;
-
 
1174
				broken_edid = true; /* defer use_digital to later */
973
				broken_edid = true; /* defer use_digital to later */
1175
			}
Line 974... Line 1176...
974
			}
1176
		} else {
975
		} else {
1177
			radeon_connector->use_digital =
976
			radeon_connector->use_digital = !!(radeon_connector->edid->input & DRM_EDID_INPUT_DIGITAL);
1178
				!!(radeon_connector->edid->input & DRM_EDID_INPUT_DIGITAL);
977
 
1179
 
978
			/* some oems have boards with separate digital and analog connectors
-
 
979
			 * with a shared ddc line (often vga + hdmi)
1180
			/* some oems have boards with separate digital and analog connectors
980
			 */
1181
			 * with a shared ddc line (often vga + hdmi)
981
			if ((!radeon_connector->use_digital) && radeon_connector->shared_ddc) {
1182
			 */
982
				kfree(radeon_connector->edid);
1183
			if ((!radeon_connector->use_digital) && radeon_connector->shared_ddc) {
983
				radeon_connector->edid = NULL;
1184
				radeon_connector_free_edid(connector);
984
				ret = connector_status_disconnected;
1185
				ret = connector_status_disconnected;
985
			} else
1186
			} else {
986
		ret = connector_status_connected;
1187
		ret = connector_status_connected;
987
 
1188
			}
988
			/* This gets complicated.  We have boards with VGA + HDMI with a
1189
			/* This gets complicated.  We have boards with VGA + HDMI with a
Line 1002... Line 1203...
1002
					     radeon_connector->ddc_bus->rec.i2c_id)) {
1203
					     radeon_connector->ddc_bus->rec.i2c_id)) {
1003
						/* cases where both connectors are digital */
1204
						/* cases where both connectors are digital */
1004
						if (list_connector->connector_type != DRM_MODE_CONNECTOR_VGA) {
1205
						if (list_connector->connector_type != DRM_MODE_CONNECTOR_VGA) {
1005
							/* hpd is our only option in this case */
1206
							/* hpd is our only option in this case */
1006
							if (!radeon_hpd_sense(rdev, radeon_connector->hpd.hpd)) {
1207
							if (!radeon_hpd_sense(rdev, radeon_connector->hpd.hpd)) {
1007
								kfree(radeon_connector->edid);
-
 
1008
								radeon_connector->edid = NULL;
1208
								radeon_connector_free_edid(connector);
1009
								ret = connector_status_disconnected;
1209
								ret = connector_status_disconnected;
1010
							}
1210
							}
1011
						}
1211
						}
1012
					}
1212
					}
1013
				}
1213
				}
Line 1037... Line 1237...
1037
	if (radeon_connector->dac_load_detect) {
1237
	if (radeon_connector->dac_load_detect) {
1038
		for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
1238
		for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
1039
			if (connector->encoder_ids[i] == 0)
1239
			if (connector->encoder_ids[i] == 0)
1040
				break;
1240
				break;
Line 1041... Line 1241...
1041
 
1241
 
1042
			obj = drm_mode_object_find(connector->dev,
1242
			encoder = drm_encoder_find(connector->dev,
1043
						   connector->encoder_ids[i],
-
 
1044
						   DRM_MODE_OBJECT_ENCODER);
1243
						   connector->encoder_ids[i]);
1045
			if (!obj)
1244
			if (!encoder)
Line 1046... Line -...
1046
				continue;
-
 
1047
 
-
 
1048
			encoder = obj_to_encoder(obj);
1245
				continue;
1049
 
1246
 
1050
			if (encoder->encoder_type != DRM_MODE_ENCODER_DAC &&
1247
			if (encoder->encoder_type != DRM_MODE_ENCODER_DAC &&
Line 1051... Line 1248...
1051
			    encoder->encoder_type != DRM_MODE_ENCODER_TVDAC)
1248
			    encoder->encoder_type != DRM_MODE_ENCODER_TVDAC)
Line 1096... Line 1293...
1096
		ret = connector_status_connected;
1293
		ret = connector_status_connected;
1097
	}
1294
	}
Line 1098... Line 1295...
1098
 
1295
 
1099
	/* updated in get modes as well since we need to know if it's analog or digital */
1296
	/* updated in get modes as well since we need to know if it's analog or digital */
-
 
1297
	radeon_connector_update_scratch_regs(connector, ret);
-
 
1298
 
1100
	radeon_connector_update_scratch_regs(connector, ret);
1299
exit:
1101
	return ret;
1300
	return ret;
Line 1102... Line 1301...
1102
}
1301
}
1103
 
1302
 
1104
/* okay need to be smart in here about which encoder to pick */
1303
/* okay need to be smart in here about which encoder to pick */
1105
static struct drm_encoder *radeon_dvi_encoder(struct drm_connector *connector)
1304
static struct drm_encoder *radeon_dvi_encoder(struct drm_connector *connector)
1106
{
1305
{
1107
	int enc_id = connector->encoder_ids[0];
-
 
1108
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1306
	int enc_id = connector->encoder_ids[0];
1109
	struct drm_mode_object *obj;
1307
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1110
	struct drm_encoder *encoder;
1308
	struct drm_encoder *encoder;
1111
	int i;
1309
	int i;
1112
	for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
1310
	for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
Line 1113... Line 1311...
1113
		if (connector->encoder_ids[i] == 0)
1311
		if (connector->encoder_ids[i] == 0)
1114
			break;
1312
			break;
1115
 
1313
 
Line 1116... Line -...
1116
		obj = drm_mode_object_find(connector->dev, connector->encoder_ids[i], DRM_MODE_OBJECT_ENCODER);
-
 
1117
		if (!obj)
-
 
1118
			continue;
1314
		encoder = drm_encoder_find(connector->dev, connector->encoder_ids[i]);
1119
 
1315
		if (!encoder)
1120
		encoder = obj_to_encoder(obj);
1316
			continue;
1121
 
1317
 
1122
		if (radeon_connector->use_digital == true) {
1318
		if (radeon_connector->use_digital == true) {
Line 1131... Line 1327...
1131
 
1327
 
Line 1132... Line 1328...
1132
	/* see if we have a default encoder  TODO */
1328
	/* see if we have a default encoder  TODO */
1133
 
1329
 
1134
	/* then check use digitial */
1330
	/* then check use digitial */
1135
	/* pick the first one */
1331
	/* pick the first one */
1136
	if (enc_id) {
-
 
1137
		obj = drm_mode_object_find(connector->dev, enc_id, DRM_MODE_OBJECT_ENCODER);
-
 
1138
		if (!obj)
-
 
1139
			return NULL;
-
 
1140
		encoder = obj_to_encoder(obj);
-
 
1141
		return encoder;
1332
	if (enc_id)
1142
	}
1333
		return drm_encoder_find(connector->dev, enc_id);
Line 1143... Line 1334...
1143
	return NULL;
1334
	return NULL;
1144
}
1335
}
Line 1170... Line 1361...
1170
	if (radeon_connector->use_digital && (mode->clock > 165000)) {
1361
	if (radeon_connector->use_digital && (mode->clock > 165000)) {
1171
		if ((radeon_connector->connector_object_id == CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_I) ||
1362
		if ((radeon_connector->connector_object_id == CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_I) ||
1172
		    (radeon_connector->connector_object_id == CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_D) ||
1363
		    (radeon_connector->connector_object_id == CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_D) ||
1173
		    (radeon_connector->connector_object_id == CONNECTOR_OBJECT_ID_HDMI_TYPE_B))
1364
		    (radeon_connector->connector_object_id == CONNECTOR_OBJECT_ID_HDMI_TYPE_B))
1174
			return MODE_OK;
1365
			return MODE_OK;
1175
		else if (radeon_connector->connector_object_id == CONNECTOR_OBJECT_ID_HDMI_TYPE_A) {
1366
		else if (ASIC_IS_DCE6(rdev) && drm_detect_hdmi_monitor(radeon_connector_edid(connector))) {
1176
			if (ASIC_IS_DCE6(rdev)) {
-
 
1177
				/* HDMI 1.3+ supports max clock of 340 Mhz */
1367
				/* HDMI 1.3+ supports max clock of 340 Mhz */
1178
				if (mode->clock > 340000)
1368
				if (mode->clock > 340000)
1179
					return MODE_CLOCK_HIGH;
1369
					return MODE_CLOCK_HIGH;
1180
		else
1370
		else
1181
					return MODE_OK;
1371
					return MODE_OK;
1182
			} else
-
 
1183
				return MODE_CLOCK_HIGH;
-
 
1184
		} else
1372
		} else {
1185
			return MODE_CLOCK_HIGH;
1373
			return MODE_CLOCK_HIGH;
1186
	}
1374
	}
-
 
1375
	}
Line 1187... Line 1376...
1187
 
1376
 
1188
	/* check against the max pixel clock */
1377
	/* check against the max pixel clock */
1189
	if ((mode->clock / 10) > rdev->clock.max_pixel_clock)
1378
	if ((mode->clock / 10) > rdev->clock.max_pixel_clock)
Line 1190... Line 1379...
1190
		return MODE_CLOCK_HIGH;
1379
		return MODE_CLOCK_HIGH;
1191
 
1380
 
Line 1192... Line 1381...
1192
	return MODE_OK;
1381
	return MODE_OK;
1193
}
1382
}
1194
 
1383
 
1195
static const struct drm_connector_helper_funcs radeon_dvi_connector_helper_funcs = {
1384
static const struct drm_connector_helper_funcs radeon_dvi_connector_helper_funcs = {
1196
	.get_modes = radeon_dvi_get_modes,
1385
	.get_modes = radeon_vga_get_modes,
Line 1197... Line 1386...
1197
	.mode_valid = radeon_dvi_mode_valid,
1386
	.mode_valid = radeon_dvi_mode_valid,
Line 1205... Line 1394...
1205
	.set_property = radeon_connector_set_property,
1394
	.set_property = radeon_connector_set_property,
1206
	.destroy = radeon_connector_destroy,
1395
	.destroy = radeon_connector_destroy,
1207
	.force = radeon_dvi_force,
1396
	.force = radeon_dvi_force,
1208
};
1397
};
Line 1209... Line -...
1209
 
-
 
1210
static void radeon_dp_connector_destroy(struct drm_connector *connector)
-
 
1211
{
-
 
1212
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
-
 
1213
	struct radeon_connector_atom_dig *radeon_dig_connector = radeon_connector->con_priv;
-
 
1214
 
-
 
1215
	if (radeon_connector->edid)
-
 
1216
		kfree(radeon_connector->edid);
-
 
1217
	if (radeon_dig_connector->dp_i2c_bus)
-
 
1218
		radeon_i2c_destroy(radeon_dig_connector->dp_i2c_bus);
-
 
1219
	kfree(radeon_connector->con_priv);
-
 
1220
//   drm_sysfs_connector_remove(connector);
-
 
1221
	drm_connector_cleanup(connector);
-
 
1222
	kfree(connector);
-
 
1223
}
-
 
1224
 
1398
 
1225
static int radeon_dp_get_modes(struct drm_connector *connector)
1399
static int radeon_dp_get_modes(struct drm_connector *connector)
1226
{
1400
{
1227
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1401
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1228
	struct radeon_connector_atom_dig *radeon_dig_connector = radeon_connector->con_priv;
1402
	struct radeon_connector_atom_dig *radeon_dig_connector = radeon_connector->con_priv;
Line 1235... Line 1409...
1235
 
1409
 
1236
		if (connector->connector_type == DRM_MODE_CONNECTOR_eDP) {
1410
		if (connector->connector_type == DRM_MODE_CONNECTOR_eDP) {
1237
		if (!radeon_dig_connector->edp_on)
1411
		if (!radeon_dig_connector->edp_on)
1238
			atombios_set_edp_panel_power(connector,
1412
			atombios_set_edp_panel_power(connector,
-
 
1413
						     ATOM_TRANSMITTER_ACTION_POWER_ON);
1239
						     ATOM_TRANSMITTER_ACTION_POWER_ON);
1414
			radeon_connector_get_edid(connector);
1240
	ret = radeon_ddc_get_modes(radeon_connector);
1415
			ret = radeon_ddc_get_modes(connector);
1241
		if (!radeon_dig_connector->edp_on)
1416
		if (!radeon_dig_connector->edp_on)
1242
			atombios_set_edp_panel_power(connector,
1417
			atombios_set_edp_panel_power(connector,
1243
						     ATOM_TRANSMITTER_ACTION_POWER_OFF);
1418
						     ATOM_TRANSMITTER_ACTION_POWER_OFF);
1244
		} else {
1419
		} else {
1245
			/* need to setup ddc on the bridge */
1420
			/* need to setup ddc on the bridge */
1246
			if (radeon_connector_encoder_get_dp_bridge_encoder_id(connector) !=
1421
			if (radeon_connector_encoder_get_dp_bridge_encoder_id(connector) !=
1247
			    ENCODER_OBJECT_ID_NONE) {
1422
			    ENCODER_OBJECT_ID_NONE) {
1248
				if (encoder)
1423
				if (encoder)
1249
					radeon_atom_ext_encoder_setup_ddc(encoder);
1424
					radeon_atom_ext_encoder_setup_ddc(encoder);
-
 
1425
			}
1250
			}
1426
			radeon_connector_get_edid(connector);
1251
			ret = radeon_ddc_get_modes(radeon_connector);
1427
			ret = radeon_ddc_get_modes(connector);
Line 1252... Line 1428...
1252
		}
1428
		}
1253
 
1429
 
1254
		if (ret > 0) {
1430
		if (ret > 0) {
Line 1279... Line 1455...
1279
		if (radeon_connector_encoder_get_dp_bridge_encoder_id(connector) !=
1455
		if (radeon_connector_encoder_get_dp_bridge_encoder_id(connector) !=
1280
			ENCODER_OBJECT_ID_NONE) {
1456
			ENCODER_OBJECT_ID_NONE) {
1281
			if (encoder)
1457
			if (encoder)
1282
				radeon_atom_ext_encoder_setup_ddc(encoder);
1458
				radeon_atom_ext_encoder_setup_ddc(encoder);
1283
		}
1459
		}
-
 
1460
		radeon_connector_get_edid(connector);
1284
		ret = radeon_ddc_get_modes(radeon_connector);
1461
		ret = radeon_ddc_get_modes(connector);
-
 
1462
 
-
 
1463
		radeon_get_native_mode(connector);
1285
	}
1464
	}
Line 1286... Line 1465...
1286
 
1465
 
1287
	return ret;
1466
	return ret;
Line 1288... Line 1467...
1288
}
1467
}
1289
 
1468
 
1290
u16 radeon_connector_encoder_get_dp_bridge_encoder_id(struct drm_connector *connector)
-
 
1291
{
1469
u16 radeon_connector_encoder_get_dp_bridge_encoder_id(struct drm_connector *connector)
1292
	struct drm_mode_object *obj;
1470
{
1293
	struct drm_encoder *encoder;
1471
	struct drm_encoder *encoder;
Line 1294... Line 1472...
1294
	struct radeon_encoder *radeon_encoder;
1472
	struct radeon_encoder *radeon_encoder;
1295
	int i;
1473
	int i;
1296
 
1474
 
Line 1297... Line 1475...
1297
	for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
1475
	for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
1298
		if (connector->encoder_ids[i] == 0)
1476
		if (connector->encoder_ids[i] == 0)
1299
			break;
1477
			break;
Line 1300... Line -...
1300
 
-
 
1301
		obj = drm_mode_object_find(connector->dev, connector->encoder_ids[i], DRM_MODE_OBJECT_ENCODER);
1478
 
Line 1302... Line 1479...
1302
		if (!obj)
1479
		encoder = drm_encoder_find(connector->dev, connector->encoder_ids[i]);
1303
			continue;
1480
		if (!encoder)
1304
 
1481
			continue;
Line 1315... Line 1492...
1315
	}
1492
	}
Line 1316... Line 1493...
1316
 
1493
 
1317
	return ENCODER_OBJECT_ID_NONE;
1494
	return ENCODER_OBJECT_ID_NONE;
Line 1318... Line 1495...
1318
}
1495
}
1319
 
1496
 
1320
bool radeon_connector_encoder_is_hbr2(struct drm_connector *connector)
-
 
1321
{
1497
static bool radeon_connector_encoder_is_hbr2(struct drm_connector *connector)
1322
	struct drm_mode_object *obj;
1498
{
1323
	struct drm_encoder *encoder;
1499
	struct drm_encoder *encoder;
1324
	struct radeon_encoder *radeon_encoder;
1500
	struct radeon_encoder *radeon_encoder;
Line 1325... Line 1501...
1325
	int i;
1501
	int i;
1326
	bool found = false;
1502
	bool found = false;
1327
 
1503
 
Line 1328... Line 1504...
1328
	for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
1504
	for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
1329
		if (connector->encoder_ids[i] == 0)
1505
		if (connector->encoder_ids[i] == 0)
1330
			break;
1506
			break;
Line 1331... Line -...
1331
 
-
 
1332
		obj = drm_mode_object_find(connector->dev, connector->encoder_ids[i], DRM_MODE_OBJECT_ENCODER);
1507
 
1333
		if (!obj)
1508
		encoder = drm_encoder_find(connector->dev, connector->encoder_ids[i]);
1334
			continue;
1509
		if (!encoder)
1335
 
1510
			continue;
Line 1346... Line 1521...
1346
{
1521
{
1347
	struct drm_device *dev = connector->dev;
1522
	struct drm_device *dev = connector->dev;
1348
	struct radeon_device *rdev = dev->dev_private;
1523
	struct radeon_device *rdev = dev->dev_private;
Line 1349... Line 1524...
1349
 
1524
 
1350
	if (ASIC_IS_DCE5(rdev) &&
1525
	if (ASIC_IS_DCE5(rdev) &&
1351
	    (rdev->clock.dp_extclk >= 53900) &&
1526
	    (rdev->clock.default_dispclk >= 53900) &&
1352
	    radeon_connector_encoder_is_hbr2(connector)) {
1527
	    radeon_connector_encoder_is_hbr2(connector)) {
1353
		return true;
1528
		return true;
Line 1354... Line 1529...
1354
	}
1529
	}
Line 1363... Line 1538...
1363
	struct radeon_device *rdev = dev->dev_private;
1538
	struct radeon_device *rdev = dev->dev_private;
1364
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1539
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1365
	enum drm_connector_status ret = connector_status_disconnected;
1540
	enum drm_connector_status ret = connector_status_disconnected;
1366
	struct radeon_connector_atom_dig *radeon_dig_connector = radeon_connector->con_priv;
1541
	struct radeon_connector_atom_dig *radeon_dig_connector = radeon_connector->con_priv;
1367
	struct drm_encoder *encoder = radeon_best_single_encoder(connector);
1542
	struct drm_encoder *encoder = radeon_best_single_encoder(connector);
-
 
1543
	int r;
Line 1368... Line -...
1368
 
-
 
1369
 
-
 
1370
#if DISABLE_DP
-
 
1371
    connector->status = connector_status_disconnected;
-
 
1372
    return connector->status;
-
 
1373
#endif
1544
 
1374
 
1545
 
1375
	if (!force && radeon_check_hpd_status_unchanged(connector))
-
 
1376
		return connector->status;
-
 
1377
 
-
 
1378
	if (radeon_connector->edid) {
1546
	if (!force && radeon_check_hpd_status_unchanged(connector)) {
1379
		kfree(radeon_connector->edid);
1547
		ret = connector->status;
Line -... Line 1548...
-
 
1548
		goto out;
-
 
1549
	}
1380
		radeon_connector->edid = NULL;
1550
 
1381
	}
1551
	radeon_connector_free_edid(connector);
1382
 
1552
 
1383
	if ((connector->connector_type == DRM_MODE_CONNECTOR_eDP) ||
1553
	if ((connector->connector_type == DRM_MODE_CONNECTOR_eDP) ||
1384
	    (connector->connector_type == DRM_MODE_CONNECTOR_LVDS)) {
1554
	    (connector->connector_type == DRM_MODE_CONNECTOR_LVDS)) {
Line 1427... Line 1597...
1427
		} else {
1597
		} else {
1428
		if (radeon_dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) {
1598
		if (radeon_dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) {
1429
			if (radeon_dp_getdpcd(radeon_connector))
1599
			if (radeon_dp_getdpcd(radeon_connector))
1430
				ret = connector_status_connected;
1600
				ret = connector_status_connected;
1431
		} else {
1601
		} else {
1432
				/* try non-aux ddc (DP to DVI/HMDI/etc. adapter) */
1602
				/* try non-aux ddc (DP to DVI/HDMI/etc. adapter) */
1433
				if (radeon_ddc_probe(radeon_connector, false))
1603
				if (radeon_ddc_probe(radeon_connector, false))
1434
			ret = connector_status_connected;
1604
			ret = connector_status_connected;
1435
		}
1605
		}
1436
	}
1606
	}
1437
	}
1607
	}
Line 1438... Line 1608...
1438
 
1608
 
-
 
1609
	radeon_connector_update_scratch_regs(connector, ret);
1439
	radeon_connector_update_scratch_regs(connector, ret);
1610
out:
1440
	return ret;
1611
	return ret;
Line 1441... Line 1612...
1441
}
1612
}
1442
 
1613
 
1443
static int radeon_dp_mode_valid(struct drm_connector *connector,
1614
static int radeon_dp_mode_valid(struct drm_connector *connector,
-
 
1615
				  struct drm_display_mode *mode)
-
 
1616
{
1444
				  struct drm_display_mode *mode)
1617
	struct drm_device *dev = connector->dev;
1445
{
1618
	struct radeon_device *rdev = dev->dev_private;
Line 1446... Line 1619...
1446
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1619
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
Line 1471... Line 1644...
1471
				if ((mode->hdisplay != native_mode->hdisplay) ||
1644
				if ((mode->hdisplay != native_mode->hdisplay) ||
1472
				    (mode->vdisplay != native_mode->vdisplay))
1645
				    (mode->vdisplay != native_mode->vdisplay))
1473
					return MODE_PANEL;
1646
					return MODE_PANEL;
1474
			}
1647
			}
1475
		}
1648
		}
1476
		return MODE_OK;
-
 
1477
	} else {
1649
	} else {
1478
	if ((radeon_dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) ||
1650
	if ((radeon_dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) ||
1479
	    (radeon_dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_eDP))
1651
		    (radeon_dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_eDP)) {
1480
			return radeon_dp_mode_valid_helper(connector, mode);
1652
			return radeon_dp_mode_valid_helper(connector, mode);
1481
	else
1653
		} else {
-
 
1654
			if (ASIC_IS_DCE6(rdev) && drm_detect_hdmi_monitor(radeon_connector_edid(connector))) {
-
 
1655
				/* HDMI 1.3+ supports max clock of 340 Mhz */
-
 
1656
				if (mode->clock > 340000)
-
 
1657
					return MODE_CLOCK_HIGH;
-
 
1658
			} else {
-
 
1659
				if (mode->clock > 165000)
1482
		return MODE_OK;
1660
					return MODE_CLOCK_HIGH;
-
 
1661
			}
-
 
1662
		}
1483
	}
1663
	}
-
 
1664
 
-
 
1665
		return MODE_OK;
1484
}
1666
}
Line 1485... Line 1667...
1485
 
1667
 
1486
static const struct drm_connector_helper_funcs radeon_dp_connector_helper_funcs = {
1668
static const struct drm_connector_helper_funcs radeon_dp_connector_helper_funcs = {
1487
	.get_modes = radeon_dp_get_modes,
1669
	.get_modes = radeon_dp_get_modes,
Line 1492... Line 1674...
1492
static const struct drm_connector_funcs radeon_dp_connector_funcs = {
1674
static const struct drm_connector_funcs radeon_dp_connector_funcs = {
1493
	.dpms = drm_helper_connector_dpms,
1675
	.dpms = drm_helper_connector_dpms,
1494
	.detect = radeon_dp_detect,
1676
	.detect = radeon_dp_detect,
1495
	.fill_modes = drm_helper_probe_single_connector_modes,
1677
	.fill_modes = drm_helper_probe_single_connector_modes,
1496
	.set_property = radeon_connector_set_property,
1678
	.set_property = radeon_connector_set_property,
1497
	.destroy = radeon_dp_connector_destroy,
1679
	.destroy = radeon_connector_destroy,
-
 
1680
	.force = radeon_dvi_force,
-
 
1681
};
-
 
1682
 
-
 
1683
static const struct drm_connector_funcs radeon_edp_connector_funcs = {
-
 
1684
	.dpms = drm_helper_connector_dpms,
-
 
1685
	.detect = radeon_dp_detect,
-
 
1686
	.fill_modes = drm_helper_probe_single_connector_modes,
-
 
1687
	.set_property = radeon_lvds_set_property,
-
 
1688
	.destroy = radeon_connector_destroy,
-
 
1689
	.force = radeon_dvi_force,
-
 
1690
};
-
 
1691
 
-
 
1692
static const struct drm_connector_funcs radeon_lvds_bridge_connector_funcs = {
-
 
1693
	.dpms = drm_helper_connector_dpms,
-
 
1694
	.detect = radeon_dp_detect,
-
 
1695
	.fill_modes = drm_helper_probe_single_connector_modes,
-
 
1696
	.set_property = radeon_lvds_set_property,
-
 
1697
	.destroy = radeon_connector_destroy,
1498
	.force = radeon_dvi_force,
1698
	.force = radeon_dvi_force,
1499
};
1699
};
Line 1500... Line 1700...
1500
 
1700
 
1501
void
1701
void
Line 1516... Line 1716...
1516
	struct drm_encoder *encoder;
1716
	struct drm_encoder *encoder;
1517
	struct radeon_encoder *radeon_encoder;
1717
	struct radeon_encoder *radeon_encoder;
1518
	uint32_t subpixel_order = SubPixelNone;
1718
	uint32_t subpixel_order = SubPixelNone;
1519
	bool shared_ddc = false;
1719
	bool shared_ddc = false;
1520
	bool is_dp_bridge = false;
1720
	bool is_dp_bridge = false;
-
 
1721
	bool has_aux = false;
Line 1521... Line 1722...
1521
 
1722
 
1522
	if (connector_type == DRM_MODE_CONNECTOR_Unknown)
1723
	if (connector_type == DRM_MODE_CONNECTOR_Unknown)
Line 1523... Line 1724...
1523
		return;
1724
		return;
Line 1587... Line 1788...
1587
		radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL);
1788
		radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL);
1588
		if (!radeon_dig_connector)
1789
		if (!radeon_dig_connector)
1589
			goto failed;
1790
			goto failed;
1590
		radeon_dig_connector->igp_lane_info = igp_lane_info;
1791
		radeon_dig_connector->igp_lane_info = igp_lane_info;
1591
		radeon_connector->con_priv = radeon_dig_connector;
1792
		radeon_connector->con_priv = radeon_dig_connector;
1592
		drm_connector_init(dev, &radeon_connector->base, &radeon_dp_connector_funcs, connector_type);
-
 
1593
		drm_connector_helper_add(&radeon_connector->base, &radeon_dp_connector_helper_funcs);
-
 
1594
		if (i2c_bus->valid) {
1793
		if (i2c_bus->valid) {
1595
			/* add DP i2c bus */
-
 
1596
			if (connector_type == DRM_MODE_CONNECTOR_eDP)
-
 
1597
				radeon_dig_connector->dp_i2c_bus = radeon_i2c_create_dp(dev, i2c_bus, "eDP-auxch");
-
 
1598
			else
-
 
1599
				radeon_dig_connector->dp_i2c_bus = radeon_i2c_create_dp(dev, i2c_bus, "DP-auxch");
-
 
1600
			if (!radeon_dig_connector->dp_i2c_bus)
-
 
1601
				DRM_ERROR("DP: Failed to assign dp ddc bus! Check dmesg for i2c errors.\n");
-
 
1602
			radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
1794
			radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
1603
			if (!radeon_connector->ddc_bus)
1795
			if (radeon_connector->ddc_bus)
-
 
1796
				has_aux = true;
-
 
1797
			else
1604
				DRM_ERROR("DP: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
1798
				DRM_ERROR("DP: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
1605
		}
1799
		}
1606
	switch (connector_type) {
1800
	switch (connector_type) {
1607
	case DRM_MODE_CONNECTOR_VGA:
1801
	case DRM_MODE_CONNECTOR_VGA:
1608
		case DRM_MODE_CONNECTOR_DVIA:
1802
		case DRM_MODE_CONNECTOR_DVIA:
1609
		default:
1803
		default:
-
 
1804
			drm_connector_init(dev, &radeon_connector->base,
-
 
1805
					   &radeon_dp_connector_funcs, connector_type);
-
 
1806
			drm_connector_helper_add(&radeon_connector->base,
-
 
1807
						 &radeon_dp_connector_helper_funcs);
1610
			connector->interlace_allowed = true;
1808
			connector->interlace_allowed = true;
1611
			connector->doublescan_allowed = true;
1809
			connector->doublescan_allowed = true;
1612
			radeon_connector->dac_load_detect = true;
1810
			radeon_connector->dac_load_detect = true;
1613
			drm_object_attach_property(&radeon_connector->base.base,
1811
			drm_object_attach_property(&radeon_connector->base.base,
1614
						      rdev->mode_info.load_detect_property,
1812
						      rdev->mode_info.load_detect_property,
1615
						      1);
1813
						      1);
-
 
1814
			drm_object_attach_property(&radeon_connector->base.base,
-
 
1815
						   dev->mode_config.scaling_mode_property,
-
 
1816
						   DRM_MODE_SCALE_NONE);
1616
			break;
1817
			break;
1617
		case DRM_MODE_CONNECTOR_DVII:
1818
		case DRM_MODE_CONNECTOR_DVII:
1618
		case DRM_MODE_CONNECTOR_DVID:
1819
		case DRM_MODE_CONNECTOR_DVID:
1619
		case DRM_MODE_CONNECTOR_HDMIA:
1820
		case DRM_MODE_CONNECTOR_HDMIA:
1620
		case DRM_MODE_CONNECTOR_HDMIB:
1821
		case DRM_MODE_CONNECTOR_HDMIB:
1621
		case DRM_MODE_CONNECTOR_DisplayPort:
1822
		case DRM_MODE_CONNECTOR_DisplayPort:
-
 
1823
			drm_connector_init(dev, &radeon_connector->base,
-
 
1824
					   &radeon_dp_connector_funcs, connector_type);
-
 
1825
			drm_connector_helper_add(&radeon_connector->base,
-
 
1826
						 &radeon_dp_connector_helper_funcs);
1622
			drm_object_attach_property(&radeon_connector->base.base,
1827
			drm_object_attach_property(&radeon_connector->base.base,
1623
						      rdev->mode_info.underscan_property,
1828
						      rdev->mode_info.underscan_property,
1624
						      UNDERSCAN_OFF);
1829
						      UNDERSCAN_OFF);
1625
			drm_object_attach_property(&radeon_connector->base.base,
1830
			drm_object_attach_property(&radeon_connector->base.base,
1626
						      rdev->mode_info.underscan_hborder_property,
1831
						      rdev->mode_info.underscan_hborder_property,
1627
						      0);
1832
						      0);
1628
			drm_object_attach_property(&radeon_connector->base.base,
1833
			drm_object_attach_property(&radeon_connector->base.base,
1629
						      rdev->mode_info.underscan_vborder_property,
1834
						      rdev->mode_info.underscan_vborder_property,
1630
						      0);
1835
						      0);
-
 
1836
 
-
 
1837
			drm_object_attach_property(&radeon_connector->base.base,
-
 
1838
						      dev->mode_config.scaling_mode_property,
-
 
1839
						      DRM_MODE_SCALE_NONE);
-
 
1840
 
-
 
1841
			drm_object_attach_property(&radeon_connector->base.base,
-
 
1842
						   rdev->mode_info.dither_property,
-
 
1843
						   RADEON_FMT_DITHER_DISABLE);
-
 
1844
 
-
 
1845
			if (radeon_audio != 0)
-
 
1846
			drm_object_attach_property(&radeon_connector->base.base,
-
 
1847
						   rdev->mode_info.audio_property,
-
 
1848
							   RADEON_AUDIO_AUTO);
-
 
1849
 
1631
			subpixel_order = SubPixelHorizontalRGB;
1850
			subpixel_order = SubPixelHorizontalRGB;
1632
			connector->interlace_allowed = true;
1851
			connector->interlace_allowed = true;
1633
			if (connector_type == DRM_MODE_CONNECTOR_HDMIB)
1852
			if (connector_type == DRM_MODE_CONNECTOR_HDMIB)
1634
				connector->doublescan_allowed = true;
1853
				connector->doublescan_allowed = true;
1635
			else
1854
			else
Line 1641... Line 1860...
1641
							      1);
1860
							      1);
1642
			}
1861
			}
1643
			break;
1862
			break;
1644
		case DRM_MODE_CONNECTOR_LVDS:
1863
		case DRM_MODE_CONNECTOR_LVDS:
1645
		case DRM_MODE_CONNECTOR_eDP:
1864
		case DRM_MODE_CONNECTOR_eDP:
-
 
1865
			drm_connector_init(dev, &radeon_connector->base,
-
 
1866
					   &radeon_lvds_bridge_connector_funcs, connector_type);
-
 
1867
			drm_connector_helper_add(&radeon_connector->base,
-
 
1868
						 &radeon_dp_connector_helper_funcs);
1646
			drm_object_attach_property(&radeon_connector->base.base,
1869
			drm_object_attach_property(&radeon_connector->base.base,
1647
						      dev->mode_config.scaling_mode_property,
1870
						      dev->mode_config.scaling_mode_property,
1648
						      DRM_MODE_SCALE_FULLSCREEN);
1871
						      DRM_MODE_SCALE_FULLSCREEN);
1649
			subpixel_order = SubPixelHorizontalRGB;
1872
			subpixel_order = SubPixelHorizontalRGB;
1650
			connector->interlace_allowed = false;
1873
			connector->interlace_allowed = false;
Line 1663... Line 1886...
1663
		}
1886
		}
1664
		radeon_connector->dac_load_detect = true;
1887
		radeon_connector->dac_load_detect = true;
1665
			drm_object_attach_property(&radeon_connector->base.base,
1888
			drm_object_attach_property(&radeon_connector->base.base,
1666
					      rdev->mode_info.load_detect_property,
1889
					      rdev->mode_info.load_detect_property,
1667
					      1);
1890
					      1);
-
 
1891
			if (ASIC_IS_AVIVO(rdev))
-
 
1892
				drm_object_attach_property(&radeon_connector->base.base,
-
 
1893
							   dev->mode_config.scaling_mode_property,
-
 
1894
							   DRM_MODE_SCALE_NONE);
1668
		/* no HPD on analog connectors */
1895
		/* no HPD on analog connectors */
1669
		radeon_connector->hpd.hpd = RADEON_HPD_NONE;
1896
		radeon_connector->hpd.hpd = RADEON_HPD_NONE;
1670
		connector->polled = DRM_CONNECTOR_POLL_CONNECT;
1897
		connector->polled = DRM_CONNECTOR_POLL_CONNECT;
1671
		connector->interlace_allowed = true;
1898
		connector->interlace_allowed = true;
1672
		connector->doublescan_allowed = true;
1899
		connector->doublescan_allowed = true;
Line 1681... Line 1908...
1681
		}
1908
		}
1682
		radeon_connector->dac_load_detect = true;
1909
		radeon_connector->dac_load_detect = true;
1683
			drm_object_attach_property(&radeon_connector->base.base,
1910
			drm_object_attach_property(&radeon_connector->base.base,
1684
					      rdev->mode_info.load_detect_property,
1911
					      rdev->mode_info.load_detect_property,
1685
					      1);
1912
					      1);
-
 
1913
			if (ASIC_IS_AVIVO(rdev))
-
 
1914
				drm_object_attach_property(&radeon_connector->base.base,
-
 
1915
							   dev->mode_config.scaling_mode_property,
-
 
1916
							   DRM_MODE_SCALE_NONE);
1686
		/* no HPD on analog connectors */
1917
		/* no HPD on analog connectors */
1687
		radeon_connector->hpd.hpd = RADEON_HPD_NONE;
1918
		radeon_connector->hpd.hpd = RADEON_HPD_NONE;
1688
		connector->interlace_allowed = true;
1919
		connector->interlace_allowed = true;
1689
		connector->doublescan_allowed = true;
1920
		connector->doublescan_allowed = true;
1690
		break;
1921
		break;
Line 1714... Line 1945...
1714
						      rdev->mode_info.underscan_hborder_property,
1945
						      rdev->mode_info.underscan_hborder_property,
1715
						      0);
1946
						      0);
1716
				drm_object_attach_property(&radeon_connector->base.base,
1947
				drm_object_attach_property(&radeon_connector->base.base,
1717
						      rdev->mode_info.underscan_vborder_property,
1948
						      rdev->mode_info.underscan_vborder_property,
1718
						      0);
1949
						      0);
-
 
1950
				drm_object_attach_property(&radeon_connector->base.base,
-
 
1951
							   rdev->mode_info.dither_property,
-
 
1952
							   RADEON_FMT_DITHER_DISABLE);
-
 
1953
				drm_object_attach_property(&radeon_connector->base.base,
-
 
1954
							   dev->mode_config.scaling_mode_property,
-
 
1955
							   DRM_MODE_SCALE_NONE);
-
 
1956
		}
-
 
1957
			if (ASIC_IS_DCE2(rdev) && (radeon_audio != 0)) {
-
 
1958
				drm_object_attach_property(&radeon_connector->base.base,
-
 
1959
							      rdev->mode_info.audio_property,
-
 
1960
							   RADEON_AUDIO_AUTO);
1719
		}
1961
			}
1720
		if (connector_type == DRM_MODE_CONNECTOR_DVII) {
1962
		if (connector_type == DRM_MODE_CONNECTOR_DVII) {
1721
		radeon_connector->dac_load_detect = true;
1963
		radeon_connector->dac_load_detect = true;
1722
				drm_object_attach_property(&radeon_connector->base.base,
1964
				drm_object_attach_property(&radeon_connector->base.base,
1723
					      rdev->mode_info.load_detect_property,
1965
					      rdev->mode_info.load_detect_property,
Line 1754... Line 1996...
1754
						      rdev->mode_info.underscan_hborder_property,
1996
						      rdev->mode_info.underscan_hborder_property,
1755
						      0);
1997
						      0);
1756
				drm_object_attach_property(&radeon_connector->base.base,
1998
				drm_object_attach_property(&radeon_connector->base.base,
1757
						      rdev->mode_info.underscan_vborder_property,
1999
						      rdev->mode_info.underscan_vborder_property,
1758
						      0);
2000
						      0);
-
 
2001
				drm_object_attach_property(&radeon_connector->base.base,
-
 
2002
							   rdev->mode_info.dither_property,
-
 
2003
							   RADEON_FMT_DITHER_DISABLE);
-
 
2004
				drm_object_attach_property(&radeon_connector->base.base,
-
 
2005
							   dev->mode_config.scaling_mode_property,
-
 
2006
							   DRM_MODE_SCALE_NONE);
-
 
2007
		}
-
 
2008
			if (ASIC_IS_DCE2(rdev) && (radeon_audio != 0)) {
-
 
2009
				drm_object_attach_property(&radeon_connector->base.base,
-
 
2010
							      rdev->mode_info.audio_property,
-
 
2011
							   RADEON_AUDIO_AUTO);
1759
		}
2012
			}
1760
		subpixel_order = SubPixelHorizontalRGB;
2013
		subpixel_order = SubPixelHorizontalRGB;
1761
		connector->interlace_allowed = true;
2014
		connector->interlace_allowed = true;
1762
		if (connector_type == DRM_MODE_CONNECTOR_HDMIB)
2015
		if (connector_type == DRM_MODE_CONNECTOR_HDMIB)
1763
			connector->doublescan_allowed = true;
2016
			connector->doublescan_allowed = true;
Line 1771... Line 2024...
1771
		radeon_dig_connector->igp_lane_info = igp_lane_info;
2024
		radeon_dig_connector->igp_lane_info = igp_lane_info;
1772
		radeon_connector->con_priv = radeon_dig_connector;
2025
		radeon_connector->con_priv = radeon_dig_connector;
1773
		drm_connector_init(dev, &radeon_connector->base, &radeon_dp_connector_funcs, connector_type);
2026
		drm_connector_init(dev, &radeon_connector->base, &radeon_dp_connector_funcs, connector_type);
1774
		drm_connector_helper_add(&radeon_connector->base, &radeon_dp_connector_helper_funcs);
2027
		drm_connector_helper_add(&radeon_connector->base, &radeon_dp_connector_helper_funcs);
1775
		if (i2c_bus->valid) {
2028
		if (i2c_bus->valid) {
1776
			/* add DP i2c bus */
-
 
1777
			radeon_dig_connector->dp_i2c_bus = radeon_i2c_create_dp(dev, i2c_bus, "DP-auxch");
-
 
1778
			if (!radeon_dig_connector->dp_i2c_bus)
-
 
1779
				DRM_ERROR("DP: Failed to assign dp ddc bus! Check dmesg for i2c errors.\n");
-
 
1780
			radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
2029
			radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
1781
			if (!radeon_connector->ddc_bus)
2030
				if (radeon_connector->ddc_bus)
-
 
2031
					has_aux = true;
-
 
2032
				else
1782
				DRM_ERROR("DP: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
2033
				DRM_ERROR("DP: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
1783
		}
2034
		}
1784
		subpixel_order = SubPixelHorizontalRGB;
2035
		subpixel_order = SubPixelHorizontalRGB;
1785
			drm_object_attach_property(&radeon_connector->base.base,
2036
			drm_object_attach_property(&radeon_connector->base.base,
1786
					      rdev->mode_info.coherent_mode_property,
2037
					      rdev->mode_info.coherent_mode_property,
Line 1793... Line 2044...
1793
						      rdev->mode_info.underscan_hborder_property,
2044
						      rdev->mode_info.underscan_hborder_property,
1794
						      0);
2045
						      0);
1795
				drm_object_attach_property(&radeon_connector->base.base,
2046
				drm_object_attach_property(&radeon_connector->base.base,
1796
						      rdev->mode_info.underscan_vborder_property,
2047
						      rdev->mode_info.underscan_vborder_property,
1797
						      0);
2048
						      0);
-
 
2049
				drm_object_attach_property(&radeon_connector->base.base,
-
 
2050
							   rdev->mode_info.dither_property,
-
 
2051
							   RADEON_FMT_DITHER_DISABLE);
-
 
2052
				drm_object_attach_property(&radeon_connector->base.base,
-
 
2053
							   dev->mode_config.scaling_mode_property,
-
 
2054
							   DRM_MODE_SCALE_NONE);
-
 
2055
		}
-
 
2056
			if (ASIC_IS_DCE2(rdev) && (radeon_audio != 0)) {
-
 
2057
				drm_object_attach_property(&radeon_connector->base.base,
-
 
2058
							      rdev->mode_info.audio_property,
-
 
2059
							   RADEON_AUDIO_AUTO);
1798
		}
2060
			}
1799
		connector->interlace_allowed = true;
2061
		connector->interlace_allowed = true;
1800
		/* in theory with a DP to VGA converter... */
2062
		/* in theory with a DP to VGA converter... */
1801
		connector->doublescan_allowed = false;
2063
		connector->doublescan_allowed = false;
1802
		break;
2064
		break;
Line 1804... Line 2066...
1804
			radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL);
2066
			radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL);
1805
			if (!radeon_dig_connector)
2067
			if (!radeon_dig_connector)
1806
				goto failed;
2068
				goto failed;
1807
			radeon_dig_connector->igp_lane_info = igp_lane_info;
2069
			radeon_dig_connector->igp_lane_info = igp_lane_info;
1808
			radeon_connector->con_priv = radeon_dig_connector;
2070
			radeon_connector->con_priv = radeon_dig_connector;
1809
			drm_connector_init(dev, &radeon_connector->base, &radeon_dp_connector_funcs, connector_type);
2071
			drm_connector_init(dev, &radeon_connector->base, &radeon_edp_connector_funcs, connector_type);
1810
			drm_connector_helper_add(&radeon_connector->base, &radeon_dp_connector_helper_funcs);
2072
			drm_connector_helper_add(&radeon_connector->base, &radeon_dp_connector_helper_funcs);
1811
			if (i2c_bus->valid) {
2073
			if (i2c_bus->valid) {
1812
				/* add DP i2c bus */
-
 
1813
				radeon_dig_connector->dp_i2c_bus = radeon_i2c_create_dp(dev, i2c_bus, "eDP-auxch");
-
 
1814
				if (!radeon_dig_connector->dp_i2c_bus)
-
 
1815
					DRM_ERROR("DP: Failed to assign dp ddc bus! Check dmesg for i2c errors.\n");
-
 
1816
				radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
2074
				radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
1817
				if (!radeon_connector->ddc_bus)
2075
				if (radeon_connector->ddc_bus)
-
 
2076
					has_aux = true;
-
 
2077
				else
1818
					DRM_ERROR("DP: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
2078
					DRM_ERROR("DP: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
1819
			}
2079
			}
1820
			drm_object_attach_property(&radeon_connector->base.base,
2080
			drm_object_attach_property(&radeon_connector->base.base,
1821
						      dev->mode_config.scaling_mode_property,
2081
						      dev->mode_config.scaling_mode_property,
1822
						      DRM_MODE_SCALE_FULLSCREEN);
2082
						      DRM_MODE_SCALE_FULLSCREEN);
Line 1869... Line 2129...
1869
			connector->polled = DRM_CONNECTOR_POLL_CONNECT;
2129
			connector->polled = DRM_CONNECTOR_POLL_CONNECT;
1870
	} else
2130
	} else
1871
		connector->polled = DRM_CONNECTOR_POLL_HPD;
2131
		connector->polled = DRM_CONNECTOR_POLL_HPD;
Line 1872... Line 2132...
1872
 
2132
 
1873
	connector->display_info.subpixel_order = subpixel_order;
2133
	connector->display_info.subpixel_order = subpixel_order;
-
 
2134
	drm_connector_register(connector);
-
 
2135
 
-
 
2136
	if (has_aux)
-
 
2137
		radeon_dp_aux_init(radeon_connector);
1874
	drm_sysfs_connector_add(connector);
2138
 
Line 1875... Line 2139...
1875
	return;
2139
	return;
1876
 
2140
 
1877
failed:
2141
failed:
Line 2026... Line 2290...
2026
		if (i2c_bus->valid)
2290
		if (i2c_bus->valid)
2027
			connector->polled = DRM_CONNECTOR_POLL_CONNECT;
2291
			connector->polled = DRM_CONNECTOR_POLL_CONNECT;
2028
	} else
2292
	} else
2029
		connector->polled = DRM_CONNECTOR_POLL_HPD;
2293
		connector->polled = DRM_CONNECTOR_POLL_HPD;
2030
	connector->display_info.subpixel_order = subpixel_order;
2294
	connector->display_info.subpixel_order = subpixel_order;
2031
	drm_sysfs_connector_add(connector);
2295
	drm_connector_register(connector);
2032
}
2296
}