Subversion Repositories Kolibri OS

Rev

Rev 2005 | Rev 2997 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2005 Rev 2160
1
/*
1
/*
2
 * Copyright 2007-8 Advanced Micro Devices, Inc.
2
 * Copyright 2007-8 Advanced Micro Devices, Inc.
3
 * Copyright 2008 Red Hat Inc.
3
 * Copyright 2008 Red Hat Inc.
4
 *
4
 *
5
 * Permission is hereby granted, free of charge, to any person obtaining a
5
 * Permission is hereby granted, free of charge, to any person obtaining a
6
 * copy of this software and associated documentation files (the "Software"),
6
 * copy of this software and associated documentation files (the "Software"),
7
 * to deal in the Software without restriction, including without limitation
7
 * to deal in the Software without restriction, including without limitation
8
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9
 * and/or sell copies of the Software, and to permit persons to whom the
9
 * and/or sell copies of the Software, and to permit persons to whom the
10
 * Software is furnished to do so, subject to the following conditions:
10
 * Software is furnished to do so, subject to the following conditions:
11
 *
11
 *
12
 * The above copyright notice and this permission notice shall be included in
12
 * The above copyright notice and this permission notice shall be included in
13
 * all copies or substantial portions of the Software.
13
 * all copies or substantial portions of the Software.
14
 *
14
 *
15
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
17
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18
 * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
18
 * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
19
 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
19
 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
20
 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
20
 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
21
 * OTHER DEALINGS IN THE SOFTWARE.
21
 * OTHER DEALINGS IN THE SOFTWARE.
22
 *
22
 *
23
 * Authors: Dave Airlie
23
 * Authors: Dave Airlie
24
 *          Alex Deucher
24
 *          Alex Deucher
25
 */
25
 */
26
#include "drmP.h"
26
#include "drmP.h"
27
#include "drm_edid.h"
27
#include "drm_edid.h"
28
#include "drm_crtc_helper.h"
28
#include "drm_crtc_helper.h"
29
#include "drm_fb_helper.h"
29
#include "drm_fb_helper.h"
30
#include "radeon_drm.h"
30
#include "radeon_drm.h"
31
#include "radeon.h"
31
#include "radeon.h"
32
#include "atom.h"
32
#include "atom.h"
33
 
33
 
34
extern void
34
extern void
35
radeon_combios_connected_scratch_regs(struct drm_connector *connector,
35
radeon_combios_connected_scratch_regs(struct drm_connector *connector,
36
				      struct drm_encoder *encoder,
36
				      struct drm_encoder *encoder,
37
				      bool connected);
37
				      bool connected);
38
extern void
38
extern void
39
radeon_atombios_connected_scratch_regs(struct drm_connector *connector,
39
radeon_atombios_connected_scratch_regs(struct drm_connector *connector,
40
				       struct drm_encoder *encoder,
40
				       struct drm_encoder *encoder,
41
				       bool connected);
41
				       bool connected);
42
 
42
 
43
extern void
43
extern void
44
radeon_legacy_backlight_init(struct radeon_encoder *radeon_encoder,
44
radeon_legacy_backlight_init(struct radeon_encoder *radeon_encoder,
45
			     struct drm_connector *drm_connector);
45
			     struct drm_connector *drm_connector);
46
 
46
 
47
bool radeon_connector_encoder_is_dp_bridge(struct drm_connector *connector);
47
bool radeon_connector_encoder_is_dp_bridge(struct drm_connector *connector);
48
 
48
 
49
void radeon_connector_hotplug(struct drm_connector *connector)
49
void radeon_connector_hotplug(struct drm_connector *connector)
50
{
50
{
51
	struct drm_device *dev = connector->dev;
51
	struct drm_device *dev = connector->dev;
52
	struct radeon_device *rdev = dev->dev_private;
52
	struct radeon_device *rdev = dev->dev_private;
53
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
53
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
54
 
54
 
55
	/* bail if the connector does not have hpd pin, e.g.,
55
	/* bail if the connector does not have hpd pin, e.g.,
56
	 * VGA, TV, etc.
56
	 * VGA, TV, etc.
57
	 */
57
	 */
58
	if (radeon_connector->hpd.hpd == RADEON_HPD_NONE)
58
	if (radeon_connector->hpd.hpd == RADEON_HPD_NONE)
59
		return;
59
		return;
60
 
60
 
61
		radeon_hpd_set_polarity(rdev, radeon_connector->hpd.hpd);
61
		radeon_hpd_set_polarity(rdev, radeon_connector->hpd.hpd);
62
 
62
 
63
	/* powering up/down the eDP panel generates hpd events which
63
	/* powering up/down the eDP panel generates hpd events which
64
	 * can interfere with modesetting.
64
	 * can interfere with modesetting.
65
	 */
65
	 */
66
	if (connector->connector_type == DRM_MODE_CONNECTOR_eDP)
66
	if (connector->connector_type == DRM_MODE_CONNECTOR_eDP)
67
		return;
67
		return;
68
 
68
 
69
	/* pre-r600 did not always have the hpd pins mapped accurately to connectors */
69
	/* pre-r600 did not always have the hpd pins mapped accurately to connectors */
70
	if (rdev->family >= CHIP_R600) {
70
	if (rdev->family >= CHIP_R600) {
71
		if (radeon_hpd_sense(rdev, radeon_connector->hpd.hpd))
71
		if (radeon_hpd_sense(rdev, radeon_connector->hpd.hpd))
72
			drm_helper_connector_dpms(connector, DRM_MODE_DPMS_ON);
72
			drm_helper_connector_dpms(connector, DRM_MODE_DPMS_ON);
73
		else
73
		else
74
			drm_helper_connector_dpms(connector, DRM_MODE_DPMS_OFF);
74
			drm_helper_connector_dpms(connector, DRM_MODE_DPMS_OFF);
75
			}
75
			}
76
}
76
}
77
 
77
 
78
static void radeon_property_change_mode(struct drm_encoder *encoder)
78
static void radeon_property_change_mode(struct drm_encoder *encoder)
79
{
79
{
80
	struct drm_crtc *crtc = encoder->crtc;
80
	struct drm_crtc *crtc = encoder->crtc;
81
 
81
 
82
	if (crtc && crtc->enabled) {
82
	if (crtc && crtc->enabled) {
83
		drm_crtc_helper_set_mode(crtc, &crtc->mode,
83
		drm_crtc_helper_set_mode(crtc, &crtc->mode,
84
					 crtc->x, crtc->y, crtc->fb);
84
					 crtc->x, crtc->y, crtc->fb);
85
	}
85
	}
86
}
86
}
87
static void
87
static void
88
radeon_connector_update_scratch_regs(struct drm_connector *connector, enum drm_connector_status status)
88
radeon_connector_update_scratch_regs(struct drm_connector *connector, enum drm_connector_status status)
89
{
89
{
90
	struct drm_device *dev = connector->dev;
90
	struct drm_device *dev = connector->dev;
91
	struct radeon_device *rdev = dev->dev_private;
91
	struct radeon_device *rdev = dev->dev_private;
92
	struct drm_encoder *best_encoder = NULL;
92
	struct drm_encoder *best_encoder = NULL;
93
	struct drm_encoder *encoder = NULL;
93
	struct drm_encoder *encoder = NULL;
94
	struct drm_connector_helper_funcs *connector_funcs = connector->helper_private;
94
	struct drm_connector_helper_funcs *connector_funcs = connector->helper_private;
95
	struct drm_mode_object *obj;
95
	struct drm_mode_object *obj;
96
	bool connected;
96
	bool connected;
97
	int i;
97
	int i;
98
 
98
 
99
	best_encoder = connector_funcs->best_encoder(connector);
99
	best_encoder = connector_funcs->best_encoder(connector);
100
 
100
 
101
	for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
101
	for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
102
		if (connector->encoder_ids[i] == 0)
102
		if (connector->encoder_ids[i] == 0)
103
			break;
103
			break;
104
 
104
 
105
		obj = drm_mode_object_find(connector->dev,
105
		obj = drm_mode_object_find(connector->dev,
106
					   connector->encoder_ids[i],
106
					   connector->encoder_ids[i],
107
					   DRM_MODE_OBJECT_ENCODER);
107
					   DRM_MODE_OBJECT_ENCODER);
108
		if (!obj)
108
		if (!obj)
109
			continue;
109
			continue;
110
 
110
 
111
		encoder = obj_to_encoder(obj);
111
		encoder = obj_to_encoder(obj);
112
 
112
 
113
		if ((encoder == best_encoder) && (status == connector_status_connected))
113
		if ((encoder == best_encoder) && (status == connector_status_connected))
114
			connected = true;
114
			connected = true;
115
		else
115
		else
116
			connected = false;
116
			connected = false;
117
 
117
 
118
		if (rdev->is_atom_bios)
118
		if (rdev->is_atom_bios)
119
			radeon_atombios_connected_scratch_regs(connector, encoder, connected);
119
			radeon_atombios_connected_scratch_regs(connector, encoder, connected);
120
		else
120
		else
121
			radeon_combios_connected_scratch_regs(connector, encoder, connected);
121
			radeon_combios_connected_scratch_regs(connector, encoder, connected);
122
 
122
 
123
	}
123
	}
124
}
124
}
125
 
125
 
126
struct drm_encoder *radeon_find_encoder(struct drm_connector *connector, int encoder_type)
126
struct drm_encoder *radeon_find_encoder(struct drm_connector *connector, int encoder_type)
127
{
127
{
128
	struct drm_mode_object *obj;
128
	struct drm_mode_object *obj;
129
	struct drm_encoder *encoder;
129
	struct drm_encoder *encoder;
130
	int i;
130
	int i;
131
 
131
 
132
	for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
132
	for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
133
		if (connector->encoder_ids[i] == 0)
133
		if (connector->encoder_ids[i] == 0)
134
			break;
134
			break;
135
 
135
 
136
		obj = drm_mode_object_find(connector->dev, connector->encoder_ids[i], DRM_MODE_OBJECT_ENCODER);
136
		obj = drm_mode_object_find(connector->dev, connector->encoder_ids[i], DRM_MODE_OBJECT_ENCODER);
137
		if (!obj)
137
		if (!obj)
138
			continue;
138
			continue;
139
 
139
 
140
		encoder = obj_to_encoder(obj);
140
		encoder = obj_to_encoder(obj);
141
		if (encoder->encoder_type == encoder_type)
141
		if (encoder->encoder_type == encoder_type)
142
			return encoder;
142
			return encoder;
143
	}
143
	}
144
	return NULL;
144
	return NULL;
145
}
145
}
146
 
146
 
147
struct drm_encoder *radeon_best_single_encoder(struct drm_connector *connector)
147
struct drm_encoder *radeon_best_single_encoder(struct drm_connector *connector)
148
{
148
{
149
	int enc_id = connector->encoder_ids[0];
149
	int enc_id = connector->encoder_ids[0];
150
	struct drm_mode_object *obj;
150
	struct drm_mode_object *obj;
151
	struct drm_encoder *encoder;
151
	struct drm_encoder *encoder;
152
 
152
 
153
	/* pick the encoder ids */
153
	/* pick the encoder ids */
154
	if (enc_id) {
154
	if (enc_id) {
155
		obj = drm_mode_object_find(connector->dev, enc_id, DRM_MODE_OBJECT_ENCODER);
155
		obj = drm_mode_object_find(connector->dev, enc_id, DRM_MODE_OBJECT_ENCODER);
156
		if (!obj)
156
		if (!obj)
157
			return NULL;
157
			return NULL;
158
		encoder = obj_to_encoder(obj);
158
		encoder = obj_to_encoder(obj);
159
		return encoder;
159
		return encoder;
160
	}
160
	}
161
	return NULL;
161
	return NULL;
162
}
162
}
163
 
163
 
164
/*
164
/*
165
 * radeon_connector_analog_encoder_conflict_solve
165
 * radeon_connector_analog_encoder_conflict_solve
166
 * - search for other connectors sharing this encoder
166
 * - search for other connectors sharing this encoder
167
 *   if priority is true, then set them disconnected if this is connected
167
 *   if priority is true, then set them disconnected if this is connected
168
 *   if priority is false, set us disconnected if they are connected
168
 *   if priority is false, set us disconnected if they are connected
169
 */
169
 */
170
static enum drm_connector_status
170
static enum drm_connector_status
171
radeon_connector_analog_encoder_conflict_solve(struct drm_connector *connector,
171
radeon_connector_analog_encoder_conflict_solve(struct drm_connector *connector,
172
					       struct drm_encoder *encoder,
172
					       struct drm_encoder *encoder,
173
					       enum drm_connector_status current_status,
173
					       enum drm_connector_status current_status,
174
					       bool priority)
174
					       bool priority)
175
{
175
{
176
	struct drm_device *dev = connector->dev;
176
	struct drm_device *dev = connector->dev;
177
	struct drm_connector *conflict;
177
	struct drm_connector *conflict;
178
	struct radeon_connector *radeon_conflict;
178
	struct radeon_connector *radeon_conflict;
179
	int i;
179
	int i;
180
 
180
 
181
	list_for_each_entry(conflict, &dev->mode_config.connector_list, head) {
181
	list_for_each_entry(conflict, &dev->mode_config.connector_list, head) {
182
		if (conflict == connector)
182
		if (conflict == connector)
183
			continue;
183
			continue;
184
 
184
 
185
		radeon_conflict = to_radeon_connector(conflict);
185
		radeon_conflict = to_radeon_connector(conflict);
186
		for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
186
		for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
187
			if (conflict->encoder_ids[i] == 0)
187
			if (conflict->encoder_ids[i] == 0)
188
				break;
188
				break;
189
 
189
 
190
			/* if the IDs match */
190
			/* if the IDs match */
191
			if (conflict->encoder_ids[i] == encoder->base.id) {
191
			if (conflict->encoder_ids[i] == encoder->base.id) {
192
				if (conflict->status != connector_status_connected)
192
				if (conflict->status != connector_status_connected)
193
					continue;
193
					continue;
194
 
194
 
195
				if (radeon_conflict->use_digital)
195
				if (radeon_conflict->use_digital)
196
					continue;
196
					continue;
197
 
197
 
198
				if (priority == true) {
198
				if (priority == true) {
199
					DRM_DEBUG_KMS("1: conflicting encoders switching off %s\n", drm_get_connector_name(conflict));
199
					DRM_DEBUG_KMS("1: conflicting encoders switching off %s\n", drm_get_connector_name(conflict));
200
					DRM_DEBUG_KMS("in favor of %s\n", drm_get_connector_name(connector));
200
					DRM_DEBUG_KMS("in favor of %s\n", drm_get_connector_name(connector));
201
					conflict->status = connector_status_disconnected;
201
					conflict->status = connector_status_disconnected;
202
					radeon_connector_update_scratch_regs(conflict, connector_status_disconnected);
202
					radeon_connector_update_scratch_regs(conflict, connector_status_disconnected);
203
				} else {
203
				} else {
204
					DRM_DEBUG_KMS("2: conflicting encoders switching off %s\n", drm_get_connector_name(connector));
204
					DRM_DEBUG_KMS("2: conflicting encoders switching off %s\n", drm_get_connector_name(connector));
205
					DRM_DEBUG_KMS("in favor of %s\n", drm_get_connector_name(conflict));
205
					DRM_DEBUG_KMS("in favor of %s\n", drm_get_connector_name(conflict));
206
					current_status = connector_status_disconnected;
206
					current_status = connector_status_disconnected;
207
				}
207
				}
208
				break;
208
				break;
209
			}
209
			}
210
		}
210
		}
211
	}
211
	}
212
	return current_status;
212
	return current_status;
213
 
213
 
214
}
214
}
215
 
215
 
216
static struct drm_display_mode *radeon_fp_native_mode(struct drm_encoder *encoder)
216
static struct drm_display_mode *radeon_fp_native_mode(struct drm_encoder *encoder)
217
{
217
{
218
	struct drm_device *dev = encoder->dev;
218
	struct drm_device *dev = encoder->dev;
219
	struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
219
	struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
220
	struct drm_display_mode *mode = NULL;
220
	struct drm_display_mode *mode = NULL;
221
	struct drm_display_mode *native_mode = &radeon_encoder->native_mode;
221
	struct drm_display_mode *native_mode = &radeon_encoder->native_mode;
222
 
222
 
223
	if (native_mode->hdisplay != 0 &&
223
	if (native_mode->hdisplay != 0 &&
224
	    native_mode->vdisplay != 0 &&
224
	    native_mode->vdisplay != 0 &&
225
	    native_mode->clock != 0) {
225
	    native_mode->clock != 0) {
226
		mode = drm_mode_duplicate(dev, native_mode);
226
		mode = drm_mode_duplicate(dev, native_mode);
227
		mode->type = DRM_MODE_TYPE_PREFERRED | DRM_MODE_TYPE_DRIVER;
227
		mode->type = DRM_MODE_TYPE_PREFERRED | DRM_MODE_TYPE_DRIVER;
228
		drm_mode_set_name(mode);
228
		drm_mode_set_name(mode);
229
 
229
 
230
		DRM_DEBUG_KMS("Adding native panel mode %s\n", mode->name);
230
		DRM_DEBUG_KMS("Adding native panel mode %s\n", mode->name);
231
	} else if (native_mode->hdisplay != 0 &&
231
	} else if (native_mode->hdisplay != 0 &&
232
		   native_mode->vdisplay != 0) {
232
		   native_mode->vdisplay != 0) {
233
		/* mac laptops without an edid */
233
		/* mac laptops without an edid */
234
		/* Note that this is not necessarily the exact panel mode,
234
		/* Note that this is not necessarily the exact panel mode,
235
		 * but an approximation based on the cvt formula.  For these
235
		 * but an approximation based on the cvt formula.  For these
236
		 * systems we should ideally read the mode info out of the
236
		 * systems we should ideally read the mode info out of the
237
		 * registers or add a mode table, but this works and is much
237
		 * registers or add a mode table, but this works and is much
238
		 * simpler.
238
		 * simpler.
239
		 */
239
		 */
240
		mode = drm_cvt_mode(dev, native_mode->hdisplay, native_mode->vdisplay, 60, true, false, false);
240
		mode = drm_cvt_mode(dev, native_mode->hdisplay, native_mode->vdisplay, 60, true, false, false);
241
		mode->type = DRM_MODE_TYPE_PREFERRED | DRM_MODE_TYPE_DRIVER;
241
		mode->type = DRM_MODE_TYPE_PREFERRED | DRM_MODE_TYPE_DRIVER;
242
		DRM_DEBUG_KMS("Adding cvt approximation of native panel mode %s\n", mode->name);
242
		DRM_DEBUG_KMS("Adding cvt approximation of native panel mode %s\n", mode->name);
243
	}
243
	}
244
	return mode;
244
	return mode;
245
}
245
}
246
 
246
 
247
static void radeon_add_common_modes(struct drm_encoder *encoder, struct drm_connector *connector)
247
static void radeon_add_common_modes(struct drm_encoder *encoder, struct drm_connector *connector)
248
{
248
{
249
	struct drm_device *dev = encoder->dev;
249
	struct drm_device *dev = encoder->dev;
250
	struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
250
	struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
251
	struct drm_display_mode *mode = NULL;
251
	struct drm_display_mode *mode = NULL;
252
	struct drm_display_mode *native_mode = &radeon_encoder->native_mode;
252
	struct drm_display_mode *native_mode = &radeon_encoder->native_mode;
253
	int i;
253
	int i;
254
	struct mode_size {
254
	struct mode_size {
255
		int w;
255
		int w;
256
		int h;
256
		int h;
257
	} common_modes[17] = {
257
	} common_modes[17] = {
258
		{ 640,  480},
258
		{ 640,  480},
259
		{ 720,  480},
259
		{ 720,  480},
260
		{ 800,  600},
260
		{ 800,  600},
261
		{ 848,  480},
261
		{ 848,  480},
262
		{1024,  768},
262
		{1024,  768},
263
		{1152,  768},
263
		{1152,  768},
264
		{1280,  720},
264
		{1280,  720},
265
		{1280,  800},
265
		{1280,  800},
266
		{1280,  854},
266
		{1280,  854},
267
		{1280,  960},
267
		{1280,  960},
268
		{1280, 1024},
268
		{1280, 1024},
269
		{1440,  900},
269
		{1440,  900},
270
		{1400, 1050},
270
		{1400, 1050},
271
		{1680, 1050},
271
		{1680, 1050},
272
		{1600, 1200},
272
		{1600, 1200},
273
		{1920, 1080},
273
		{1920, 1080},
274
		{1920, 1200}
274
		{1920, 1200}
275
	};
275
	};
276
 
276
 
277
	for (i = 0; i < 17; i++) {
277
	for (i = 0; i < 17; i++) {
278
		if (radeon_encoder->devices & (ATOM_DEVICE_TV_SUPPORT)) {
278
		if (radeon_encoder->devices & (ATOM_DEVICE_TV_SUPPORT)) {
279
			if (common_modes[i].w > 1024 ||
279
			if (common_modes[i].w > 1024 ||
280
			    common_modes[i].h > 768)
280
			    common_modes[i].h > 768)
281
				continue;
281
				continue;
282
		}
282
		}
283
		if (radeon_encoder->devices & (ATOM_DEVICE_LCD_SUPPORT)) {
283
		if (radeon_encoder->devices & (ATOM_DEVICE_LCD_SUPPORT)) {
284
			if (common_modes[i].w > native_mode->hdisplay ||
284
			if (common_modes[i].w > native_mode->hdisplay ||
285
			    common_modes[i].h > native_mode->vdisplay ||
285
			    common_modes[i].h > native_mode->vdisplay ||
286
			    (common_modes[i].w == native_mode->hdisplay &&
286
			    (common_modes[i].w == native_mode->hdisplay &&
287
			     common_modes[i].h == native_mode->vdisplay))
287
			     common_modes[i].h == native_mode->vdisplay))
288
				continue;
288
				continue;
289
		}
289
		}
290
		if (common_modes[i].w < 320 || common_modes[i].h < 200)
290
		if (common_modes[i].w < 320 || common_modes[i].h < 200)
291
			continue;
291
			continue;
292
 
292
 
293
		mode = drm_cvt_mode(dev, common_modes[i].w, common_modes[i].h, 60, false, false, false);
293
		mode = drm_cvt_mode(dev, common_modes[i].w, common_modes[i].h, 60, false, false, false);
294
		drm_mode_probed_add(connector, mode);
294
		drm_mode_probed_add(connector, mode);
295
	}
295
	}
296
}
296
}
297
 
297
 
298
int radeon_connector_set_property(struct drm_connector *connector, struct drm_property *property,
298
int radeon_connector_set_property(struct drm_connector *connector, struct drm_property *property,
299
				  uint64_t val)
299
				  uint64_t val)
300
{
300
{
301
	struct drm_device *dev = connector->dev;
301
	struct drm_device *dev = connector->dev;
302
	struct radeon_device *rdev = dev->dev_private;
302
	struct radeon_device *rdev = dev->dev_private;
303
	struct drm_encoder *encoder;
303
	struct drm_encoder *encoder;
304
	struct radeon_encoder *radeon_encoder;
304
	struct radeon_encoder *radeon_encoder;
305
 
305
 
306
	if (property == rdev->mode_info.coherent_mode_property) {
306
	if (property == rdev->mode_info.coherent_mode_property) {
307
		struct radeon_encoder_atom_dig *dig;
307
		struct radeon_encoder_atom_dig *dig;
308
		bool new_coherent_mode;
308
		bool new_coherent_mode;
309
 
309
 
310
		/* need to find digital encoder on connector */
310
		/* need to find digital encoder on connector */
311
		encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TMDS);
311
		encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TMDS);
312
		if (!encoder)
312
		if (!encoder)
313
			return 0;
313
			return 0;
314
 
314
 
315
		radeon_encoder = to_radeon_encoder(encoder);
315
		radeon_encoder = to_radeon_encoder(encoder);
316
 
316
 
317
		if (!radeon_encoder->enc_priv)
317
		if (!radeon_encoder->enc_priv)
318
			return 0;
318
			return 0;
319
 
319
 
320
		dig = radeon_encoder->enc_priv;
320
		dig = radeon_encoder->enc_priv;
321
		new_coherent_mode = val ? true : false;
321
		new_coherent_mode = val ? true : false;
322
		if (dig->coherent_mode != new_coherent_mode) {
322
		if (dig->coherent_mode != new_coherent_mode) {
323
			dig->coherent_mode = new_coherent_mode;
323
			dig->coherent_mode = new_coherent_mode;
324
		radeon_property_change_mode(&radeon_encoder->base);
324
		radeon_property_change_mode(&radeon_encoder->base);
325
	}
325
	}
326
	}
326
	}
327
 
327
 
328
	if (property == rdev->mode_info.underscan_property) {
328
	if (property == rdev->mode_info.underscan_property) {
329
		/* need to find digital encoder on connector */
329
		/* need to find digital encoder on connector */
330
		encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TMDS);
330
		encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TMDS);
331
		if (!encoder)
331
		if (!encoder)
332
			return 0;
332
			return 0;
333
 
333
 
334
		radeon_encoder = to_radeon_encoder(encoder);
334
		radeon_encoder = to_radeon_encoder(encoder);
335
 
335
 
336
		if (radeon_encoder->underscan_type != val) {
336
		if (radeon_encoder->underscan_type != val) {
337
			radeon_encoder->underscan_type = val;
337
			radeon_encoder->underscan_type = val;
338
			radeon_property_change_mode(&radeon_encoder->base);
338
			radeon_property_change_mode(&radeon_encoder->base);
339
		}
339
		}
340
	}
340
	}
341
 
341
 
342
	if (property == rdev->mode_info.underscan_hborder_property) {
342
	if (property == rdev->mode_info.underscan_hborder_property) {
343
		/* need to find digital encoder on connector */
343
		/* need to find digital encoder on connector */
344
		encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TMDS);
344
		encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TMDS);
345
		if (!encoder)
345
		if (!encoder)
346
			return 0;
346
			return 0;
347
 
347
 
348
		radeon_encoder = to_radeon_encoder(encoder);
348
		radeon_encoder = to_radeon_encoder(encoder);
349
 
349
 
350
		if (radeon_encoder->underscan_hborder != val) {
350
		if (radeon_encoder->underscan_hborder != val) {
351
			radeon_encoder->underscan_hborder = val;
351
			radeon_encoder->underscan_hborder = val;
352
			radeon_property_change_mode(&radeon_encoder->base);
352
			radeon_property_change_mode(&radeon_encoder->base);
353
		}
353
		}
354
	}
354
	}
355
 
355
 
356
	if (property == rdev->mode_info.underscan_vborder_property) {
356
	if (property == rdev->mode_info.underscan_vborder_property) {
357
		/* need to find digital encoder on connector */
357
		/* need to find digital encoder on connector */
358
		encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TMDS);
358
		encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TMDS);
359
		if (!encoder)
359
		if (!encoder)
360
			return 0;
360
			return 0;
361
 
361
 
362
		radeon_encoder = to_radeon_encoder(encoder);
362
		radeon_encoder = to_radeon_encoder(encoder);
363
 
363
 
364
		if (radeon_encoder->underscan_vborder != val) {
364
		if (radeon_encoder->underscan_vborder != val) {
365
			radeon_encoder->underscan_vborder = val;
365
			radeon_encoder->underscan_vborder = val;
366
			radeon_property_change_mode(&radeon_encoder->base);
366
			radeon_property_change_mode(&radeon_encoder->base);
367
		}
367
		}
368
	}
368
	}
369
 
369
 
370
	if (property == rdev->mode_info.tv_std_property) {
370
	if (property == rdev->mode_info.tv_std_property) {
371
		encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TVDAC);
371
		encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TVDAC);
372
		if (!encoder) {
372
		if (!encoder) {
373
			encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_DAC);
373
			encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_DAC);
374
		}
374
		}
375
 
375
 
376
		if (!encoder)
376
		if (!encoder)
377
			return 0;
377
			return 0;
378
 
378
 
379
		radeon_encoder = to_radeon_encoder(encoder);
379
		radeon_encoder = to_radeon_encoder(encoder);
380
		if (!radeon_encoder->enc_priv)
380
		if (!radeon_encoder->enc_priv)
381
			return 0;
381
			return 0;
382
		if (ASIC_IS_AVIVO(rdev) || radeon_r4xx_atom) {
382
		if (ASIC_IS_AVIVO(rdev) || radeon_r4xx_atom) {
383
			struct radeon_encoder_atom_dac *dac_int;
383
			struct radeon_encoder_atom_dac *dac_int;
384
			dac_int = radeon_encoder->enc_priv;
384
			dac_int = radeon_encoder->enc_priv;
385
			dac_int->tv_std = val;
385
			dac_int->tv_std = val;
386
		} else {
386
		} else {
387
			struct radeon_encoder_tv_dac *dac_int;
387
			struct radeon_encoder_tv_dac *dac_int;
388
			dac_int = radeon_encoder->enc_priv;
388
			dac_int = radeon_encoder->enc_priv;
389
			dac_int->tv_std = val;
389
			dac_int->tv_std = val;
390
		}
390
		}
391
		radeon_property_change_mode(&radeon_encoder->base);
391
		radeon_property_change_mode(&radeon_encoder->base);
392
	}
392
	}
393
 
393
 
394
	if (property == rdev->mode_info.load_detect_property) {
394
	if (property == rdev->mode_info.load_detect_property) {
395
		struct radeon_connector *radeon_connector =
395
		struct radeon_connector *radeon_connector =
396
			to_radeon_connector(connector);
396
			to_radeon_connector(connector);
397
 
397
 
398
		if (val == 0)
398
		if (val == 0)
399
			radeon_connector->dac_load_detect = false;
399
			radeon_connector->dac_load_detect = false;
400
		else
400
		else
401
			radeon_connector->dac_load_detect = true;
401
			radeon_connector->dac_load_detect = true;
402
	}
402
	}
403
 
403
 
404
	if (property == rdev->mode_info.tmds_pll_property) {
404
	if (property == rdev->mode_info.tmds_pll_property) {
405
		struct radeon_encoder_int_tmds *tmds = NULL;
405
		struct radeon_encoder_int_tmds *tmds = NULL;
406
		bool ret = false;
406
		bool ret = false;
407
		/* need to find digital encoder on connector */
407
		/* need to find digital encoder on connector */
408
		encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TMDS);
408
		encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TMDS);
409
		if (!encoder)
409
		if (!encoder)
410
			return 0;
410
			return 0;
411
 
411
 
412
		radeon_encoder = to_radeon_encoder(encoder);
412
		radeon_encoder = to_radeon_encoder(encoder);
413
 
413
 
414
		tmds = radeon_encoder->enc_priv;
414
		tmds = radeon_encoder->enc_priv;
415
		if (!tmds)
415
		if (!tmds)
416
			return 0;
416
			return 0;
417
 
417
 
418
		if (val == 0) {
418
		if (val == 0) {
419
			if (rdev->is_atom_bios)
419
			if (rdev->is_atom_bios)
420
				ret = radeon_atombios_get_tmds_info(radeon_encoder, tmds);
420
				ret = radeon_atombios_get_tmds_info(radeon_encoder, tmds);
421
			else
421
			else
422
				ret = radeon_legacy_get_tmds_info_from_combios(radeon_encoder, tmds);
422
				ret = radeon_legacy_get_tmds_info_from_combios(radeon_encoder, tmds);
423
		}
423
		}
424
		if (val == 1 || ret == false) {
424
		if (val == 1 || ret == false) {
425
			radeon_legacy_get_tmds_info_from_table(radeon_encoder, tmds);
425
			radeon_legacy_get_tmds_info_from_table(radeon_encoder, tmds);
426
		}
426
		}
427
		radeon_property_change_mode(&radeon_encoder->base);
427
		radeon_property_change_mode(&radeon_encoder->base);
428
	}
428
	}
429
 
429
 
430
	return 0;
430
	return 0;
431
}
431
}
-
 
432
 
-
 
433
/*
-
 
434
 * Some integrated ATI Radeon chipset implementations (e. g.
-
 
435
 * Asus M2A-VM HDMI) may indicate the availability of a DDC,
-
 
436
 * even when there's no monitor connected. For these connectors
-
 
437
 * following DDC probe extension will be applied: check also for the
-
 
438
 * availability of EDID with at least a correct EDID header. Only then,
-
 
439
 * DDC is assumed to be available. This prevents drm_get_edid() and
-
 
440
 * drm_edid_block_valid() from periodically dumping data and kernel
-
 
441
 * errors into the logs and onto the terminal.
-
 
442
 */
-
 
443
static bool radeon_connector_needs_extended_probe(struct radeon_device *dev,
-
 
444
				     uint32_t supported_device,
-
 
445
				     int connector_type)
-
 
446
{
-
 
447
	/* Asus M2A-VM HDMI board sends data to i2c bus even,
-
 
448
	 * if HDMI add-on card is not plugged in or HDMI is disabled in
-
 
449
	 * BIOS. Valid DDC can only be assumed, if also a valid EDID header
-
 
450
	 * can be retrieved via i2c bus during DDC probe */
-
 
451
	if ((dev->pdev->device == 0x791e) &&
-
 
452
	    (dev->pdev->subsystem_vendor == 0x1043) &&
-
 
453
	    (dev->pdev->subsystem_device == 0x826d)) {
-
 
454
		if ((connector_type == DRM_MODE_CONNECTOR_HDMIA) &&
-
 
455
		    (supported_device == ATOM_DEVICE_DFP2_SUPPORT))
-
 
456
			return true;
-
 
457
	}
-
 
458
	/* ECS A740GM-M with ATI RADEON 2100 sends data to i2c bus
-
 
459
	 * for a DVI connector that is not implemented */
-
 
460
	if ((dev->pdev->device == 0x796e) &&
-
 
461
	    (dev->pdev->subsystem_vendor == 0x1019) &&
-
 
462
	    (dev->pdev->subsystem_device == 0x2615)) {
-
 
463
		if ((connector_type == DRM_MODE_CONNECTOR_DVID) &&
-
 
464
		    (supported_device == ATOM_DEVICE_DFP2_SUPPORT))
-
 
465
			return true;
-
 
466
	}
-
 
467
 
-
 
468
	/* Default: no EDID header probe required for DDC probing */
-
 
469
	return false;
-
 
470
}
432
 
471
 
433
static void radeon_fixup_lvds_native_mode(struct drm_encoder *encoder,
472
static void radeon_fixup_lvds_native_mode(struct drm_encoder *encoder,
434
					  struct drm_connector *connector)
473
					  struct drm_connector *connector)
435
{
474
{
436
	struct radeon_encoder *radeon_encoder =	to_radeon_encoder(encoder);
475
	struct radeon_encoder *radeon_encoder =	to_radeon_encoder(encoder);
437
	struct drm_display_mode *native_mode = &radeon_encoder->native_mode;
476
	struct drm_display_mode *native_mode = &radeon_encoder->native_mode;
438
 
477
 
439
	/* Try to get native mode details from EDID if necessary */
478
	/* Try to get native mode details from EDID if necessary */
440
	if (!native_mode->clock) {
479
	if (!native_mode->clock) {
441
		struct drm_display_mode *t, *mode;
480
		struct drm_display_mode *t, *mode;
442
 
481
 
443
		list_for_each_entry_safe(mode, t, &connector->probed_modes, head) {
482
		list_for_each_entry_safe(mode, t, &connector->probed_modes, head) {
444
			if (mode->hdisplay == native_mode->hdisplay &&
483
			if (mode->hdisplay == native_mode->hdisplay &&
445
			    mode->vdisplay == native_mode->vdisplay) {
484
			    mode->vdisplay == native_mode->vdisplay) {
446
				*native_mode = *mode;
485
				*native_mode = *mode;
447
				drm_mode_set_crtcinfo(native_mode, CRTC_INTERLACE_HALVE_V);
486
				drm_mode_set_crtcinfo(native_mode, CRTC_INTERLACE_HALVE_V);
448
				DRM_DEBUG_KMS("Determined LVDS native mode details from EDID\n");
487
				DRM_DEBUG_KMS("Determined LVDS native mode details from EDID\n");
449
				break;
488
				break;
450
			}
489
			}
451
		}
490
		}
452
	}
491
	}
453
	if (!native_mode->clock) {
492
	if (!native_mode->clock) {
454
		DRM_DEBUG_KMS("No LVDS native mode details, disabling RMX\n");
493
		DRM_DEBUG_KMS("No LVDS native mode details, disabling RMX\n");
455
		radeon_encoder->rmx_type = RMX_OFF;
494
		radeon_encoder->rmx_type = RMX_OFF;
456
	}
495
	}
457
}
496
}
458
 
497
 
459
static int radeon_lvds_get_modes(struct drm_connector *connector)
498
static int radeon_lvds_get_modes(struct drm_connector *connector)
460
{
499
{
461
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
500
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
462
	struct drm_encoder *encoder;
501
	struct drm_encoder *encoder;
463
	int ret = 0;
502
	int ret = 0;
464
	struct drm_display_mode *mode;
503
	struct drm_display_mode *mode;
465
 
504
 
466
	if (radeon_connector->ddc_bus) {
505
	if (radeon_connector->ddc_bus) {
467
		ret = radeon_ddc_get_modes(radeon_connector);
506
		ret = radeon_ddc_get_modes(radeon_connector);
468
		if (ret > 0) {
507
		if (ret > 0) {
469
			encoder = radeon_best_single_encoder(connector);
508
			encoder = radeon_best_single_encoder(connector);
470
			if (encoder) {
509
			if (encoder) {
471
				radeon_fixup_lvds_native_mode(encoder, connector);
510
				radeon_fixup_lvds_native_mode(encoder, connector);
472
				/* add scaled modes */
511
				/* add scaled modes */
473
				radeon_add_common_modes(encoder, connector);
512
				radeon_add_common_modes(encoder, connector);
474
			}
513
			}
475
			return ret;
514
			return ret;
476
		}
515
		}
477
	}
516
	}
478
 
517
 
479
	encoder = radeon_best_single_encoder(connector);
518
	encoder = radeon_best_single_encoder(connector);
480
	if (!encoder)
519
	if (!encoder)
481
		return 0;
520
		return 0;
482
 
521
 
483
	/* we have no EDID modes */
522
	/* we have no EDID modes */
484
	mode = radeon_fp_native_mode(encoder);
523
	mode = radeon_fp_native_mode(encoder);
485
	if (mode) {
524
	if (mode) {
486
		ret = 1;
525
		ret = 1;
487
		drm_mode_probed_add(connector, mode);
526
		drm_mode_probed_add(connector, mode);
488
		/* add the width/height from vbios tables if available */
527
		/* add the width/height from vbios tables if available */
489
		connector->display_info.width_mm = mode->width_mm;
528
		connector->display_info.width_mm = mode->width_mm;
490
		connector->display_info.height_mm = mode->height_mm;
529
		connector->display_info.height_mm = mode->height_mm;
491
		/* add scaled modes */
530
		/* add scaled modes */
492
		radeon_add_common_modes(encoder, connector);
531
		radeon_add_common_modes(encoder, connector);
493
	}
532
	}
494
 
533
 
495
	return ret;
534
	return ret;
496
}
535
}
497
 
536
 
498
static int radeon_lvds_mode_valid(struct drm_connector *connector,
537
static int radeon_lvds_mode_valid(struct drm_connector *connector,
499
				  struct drm_display_mode *mode)
538
				  struct drm_display_mode *mode)
500
{
539
{
501
	struct drm_encoder *encoder = radeon_best_single_encoder(connector);
540
	struct drm_encoder *encoder = radeon_best_single_encoder(connector);
502
 
541
 
503
	if ((mode->hdisplay < 320) || (mode->vdisplay < 240))
542
	if ((mode->hdisplay < 320) || (mode->vdisplay < 240))
504
		return MODE_PANEL;
543
		return MODE_PANEL;
505
 
544
 
506
	if (encoder) {
545
	if (encoder) {
507
		struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
546
		struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
508
		struct drm_display_mode *native_mode = &radeon_encoder->native_mode;
547
		struct drm_display_mode *native_mode = &radeon_encoder->native_mode;
509
 
548
 
510
		/* AVIVO hardware supports downscaling modes larger than the panel
549
		/* AVIVO hardware supports downscaling modes larger than the panel
511
		 * to the panel size, but I'm not sure this is desirable.
550
		 * to the panel size, but I'm not sure this is desirable.
512
		 */
551
		 */
513
		if ((mode->hdisplay > native_mode->hdisplay) ||
552
		if ((mode->hdisplay > native_mode->hdisplay) ||
514
		    (mode->vdisplay > native_mode->vdisplay))
553
		    (mode->vdisplay > native_mode->vdisplay))
515
			return MODE_PANEL;
554
			return MODE_PANEL;
516
 
555
 
517
		/* if scaling is disabled, block non-native modes */
556
		/* if scaling is disabled, block non-native modes */
518
		if (radeon_encoder->rmx_type == RMX_OFF) {
557
		if (radeon_encoder->rmx_type == RMX_OFF) {
519
			if ((mode->hdisplay != native_mode->hdisplay) ||
558
			if ((mode->hdisplay != native_mode->hdisplay) ||
520
			    (mode->vdisplay != native_mode->vdisplay))
559
			    (mode->vdisplay != native_mode->vdisplay))
521
				return MODE_PANEL;
560
				return MODE_PANEL;
522
		}
561
		}
523
	}
562
	}
524
 
563
 
525
	return MODE_OK;
564
	return MODE_OK;
526
}
565
}
527
 
566
 
528
static enum drm_connector_status
567
static enum drm_connector_status
529
radeon_lvds_detect(struct drm_connector *connector, bool force)
568
radeon_lvds_detect(struct drm_connector *connector, bool force)
530
{
569
{
531
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
570
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
532
	struct drm_encoder *encoder = radeon_best_single_encoder(connector);
571
	struct drm_encoder *encoder = radeon_best_single_encoder(connector);
533
	enum drm_connector_status ret = connector_status_disconnected;
572
	enum drm_connector_status ret = connector_status_disconnected;
534
 
573
 
535
	if (encoder) {
574
	if (encoder) {
536
		struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
575
		struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
537
		struct drm_display_mode *native_mode = &radeon_encoder->native_mode;
576
		struct drm_display_mode *native_mode = &radeon_encoder->native_mode;
538
 
577
 
539
		/* check if panel is valid */
578
		/* check if panel is valid */
540
		if (native_mode->hdisplay >= 320 && native_mode->vdisplay >= 240)
579
		if (native_mode->hdisplay >= 320 && native_mode->vdisplay >= 240)
541
			ret = connector_status_connected;
580
			ret = connector_status_connected;
542
 
581
 
543
	}
582
	}
544
 
583
 
545
	/* check for edid as well */
584
	/* check for edid as well */
546
	if (radeon_connector->edid)
585
	if (radeon_connector->edid)
547
		ret = connector_status_connected;
586
		ret = connector_status_connected;
548
	else {
587
	else {
549
		if (radeon_connector->ddc_bus) {
588
		if (radeon_connector->ddc_bus) {
550
			radeon_connector->edid = drm_get_edid(&radeon_connector->base,
589
			radeon_connector->edid = drm_get_edid(&radeon_connector->base,
551
							      &radeon_connector->ddc_bus->adapter);
590
							      &radeon_connector->ddc_bus->adapter);
552
			if (radeon_connector->edid)
591
			if (radeon_connector->edid)
553
				ret = connector_status_connected;
592
				ret = connector_status_connected;
554
		}
593
		}
555
	}
594
	}
556
	/* check acpi lid status ??? */
595
	/* check acpi lid status ??? */
557
 
596
 
558
	radeon_connector_update_scratch_regs(connector, ret);
597
	radeon_connector_update_scratch_regs(connector, ret);
559
	return ret;
598
	return ret;
560
}
599
}
561
 
600
 
562
static void radeon_connector_destroy(struct drm_connector *connector)
601
static void radeon_connector_destroy(struct drm_connector *connector)
563
{
602
{
564
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
603
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
565
 
604
 
566
	if (radeon_connector->edid)
605
	if (radeon_connector->edid)
567
		kfree(radeon_connector->edid);
606
		kfree(radeon_connector->edid);
568
	kfree(radeon_connector->con_priv);
607
	kfree(radeon_connector->con_priv);
569
	drm_sysfs_connector_remove(connector);
608
	drm_sysfs_connector_remove(connector);
570
	drm_connector_cleanup(connector);
609
	drm_connector_cleanup(connector);
571
	kfree(connector);
610
	kfree(connector);
572
}
611
}
573
 
612
 
574
static int radeon_lvds_set_property(struct drm_connector *connector,
613
static int radeon_lvds_set_property(struct drm_connector *connector,
575
				    struct drm_property *property,
614
				    struct drm_property *property,
576
				    uint64_t value)
615
				    uint64_t value)
577
{
616
{
578
	struct drm_device *dev = connector->dev;
617
	struct drm_device *dev = connector->dev;
579
	struct radeon_encoder *radeon_encoder;
618
	struct radeon_encoder *radeon_encoder;
580
	enum radeon_rmx_type rmx_type;
619
	enum radeon_rmx_type rmx_type;
581
 
620
 
582
	DRM_DEBUG_KMS("\n");
621
	DRM_DEBUG_KMS("\n");
583
	if (property != dev->mode_config.scaling_mode_property)
622
	if (property != dev->mode_config.scaling_mode_property)
584
		return 0;
623
		return 0;
585
 
624
 
586
	if (connector->encoder)
625
	if (connector->encoder)
587
		radeon_encoder = to_radeon_encoder(connector->encoder);
626
		radeon_encoder = to_radeon_encoder(connector->encoder);
588
	else {
627
	else {
589
		struct drm_connector_helper_funcs *connector_funcs = connector->helper_private;
628
		struct drm_connector_helper_funcs *connector_funcs = connector->helper_private;
590
		radeon_encoder = to_radeon_encoder(connector_funcs->best_encoder(connector));
629
		radeon_encoder = to_radeon_encoder(connector_funcs->best_encoder(connector));
591
	}
630
	}
592
 
631
 
593
	switch (value) {
632
	switch (value) {
594
	case DRM_MODE_SCALE_NONE: rmx_type = RMX_OFF; break;
633
	case DRM_MODE_SCALE_NONE: rmx_type = RMX_OFF; break;
595
	case DRM_MODE_SCALE_CENTER: rmx_type = RMX_CENTER; break;
634
	case DRM_MODE_SCALE_CENTER: rmx_type = RMX_CENTER; break;
596
	case DRM_MODE_SCALE_ASPECT: rmx_type = RMX_ASPECT; break;
635
	case DRM_MODE_SCALE_ASPECT: rmx_type = RMX_ASPECT; break;
597
	default:
636
	default:
598
	case DRM_MODE_SCALE_FULLSCREEN: rmx_type = RMX_FULL; break;
637
	case DRM_MODE_SCALE_FULLSCREEN: rmx_type = RMX_FULL; break;
599
	}
638
	}
600
	if (radeon_encoder->rmx_type == rmx_type)
639
	if (radeon_encoder->rmx_type == rmx_type)
601
		return 0;
640
		return 0;
602
 
641
 
603
	radeon_encoder->rmx_type = rmx_type;
642
	radeon_encoder->rmx_type = rmx_type;
604
 
643
 
605
	radeon_property_change_mode(&radeon_encoder->base);
644
	radeon_property_change_mode(&radeon_encoder->base);
606
	return 0;
645
	return 0;
607
}
646
}
608
 
647
 
609
 
648
 
610
struct drm_connector_helper_funcs radeon_lvds_connector_helper_funcs = {
649
struct drm_connector_helper_funcs radeon_lvds_connector_helper_funcs = {
611
	.get_modes = radeon_lvds_get_modes,
650
	.get_modes = radeon_lvds_get_modes,
612
	.mode_valid = radeon_lvds_mode_valid,
651
	.mode_valid = radeon_lvds_mode_valid,
613
	.best_encoder = radeon_best_single_encoder,
652
	.best_encoder = radeon_best_single_encoder,
614
};
653
};
615
 
654
 
616
struct drm_connector_funcs radeon_lvds_connector_funcs = {
655
struct drm_connector_funcs radeon_lvds_connector_funcs = {
617
	.dpms = drm_helper_connector_dpms,
656
	.dpms = drm_helper_connector_dpms,
618
	.detect = radeon_lvds_detect,
657
	.detect = radeon_lvds_detect,
619
	.fill_modes = drm_helper_probe_single_connector_modes,
658
	.fill_modes = drm_helper_probe_single_connector_modes,
620
	.destroy = radeon_connector_destroy,
659
	.destroy = radeon_connector_destroy,
621
	.set_property = radeon_lvds_set_property,
660
	.set_property = radeon_lvds_set_property,
622
};
661
};
623
 
662
 
624
static int radeon_vga_get_modes(struct drm_connector *connector)
663
static int radeon_vga_get_modes(struct drm_connector *connector)
625
{
664
{
626
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
665
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
627
	int ret;
666
	int ret;
628
 
667
 
629
	ret = radeon_ddc_get_modes(radeon_connector);
668
	ret = radeon_ddc_get_modes(radeon_connector);
630
 
669
 
631
	return ret;
670
	return ret;
632
}
671
}
633
 
672
 
634
static int radeon_vga_mode_valid(struct drm_connector *connector,
673
static int radeon_vga_mode_valid(struct drm_connector *connector,
635
				  struct drm_display_mode *mode)
674
				  struct drm_display_mode *mode)
636
{
675
{
637
	struct drm_device *dev = connector->dev;
676
	struct drm_device *dev = connector->dev;
638
	struct radeon_device *rdev = dev->dev_private;
677
	struct radeon_device *rdev = dev->dev_private;
639
 
678
 
640
	/* XXX check mode bandwidth */
679
	/* XXX check mode bandwidth */
641
 
680
 
642
	if ((mode->clock / 10) > rdev->clock.max_pixel_clock)
681
	if ((mode->clock / 10) > rdev->clock.max_pixel_clock)
643
		return MODE_CLOCK_HIGH;
682
		return MODE_CLOCK_HIGH;
644
 
683
 
645
	return MODE_OK;
684
	return MODE_OK;
646
}
685
}
647
 
686
 
648
static enum drm_connector_status
687
static enum drm_connector_status
649
radeon_vga_detect(struct drm_connector *connector, bool force)
688
radeon_vga_detect(struct drm_connector *connector, bool force)
650
{
689
{
651
	struct drm_device *dev = connector->dev;
690
	struct drm_device *dev = connector->dev;
652
	struct radeon_device *rdev = dev->dev_private;
691
	struct radeon_device *rdev = dev->dev_private;
653
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
692
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
654
	struct drm_encoder *encoder;
693
	struct drm_encoder *encoder;
655
	struct drm_encoder_helper_funcs *encoder_funcs;
694
	struct drm_encoder_helper_funcs *encoder_funcs;
656
	bool dret = false;
695
	bool dret = false;
657
	enum drm_connector_status ret = connector_status_disconnected;
696
	enum drm_connector_status ret = connector_status_disconnected;
658
 
697
 
659
	encoder = radeon_best_single_encoder(connector);
698
	encoder = radeon_best_single_encoder(connector);
660
	if (!encoder)
699
	if (!encoder)
661
		ret = connector_status_disconnected;
700
		ret = connector_status_disconnected;
662
 
701
 
663
	if (radeon_connector->ddc_bus)
702
	if (radeon_connector->ddc_bus)
664
	    dret = radeon_ddc_probe(radeon_connector);
703
		dret = radeon_ddc_probe(radeon_connector,
-
 
704
					radeon_connector->requires_extended_probe);
665
	if (dret) {
705
	if (dret) {
666
		if (radeon_connector->edid) {
706
		if (radeon_connector->edid) {
667
			kfree(radeon_connector->edid);
707
			kfree(radeon_connector->edid);
668
			radeon_connector->edid = NULL;
708
			radeon_connector->edid = NULL;
669
		}
709
		}
670
		radeon_connector->edid = drm_get_edid(&radeon_connector->base, &radeon_connector->ddc_bus->adapter);
710
		radeon_connector->edid = drm_get_edid(&radeon_connector->base, &radeon_connector->ddc_bus->adapter);
671
 
711
 
672
		if (!radeon_connector->edid) {
712
		if (!radeon_connector->edid) {
673
			DRM_ERROR("%s: probed a monitor but no|invalid EDID\n",
713
			DRM_ERROR("%s: probed a monitor but no|invalid EDID\n",
674
				  drm_get_connector_name(connector));
714
				  drm_get_connector_name(connector));
675
			ret = connector_status_connected;
715
			ret = connector_status_connected;
676
		} else {
716
		} else {
677
			radeon_connector->use_digital = !!(radeon_connector->edid->input & DRM_EDID_INPUT_DIGITAL);
717
			radeon_connector->use_digital = !!(radeon_connector->edid->input & DRM_EDID_INPUT_DIGITAL);
678
 
718
 
679
			/* some oems have boards with separate digital and analog connectors
719
			/* some oems have boards with separate digital and analog connectors
680
			 * with a shared ddc line (often vga + hdmi)
720
			 * with a shared ddc line (often vga + hdmi)
681
			 */
721
			 */
682
			if (radeon_connector->use_digital && radeon_connector->shared_ddc) {
722
			if (radeon_connector->use_digital && radeon_connector->shared_ddc) {
683
				kfree(radeon_connector->edid);
723
				kfree(radeon_connector->edid);
684
				radeon_connector->edid = NULL;
724
				radeon_connector->edid = NULL;
685
				ret = connector_status_disconnected;
725
				ret = connector_status_disconnected;
686
			} else
726
			} else
687
		ret = connector_status_connected;
727
		ret = connector_status_connected;
688
		}
728
		}
689
	} else {
729
	} else {
690
 
730
 
691
		/* if we aren't forcing don't do destructive polling */
731
		/* if we aren't forcing don't do destructive polling */
692
		if (!force)
732
		if (!force)
693
			return connector->status;
733
			return connector->status;
694
 
734
 
695
		if (radeon_connector->dac_load_detect && encoder) {
735
		if (radeon_connector->dac_load_detect && encoder) {
696
			encoder_funcs = encoder->helper_private;
736
			encoder_funcs = encoder->helper_private;
697
			ret = encoder_funcs->detect(encoder, connector);
737
			ret = encoder_funcs->detect(encoder, connector);
698
		}
738
		}
699
	}
739
	}
700
 
740
 
701
	if (ret == connector_status_connected)
741
	if (ret == connector_status_connected)
702
		ret = radeon_connector_analog_encoder_conflict_solve(connector, encoder, ret, true);
742
		ret = radeon_connector_analog_encoder_conflict_solve(connector, encoder, ret, true);
703
 
743
 
704
	/* RN50 and some RV100 asics in servers often have a hardcoded EDID in the
744
	/* RN50 and some RV100 asics in servers often have a hardcoded EDID in the
705
	 * vbios to deal with KVMs. If we have one and are not able to detect a monitor
745
	 * vbios to deal with KVMs. If we have one and are not able to detect a monitor
706
	 * by other means, assume the CRT is connected and use that EDID.
746
	 * by other means, assume the CRT is connected and use that EDID.
707
	 */
747
	 */
708
	if ((!rdev->is_atom_bios) &&
748
	if ((!rdev->is_atom_bios) &&
709
	    (ret == connector_status_disconnected) &&
749
	    (ret == connector_status_disconnected) &&
710
	    rdev->mode_info.bios_hardcoded_edid_size) {
750
	    rdev->mode_info.bios_hardcoded_edid_size) {
711
		ret = connector_status_connected;
751
		ret = connector_status_connected;
712
	}
752
	}
713
 
753
 
714
	radeon_connector_update_scratch_regs(connector, ret);
754
	radeon_connector_update_scratch_regs(connector, ret);
715
	return ret;
755
	return ret;
716
}
756
}
717
 
757
 
718
struct drm_connector_helper_funcs radeon_vga_connector_helper_funcs = {
758
struct drm_connector_helper_funcs radeon_vga_connector_helper_funcs = {
719
	.get_modes = radeon_vga_get_modes,
759
	.get_modes = radeon_vga_get_modes,
720
	.mode_valid = radeon_vga_mode_valid,
760
	.mode_valid = radeon_vga_mode_valid,
721
	.best_encoder = radeon_best_single_encoder,
761
	.best_encoder = radeon_best_single_encoder,
722
};
762
};
723
 
763
 
724
struct drm_connector_funcs radeon_vga_connector_funcs = {
764
struct drm_connector_funcs radeon_vga_connector_funcs = {
725
	.dpms = drm_helper_connector_dpms,
765
	.dpms = drm_helper_connector_dpms,
726
	.detect = radeon_vga_detect,
766
	.detect = radeon_vga_detect,
727
	.fill_modes = drm_helper_probe_single_connector_modes,
767
	.fill_modes = drm_helper_probe_single_connector_modes,
728
	.destroy = radeon_connector_destroy,
768
	.destroy = radeon_connector_destroy,
729
	.set_property = radeon_connector_set_property,
769
	.set_property = radeon_connector_set_property,
730
};
770
};
731
 
771
 
732
static int radeon_tv_get_modes(struct drm_connector *connector)
772
static int radeon_tv_get_modes(struct drm_connector *connector)
733
{
773
{
734
	struct drm_device *dev = connector->dev;
774
	struct drm_device *dev = connector->dev;
735
	struct radeon_device *rdev = dev->dev_private;
775
	struct radeon_device *rdev = dev->dev_private;
736
	struct drm_display_mode *tv_mode;
776
	struct drm_display_mode *tv_mode;
737
	struct drm_encoder *encoder;
777
	struct drm_encoder *encoder;
738
 
778
 
739
	encoder = radeon_best_single_encoder(connector);
779
	encoder = radeon_best_single_encoder(connector);
740
	if (!encoder)
780
	if (!encoder)
741
		return 0;
781
		return 0;
742
 
782
 
743
	/* avivo chips can scale any mode */
783
	/* avivo chips can scale any mode */
744
	if (rdev->family >= CHIP_RS600)
784
	if (rdev->family >= CHIP_RS600)
745
		/* add scaled modes */
785
		/* add scaled modes */
746
		radeon_add_common_modes(encoder, connector);
786
		radeon_add_common_modes(encoder, connector);
747
	else {
787
	else {
748
		/* only 800x600 is supported right now on pre-avivo chips */
788
		/* only 800x600 is supported right now on pre-avivo chips */
749
		tv_mode = drm_cvt_mode(dev, 800, 600, 60, false, false, false);
789
		tv_mode = drm_cvt_mode(dev, 800, 600, 60, false, false, false);
750
		tv_mode->type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED;
790
		tv_mode->type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED;
751
		drm_mode_probed_add(connector, tv_mode);
791
		drm_mode_probed_add(connector, tv_mode);
752
	}
792
	}
753
	return 1;
793
	return 1;
754
}
794
}
755
 
795
 
756
static int radeon_tv_mode_valid(struct drm_connector *connector,
796
static int radeon_tv_mode_valid(struct drm_connector *connector,
757
				struct drm_display_mode *mode)
797
				struct drm_display_mode *mode)
758
{
798
{
759
	if ((mode->hdisplay > 1024) || (mode->vdisplay > 768))
799
	if ((mode->hdisplay > 1024) || (mode->vdisplay > 768))
760
		return MODE_CLOCK_RANGE;
800
		return MODE_CLOCK_RANGE;
761
	return MODE_OK;
801
	return MODE_OK;
762
}
802
}
763
 
803
 
764
static enum drm_connector_status
804
static enum drm_connector_status
765
radeon_tv_detect(struct drm_connector *connector, bool force)
805
radeon_tv_detect(struct drm_connector *connector, bool force)
766
{
806
{
767
	struct drm_encoder *encoder;
807
	struct drm_encoder *encoder;
768
	struct drm_encoder_helper_funcs *encoder_funcs;
808
	struct drm_encoder_helper_funcs *encoder_funcs;
769
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
809
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
770
	enum drm_connector_status ret = connector_status_disconnected;
810
	enum drm_connector_status ret = connector_status_disconnected;
771
 
811
 
772
	if (!radeon_connector->dac_load_detect)
812
	if (!radeon_connector->dac_load_detect)
773
		return ret;
813
		return ret;
774
 
814
 
775
	encoder = radeon_best_single_encoder(connector);
815
	encoder = radeon_best_single_encoder(connector);
776
	if (!encoder)
816
	if (!encoder)
777
		ret = connector_status_disconnected;
817
		ret = connector_status_disconnected;
778
	else {
818
	else {
779
		encoder_funcs = encoder->helper_private;
819
		encoder_funcs = encoder->helper_private;
780
		ret = encoder_funcs->detect(encoder, connector);
820
		ret = encoder_funcs->detect(encoder, connector);
781
	}
821
	}
782
	if (ret == connector_status_connected)
822
	if (ret == connector_status_connected)
783
		ret = radeon_connector_analog_encoder_conflict_solve(connector, encoder, ret, false);
823
		ret = radeon_connector_analog_encoder_conflict_solve(connector, encoder, ret, false);
784
	radeon_connector_update_scratch_regs(connector, ret);
824
	radeon_connector_update_scratch_regs(connector, ret);
785
	return ret;
825
	return ret;
786
}
826
}
787
 
827
 
788
struct drm_connector_helper_funcs radeon_tv_connector_helper_funcs = {
828
struct drm_connector_helper_funcs radeon_tv_connector_helper_funcs = {
789
	.get_modes = radeon_tv_get_modes,
829
	.get_modes = radeon_tv_get_modes,
790
	.mode_valid = radeon_tv_mode_valid,
830
	.mode_valid = radeon_tv_mode_valid,
791
	.best_encoder = radeon_best_single_encoder,
831
	.best_encoder = radeon_best_single_encoder,
792
};
832
};
793
 
833
 
794
struct drm_connector_funcs radeon_tv_connector_funcs = {
834
struct drm_connector_funcs radeon_tv_connector_funcs = {
795
	.dpms = drm_helper_connector_dpms,
835
	.dpms = drm_helper_connector_dpms,
796
	.detect = radeon_tv_detect,
836
	.detect = radeon_tv_detect,
797
	.fill_modes = drm_helper_probe_single_connector_modes,
837
	.fill_modes = drm_helper_probe_single_connector_modes,
798
	.destroy = radeon_connector_destroy,
838
	.destroy = radeon_connector_destroy,
799
	.set_property = radeon_connector_set_property,
839
	.set_property = radeon_connector_set_property,
800
};
840
};
801
 
841
 
802
static int radeon_dvi_get_modes(struct drm_connector *connector)
842
static int radeon_dvi_get_modes(struct drm_connector *connector)
803
{
843
{
804
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
844
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
805
	int ret;
845
	int ret;
806
 
846
 
807
	ret = radeon_ddc_get_modes(radeon_connector);
847
	ret = radeon_ddc_get_modes(radeon_connector);
808
	return ret;
848
	return ret;
809
}
849
}
810
 
850
 
811
/*
851
/*
812
 * DVI is complicated
852
 * DVI is complicated
813
 * Do a DDC probe, if DDC probe passes, get the full EDID so
853
 * Do a DDC probe, if DDC probe passes, get the full EDID so
814
 * we can do analog/digital monitor detection at this point.
854
 * we can do analog/digital monitor detection at this point.
815
 * If the monitor is an analog monitor or we got no DDC,
855
 * If the monitor is an analog monitor or we got no DDC,
816
 * we need to find the DAC encoder object for this connector.
856
 * we need to find the DAC encoder object for this connector.
817
 * If we got no DDC, we do load detection on the DAC encoder object.
857
 * If we got no DDC, we do load detection on the DAC encoder object.
818
 * If we got analog DDC or load detection passes on the DAC encoder
858
 * If we got analog DDC or load detection passes on the DAC encoder
819
 * we have to check if this analog encoder is shared with anyone else (TV)
859
 * we have to check if this analog encoder is shared with anyone else (TV)
820
 * if its shared we have to set the other connector to disconnected.
860
 * if its shared we have to set the other connector to disconnected.
821
 */
861
 */
822
static enum drm_connector_status
862
static enum drm_connector_status
823
radeon_dvi_detect(struct drm_connector *connector, bool force)
863
radeon_dvi_detect(struct drm_connector *connector, bool force)
824
{
864
{
825
	struct drm_device *dev = connector->dev;
865
	struct drm_device *dev = connector->dev;
826
	struct radeon_device *rdev = dev->dev_private;
866
	struct radeon_device *rdev = dev->dev_private;
827
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
867
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
828
	struct drm_encoder *encoder = NULL;
868
	struct drm_encoder *encoder = NULL;
829
	struct drm_encoder_helper_funcs *encoder_funcs;
869
	struct drm_encoder_helper_funcs *encoder_funcs;
830
	struct drm_mode_object *obj;
870
	struct drm_mode_object *obj;
831
	int i;
871
	int i;
832
	enum drm_connector_status ret = connector_status_disconnected;
872
	enum drm_connector_status ret = connector_status_disconnected;
833
	bool dret = false;
873
	bool dret = false;
834
 
874
 
835
	if (radeon_connector->ddc_bus)
875
	if (radeon_connector->ddc_bus)
836
	dret = radeon_ddc_probe(radeon_connector);
876
		dret = radeon_ddc_probe(radeon_connector,
-
 
877
					radeon_connector->requires_extended_probe);
837
	if (dret) {
878
	if (dret) {
838
		if (radeon_connector->edid) {
879
		if (radeon_connector->edid) {
839
			kfree(radeon_connector->edid);
880
			kfree(radeon_connector->edid);
840
			radeon_connector->edid = NULL;
881
			radeon_connector->edid = NULL;
841
		}
882
		}
842
		radeon_connector->edid = drm_get_edid(&radeon_connector->base, &radeon_connector->ddc_bus->adapter);
883
		radeon_connector->edid = drm_get_edid(&radeon_connector->base, &radeon_connector->ddc_bus->adapter);
843
 
884
 
844
		if (!radeon_connector->edid) {
885
		if (!radeon_connector->edid) {
845
			DRM_ERROR("%s: probed a monitor but no|invalid EDID\n",
886
			DRM_ERROR("%s: probed a monitor but no|invalid EDID\n",
846
				  drm_get_connector_name(connector));
887
				  drm_get_connector_name(connector));
847
			/* rs690 seems to have a problem with connectors not existing and always
888
			/* rs690 seems to have a problem with connectors not existing and always
848
			 * return a block of 0's. If we see this just stop polling on this output */
889
			 * return a block of 0's. If we see this just stop polling on this output */
849
			if ((rdev->family == CHIP_RS690 || rdev->family == CHIP_RS740) && radeon_connector->base.null_edid_counter) {
890
			if ((rdev->family == CHIP_RS690 || rdev->family == CHIP_RS740) && radeon_connector->base.null_edid_counter) {
850
				ret = connector_status_disconnected;
891
				ret = connector_status_disconnected;
851
				DRM_ERROR("%s: detected RS690 floating bus bug, stopping ddc detect\n", drm_get_connector_name(connector));
892
				DRM_ERROR("%s: detected RS690 floating bus bug, stopping ddc detect\n", drm_get_connector_name(connector));
852
				radeon_connector->ddc_bus = NULL;
893
				radeon_connector->ddc_bus = NULL;
853
			}
894
			}
854
		} else {
895
		} else {
855
			radeon_connector->use_digital = !!(radeon_connector->edid->input & DRM_EDID_INPUT_DIGITAL);
896
			radeon_connector->use_digital = !!(radeon_connector->edid->input & DRM_EDID_INPUT_DIGITAL);
856
 
897
 
857
			/* some oems have boards with separate digital and analog connectors
898
			/* some oems have boards with separate digital and analog connectors
858
			 * with a shared ddc line (often vga + hdmi)
899
			 * with a shared ddc line (often vga + hdmi)
859
			 */
900
			 */
860
			if ((!radeon_connector->use_digital) && radeon_connector->shared_ddc) {
901
			if ((!radeon_connector->use_digital) && radeon_connector->shared_ddc) {
861
				kfree(radeon_connector->edid);
902
				kfree(radeon_connector->edid);
862
				radeon_connector->edid = NULL;
903
				radeon_connector->edid = NULL;
863
				ret = connector_status_disconnected;
904
				ret = connector_status_disconnected;
864
			} else
905
			} else
865
		ret = connector_status_connected;
906
		ret = connector_status_connected;
866
 
907
 
867
			/* This gets complicated.  We have boards with VGA + HDMI with a
908
			/* This gets complicated.  We have boards with VGA + HDMI with a
868
			 * shared DDC line and we have boards with DVI-D + HDMI with a shared
909
			 * shared DDC line and we have boards with DVI-D + HDMI with a shared
869
			 * DDC line.  The latter is more complex because with DVI<->HDMI adapters
910
			 * DDC line.  The latter is more complex because with DVI<->HDMI adapters
870
			 * you don't really know what's connected to which port as both are digital.
911
			 * you don't really know what's connected to which port as both are digital.
871
			 */
912
			 */
872
			if (radeon_connector->shared_ddc && (ret == connector_status_connected)) {
913
			if (radeon_connector->shared_ddc && (ret == connector_status_connected)) {
873
				struct drm_connector *list_connector;
914
				struct drm_connector *list_connector;
874
				struct radeon_connector *list_radeon_connector;
915
				struct radeon_connector *list_radeon_connector;
875
				list_for_each_entry(list_connector, &dev->mode_config.connector_list, head) {
916
				list_for_each_entry(list_connector, &dev->mode_config.connector_list, head) {
876
					if (connector == list_connector)
917
					if (connector == list_connector)
877
						continue;
918
						continue;
878
					list_radeon_connector = to_radeon_connector(list_connector);
919
					list_radeon_connector = to_radeon_connector(list_connector);
879
					if (list_radeon_connector->shared_ddc &&
920
					if (list_radeon_connector->shared_ddc &&
880
					    (list_radeon_connector->ddc_bus->rec.i2c_id ==
921
					    (list_radeon_connector->ddc_bus->rec.i2c_id ==
881
					     radeon_connector->ddc_bus->rec.i2c_id)) {
922
					     radeon_connector->ddc_bus->rec.i2c_id)) {
882
						/* cases where both connectors are digital */
923
						/* cases where both connectors are digital */
883
						if (list_connector->connector_type != DRM_MODE_CONNECTOR_VGA) {
924
						if (list_connector->connector_type != DRM_MODE_CONNECTOR_VGA) {
884
							/* hpd is our only option in this case */
925
							/* hpd is our only option in this case */
885
							if (!radeon_hpd_sense(rdev, radeon_connector->hpd.hpd)) {
926
							if (!radeon_hpd_sense(rdev, radeon_connector->hpd.hpd)) {
886
								kfree(radeon_connector->edid);
927
								kfree(radeon_connector->edid);
887
								radeon_connector->edid = NULL;
928
								radeon_connector->edid = NULL;
888
								ret = connector_status_disconnected;
929
								ret = connector_status_disconnected;
889
							}
930
							}
890
						}
931
						}
891
					}
932
					}
892
				}
933
				}
893
			}
934
			}
894
		}
935
		}
895
	}
936
	}
896
 
937
 
897
	if ((ret == connector_status_connected) && (radeon_connector->use_digital == true))
938
	if ((ret == connector_status_connected) && (radeon_connector->use_digital == true))
898
		goto out;
939
		goto out;
899
 
940
 
900
	if (!force) {
941
	if (!force) {
901
		ret = connector->status;
942
		ret = connector->status;
902
		goto out;
943
		goto out;
903
	}
944
	}
904
 
945
 
905
	/* find analog encoder */
946
	/* find analog encoder */
906
	if (radeon_connector->dac_load_detect) {
947
	if (radeon_connector->dac_load_detect) {
907
		for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
948
		for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
908
			if (connector->encoder_ids[i] == 0)
949
			if (connector->encoder_ids[i] == 0)
909
				break;
950
				break;
910
 
951
 
911
			obj = drm_mode_object_find(connector->dev,
952
			obj = drm_mode_object_find(connector->dev,
912
						   connector->encoder_ids[i],
953
						   connector->encoder_ids[i],
913
						   DRM_MODE_OBJECT_ENCODER);
954
						   DRM_MODE_OBJECT_ENCODER);
914
			if (!obj)
955
			if (!obj)
915
				continue;
956
				continue;
916
 
957
 
917
			encoder = obj_to_encoder(obj);
958
			encoder = obj_to_encoder(obj);
918
 
959
 
919
			encoder_funcs = encoder->helper_private;
960
			encoder_funcs = encoder->helper_private;
920
			if (encoder_funcs->detect) {
961
			if (encoder_funcs->detect) {
921
				if (ret != connector_status_connected) {
962
				if (ret != connector_status_connected) {
922
				ret = encoder_funcs->detect(encoder, connector);
963
				ret = encoder_funcs->detect(encoder, connector);
923
				if (ret == connector_status_connected) {
964
				if (ret == connector_status_connected) {
924
						radeon_connector->use_digital = false;
965
						radeon_connector->use_digital = false;
925
					}
966
					}
926
				}
967
				}
927
					break;
968
					break;
928
				}
969
				}
929
			}
970
			}
930
		}
971
		}
931
 
972
 
932
	if ((ret == connector_status_connected) && (radeon_connector->use_digital == false) &&
973
	if ((ret == connector_status_connected) && (radeon_connector->use_digital == false) &&
933
	    encoder) {
974
	    encoder) {
934
		ret = radeon_connector_analog_encoder_conflict_solve(connector, encoder, ret, true);
975
		ret = radeon_connector_analog_encoder_conflict_solve(connector, encoder, ret, true);
935
	}
976
	}
936
 
977
 
937
	/* RN50 and some RV100 asics in servers often have a hardcoded EDID in the
978
	/* RN50 and some RV100 asics in servers often have a hardcoded EDID in the
938
	 * vbios to deal with KVMs. If we have one and are not able to detect a monitor
979
	 * vbios to deal with KVMs. If we have one and are not able to detect a monitor
939
	 * by other means, assume the DFP is connected and use that EDID.  In most
980
	 * by other means, assume the DFP is connected and use that EDID.  In most
940
	 * cases the DVI port is actually a virtual KVM port connected to the service
981
	 * cases the DVI port is actually a virtual KVM port connected to the service
941
	 * processor.
982
	 * processor.
942
	 */
983
	 */
943
	if ((!rdev->is_atom_bios) &&
984
	if ((!rdev->is_atom_bios) &&
944
	    (ret == connector_status_disconnected) &&
985
	    (ret == connector_status_disconnected) &&
945
	    rdev->mode_info.bios_hardcoded_edid_size) {
986
	    rdev->mode_info.bios_hardcoded_edid_size) {
946
		radeon_connector->use_digital = true;
987
		radeon_connector->use_digital = true;
947
		ret = connector_status_connected;
988
		ret = connector_status_connected;
948
	}
989
	}
949
 
990
 
950
out:
991
out:
951
	/* updated in get modes as well since we need to know if it's analog or digital */
992
	/* updated in get modes as well since we need to know if it's analog or digital */
952
	radeon_connector_update_scratch_regs(connector, ret);
993
	radeon_connector_update_scratch_regs(connector, ret);
953
	return ret;
994
	return ret;
954
}
995
}
955
 
996
 
956
/* okay need to be smart in here about which encoder to pick */
997
/* okay need to be smart in here about which encoder to pick */
957
struct drm_encoder *radeon_dvi_encoder(struct drm_connector *connector)
998
struct drm_encoder *radeon_dvi_encoder(struct drm_connector *connector)
958
{
999
{
959
	int enc_id = connector->encoder_ids[0];
1000
	int enc_id = connector->encoder_ids[0];
960
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1001
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
961
	struct drm_mode_object *obj;
1002
	struct drm_mode_object *obj;
962
	struct drm_encoder *encoder;
1003
	struct drm_encoder *encoder;
963
	int i;
1004
	int i;
964
	for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
1005
	for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
965
		if (connector->encoder_ids[i] == 0)
1006
		if (connector->encoder_ids[i] == 0)
966
			break;
1007
			break;
967
 
1008
 
968
		obj = drm_mode_object_find(connector->dev, connector->encoder_ids[i], DRM_MODE_OBJECT_ENCODER);
1009
		obj = drm_mode_object_find(connector->dev, connector->encoder_ids[i], DRM_MODE_OBJECT_ENCODER);
969
		if (!obj)
1010
		if (!obj)
970
			continue;
1011
			continue;
971
 
1012
 
972
		encoder = obj_to_encoder(obj);
1013
		encoder = obj_to_encoder(obj);
973
 
1014
 
974
		if (radeon_connector->use_digital == true) {
1015
		if (radeon_connector->use_digital == true) {
975
			if (encoder->encoder_type == DRM_MODE_ENCODER_TMDS)
1016
			if (encoder->encoder_type == DRM_MODE_ENCODER_TMDS)
976
				return encoder;
1017
				return encoder;
977
		} else {
1018
		} else {
978
			if (encoder->encoder_type == DRM_MODE_ENCODER_DAC ||
1019
			if (encoder->encoder_type == DRM_MODE_ENCODER_DAC ||
979
			    encoder->encoder_type == DRM_MODE_ENCODER_TVDAC)
1020
			    encoder->encoder_type == DRM_MODE_ENCODER_TVDAC)
980
				return encoder;
1021
				return encoder;
981
		}
1022
		}
982
	}
1023
	}
983
 
1024
 
984
	/* see if we have a default encoder  TODO */
1025
	/* see if we have a default encoder  TODO */
985
 
1026
 
986
	/* then check use digitial */
1027
	/* then check use digitial */
987
	/* pick the first one */
1028
	/* pick the first one */
988
	if (enc_id) {
1029
	if (enc_id) {
989
		obj = drm_mode_object_find(connector->dev, enc_id, DRM_MODE_OBJECT_ENCODER);
1030
		obj = drm_mode_object_find(connector->dev, enc_id, DRM_MODE_OBJECT_ENCODER);
990
		if (!obj)
1031
		if (!obj)
991
			return NULL;
1032
			return NULL;
992
		encoder = obj_to_encoder(obj);
1033
		encoder = obj_to_encoder(obj);
993
		return encoder;
1034
		return encoder;
994
	}
1035
	}
995
	return NULL;
1036
	return NULL;
996
}
1037
}
997
 
1038
 
998
static void radeon_dvi_force(struct drm_connector *connector)
1039
static void radeon_dvi_force(struct drm_connector *connector)
999
{
1040
{
1000
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1041
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1001
	if (connector->force == DRM_FORCE_ON)
1042
	if (connector->force == DRM_FORCE_ON)
1002
		radeon_connector->use_digital = false;
1043
		radeon_connector->use_digital = false;
1003
	if (connector->force == DRM_FORCE_ON_DIGITAL)
1044
	if (connector->force == DRM_FORCE_ON_DIGITAL)
1004
		radeon_connector->use_digital = true;
1045
		radeon_connector->use_digital = true;
1005
}
1046
}
1006
 
1047
 
1007
static int radeon_dvi_mode_valid(struct drm_connector *connector,
1048
static int radeon_dvi_mode_valid(struct drm_connector *connector,
1008
				  struct drm_display_mode *mode)
1049
				  struct drm_display_mode *mode)
1009
{
1050
{
1010
	struct drm_device *dev = connector->dev;
1051
	struct drm_device *dev = connector->dev;
1011
	struct radeon_device *rdev = dev->dev_private;
1052
	struct radeon_device *rdev = dev->dev_private;
1012
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1053
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1013
 
1054
 
1014
	/* XXX check mode bandwidth */
1055
	/* XXX check mode bandwidth */
1015
 
1056
 
1016
	/* clocks over 135 MHz have heat issues with DVI on RV100 */
1057
	/* clocks over 135 MHz have heat issues with DVI on RV100 */
1017
	if (radeon_connector->use_digital &&
1058
	if (radeon_connector->use_digital &&
1018
	    (rdev->family == CHIP_RV100) &&
1059
	    (rdev->family == CHIP_RV100) &&
1019
	    (mode->clock > 135000))
1060
	    (mode->clock > 135000))
1020
		return MODE_CLOCK_HIGH;
1061
		return MODE_CLOCK_HIGH;
1021
 
1062
 
1022
	if (radeon_connector->use_digital && (mode->clock > 165000)) {
1063
	if (radeon_connector->use_digital && (mode->clock > 165000)) {
1023
		if ((radeon_connector->connector_object_id == CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_I) ||
1064
		if ((radeon_connector->connector_object_id == CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_I) ||
1024
		    (radeon_connector->connector_object_id == CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_D) ||
1065
		    (radeon_connector->connector_object_id == CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_D) ||
1025
		    (radeon_connector->connector_object_id == CONNECTOR_OBJECT_ID_HDMI_TYPE_B))
1066
		    (radeon_connector->connector_object_id == CONNECTOR_OBJECT_ID_HDMI_TYPE_B))
1026
			return MODE_OK;
1067
			return MODE_OK;
1027
		else if (radeon_connector->connector_object_id == CONNECTOR_OBJECT_ID_HDMI_TYPE_A) {
1068
		else if (radeon_connector->connector_object_id == CONNECTOR_OBJECT_ID_HDMI_TYPE_A) {
1028
			if (ASIC_IS_DCE3(rdev)) {
1069
			if (ASIC_IS_DCE3(rdev)) {
1029
				/* HDMI 1.3+ supports max clock of 340 Mhz */
1070
				/* HDMI 1.3+ supports max clock of 340 Mhz */
1030
				if (mode->clock > 340000)
1071
				if (mode->clock > 340000)
1031
					return MODE_CLOCK_HIGH;
1072
					return MODE_CLOCK_HIGH;
1032
		else
1073
		else
1033
					return MODE_OK;
1074
					return MODE_OK;
1034
			} else
1075
			} else
1035
				return MODE_CLOCK_HIGH;
1076
				return MODE_CLOCK_HIGH;
1036
		} else
1077
		} else
1037
			return MODE_CLOCK_HIGH;
1078
			return MODE_CLOCK_HIGH;
1038
	}
1079
	}
1039
 
1080
 
1040
	/* check against the max pixel clock */
1081
	/* check against the max pixel clock */
1041
	if ((mode->clock / 10) > rdev->clock.max_pixel_clock)
1082
	if ((mode->clock / 10) > rdev->clock.max_pixel_clock)
1042
		return MODE_CLOCK_HIGH;
1083
		return MODE_CLOCK_HIGH;
1043
 
1084
 
1044
	return MODE_OK;
1085
	return MODE_OK;
1045
}
1086
}
1046
 
1087
 
1047
struct drm_connector_helper_funcs radeon_dvi_connector_helper_funcs = {
1088
struct drm_connector_helper_funcs radeon_dvi_connector_helper_funcs = {
1048
	.get_modes = radeon_dvi_get_modes,
1089
	.get_modes = radeon_dvi_get_modes,
1049
	.mode_valid = radeon_dvi_mode_valid,
1090
	.mode_valid = radeon_dvi_mode_valid,
1050
	.best_encoder = radeon_dvi_encoder,
1091
	.best_encoder = radeon_dvi_encoder,
1051
};
1092
};
1052
 
1093
 
1053
struct drm_connector_funcs radeon_dvi_connector_funcs = {
1094
struct drm_connector_funcs radeon_dvi_connector_funcs = {
1054
	.dpms = drm_helper_connector_dpms,
1095
	.dpms = drm_helper_connector_dpms,
1055
	.detect = radeon_dvi_detect,
1096
	.detect = radeon_dvi_detect,
1056
	.fill_modes = drm_helper_probe_single_connector_modes,
1097
	.fill_modes = drm_helper_probe_single_connector_modes,
1057
	.set_property = radeon_connector_set_property,
1098
	.set_property = radeon_connector_set_property,
1058
	.destroy = radeon_connector_destroy,
1099
	.destroy = radeon_connector_destroy,
1059
	.force = radeon_dvi_force,
1100
	.force = radeon_dvi_force,
1060
};
1101
};
1061
 
1102
 
1062
static void radeon_dp_connector_destroy(struct drm_connector *connector)
1103
static void radeon_dp_connector_destroy(struct drm_connector *connector)
1063
{
1104
{
1064
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1105
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1065
	struct radeon_connector_atom_dig *radeon_dig_connector = radeon_connector->con_priv;
1106
	struct radeon_connector_atom_dig *radeon_dig_connector = radeon_connector->con_priv;
1066
 
1107
 
1067
	if (radeon_connector->edid)
1108
	if (radeon_connector->edid)
1068
		kfree(radeon_connector->edid);
1109
		kfree(radeon_connector->edid);
1069
	if (radeon_dig_connector->dp_i2c_bus)
1110
	if (radeon_dig_connector->dp_i2c_bus)
1070
		radeon_i2c_destroy(radeon_dig_connector->dp_i2c_bus);
1111
		radeon_i2c_destroy(radeon_dig_connector->dp_i2c_bus);
1071
	kfree(radeon_connector->con_priv);
1112
	kfree(radeon_connector->con_priv);
1072
	drm_sysfs_connector_remove(connector);
1113
	drm_sysfs_connector_remove(connector);
1073
	drm_connector_cleanup(connector);
1114
	drm_connector_cleanup(connector);
1074
	kfree(connector);
1115
	kfree(connector);
1075
}
1116
}
1076
 
1117
 
1077
static int radeon_dp_get_modes(struct drm_connector *connector)
1118
static int radeon_dp_get_modes(struct drm_connector *connector)
1078
{
1119
{
1079
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1120
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1080
	struct radeon_connector_atom_dig *radeon_dig_connector = radeon_connector->con_priv;
1121
	struct radeon_connector_atom_dig *radeon_dig_connector = radeon_connector->con_priv;
1081
	struct drm_encoder *encoder = radeon_best_single_encoder(connector);
1122
	struct drm_encoder *encoder = radeon_best_single_encoder(connector);
1082
	int ret;
1123
	int ret;
1083
 
1124
 
1084
	if ((connector->connector_type == DRM_MODE_CONNECTOR_eDP) ||
1125
	if ((connector->connector_type == DRM_MODE_CONNECTOR_eDP) ||
1085
	    (connector->connector_type == DRM_MODE_CONNECTOR_LVDS)) {
1126
	    (connector->connector_type == DRM_MODE_CONNECTOR_LVDS)) {
1086
		struct drm_display_mode *mode;
1127
		struct drm_display_mode *mode;
1087
 
1128
 
1088
		if (!radeon_dig_connector->edp_on)
1129
		if (!radeon_dig_connector->edp_on)
1089
			atombios_set_edp_panel_power(connector,
1130
			atombios_set_edp_panel_power(connector,
1090
						     ATOM_TRANSMITTER_ACTION_POWER_ON);
1131
						     ATOM_TRANSMITTER_ACTION_POWER_ON);
1091
	ret = radeon_ddc_get_modes(radeon_connector);
1132
	ret = radeon_ddc_get_modes(radeon_connector);
1092
		if (!radeon_dig_connector->edp_on)
1133
		if (!radeon_dig_connector->edp_on)
1093
			atombios_set_edp_panel_power(connector,
1134
			atombios_set_edp_panel_power(connector,
1094
						     ATOM_TRANSMITTER_ACTION_POWER_OFF);
1135
						     ATOM_TRANSMITTER_ACTION_POWER_OFF);
1095
 
1136
 
1096
		if (ret > 0) {
1137
		if (ret > 0) {
1097
			if (encoder) {
1138
			if (encoder) {
1098
				radeon_fixup_lvds_native_mode(encoder, connector);
1139
				radeon_fixup_lvds_native_mode(encoder, connector);
1099
				/* add scaled modes */
1140
				/* add scaled modes */
1100
				radeon_add_common_modes(encoder, connector);
1141
				radeon_add_common_modes(encoder, connector);
1101
			}
1142
			}
1102
			return ret;
1143
			return ret;
1103
		}
1144
		}
1104
 
1145
 
1105
		encoder = radeon_best_single_encoder(connector);
1146
		encoder = radeon_best_single_encoder(connector);
1106
		if (!encoder)
1147
		if (!encoder)
1107
			return 0;
1148
			return 0;
1108
 
1149
 
1109
		/* we have no EDID modes */
1150
		/* we have no EDID modes */
1110
		mode = radeon_fp_native_mode(encoder);
1151
		mode = radeon_fp_native_mode(encoder);
1111
		if (mode) {
1152
		if (mode) {
1112
			ret = 1;
1153
			ret = 1;
1113
			drm_mode_probed_add(connector, mode);
1154
			drm_mode_probed_add(connector, mode);
1114
			/* add the width/height from vbios tables if available */
1155
			/* add the width/height from vbios tables if available */
1115
			connector->display_info.width_mm = mode->width_mm;
1156
			connector->display_info.width_mm = mode->width_mm;
1116
			connector->display_info.height_mm = mode->height_mm;
1157
			connector->display_info.height_mm = mode->height_mm;
1117
			/* add scaled modes */
1158
			/* add scaled modes */
1118
			radeon_add_common_modes(encoder, connector);
1159
			radeon_add_common_modes(encoder, connector);
1119
	}
1160
	}
1120
	} else {
1161
	} else {
1121
		/* need to setup ddc on the bridge */
1162
		/* need to setup ddc on the bridge */
1122
		if (radeon_connector_encoder_is_dp_bridge(connector)) {
1163
		if (radeon_connector_encoder_is_dp_bridge(connector)) {
1123
			if (encoder)
1164
			if (encoder)
1124
				radeon_atom_ext_encoder_setup_ddc(encoder);
1165
				radeon_atom_ext_encoder_setup_ddc(encoder);
1125
		}
1166
		}
1126
		ret = radeon_ddc_get_modes(radeon_connector);
1167
		ret = radeon_ddc_get_modes(radeon_connector);
1127
	}
1168
	}
1128
 
1169
 
1129
	return ret;
1170
	return ret;
1130
}
1171
}
1131
 
1172
 
1132
bool radeon_connector_encoder_is_dp_bridge(struct drm_connector *connector)
1173
bool radeon_connector_encoder_is_dp_bridge(struct drm_connector *connector)
1133
{
1174
{
1134
	struct drm_mode_object *obj;
1175
	struct drm_mode_object *obj;
1135
	struct drm_encoder *encoder;
1176
	struct drm_encoder *encoder;
1136
	struct radeon_encoder *radeon_encoder;
1177
	struct radeon_encoder *radeon_encoder;
1137
	int i;
1178
	int i;
1138
	bool found = false;
1179
	bool found = false;
1139
 
1180
 
1140
	for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
1181
	for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
1141
		if (connector->encoder_ids[i] == 0)
1182
		if (connector->encoder_ids[i] == 0)
1142
			break;
1183
			break;
1143
 
1184
 
1144
		obj = drm_mode_object_find(connector->dev, connector->encoder_ids[i], DRM_MODE_OBJECT_ENCODER);
1185
		obj = drm_mode_object_find(connector->dev, connector->encoder_ids[i], DRM_MODE_OBJECT_ENCODER);
1145
		if (!obj)
1186
		if (!obj)
1146
			continue;
1187
			continue;
1147
 
1188
 
1148
		encoder = obj_to_encoder(obj);
1189
		encoder = obj_to_encoder(obj);
1149
		radeon_encoder = to_radeon_encoder(encoder);
1190
		radeon_encoder = to_radeon_encoder(encoder);
1150
 
1191
 
1151
		switch (radeon_encoder->encoder_id) {
1192
		switch (radeon_encoder->encoder_id) {
1152
		case ENCODER_OBJECT_ID_TRAVIS:
1193
		case ENCODER_OBJECT_ID_TRAVIS:
1153
		case ENCODER_OBJECT_ID_NUTMEG:
1194
		case ENCODER_OBJECT_ID_NUTMEG:
1154
			found = true;
1195
			found = true;
1155
			break;
1196
			break;
1156
		default:
1197
		default:
1157
			break;
1198
			break;
1158
		}
1199
		}
1159
	}
1200
	}
1160
 
1201
 
1161
	return found;
1202
	return found;
1162
}
1203
}
1163
 
1204
 
1164
bool radeon_connector_encoder_is_hbr2(struct drm_connector *connector)
1205
bool radeon_connector_encoder_is_hbr2(struct drm_connector *connector)
1165
{
1206
{
1166
	struct drm_mode_object *obj;
1207
	struct drm_mode_object *obj;
1167
	struct drm_encoder *encoder;
1208
	struct drm_encoder *encoder;
1168
	struct radeon_encoder *radeon_encoder;
1209
	struct radeon_encoder *radeon_encoder;
1169
	int i;
1210
	int i;
1170
	bool found = false;
1211
	bool found = false;
1171
 
1212
 
1172
	for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
1213
	for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
1173
		if (connector->encoder_ids[i] == 0)
1214
		if (connector->encoder_ids[i] == 0)
1174
			break;
1215
			break;
1175
 
1216
 
1176
		obj = drm_mode_object_find(connector->dev, connector->encoder_ids[i], DRM_MODE_OBJECT_ENCODER);
1217
		obj = drm_mode_object_find(connector->dev, connector->encoder_ids[i], DRM_MODE_OBJECT_ENCODER);
1177
		if (!obj)
1218
		if (!obj)
1178
			continue;
1219
			continue;
1179
 
1220
 
1180
		encoder = obj_to_encoder(obj);
1221
		encoder = obj_to_encoder(obj);
1181
		radeon_encoder = to_radeon_encoder(encoder);
1222
		radeon_encoder = to_radeon_encoder(encoder);
1182
		if (radeon_encoder->caps & ATOM_ENCODER_CAP_RECORD_HBR2)
1223
		if (radeon_encoder->caps & ATOM_ENCODER_CAP_RECORD_HBR2)
1183
			found = true;
1224
			found = true;
1184
	}
1225
	}
1185
 
1226
 
1186
	return found;
1227
	return found;
1187
}
1228
}
1188
 
1229
 
1189
bool radeon_connector_is_dp12_capable(struct drm_connector *connector)
1230
bool radeon_connector_is_dp12_capable(struct drm_connector *connector)
1190
{
1231
{
1191
	struct drm_device *dev = connector->dev;
1232
	struct drm_device *dev = connector->dev;
1192
	struct radeon_device *rdev = dev->dev_private;
1233
	struct radeon_device *rdev = dev->dev_private;
1193
 
1234
 
1194
	if (ASIC_IS_DCE5(rdev) &&
1235
	if (ASIC_IS_DCE5(rdev) &&
1195
	    (rdev->clock.dp_extclk >= 53900) &&
1236
	    (rdev->clock.dp_extclk >= 53900) &&
1196
	    radeon_connector_encoder_is_hbr2(connector)) {
1237
	    radeon_connector_encoder_is_hbr2(connector)) {
1197
		return true;
1238
		return true;
1198
	}
1239
	}
1199
 
1240
 
1200
	return false;
1241
	return false;
1201
}
1242
}
1202
 
1243
 
1203
static enum drm_connector_status
1244
static enum drm_connector_status
1204
radeon_dp_detect(struct drm_connector *connector, bool force)
1245
radeon_dp_detect(struct drm_connector *connector, bool force)
1205
{
1246
{
1206
	struct drm_device *dev = connector->dev;
1247
	struct drm_device *dev = connector->dev;
1207
	struct radeon_device *rdev = dev->dev_private;
1248
	struct radeon_device *rdev = dev->dev_private;
1208
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1249
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1209
	enum drm_connector_status ret = connector_status_disconnected;
1250
	enum drm_connector_status ret = connector_status_disconnected;
1210
	struct radeon_connector_atom_dig *radeon_dig_connector = radeon_connector->con_priv;
1251
	struct radeon_connector_atom_dig *radeon_dig_connector = radeon_connector->con_priv;
1211
	struct drm_encoder *encoder = radeon_best_single_encoder(connector);
1252
	struct drm_encoder *encoder = radeon_best_single_encoder(connector);
1212
 
1253
 
1213
	if (radeon_connector->edid) {
1254
	if (radeon_connector->edid) {
1214
		kfree(radeon_connector->edid);
1255
		kfree(radeon_connector->edid);
1215
		radeon_connector->edid = NULL;
1256
		radeon_connector->edid = NULL;
1216
	}
1257
	}
1217
 
1258
 
1218
	if ((connector->connector_type == DRM_MODE_CONNECTOR_eDP) ||
1259
	if ((connector->connector_type == DRM_MODE_CONNECTOR_eDP) ||
1219
	    (connector->connector_type == DRM_MODE_CONNECTOR_LVDS)) {
1260
	    (connector->connector_type == DRM_MODE_CONNECTOR_LVDS)) {
1220
		if (encoder) {
1261
		if (encoder) {
1221
			struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
1262
			struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
1222
			struct drm_display_mode *native_mode = &radeon_encoder->native_mode;
1263
			struct drm_display_mode *native_mode = &radeon_encoder->native_mode;
1223
 
1264
 
1224
			/* check if panel is valid */
1265
			/* check if panel is valid */
1225
			if (native_mode->hdisplay >= 320 && native_mode->vdisplay >= 240)
1266
			if (native_mode->hdisplay >= 320 && native_mode->vdisplay >= 240)
1226
				ret = connector_status_connected;
1267
				ret = connector_status_connected;
1227
		}
1268
		}
1228
		/* eDP is always DP */
1269
		/* eDP is always DP */
1229
		radeon_dig_connector->dp_sink_type = CONNECTOR_OBJECT_ID_DISPLAYPORT;
1270
		radeon_dig_connector->dp_sink_type = CONNECTOR_OBJECT_ID_DISPLAYPORT;
1230
		if (!radeon_dig_connector->edp_on)
1271
		if (!radeon_dig_connector->edp_on)
1231
			atombios_set_edp_panel_power(connector,
1272
			atombios_set_edp_panel_power(connector,
1232
						     ATOM_TRANSMITTER_ACTION_POWER_ON);
1273
						     ATOM_TRANSMITTER_ACTION_POWER_ON);
1233
		if (radeon_dp_getdpcd(radeon_connector))
1274
		if (radeon_dp_getdpcd(radeon_connector))
1234
			ret = connector_status_connected;
1275
			ret = connector_status_connected;
1235
		if (!radeon_dig_connector->edp_on)
1276
		if (!radeon_dig_connector->edp_on)
1236
			atombios_set_edp_panel_power(connector,
1277
			atombios_set_edp_panel_power(connector,
1237
						     ATOM_TRANSMITTER_ACTION_POWER_OFF);
1278
						     ATOM_TRANSMITTER_ACTION_POWER_OFF);
1238
	} else {
1279
	} else {
1239
		/* need to setup ddc on the bridge */
1280
		/* need to setup ddc on the bridge */
1240
		if (radeon_connector_encoder_is_dp_bridge(connector)) {
1281
		if (radeon_connector_encoder_is_dp_bridge(connector)) {
1241
			if (encoder)
1282
			if (encoder)
1242
				radeon_atom_ext_encoder_setup_ddc(encoder);
1283
				radeon_atom_ext_encoder_setup_ddc(encoder);
1243
		}
1284
		}
1244
		radeon_dig_connector->dp_sink_type = radeon_dp_getsinktype(radeon_connector);
1285
		radeon_dig_connector->dp_sink_type = radeon_dp_getsinktype(radeon_connector);
1245
		if (radeon_hpd_sense(rdev, radeon_connector->hpd.hpd)) {
1286
		if (radeon_hpd_sense(rdev, radeon_connector->hpd.hpd)) {
1246
			ret = connector_status_connected;
1287
			ret = connector_status_connected;
1247
			if (radeon_dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT)
1288
			if (radeon_dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT)
1248
				radeon_dp_getdpcd(radeon_connector);
1289
				radeon_dp_getdpcd(radeon_connector);
1249
		} else {
1290
		} else {
1250
		if (radeon_dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) {
1291
		if (radeon_dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) {
1251
			if (radeon_dp_getdpcd(radeon_connector))
1292
			if (radeon_dp_getdpcd(radeon_connector))
1252
				ret = connector_status_connected;
1293
				ret = connector_status_connected;
1253
		} else {
1294
		} else {
1254
			if (radeon_ddc_probe(radeon_connector))
1295
				if (radeon_ddc_probe(radeon_connector,
-
 
1296
						     radeon_connector->requires_extended_probe))
1255
			ret = connector_status_connected;
1297
			ret = connector_status_connected;
1256
		}
1298
		}
1257
	}
1299
	}
1258
 
1300
 
1259
		if ((ret == connector_status_disconnected) &&
1301
		if ((ret == connector_status_disconnected) &&
1260
		    radeon_connector->dac_load_detect) {
1302
		    radeon_connector->dac_load_detect) {
1261
			struct drm_encoder *encoder = radeon_best_single_encoder(connector);
1303
			struct drm_encoder *encoder = radeon_best_single_encoder(connector);
1262
			struct drm_encoder_helper_funcs *encoder_funcs;
1304
			struct drm_encoder_helper_funcs *encoder_funcs;
1263
			if (encoder) {
1305
			if (encoder) {
1264
				encoder_funcs = encoder->helper_private;
1306
				encoder_funcs = encoder->helper_private;
1265
				ret = encoder_funcs->detect(encoder, connector);
1307
				ret = encoder_funcs->detect(encoder, connector);
1266
			}
1308
			}
1267
		}
1309
		}
1268
	}
1310
	}
1269
 
1311
 
1270
	radeon_connector_update_scratch_regs(connector, ret);
1312
	radeon_connector_update_scratch_regs(connector, ret);
1271
	return ret;
1313
	return ret;
1272
}
1314
}
1273
 
1315
 
1274
static int radeon_dp_mode_valid(struct drm_connector *connector,
1316
static int radeon_dp_mode_valid(struct drm_connector *connector,
1275
				  struct drm_display_mode *mode)
1317
				  struct drm_display_mode *mode)
1276
{
1318
{
1277
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1319
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
1278
	struct radeon_connector_atom_dig *radeon_dig_connector = radeon_connector->con_priv;
1320
	struct radeon_connector_atom_dig *radeon_dig_connector = radeon_connector->con_priv;
1279
 
1321
 
1280
	/* XXX check mode bandwidth */
1322
	/* XXX check mode bandwidth */
1281
 
1323
 
1282
	if ((connector->connector_type == DRM_MODE_CONNECTOR_eDP) ||
1324
	if ((connector->connector_type == DRM_MODE_CONNECTOR_eDP) ||
1283
	    (connector->connector_type == DRM_MODE_CONNECTOR_LVDS)) {
1325
	    (connector->connector_type == DRM_MODE_CONNECTOR_LVDS)) {
1284
		struct drm_encoder *encoder = radeon_best_single_encoder(connector);
1326
		struct drm_encoder *encoder = radeon_best_single_encoder(connector);
1285
 
1327
 
1286
		if ((mode->hdisplay < 320) || (mode->vdisplay < 240))
1328
		if ((mode->hdisplay < 320) || (mode->vdisplay < 240))
1287
			return MODE_PANEL;
1329
			return MODE_PANEL;
1288
 
1330
 
1289
		if (encoder) {
1331
		if (encoder) {
1290
			struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
1332
			struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
1291
			struct drm_display_mode *native_mode = &radeon_encoder->native_mode;
1333
			struct drm_display_mode *native_mode = &radeon_encoder->native_mode;
1292
 
1334
 
1293
		/* AVIVO hardware supports downscaling modes larger than the panel
1335
		/* AVIVO hardware supports downscaling modes larger than the panel
1294
			 * to the panel size, but I'm not sure this is desirable.
1336
			 * to the panel size, but I'm not sure this is desirable.
1295
			 */
1337
			 */
1296
			if ((mode->hdisplay > native_mode->hdisplay) ||
1338
			if ((mode->hdisplay > native_mode->hdisplay) ||
1297
			    (mode->vdisplay > native_mode->vdisplay))
1339
			    (mode->vdisplay > native_mode->vdisplay))
1298
				return MODE_PANEL;
1340
				return MODE_PANEL;
1299
 
1341
 
1300
			/* if scaling is disabled, block non-native modes */
1342
			/* if scaling is disabled, block non-native modes */
1301
			if (radeon_encoder->rmx_type == RMX_OFF) {
1343
			if (radeon_encoder->rmx_type == RMX_OFF) {
1302
				if ((mode->hdisplay != native_mode->hdisplay) ||
1344
				if ((mode->hdisplay != native_mode->hdisplay) ||
1303
				    (mode->vdisplay != native_mode->vdisplay))
1345
				    (mode->vdisplay != native_mode->vdisplay))
1304
					return MODE_PANEL;
1346
					return MODE_PANEL;
1305
			}
1347
			}
1306
		}
1348
		}
1307
		return MODE_OK;
1349
		return MODE_OK;
1308
	} else {
1350
	} else {
1309
	if ((radeon_dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) ||
1351
	if ((radeon_dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) ||
1310
	    (radeon_dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_eDP))
1352
	    (radeon_dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_eDP))
1311
			return radeon_dp_mode_valid_helper(connector, mode);
1353
			return radeon_dp_mode_valid_helper(connector, mode);
1312
	else
1354
	else
1313
		return MODE_OK;
1355
		return MODE_OK;
1314
	}
1356
	}
1315
}
1357
}
1316
 
1358
 
1317
struct drm_connector_helper_funcs radeon_dp_connector_helper_funcs = {
1359
struct drm_connector_helper_funcs radeon_dp_connector_helper_funcs = {
1318
	.get_modes = radeon_dp_get_modes,
1360
	.get_modes = radeon_dp_get_modes,
1319
	.mode_valid = radeon_dp_mode_valid,
1361
	.mode_valid = radeon_dp_mode_valid,
1320
	.best_encoder = radeon_dvi_encoder,
1362
	.best_encoder = radeon_dvi_encoder,
1321
};
1363
};
1322
 
1364
 
1323
struct drm_connector_funcs radeon_dp_connector_funcs = {
1365
struct drm_connector_funcs radeon_dp_connector_funcs = {
1324
	.dpms = drm_helper_connector_dpms,
1366
	.dpms = drm_helper_connector_dpms,
1325
	.detect = radeon_dp_detect,
1367
	.detect = radeon_dp_detect,
1326
	.fill_modes = drm_helper_probe_single_connector_modes,
1368
	.fill_modes = drm_helper_probe_single_connector_modes,
1327
	.set_property = radeon_connector_set_property,
1369
	.set_property = radeon_connector_set_property,
1328
	.destroy = radeon_dp_connector_destroy,
1370
	.destroy = radeon_dp_connector_destroy,
1329
	.force = radeon_dvi_force,
1371
	.force = radeon_dvi_force,
1330
};
1372
};
1331
 
1373
 
1332
void
1374
void
1333
radeon_add_atom_connector(struct drm_device *dev,
1375
radeon_add_atom_connector(struct drm_device *dev,
1334
			  uint32_t connector_id,
1376
			  uint32_t connector_id,
1335
			  uint32_t supported_device,
1377
			  uint32_t supported_device,
1336
			  int connector_type,
1378
			  int connector_type,
1337
			  struct radeon_i2c_bus_rec *i2c_bus,
1379
			  struct radeon_i2c_bus_rec *i2c_bus,
1338
			  uint32_t igp_lane_info,
1380
			  uint32_t igp_lane_info,
1339
			  uint16_t connector_object_id,
1381
			  uint16_t connector_object_id,
1340
			  struct radeon_hpd *hpd,
1382
			  struct radeon_hpd *hpd,
1341
			  struct radeon_router *router)
1383
			  struct radeon_router *router)
1342
{
1384
{
1343
	struct radeon_device *rdev = dev->dev_private;
1385
	struct radeon_device *rdev = dev->dev_private;
1344
	struct drm_connector *connector;
1386
	struct drm_connector *connector;
1345
	struct radeon_connector *radeon_connector;
1387
	struct radeon_connector *radeon_connector;
1346
	struct radeon_connector_atom_dig *radeon_dig_connector;
1388
	struct radeon_connector_atom_dig *radeon_dig_connector;
1347
	struct drm_encoder *encoder;
1389
	struct drm_encoder *encoder;
1348
	struct radeon_encoder *radeon_encoder;
1390
	struct radeon_encoder *radeon_encoder;
1349
	uint32_t subpixel_order = SubPixelNone;
1391
	uint32_t subpixel_order = SubPixelNone;
1350
	bool shared_ddc = false;
1392
	bool shared_ddc = false;
1351
	bool is_dp_bridge = false;
1393
	bool is_dp_bridge = false;
1352
 
1394
 
1353
	if (connector_type == DRM_MODE_CONNECTOR_Unknown)
1395
	if (connector_type == DRM_MODE_CONNECTOR_Unknown)
1354
		return;
1396
		return;
1355
 
1397
 
1356
	/* if the user selected tv=0 don't try and add the connector */
1398
	/* if the user selected tv=0 don't try and add the connector */
1357
	if (((connector_type == DRM_MODE_CONNECTOR_SVIDEO) ||
1399
	if (((connector_type == DRM_MODE_CONNECTOR_SVIDEO) ||
1358
	     (connector_type == DRM_MODE_CONNECTOR_Composite) ||
1400
	     (connector_type == DRM_MODE_CONNECTOR_Composite) ||
1359
	     (connector_type == DRM_MODE_CONNECTOR_9PinDIN)) &&
1401
	     (connector_type == DRM_MODE_CONNECTOR_9PinDIN)) &&
1360
	    (radeon_tv == 0))
1402
	    (radeon_tv == 0))
1361
		return;
1403
		return;
1362
 
1404
 
1363
	/* see if we already added it */
1405
	/* see if we already added it */
1364
	list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
1406
	list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
1365
		radeon_connector = to_radeon_connector(connector);
1407
		radeon_connector = to_radeon_connector(connector);
1366
		if (radeon_connector->connector_id == connector_id) {
1408
		if (radeon_connector->connector_id == connector_id) {
1367
			radeon_connector->devices |= supported_device;
1409
			radeon_connector->devices |= supported_device;
1368
			return;
1410
			return;
1369
		}
1411
		}
1370
		if (radeon_connector->ddc_bus && i2c_bus->valid) {
1412
		if (radeon_connector->ddc_bus && i2c_bus->valid) {
1371
			if (radeon_connector->ddc_bus->rec.i2c_id == i2c_bus->i2c_id) {
1413
			if (radeon_connector->ddc_bus->rec.i2c_id == i2c_bus->i2c_id) {
1372
				radeon_connector->shared_ddc = true;
1414
				radeon_connector->shared_ddc = true;
1373
				shared_ddc = true;
1415
				shared_ddc = true;
1374
			}
1416
			}
1375
			if (radeon_connector->router_bus && router->ddc_valid &&
1417
			if (radeon_connector->router_bus && router->ddc_valid &&
1376
			    (radeon_connector->router.router_id == router->router_id)) {
1418
			    (radeon_connector->router.router_id == router->router_id)) {
1377
				radeon_connector->shared_ddc = false;
1419
				radeon_connector->shared_ddc = false;
1378
				shared_ddc = false;
1420
				shared_ddc = false;
1379
			}
1421
			}
1380
		}
1422
		}
1381
	}
1423
	}
1382
 
1424
 
1383
	/* check if it's a dp bridge */
1425
	/* check if it's a dp bridge */
1384
	list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
1426
	list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
1385
		radeon_encoder = to_radeon_encoder(encoder);
1427
		radeon_encoder = to_radeon_encoder(encoder);
1386
		if (radeon_encoder->devices & supported_device) {
1428
		if (radeon_encoder->devices & supported_device) {
1387
			switch (radeon_encoder->encoder_id) {
1429
			switch (radeon_encoder->encoder_id) {
1388
			case ENCODER_OBJECT_ID_TRAVIS:
1430
			case ENCODER_OBJECT_ID_TRAVIS:
1389
			case ENCODER_OBJECT_ID_NUTMEG:
1431
			case ENCODER_OBJECT_ID_NUTMEG:
1390
				is_dp_bridge = true;
1432
				is_dp_bridge = true;
1391
				break;
1433
				break;
1392
			default:
1434
			default:
1393
				break;
1435
				break;
1394
			}
1436
			}
1395
		}
1437
		}
1396
	}
1438
	}
1397
 
1439
 
1398
	radeon_connector = kzalloc(sizeof(struct radeon_connector), GFP_KERNEL);
1440
	radeon_connector = kzalloc(sizeof(struct radeon_connector), GFP_KERNEL);
1399
	if (!radeon_connector)
1441
	if (!radeon_connector)
1400
		return;
1442
		return;
1401
 
1443
 
1402
	connector = &radeon_connector->base;
1444
	connector = &radeon_connector->base;
1403
 
1445
 
1404
	radeon_connector->connector_id = connector_id;
1446
	radeon_connector->connector_id = connector_id;
1405
	radeon_connector->devices = supported_device;
1447
	radeon_connector->devices = supported_device;
1406
	radeon_connector->shared_ddc = shared_ddc;
1448
	radeon_connector->shared_ddc = shared_ddc;
1407
	radeon_connector->connector_object_id = connector_object_id;
1449
	radeon_connector->connector_object_id = connector_object_id;
1408
	radeon_connector->hpd = *hpd;
1450
	radeon_connector->hpd = *hpd;
-
 
1451
	radeon_connector->requires_extended_probe =
-
 
1452
		radeon_connector_needs_extended_probe(rdev, supported_device,
-
 
1453
							connector_type);
1409
	radeon_connector->router = *router;
1454
	radeon_connector->router = *router;
1410
	if (router->ddc_valid || router->cd_valid) {
1455
	if (router->ddc_valid || router->cd_valid) {
1411
		radeon_connector->router_bus = radeon_i2c_lookup(rdev, &router->i2c_info);
1456
		radeon_connector->router_bus = radeon_i2c_lookup(rdev, &router->i2c_info);
1412
		if (!radeon_connector->router_bus)
1457
		if (!radeon_connector->router_bus)
1413
			DRM_ERROR("Failed to assign router i2c bus! Check dmesg for i2c errors.\n");
1458
			DRM_ERROR("Failed to assign router i2c bus! Check dmesg for i2c errors.\n");
1414
	}
1459
	}
1415
 
1460
 
1416
	if (is_dp_bridge) {
1461
	if (is_dp_bridge) {
1417
		radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL);
1462
		radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL);
1418
		if (!radeon_dig_connector)
1463
		if (!radeon_dig_connector)
1419
			goto failed;
1464
			goto failed;
1420
		radeon_dig_connector->igp_lane_info = igp_lane_info;
1465
		radeon_dig_connector->igp_lane_info = igp_lane_info;
1421
		radeon_connector->con_priv = radeon_dig_connector;
1466
		radeon_connector->con_priv = radeon_dig_connector;
1422
		drm_connector_init(dev, &radeon_connector->base, &radeon_dp_connector_funcs, connector_type);
1467
		drm_connector_init(dev, &radeon_connector->base, &radeon_dp_connector_funcs, connector_type);
1423
		drm_connector_helper_add(&radeon_connector->base, &radeon_dp_connector_helper_funcs);
1468
		drm_connector_helper_add(&radeon_connector->base, &radeon_dp_connector_helper_funcs);
1424
		if (i2c_bus->valid) {
1469
		if (i2c_bus->valid) {
1425
			/* add DP i2c bus */
1470
			/* add DP i2c bus */
1426
			if (connector_type == DRM_MODE_CONNECTOR_eDP)
1471
			if (connector_type == DRM_MODE_CONNECTOR_eDP)
1427
				radeon_dig_connector->dp_i2c_bus = radeon_i2c_create_dp(dev, i2c_bus, "eDP-auxch");
1472
				radeon_dig_connector->dp_i2c_bus = radeon_i2c_create_dp(dev, i2c_bus, "eDP-auxch");
1428
			else
1473
			else
1429
				radeon_dig_connector->dp_i2c_bus = radeon_i2c_create_dp(dev, i2c_bus, "DP-auxch");
1474
				radeon_dig_connector->dp_i2c_bus = radeon_i2c_create_dp(dev, i2c_bus, "DP-auxch");
1430
			if (!radeon_dig_connector->dp_i2c_bus)
1475
			if (!radeon_dig_connector->dp_i2c_bus)
1431
				DRM_ERROR("DP: Failed to assign dp ddc bus! Check dmesg for i2c errors.\n");
1476
				DRM_ERROR("DP: Failed to assign dp ddc bus! Check dmesg for i2c errors.\n");
1432
			radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
1477
			radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
1433
			if (!radeon_connector->ddc_bus)
1478
			if (!radeon_connector->ddc_bus)
1434
				DRM_ERROR("DP: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
1479
				DRM_ERROR("DP: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
1435
		}
1480
		}
1436
	switch (connector_type) {
1481
	switch (connector_type) {
1437
	case DRM_MODE_CONNECTOR_VGA:
1482
	case DRM_MODE_CONNECTOR_VGA:
1438
		case DRM_MODE_CONNECTOR_DVIA:
1483
		case DRM_MODE_CONNECTOR_DVIA:
1439
		default:
1484
		default:
1440
			connector->interlace_allowed = true;
1485
			connector->interlace_allowed = true;
1441
			connector->doublescan_allowed = true;
1486
			connector->doublescan_allowed = true;
1442
			radeon_connector->dac_load_detect = true;
1487
			radeon_connector->dac_load_detect = true;
1443
			drm_connector_attach_property(&radeon_connector->base,
1488
			drm_connector_attach_property(&radeon_connector->base,
1444
						      rdev->mode_info.load_detect_property,
1489
						      rdev->mode_info.load_detect_property,
1445
						      1);
1490
						      1);
1446
			break;
1491
			break;
1447
		case DRM_MODE_CONNECTOR_DVII:
1492
		case DRM_MODE_CONNECTOR_DVII:
1448
		case DRM_MODE_CONNECTOR_DVID:
1493
		case DRM_MODE_CONNECTOR_DVID:
1449
		case DRM_MODE_CONNECTOR_HDMIA:
1494
		case DRM_MODE_CONNECTOR_HDMIA:
1450
		case DRM_MODE_CONNECTOR_HDMIB:
1495
		case DRM_MODE_CONNECTOR_HDMIB:
1451
		case DRM_MODE_CONNECTOR_DisplayPort:
1496
		case DRM_MODE_CONNECTOR_DisplayPort:
1452
			drm_connector_attach_property(&radeon_connector->base,
1497
			drm_connector_attach_property(&radeon_connector->base,
1453
						      rdev->mode_info.underscan_property,
1498
						      rdev->mode_info.underscan_property,
1454
						      UNDERSCAN_OFF);
1499
						      UNDERSCAN_OFF);
1455
			drm_connector_attach_property(&radeon_connector->base,
1500
			drm_connector_attach_property(&radeon_connector->base,
1456
						      rdev->mode_info.underscan_hborder_property,
1501
						      rdev->mode_info.underscan_hborder_property,
1457
						      0);
1502
						      0);
1458
			drm_connector_attach_property(&radeon_connector->base,
1503
			drm_connector_attach_property(&radeon_connector->base,
1459
						      rdev->mode_info.underscan_vborder_property,
1504
						      rdev->mode_info.underscan_vborder_property,
1460
						      0);
1505
						      0);
1461
			subpixel_order = SubPixelHorizontalRGB;
1506
			subpixel_order = SubPixelHorizontalRGB;
1462
			connector->interlace_allowed = true;
1507
			connector->interlace_allowed = true;
1463
			if (connector_type == DRM_MODE_CONNECTOR_HDMIB)
1508
			if (connector_type == DRM_MODE_CONNECTOR_HDMIB)
1464
				connector->doublescan_allowed = true;
1509
				connector->doublescan_allowed = true;
1465
			else
1510
			else
1466
				connector->doublescan_allowed = false;
1511
				connector->doublescan_allowed = false;
1467
			if (connector_type == DRM_MODE_CONNECTOR_DVII) {
1512
			if (connector_type == DRM_MODE_CONNECTOR_DVII) {
1468
				radeon_connector->dac_load_detect = true;
1513
				radeon_connector->dac_load_detect = true;
1469
				drm_connector_attach_property(&radeon_connector->base,
1514
				drm_connector_attach_property(&radeon_connector->base,
1470
							      rdev->mode_info.load_detect_property,
1515
							      rdev->mode_info.load_detect_property,
1471
							      1);
1516
							      1);
1472
			}
1517
			}
1473
			break;
1518
			break;
1474
		case DRM_MODE_CONNECTOR_LVDS:
1519
		case DRM_MODE_CONNECTOR_LVDS:
1475
		case DRM_MODE_CONNECTOR_eDP:
1520
		case DRM_MODE_CONNECTOR_eDP:
1476
			drm_connector_attach_property(&radeon_connector->base,
1521
			drm_connector_attach_property(&radeon_connector->base,
1477
						      dev->mode_config.scaling_mode_property,
1522
						      dev->mode_config.scaling_mode_property,
1478
						      DRM_MODE_SCALE_FULLSCREEN);
1523
						      DRM_MODE_SCALE_FULLSCREEN);
1479
			subpixel_order = SubPixelHorizontalRGB;
1524
			subpixel_order = SubPixelHorizontalRGB;
1480
			connector->interlace_allowed = false;
1525
			connector->interlace_allowed = false;
1481
			connector->doublescan_allowed = false;
1526
			connector->doublescan_allowed = false;
1482
			break;
1527
			break;
1483
		}
1528
		}
1484
	} else {
1529
	} else {
1485
		switch (connector_type) {
1530
		switch (connector_type) {
1486
		case DRM_MODE_CONNECTOR_VGA:
1531
		case DRM_MODE_CONNECTOR_VGA:
1487
		drm_connector_init(dev, &radeon_connector->base, &radeon_vga_connector_funcs, connector_type);
1532
		drm_connector_init(dev, &radeon_connector->base, &radeon_vga_connector_funcs, connector_type);
1488
		drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs);
1533
		drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs);
1489
		if (i2c_bus->valid) {
1534
		if (i2c_bus->valid) {
1490
			radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
1535
			radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
1491
			if (!radeon_connector->ddc_bus)
1536
			if (!radeon_connector->ddc_bus)
1492
				DRM_ERROR("VGA: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
1537
				DRM_ERROR("VGA: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
1493
		}
1538
		}
1494
		radeon_connector->dac_load_detect = true;
1539
		radeon_connector->dac_load_detect = true;
1495
		drm_connector_attach_property(&radeon_connector->base,
1540
		drm_connector_attach_property(&radeon_connector->base,
1496
					      rdev->mode_info.load_detect_property,
1541
					      rdev->mode_info.load_detect_property,
1497
					      1);
1542
					      1);
1498
		/* no HPD on analog connectors */
1543
		/* no HPD on analog connectors */
1499
		radeon_connector->hpd.hpd = RADEON_HPD_NONE;
1544
		radeon_connector->hpd.hpd = RADEON_HPD_NONE;
1500
		connector->polled = DRM_CONNECTOR_POLL_CONNECT;
1545
		connector->polled = DRM_CONNECTOR_POLL_CONNECT;
1501
		connector->interlace_allowed = true;
1546
		connector->interlace_allowed = true;
1502
		connector->doublescan_allowed = true;
1547
		connector->doublescan_allowed = true;
1503
		break;
1548
		break;
1504
	case DRM_MODE_CONNECTOR_DVIA:
1549
	case DRM_MODE_CONNECTOR_DVIA:
1505
		drm_connector_init(dev, &radeon_connector->base, &radeon_vga_connector_funcs, connector_type);
1550
		drm_connector_init(dev, &radeon_connector->base, &radeon_vga_connector_funcs, connector_type);
1506
		drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs);
1551
		drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs);
1507
		if (i2c_bus->valid) {
1552
		if (i2c_bus->valid) {
1508
			radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
1553
			radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
1509
			if (!radeon_connector->ddc_bus)
1554
			if (!radeon_connector->ddc_bus)
1510
				DRM_ERROR("DVIA: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
1555
				DRM_ERROR("DVIA: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
1511
		}
1556
		}
1512
		radeon_connector->dac_load_detect = true;
1557
		radeon_connector->dac_load_detect = true;
1513
		drm_connector_attach_property(&radeon_connector->base,
1558
		drm_connector_attach_property(&radeon_connector->base,
1514
					      rdev->mode_info.load_detect_property,
1559
					      rdev->mode_info.load_detect_property,
1515
					      1);
1560
					      1);
1516
		/* no HPD on analog connectors */
1561
		/* no HPD on analog connectors */
1517
		radeon_connector->hpd.hpd = RADEON_HPD_NONE;
1562
		radeon_connector->hpd.hpd = RADEON_HPD_NONE;
1518
		connector->interlace_allowed = true;
1563
		connector->interlace_allowed = true;
1519
		connector->doublescan_allowed = true;
1564
		connector->doublescan_allowed = true;
1520
		break;
1565
		break;
1521
	case DRM_MODE_CONNECTOR_DVII:
1566
	case DRM_MODE_CONNECTOR_DVII:
1522
	case DRM_MODE_CONNECTOR_DVID:
1567
	case DRM_MODE_CONNECTOR_DVID:
1523
		radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL);
1568
		radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL);
1524
		if (!radeon_dig_connector)
1569
		if (!radeon_dig_connector)
1525
			goto failed;
1570
			goto failed;
1526
		radeon_dig_connector->igp_lane_info = igp_lane_info;
1571
		radeon_dig_connector->igp_lane_info = igp_lane_info;
1527
		radeon_connector->con_priv = radeon_dig_connector;
1572
		radeon_connector->con_priv = radeon_dig_connector;
1528
		drm_connector_init(dev, &radeon_connector->base, &radeon_dvi_connector_funcs, connector_type);
1573
		drm_connector_init(dev, &radeon_connector->base, &radeon_dvi_connector_funcs, connector_type);
1529
		drm_connector_helper_add(&radeon_connector->base, &radeon_dvi_connector_helper_funcs);
1574
		drm_connector_helper_add(&radeon_connector->base, &radeon_dvi_connector_helper_funcs);
1530
		if (i2c_bus->valid) {
1575
		if (i2c_bus->valid) {
1531
			radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
1576
			radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
1532
			if (!radeon_connector->ddc_bus)
1577
			if (!radeon_connector->ddc_bus)
1533
				DRM_ERROR("DVI: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
1578
				DRM_ERROR("DVI: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
1534
		}
1579
		}
1535
		subpixel_order = SubPixelHorizontalRGB;
1580
		subpixel_order = SubPixelHorizontalRGB;
1536
		drm_connector_attach_property(&radeon_connector->base,
1581
		drm_connector_attach_property(&radeon_connector->base,
1537
					      rdev->mode_info.coherent_mode_property,
1582
					      rdev->mode_info.coherent_mode_property,
1538
					      1);
1583
					      1);
1539
		if (ASIC_IS_AVIVO(rdev)) {
1584
		if (ASIC_IS_AVIVO(rdev)) {
1540
			drm_connector_attach_property(&radeon_connector->base,
1585
			drm_connector_attach_property(&radeon_connector->base,
1541
						      rdev->mode_info.underscan_property,
1586
						      rdev->mode_info.underscan_property,
1542
						      UNDERSCAN_OFF);
1587
						      UNDERSCAN_OFF);
1543
			drm_connector_attach_property(&radeon_connector->base,
1588
			drm_connector_attach_property(&radeon_connector->base,
1544
						      rdev->mode_info.underscan_hborder_property,
1589
						      rdev->mode_info.underscan_hborder_property,
1545
						      0);
1590
						      0);
1546
			drm_connector_attach_property(&radeon_connector->base,
1591
			drm_connector_attach_property(&radeon_connector->base,
1547
						      rdev->mode_info.underscan_vborder_property,
1592
						      rdev->mode_info.underscan_vborder_property,
1548
						      0);
1593
						      0);
1549
		}
1594
		}
1550
		if (connector_type == DRM_MODE_CONNECTOR_DVII) {
1595
		if (connector_type == DRM_MODE_CONNECTOR_DVII) {
1551
		radeon_connector->dac_load_detect = true;
1596
		radeon_connector->dac_load_detect = true;
1552
		drm_connector_attach_property(&radeon_connector->base,
1597
		drm_connector_attach_property(&radeon_connector->base,
1553
					      rdev->mode_info.load_detect_property,
1598
					      rdev->mode_info.load_detect_property,
1554
					      1);
1599
					      1);
1555
		}
1600
		}
1556
		connector->interlace_allowed = true;
1601
		connector->interlace_allowed = true;
1557
		if (connector_type == DRM_MODE_CONNECTOR_DVII)
1602
		if (connector_type == DRM_MODE_CONNECTOR_DVII)
1558
			connector->doublescan_allowed = true;
1603
			connector->doublescan_allowed = true;
1559
		else
1604
		else
1560
			connector->doublescan_allowed = false;
1605
			connector->doublescan_allowed = false;
1561
		break;
1606
		break;
1562
	case DRM_MODE_CONNECTOR_HDMIA:
1607
	case DRM_MODE_CONNECTOR_HDMIA:
1563
	case DRM_MODE_CONNECTOR_HDMIB:
1608
	case DRM_MODE_CONNECTOR_HDMIB:
1564
		radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL);
1609
		radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL);
1565
		if (!radeon_dig_connector)
1610
		if (!radeon_dig_connector)
1566
			goto failed;
1611
			goto failed;
1567
		radeon_dig_connector->igp_lane_info = igp_lane_info;
1612
		radeon_dig_connector->igp_lane_info = igp_lane_info;
1568
		radeon_connector->con_priv = radeon_dig_connector;
1613
		radeon_connector->con_priv = radeon_dig_connector;
1569
		drm_connector_init(dev, &radeon_connector->base, &radeon_dvi_connector_funcs, connector_type);
1614
		drm_connector_init(dev, &radeon_connector->base, &radeon_dvi_connector_funcs, connector_type);
1570
		drm_connector_helper_add(&radeon_connector->base, &radeon_dvi_connector_helper_funcs);
1615
		drm_connector_helper_add(&radeon_connector->base, &radeon_dvi_connector_helper_funcs);
1571
		if (i2c_bus->valid) {
1616
		if (i2c_bus->valid) {
1572
			radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
1617
			radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
1573
			if (!radeon_connector->ddc_bus)
1618
			if (!radeon_connector->ddc_bus)
1574
				DRM_ERROR("HDMI: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
1619
				DRM_ERROR("HDMI: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
1575
		}
1620
		}
1576
		drm_connector_attach_property(&radeon_connector->base,
1621
		drm_connector_attach_property(&radeon_connector->base,
1577
					      rdev->mode_info.coherent_mode_property,
1622
					      rdev->mode_info.coherent_mode_property,
1578
					      1);
1623
					      1);
1579
		if (ASIC_IS_AVIVO(rdev)) {
1624
		if (ASIC_IS_AVIVO(rdev)) {
1580
			drm_connector_attach_property(&radeon_connector->base,
1625
			drm_connector_attach_property(&radeon_connector->base,
1581
						      rdev->mode_info.underscan_property,
1626
						      rdev->mode_info.underscan_property,
1582
						      UNDERSCAN_OFF);
1627
						      UNDERSCAN_OFF);
1583
			drm_connector_attach_property(&radeon_connector->base,
1628
			drm_connector_attach_property(&radeon_connector->base,
1584
						      rdev->mode_info.underscan_hborder_property,
1629
						      rdev->mode_info.underscan_hborder_property,
1585
						      0);
1630
						      0);
1586
			drm_connector_attach_property(&radeon_connector->base,
1631
			drm_connector_attach_property(&radeon_connector->base,
1587
						      rdev->mode_info.underscan_vborder_property,
1632
						      rdev->mode_info.underscan_vborder_property,
1588
						      0);
1633
						      0);
1589
		}
1634
		}
1590
		subpixel_order = SubPixelHorizontalRGB;
1635
		subpixel_order = SubPixelHorizontalRGB;
1591
		connector->interlace_allowed = true;
1636
		connector->interlace_allowed = true;
1592
		if (connector_type == DRM_MODE_CONNECTOR_HDMIB)
1637
		if (connector_type == DRM_MODE_CONNECTOR_HDMIB)
1593
			connector->doublescan_allowed = true;
1638
			connector->doublescan_allowed = true;
1594
		else
1639
		else
1595
			connector->doublescan_allowed = false;
1640
			connector->doublescan_allowed = false;
1596
		break;
1641
		break;
1597
	case DRM_MODE_CONNECTOR_DisplayPort:
1642
	case DRM_MODE_CONNECTOR_DisplayPort:
1598
		radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL);
1643
		radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL);
1599
		if (!radeon_dig_connector)
1644
		if (!radeon_dig_connector)
1600
			goto failed;
1645
			goto failed;
1601
		radeon_dig_connector->igp_lane_info = igp_lane_info;
1646
		radeon_dig_connector->igp_lane_info = igp_lane_info;
1602
		radeon_connector->con_priv = radeon_dig_connector;
1647
		radeon_connector->con_priv = radeon_dig_connector;
1603
		drm_connector_init(dev, &radeon_connector->base, &radeon_dp_connector_funcs, connector_type);
1648
		drm_connector_init(dev, &radeon_connector->base, &radeon_dp_connector_funcs, connector_type);
1604
		drm_connector_helper_add(&radeon_connector->base, &radeon_dp_connector_helper_funcs);
1649
		drm_connector_helper_add(&radeon_connector->base, &radeon_dp_connector_helper_funcs);
1605
		if (i2c_bus->valid) {
1650
		if (i2c_bus->valid) {
1606
			/* add DP i2c bus */
1651
			/* add DP i2c bus */
1607
			radeon_dig_connector->dp_i2c_bus = radeon_i2c_create_dp(dev, i2c_bus, "DP-auxch");
1652
			radeon_dig_connector->dp_i2c_bus = radeon_i2c_create_dp(dev, i2c_bus, "DP-auxch");
1608
			if (!radeon_dig_connector->dp_i2c_bus)
1653
			if (!radeon_dig_connector->dp_i2c_bus)
1609
				DRM_ERROR("DP: Failed to assign dp ddc bus! Check dmesg for i2c errors.\n");
1654
				DRM_ERROR("DP: Failed to assign dp ddc bus! Check dmesg for i2c errors.\n");
1610
			radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
1655
			radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
1611
			if (!radeon_connector->ddc_bus)
1656
			if (!radeon_connector->ddc_bus)
1612
				DRM_ERROR("DP: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
1657
				DRM_ERROR("DP: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
1613
		}
1658
		}
1614
		subpixel_order = SubPixelHorizontalRGB;
1659
		subpixel_order = SubPixelHorizontalRGB;
1615
		drm_connector_attach_property(&radeon_connector->base,
1660
		drm_connector_attach_property(&radeon_connector->base,
1616
					      rdev->mode_info.coherent_mode_property,
1661
					      rdev->mode_info.coherent_mode_property,
1617
					      1);
1662
					      1);
1618
		if (ASIC_IS_AVIVO(rdev)) {
1663
		if (ASIC_IS_AVIVO(rdev)) {
1619
			drm_connector_attach_property(&radeon_connector->base,
1664
			drm_connector_attach_property(&radeon_connector->base,
1620
						      rdev->mode_info.underscan_property,
1665
						      rdev->mode_info.underscan_property,
1621
						      UNDERSCAN_OFF);
1666
						      UNDERSCAN_OFF);
1622
			drm_connector_attach_property(&radeon_connector->base,
1667
			drm_connector_attach_property(&radeon_connector->base,
1623
						      rdev->mode_info.underscan_hborder_property,
1668
						      rdev->mode_info.underscan_hborder_property,
1624
						      0);
1669
						      0);
1625
			drm_connector_attach_property(&radeon_connector->base,
1670
			drm_connector_attach_property(&radeon_connector->base,
1626
						      rdev->mode_info.underscan_vborder_property,
1671
						      rdev->mode_info.underscan_vborder_property,
1627
						      0);
1672
						      0);
1628
		}
1673
		}
1629
		connector->interlace_allowed = true;
1674
		connector->interlace_allowed = true;
1630
		/* in theory with a DP to VGA converter... */
1675
		/* in theory with a DP to VGA converter... */
1631
		connector->doublescan_allowed = false;
1676
		connector->doublescan_allowed = false;
1632
		break;
1677
		break;
1633
		case DRM_MODE_CONNECTOR_eDP:
1678
		case DRM_MODE_CONNECTOR_eDP:
1634
			radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL);
1679
			radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL);
1635
			if (!radeon_dig_connector)
1680
			if (!radeon_dig_connector)
1636
				goto failed;
1681
				goto failed;
1637
			radeon_dig_connector->igp_lane_info = igp_lane_info;
1682
			radeon_dig_connector->igp_lane_info = igp_lane_info;
1638
			radeon_connector->con_priv = radeon_dig_connector;
1683
			radeon_connector->con_priv = radeon_dig_connector;
1639
			drm_connector_init(dev, &radeon_connector->base, &radeon_dp_connector_funcs, connector_type);
1684
			drm_connector_init(dev, &radeon_connector->base, &radeon_dp_connector_funcs, connector_type);
1640
			drm_connector_helper_add(&radeon_connector->base, &radeon_dp_connector_helper_funcs);
1685
			drm_connector_helper_add(&radeon_connector->base, &radeon_dp_connector_helper_funcs);
1641
			if (i2c_bus->valid) {
1686
			if (i2c_bus->valid) {
1642
				/* add DP i2c bus */
1687
				/* add DP i2c bus */
1643
				radeon_dig_connector->dp_i2c_bus = radeon_i2c_create_dp(dev, i2c_bus, "eDP-auxch");
1688
				radeon_dig_connector->dp_i2c_bus = radeon_i2c_create_dp(dev, i2c_bus, "eDP-auxch");
1644
				if (!radeon_dig_connector->dp_i2c_bus)
1689
				if (!radeon_dig_connector->dp_i2c_bus)
1645
					DRM_ERROR("DP: Failed to assign dp ddc bus! Check dmesg for i2c errors.\n");
1690
					DRM_ERROR("DP: Failed to assign dp ddc bus! Check dmesg for i2c errors.\n");
1646
				radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
1691
				radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
1647
				if (!radeon_connector->ddc_bus)
1692
				if (!radeon_connector->ddc_bus)
1648
					DRM_ERROR("DP: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
1693
					DRM_ERROR("DP: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
1649
			}
1694
			}
1650
			drm_connector_attach_property(&radeon_connector->base,
1695
			drm_connector_attach_property(&radeon_connector->base,
1651
						      dev->mode_config.scaling_mode_property,
1696
						      dev->mode_config.scaling_mode_property,
1652
						      DRM_MODE_SCALE_FULLSCREEN);
1697
						      DRM_MODE_SCALE_FULLSCREEN);
1653
			subpixel_order = SubPixelHorizontalRGB;
1698
			subpixel_order = SubPixelHorizontalRGB;
1654
			connector->interlace_allowed = false;
1699
			connector->interlace_allowed = false;
1655
			connector->doublescan_allowed = false;
1700
			connector->doublescan_allowed = false;
1656
			break;
1701
			break;
1657
	case DRM_MODE_CONNECTOR_SVIDEO:
1702
	case DRM_MODE_CONNECTOR_SVIDEO:
1658
	case DRM_MODE_CONNECTOR_Composite:
1703
	case DRM_MODE_CONNECTOR_Composite:
1659
	case DRM_MODE_CONNECTOR_9PinDIN:
1704
	case DRM_MODE_CONNECTOR_9PinDIN:
1660
			drm_connector_init(dev, &radeon_connector->base, &radeon_tv_connector_funcs, connector_type);
1705
			drm_connector_init(dev, &radeon_connector->base, &radeon_tv_connector_funcs, connector_type);
1661
			drm_connector_helper_add(&radeon_connector->base, &radeon_tv_connector_helper_funcs);
1706
			drm_connector_helper_add(&radeon_connector->base, &radeon_tv_connector_helper_funcs);
1662
			radeon_connector->dac_load_detect = true;
1707
			radeon_connector->dac_load_detect = true;
1663
		drm_connector_attach_property(&radeon_connector->base,
1708
		drm_connector_attach_property(&radeon_connector->base,
1664
					      rdev->mode_info.load_detect_property,
1709
					      rdev->mode_info.load_detect_property,
1665
					      1);
1710
					      1);
1666
			drm_connector_attach_property(&radeon_connector->base,
1711
			drm_connector_attach_property(&radeon_connector->base,
1667
						      rdev->mode_info.tv_std_property,
1712
						      rdev->mode_info.tv_std_property,
1668
						      radeon_atombios_get_tv_info(rdev));
1713
						      radeon_atombios_get_tv_info(rdev));
1669
			/* no HPD on analog connectors */
1714
			/* no HPD on analog connectors */
1670
			radeon_connector->hpd.hpd = RADEON_HPD_NONE;
1715
			radeon_connector->hpd.hpd = RADEON_HPD_NONE;
1671
		connector->interlace_allowed = false;
1716
		connector->interlace_allowed = false;
1672
		connector->doublescan_allowed = false;
1717
		connector->doublescan_allowed = false;
1673
		break;
1718
		break;
1674
	case DRM_MODE_CONNECTOR_LVDS:
1719
	case DRM_MODE_CONNECTOR_LVDS:
1675
		radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL);
1720
		radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL);
1676
		if (!radeon_dig_connector)
1721
		if (!radeon_dig_connector)
1677
			goto failed;
1722
			goto failed;
1678
		radeon_dig_connector->igp_lane_info = igp_lane_info;
1723
		radeon_dig_connector->igp_lane_info = igp_lane_info;
1679
		radeon_connector->con_priv = radeon_dig_connector;
1724
		radeon_connector->con_priv = radeon_dig_connector;
1680
		drm_connector_init(dev, &radeon_connector->base, &radeon_lvds_connector_funcs, connector_type);
1725
		drm_connector_init(dev, &radeon_connector->base, &radeon_lvds_connector_funcs, connector_type);
1681
		drm_connector_helper_add(&radeon_connector->base, &radeon_lvds_connector_helper_funcs);
1726
		drm_connector_helper_add(&radeon_connector->base, &radeon_lvds_connector_helper_funcs);
1682
		if (i2c_bus->valid) {
1727
		if (i2c_bus->valid) {
1683
			radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
1728
			radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
1684
			if (!radeon_connector->ddc_bus)
1729
			if (!radeon_connector->ddc_bus)
1685
				DRM_ERROR("LVDS: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
1730
				DRM_ERROR("LVDS: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
1686
		}
1731
		}
1687
		drm_connector_attach_property(&radeon_connector->base,
1732
		drm_connector_attach_property(&radeon_connector->base,
1688
					      dev->mode_config.scaling_mode_property,
1733
					      dev->mode_config.scaling_mode_property,
1689
					      DRM_MODE_SCALE_FULLSCREEN);
1734
					      DRM_MODE_SCALE_FULLSCREEN);
1690
		subpixel_order = SubPixelHorizontalRGB;
1735
		subpixel_order = SubPixelHorizontalRGB;
1691
		connector->interlace_allowed = false;
1736
		connector->interlace_allowed = false;
1692
		connector->doublescan_allowed = false;
1737
		connector->doublescan_allowed = false;
1693
		break;
1738
		break;
1694
	}
1739
	}
1695
	}
1740
	}
1696
 
1741
 
1697
	if (radeon_connector->hpd.hpd == RADEON_HPD_NONE) {
1742
	if (radeon_connector->hpd.hpd == RADEON_HPD_NONE) {
1698
		if (i2c_bus->valid)
1743
		if (i2c_bus->valid)
1699
			connector->polled = DRM_CONNECTOR_POLL_CONNECT;
1744
			connector->polled = DRM_CONNECTOR_POLL_CONNECT;
1700
	} else
1745
	} else
1701
		connector->polled = DRM_CONNECTOR_POLL_HPD;
1746
		connector->polled = DRM_CONNECTOR_POLL_HPD;
1702
 
1747
 
1703
	connector->display_info.subpixel_order = subpixel_order;
1748
	connector->display_info.subpixel_order = subpixel_order;
1704
	drm_sysfs_connector_add(connector);
1749
	drm_sysfs_connector_add(connector);
1705
	return;
1750
	return;
1706
 
1751
 
1707
failed:
1752
failed:
1708
	drm_connector_cleanup(connector);
1753
	drm_connector_cleanup(connector);
1709
	kfree(connector);
1754
	kfree(connector);
1710
}
1755
}
1711
 
1756
 
1712
void
1757
void
1713
radeon_add_legacy_connector(struct drm_device *dev,
1758
radeon_add_legacy_connector(struct drm_device *dev,
1714
			    uint32_t connector_id,
1759
			    uint32_t connector_id,
1715
			    uint32_t supported_device,
1760
			    uint32_t supported_device,
1716
			    int connector_type,
1761
			    int connector_type,
1717
			    struct radeon_i2c_bus_rec *i2c_bus,
1762
			    struct radeon_i2c_bus_rec *i2c_bus,
1718
			    uint16_t connector_object_id,
1763
			    uint16_t connector_object_id,
1719
			    struct radeon_hpd *hpd)
1764
			    struct radeon_hpd *hpd)
1720
{
1765
{
1721
	struct radeon_device *rdev = dev->dev_private;
1766
	struct radeon_device *rdev = dev->dev_private;
1722
	struct drm_connector *connector;
1767
	struct drm_connector *connector;
1723
	struct radeon_connector *radeon_connector;
1768
	struct radeon_connector *radeon_connector;
1724
	uint32_t subpixel_order = SubPixelNone;
1769
	uint32_t subpixel_order = SubPixelNone;
1725
 
1770
 
1726
	if (connector_type == DRM_MODE_CONNECTOR_Unknown)
1771
	if (connector_type == DRM_MODE_CONNECTOR_Unknown)
1727
		return;
1772
		return;
1728
 
1773
 
1729
	/* if the user selected tv=0 don't try and add the connector */
1774
	/* if the user selected tv=0 don't try and add the connector */
1730
	if (((connector_type == DRM_MODE_CONNECTOR_SVIDEO) ||
1775
	if (((connector_type == DRM_MODE_CONNECTOR_SVIDEO) ||
1731
	     (connector_type == DRM_MODE_CONNECTOR_Composite) ||
1776
	     (connector_type == DRM_MODE_CONNECTOR_Composite) ||
1732
	     (connector_type == DRM_MODE_CONNECTOR_9PinDIN)) &&
1777
	     (connector_type == DRM_MODE_CONNECTOR_9PinDIN)) &&
1733
	    (radeon_tv == 0))
1778
	    (radeon_tv == 0))
1734
		return;
1779
		return;
1735
 
1780
 
1736
	/* see if we already added it */
1781
	/* see if we already added it */
1737
	list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
1782
	list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
1738
		radeon_connector = to_radeon_connector(connector);
1783
		radeon_connector = to_radeon_connector(connector);
1739
		if (radeon_connector->connector_id == connector_id) {
1784
		if (radeon_connector->connector_id == connector_id) {
1740
			radeon_connector->devices |= supported_device;
1785
			radeon_connector->devices |= supported_device;
1741
			return;
1786
			return;
1742
		}
1787
		}
1743
	}
1788
	}
1744
 
1789
 
1745
	radeon_connector = kzalloc(sizeof(struct radeon_connector), GFP_KERNEL);
1790
	radeon_connector = kzalloc(sizeof(struct radeon_connector), GFP_KERNEL);
1746
	if (!radeon_connector)
1791
	if (!radeon_connector)
1747
		return;
1792
		return;
1748
 
1793
 
1749
	connector = &radeon_connector->base;
1794
	connector = &radeon_connector->base;
1750
 
1795
 
1751
	radeon_connector->connector_id = connector_id;
1796
	radeon_connector->connector_id = connector_id;
1752
	radeon_connector->devices = supported_device;
1797
	radeon_connector->devices = supported_device;
1753
	radeon_connector->connector_object_id = connector_object_id;
1798
	radeon_connector->connector_object_id = connector_object_id;
1754
	radeon_connector->hpd = *hpd;
1799
	radeon_connector->hpd = *hpd;
-
 
1800
	radeon_connector->requires_extended_probe =
-
 
1801
		radeon_connector_needs_extended_probe(rdev, supported_device,
-
 
1802
							connector_type);
1755
	switch (connector_type) {
1803
	switch (connector_type) {
1756
	case DRM_MODE_CONNECTOR_VGA:
1804
	case DRM_MODE_CONNECTOR_VGA:
1757
		drm_connector_init(dev, &radeon_connector->base, &radeon_vga_connector_funcs, connector_type);
1805
		drm_connector_init(dev, &radeon_connector->base, &radeon_vga_connector_funcs, connector_type);
1758
		drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs);
1806
		drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs);
1759
		if (i2c_bus->valid) {
1807
		if (i2c_bus->valid) {
1760
			radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
1808
			radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
1761
			if (!radeon_connector->ddc_bus)
1809
			if (!radeon_connector->ddc_bus)
1762
				DRM_ERROR("VGA: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
1810
				DRM_ERROR("VGA: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
1763
		}
1811
		}
1764
		radeon_connector->dac_load_detect = true;
1812
		radeon_connector->dac_load_detect = true;
1765
		drm_connector_attach_property(&radeon_connector->base,
1813
		drm_connector_attach_property(&radeon_connector->base,
1766
					      rdev->mode_info.load_detect_property,
1814
					      rdev->mode_info.load_detect_property,
1767
					      1);
1815
					      1);
1768
		/* no HPD on analog connectors */
1816
		/* no HPD on analog connectors */
1769
		radeon_connector->hpd.hpd = RADEON_HPD_NONE;
1817
		radeon_connector->hpd.hpd = RADEON_HPD_NONE;
1770
		connector->polled = DRM_CONNECTOR_POLL_CONNECT;
1818
		connector->polled = DRM_CONNECTOR_POLL_CONNECT;
1771
		connector->interlace_allowed = true;
1819
		connector->interlace_allowed = true;
1772
		connector->doublescan_allowed = true;
1820
		connector->doublescan_allowed = true;
1773
		break;
1821
		break;
1774
	case DRM_MODE_CONNECTOR_DVIA:
1822
	case DRM_MODE_CONNECTOR_DVIA:
1775
		drm_connector_init(dev, &radeon_connector->base, &radeon_vga_connector_funcs, connector_type);
1823
		drm_connector_init(dev, &radeon_connector->base, &radeon_vga_connector_funcs, connector_type);
1776
		drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs);
1824
		drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs);
1777
		if (i2c_bus->valid) {
1825
		if (i2c_bus->valid) {
1778
			radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
1826
			radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
1779
			if (!radeon_connector->ddc_bus)
1827
			if (!radeon_connector->ddc_bus)
1780
				DRM_ERROR("DVIA: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
1828
				DRM_ERROR("DVIA: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
1781
		}
1829
		}
1782
		radeon_connector->dac_load_detect = true;
1830
		radeon_connector->dac_load_detect = true;
1783
		drm_connector_attach_property(&radeon_connector->base,
1831
		drm_connector_attach_property(&radeon_connector->base,
1784
					      rdev->mode_info.load_detect_property,
1832
					      rdev->mode_info.load_detect_property,
1785
					      1);
1833
					      1);
1786
		/* no HPD on analog connectors */
1834
		/* no HPD on analog connectors */
1787
		radeon_connector->hpd.hpd = RADEON_HPD_NONE;
1835
		radeon_connector->hpd.hpd = RADEON_HPD_NONE;
1788
		connector->interlace_allowed = true;
1836
		connector->interlace_allowed = true;
1789
		connector->doublescan_allowed = true;
1837
		connector->doublescan_allowed = true;
1790
		break;
1838
		break;
1791
	case DRM_MODE_CONNECTOR_DVII:
1839
	case DRM_MODE_CONNECTOR_DVII:
1792
	case DRM_MODE_CONNECTOR_DVID:
1840
	case DRM_MODE_CONNECTOR_DVID:
1793
		drm_connector_init(dev, &radeon_connector->base, &radeon_dvi_connector_funcs, connector_type);
1841
		drm_connector_init(dev, &radeon_connector->base, &radeon_dvi_connector_funcs, connector_type);
1794
		drm_connector_helper_add(&radeon_connector->base, &radeon_dvi_connector_helper_funcs);
1842
		drm_connector_helper_add(&radeon_connector->base, &radeon_dvi_connector_helper_funcs);
1795
		if (i2c_bus->valid) {
1843
		if (i2c_bus->valid) {
1796
			radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
1844
			radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
1797
			if (!radeon_connector->ddc_bus)
1845
			if (!radeon_connector->ddc_bus)
1798
				DRM_ERROR("DVI: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
1846
				DRM_ERROR("DVI: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
1799
		}
1847
		}
1800
		if (connector_type == DRM_MODE_CONNECTOR_DVII) {
1848
		if (connector_type == DRM_MODE_CONNECTOR_DVII) {
1801
			radeon_connector->dac_load_detect = true;
1849
			radeon_connector->dac_load_detect = true;
1802
			drm_connector_attach_property(&radeon_connector->base,
1850
			drm_connector_attach_property(&radeon_connector->base,
1803
						      rdev->mode_info.load_detect_property,
1851
						      rdev->mode_info.load_detect_property,
1804
						      1);
1852
						      1);
1805
		}
1853
		}
1806
		subpixel_order = SubPixelHorizontalRGB;
1854
		subpixel_order = SubPixelHorizontalRGB;
1807
		connector->interlace_allowed = true;
1855
		connector->interlace_allowed = true;
1808
		if (connector_type == DRM_MODE_CONNECTOR_DVII)
1856
		if (connector_type == DRM_MODE_CONNECTOR_DVII)
1809
			connector->doublescan_allowed = true;
1857
			connector->doublescan_allowed = true;
1810
		else
1858
		else
1811
			connector->doublescan_allowed = false;
1859
			connector->doublescan_allowed = false;
1812
		break;
1860
		break;
1813
	case DRM_MODE_CONNECTOR_SVIDEO:
1861
	case DRM_MODE_CONNECTOR_SVIDEO:
1814
	case DRM_MODE_CONNECTOR_Composite:
1862
	case DRM_MODE_CONNECTOR_Composite:
1815
	case DRM_MODE_CONNECTOR_9PinDIN:
1863
	case DRM_MODE_CONNECTOR_9PinDIN:
1816
			drm_connector_init(dev, &radeon_connector->base, &radeon_tv_connector_funcs, connector_type);
1864
			drm_connector_init(dev, &radeon_connector->base, &radeon_tv_connector_funcs, connector_type);
1817
			drm_connector_helper_add(&radeon_connector->base, &radeon_tv_connector_helper_funcs);
1865
			drm_connector_helper_add(&radeon_connector->base, &radeon_tv_connector_helper_funcs);
1818
			radeon_connector->dac_load_detect = true;
1866
			radeon_connector->dac_load_detect = true;
1819
			/* RS400,RC410,RS480 chipset seems to report a lot
1867
			/* RS400,RC410,RS480 chipset seems to report a lot
1820
			 * of false positive on load detect, we haven't yet
1868
			 * of false positive on load detect, we haven't yet
1821
			 * found a way to make load detect reliable on those
1869
			 * found a way to make load detect reliable on those
1822
			 * chipset, thus just disable it for TV.
1870
			 * chipset, thus just disable it for TV.
1823
			 */
1871
			 */
1824
			if (rdev->family == CHIP_RS400 || rdev->family == CHIP_RS480)
1872
			if (rdev->family == CHIP_RS400 || rdev->family == CHIP_RS480)
1825
				radeon_connector->dac_load_detect = false;
1873
				radeon_connector->dac_load_detect = false;
1826
			drm_connector_attach_property(&radeon_connector->base,
1874
			drm_connector_attach_property(&radeon_connector->base,
1827
						      rdev->mode_info.load_detect_property,
1875
						      rdev->mode_info.load_detect_property,
1828
						      radeon_connector->dac_load_detect);
1876
						      radeon_connector->dac_load_detect);
1829
			drm_connector_attach_property(&radeon_connector->base,
1877
			drm_connector_attach_property(&radeon_connector->base,
1830
						      rdev->mode_info.tv_std_property,
1878
						      rdev->mode_info.tv_std_property,
1831
						      radeon_combios_get_tv_info(rdev));
1879
						      radeon_combios_get_tv_info(rdev));
1832
			/* no HPD on analog connectors */
1880
			/* no HPD on analog connectors */
1833
			radeon_connector->hpd.hpd = RADEON_HPD_NONE;
1881
			radeon_connector->hpd.hpd = RADEON_HPD_NONE;
1834
		connector->interlace_allowed = false;
1882
		connector->interlace_allowed = false;
1835
		connector->doublescan_allowed = false;
1883
		connector->doublescan_allowed = false;
1836
		break;
1884
		break;
1837
	case DRM_MODE_CONNECTOR_LVDS:
1885
	case DRM_MODE_CONNECTOR_LVDS:
1838
		drm_connector_init(dev, &radeon_connector->base, &radeon_lvds_connector_funcs, connector_type);
1886
		drm_connector_init(dev, &radeon_connector->base, &radeon_lvds_connector_funcs, connector_type);
1839
		drm_connector_helper_add(&radeon_connector->base, &radeon_lvds_connector_helper_funcs);
1887
		drm_connector_helper_add(&radeon_connector->base, &radeon_lvds_connector_helper_funcs);
1840
		if (i2c_bus->valid) {
1888
		if (i2c_bus->valid) {
1841
			radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
1889
			radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
1842
			if (!radeon_connector->ddc_bus)
1890
			if (!radeon_connector->ddc_bus)
1843
				DRM_ERROR("LVDS: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
1891
				DRM_ERROR("LVDS: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
1844
		}
1892
		}
1845
		drm_connector_attach_property(&radeon_connector->base,
1893
		drm_connector_attach_property(&radeon_connector->base,
1846
					      dev->mode_config.scaling_mode_property,
1894
					      dev->mode_config.scaling_mode_property,
1847
					      DRM_MODE_SCALE_FULLSCREEN);
1895
					      DRM_MODE_SCALE_FULLSCREEN);
1848
		subpixel_order = SubPixelHorizontalRGB;
1896
		subpixel_order = SubPixelHorizontalRGB;
1849
		connector->interlace_allowed = false;
1897
		connector->interlace_allowed = false;
1850
		connector->doublescan_allowed = false;
1898
		connector->doublescan_allowed = false;
1851
		break;
1899
		break;
1852
	}
1900
	}
1853
 
1901
 
1854
	if (radeon_connector->hpd.hpd == RADEON_HPD_NONE) {
1902
	if (radeon_connector->hpd.hpd == RADEON_HPD_NONE) {
1855
		if (i2c_bus->valid)
1903
		if (i2c_bus->valid)
1856
			connector->polled = DRM_CONNECTOR_POLL_CONNECT;
1904
			connector->polled = DRM_CONNECTOR_POLL_CONNECT;
1857
	} else
1905
	} else
1858
		connector->polled = DRM_CONNECTOR_POLL_HPD;
1906
		connector->polled = DRM_CONNECTOR_POLL_HPD;
1859
	connector->display_info.subpixel_order = subpixel_order;
1907
	connector->display_info.subpixel_order = subpixel_order;
1860
	drm_sysfs_connector_add(connector);
1908
	drm_sysfs_connector_add(connector);
1861
	if (connector_type == DRM_MODE_CONNECTOR_LVDS) {
1909
	if (connector_type == DRM_MODE_CONNECTOR_LVDS) {
1862
		struct drm_encoder *drm_encoder;
1910
		struct drm_encoder *drm_encoder;
1863
 
1911
 
1864
		list_for_each_entry(drm_encoder, &dev->mode_config.encoder_list, head) {
1912
		list_for_each_entry(drm_encoder, &dev->mode_config.encoder_list, head) {
1865
			struct radeon_encoder *radeon_encoder;
1913
			struct radeon_encoder *radeon_encoder;
1866
 
1914
 
1867
			radeon_encoder = to_radeon_encoder(drm_encoder);
1915
			radeon_encoder = to_radeon_encoder(drm_encoder);
1868
			if (radeon_encoder->encoder_id == ENCODER_OBJECT_ID_INTERNAL_LVDS)
1916
			if (radeon_encoder->encoder_id == ENCODER_OBJECT_ID_INTERNAL_LVDS)
1869
				radeon_legacy_backlight_init(radeon_encoder, connector);
1917
				radeon_legacy_backlight_init(radeon_encoder, connector);
1870
		}
1918
		}
1871
	}
1919
	}
1872
}
1920
}