hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
kernel/drivers/gpu/drm/radeon/radeon_connectors.c
....@@ -23,11 +23,12 @@
2323 * Authors: Dave Airlie
2424 * Alex Deucher
2525 */
26
-#include <drm/drmP.h>
26
+
2727 #include <drm/drm_edid.h>
2828 #include <drm/drm_crtc_helper.h>
2929 #include <drm/drm_fb_helper.h>
3030 #include <drm/drm_dp_mst_helper.h>
31
+#include <drm/drm_probe_helper.h>
3132 #include <drm/radeon_drm.h>
3233 #include "radeon.h"
3334 #include "radeon_audio.h"
....@@ -248,11 +249,10 @@
248249 struct drm_encoder *encoder;
249250 const struct drm_connector_helper_funcs *connector_funcs = connector->helper_private;
250251 bool connected;
251
- int i;
252252
253253 best_encoder = connector_funcs->best_encoder(connector);
254254
255
- drm_connector_for_each_possible_encoder(connector, encoder, i) {
255
+ drm_connector_for_each_possible_encoder(connector, encoder) {
256256 if ((encoder == best_encoder) && (status == connector_status_connected))
257257 connected = true;
258258 else
....@@ -268,9 +268,8 @@
268268 static struct drm_encoder *radeon_find_encoder(struct drm_connector *connector, int encoder_type)
269269 {
270270 struct drm_encoder *encoder;
271
- int i;
272271
273
- drm_connector_for_each_possible_encoder(connector, encoder, i) {
272
+ drm_connector_for_each_possible_encoder(connector, encoder) {
274273 if (encoder->encoder_type == encoder_type)
275274 return encoder;
276275 }
....@@ -379,10 +378,9 @@
379378 static struct drm_encoder *radeon_best_single_encoder(struct drm_connector *connector)
380379 {
381380 struct drm_encoder *encoder;
382
- int i;
383381
384382 /* pick the first one */
385
- drm_connector_for_each_possible_encoder(connector, encoder, i)
383
+ drm_connector_for_each_possible_encoder(connector, encoder)
386384 return encoder;
387385
388386 return NULL;
....@@ -427,14 +425,13 @@
427425
428426 list_for_each_entry(conflict, &dev->mode_config.connector_list, head) {
429427 struct drm_encoder *enc;
430
- int i;
431428
432429 if (conflict == connector)
433430 continue;
434431
435432 radeon_conflict = to_radeon_connector(conflict);
436433
437
- drm_connector_for_each_possible_encoder(conflict, enc, i) {
434
+ drm_connector_for_each_possible_encoder(conflict, enc) {
438435 /* if the IDs match */
439436 if (enc == encoder) {
440437 if (conflict->status != connector_status_connected)
....@@ -443,7 +440,7 @@
443440 if (radeon_conflict->use_digital)
444441 continue;
445442
446
- if (priority == true) {
443
+ if (priority) {
447444 DRM_DEBUG_KMS("1: conflicting encoders switching off %s\n",
448445 conflict->name);
449446 DRM_DEBUG_KMS("in favor of %s\n",
....@@ -476,6 +473,8 @@
476473 native_mode->vdisplay != 0 &&
477474 native_mode->clock != 0) {
478475 mode = drm_mode_duplicate(dev, native_mode);
476
+ if (!mode)
477
+ return NULL;
479478 mode->type = DRM_MODE_TYPE_PREFERRED | DRM_MODE_TYPE_DRIVER;
480479 drm_mode_set_name(mode);
481480
....@@ -490,6 +489,8 @@
490489 * simpler.
491490 */
492491 mode = drm_cvt_mode(dev, native_mode->hdisplay, native_mode->vdisplay, 60, true, false, false);
492
+ if (!mode)
493
+ return NULL;
493494 mode->type = DRM_MODE_TYPE_PREFERRED | DRM_MODE_TYPE_DRIVER;
494495 DRM_DEBUG_KMS("Adding cvt approximation of native panel mode %s\n", mode->name);
495496 }
....@@ -703,9 +704,9 @@
703704 else
704705 ret = radeon_legacy_get_tmds_info_from_combios(radeon_encoder, tmds);
705706 }
706
- if (val == 1 || ret == false) {
707
+ if (val == 1 || !ret)
707708 radeon_legacy_get_tmds_info_from_table(radeon_encoder, tmds);
708
- }
709
+
709710 radeon_property_change_mode(&radeon_encoder->base);
710711 }
711712
....@@ -1370,9 +1371,7 @@
13701371
13711372 /* find analog encoder */
13721373 if (radeon_connector->dac_load_detect) {
1373
- int i;
1374
-
1375
- drm_connector_for_each_possible_encoder(connector, encoder, i) {
1374
+ drm_connector_for_each_possible_encoder(connector, encoder) {
13761375 if (encoder->encoder_type != DRM_MODE_ENCODER_DAC &&
13771376 encoder->encoder_type != DRM_MODE_ENCODER_TVDAC)
13781377 continue;
....@@ -1450,9 +1449,8 @@
14501449 {
14511450 struct radeon_connector *radeon_connector = to_radeon_connector(connector);
14521451 struct drm_encoder *encoder;
1453
- int i;
14541452
1455
- drm_connector_for_each_possible_encoder(connector, encoder, i) {
1453
+ drm_connector_for_each_possible_encoder(connector, encoder) {
14561454 if (radeon_connector->use_digital == true) {
14571455 if (encoder->encoder_type == DRM_MODE_ENCODER_TMDS)
14581456 return encoder;
....@@ -1467,7 +1465,7 @@
14671465
14681466 /* then check use digitial */
14691467 /* pick the first one */
1470
- drm_connector_for_each_possible_encoder(connector, encoder, i)
1468
+ drm_connector_for_each_possible_encoder(connector, encoder)
14711469 return encoder;
14721470
14731471 return NULL;
....@@ -1610,9 +1608,8 @@
16101608 {
16111609 struct drm_encoder *encoder;
16121610 struct radeon_encoder *radeon_encoder;
1613
- int i;
16141611
1615
- drm_connector_for_each_possible_encoder(connector, encoder, i) {
1612
+ drm_connector_for_each_possible_encoder(connector, encoder) {
16161613 radeon_encoder = to_radeon_encoder(encoder);
16171614
16181615 switch (radeon_encoder->encoder_id) {
....@@ -1631,10 +1628,9 @@
16311628 {
16321629 struct drm_encoder *encoder;
16331630 struct radeon_encoder *radeon_encoder;
1634
- int i;
16351631 bool found = false;
16361632
1637
- drm_connector_for_each_possible_encoder(connector, encoder, i) {
1633
+ drm_connector_for_each_possible_encoder(connector, encoder) {
16381634 radeon_encoder = to_radeon_encoder(encoder);
16391635 if (radeon_encoder->caps & ATOM_ENCODER_CAP_RECORD_HBR2)
16401636 found = true;
....@@ -1879,6 +1875,7 @@
18791875 struct radeon_connector_atom_dig *radeon_dig_connector;
18801876 struct drm_encoder *encoder;
18811877 struct radeon_encoder *radeon_encoder;
1878
+ struct i2c_adapter *ddc = NULL;
18821879 uint32_t subpixel_order = SubPixelNone;
18831880 bool shared_ddc = false;
18841881 bool is_dp_bridge = false;
....@@ -1956,17 +1953,21 @@
19561953 radeon_connector->con_priv = radeon_dig_connector;
19571954 if (i2c_bus->valid) {
19581955 radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
1959
- if (radeon_connector->ddc_bus)
1956
+ if (radeon_connector->ddc_bus) {
19601957 has_aux = true;
1961
- else
1958
+ ddc = &radeon_connector->ddc_bus->adapter;
1959
+ } else {
19621960 DRM_ERROR("DP: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
1961
+ }
19631962 }
19641963 switch (connector_type) {
19651964 case DRM_MODE_CONNECTOR_VGA:
19661965 case DRM_MODE_CONNECTOR_DVIA:
19671966 default:
1968
- drm_connector_init(dev, &radeon_connector->base,
1969
- &radeon_dp_connector_funcs, connector_type);
1967
+ drm_connector_init_with_ddc(dev, &radeon_connector->base,
1968
+ &radeon_dp_connector_funcs,
1969
+ connector_type,
1970
+ ddc);
19701971 drm_connector_helper_add(&radeon_connector->base,
19711972 &radeon_dp_connector_helper_funcs);
19721973 connector->interlace_allowed = true;
....@@ -1988,8 +1989,10 @@
19881989 case DRM_MODE_CONNECTOR_HDMIA:
19891990 case DRM_MODE_CONNECTOR_HDMIB:
19901991 case DRM_MODE_CONNECTOR_DisplayPort:
1991
- drm_connector_init(dev, &radeon_connector->base,
1992
- &radeon_dp_connector_funcs, connector_type);
1992
+ drm_connector_init_with_ddc(dev, &radeon_connector->base,
1993
+ &radeon_dp_connector_funcs,
1994
+ connector_type,
1995
+ ddc);
19931996 drm_connector_helper_add(&radeon_connector->base,
19941997 &radeon_dp_connector_helper_funcs);
19951998 drm_object_attach_property(&radeon_connector->base.base,
....@@ -2036,8 +2039,10 @@
20362039 break;
20372040 case DRM_MODE_CONNECTOR_LVDS:
20382041 case DRM_MODE_CONNECTOR_eDP:
2039
- drm_connector_init(dev, &radeon_connector->base,
2040
- &radeon_lvds_bridge_connector_funcs, connector_type);
2042
+ drm_connector_init_with_ddc(dev, &radeon_connector->base,
2043
+ &radeon_lvds_bridge_connector_funcs,
2044
+ connector_type,
2045
+ ddc);
20412046 drm_connector_helper_add(&radeon_connector->base,
20422047 &radeon_dp_connector_helper_funcs);
20432048 drm_object_attach_property(&radeon_connector->base.base,
....@@ -2051,13 +2056,18 @@
20512056 } else {
20522057 switch (connector_type) {
20532058 case DRM_MODE_CONNECTOR_VGA:
2054
- drm_connector_init(dev, &radeon_connector->base, &radeon_vga_connector_funcs, connector_type);
2055
- drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs);
20562059 if (i2c_bus->valid) {
20572060 radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
20582061 if (!radeon_connector->ddc_bus)
20592062 DRM_ERROR("VGA: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
2063
+ else
2064
+ ddc = &radeon_connector->ddc_bus->adapter;
20602065 }
2066
+ drm_connector_init_with_ddc(dev, &radeon_connector->base,
2067
+ &radeon_vga_connector_funcs,
2068
+ connector_type,
2069
+ ddc);
2070
+ drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs);
20612071 radeon_connector->dac_load_detect = true;
20622072 drm_object_attach_property(&radeon_connector->base.base,
20632073 rdev->mode_info.load_detect_property,
....@@ -2076,13 +2086,18 @@
20762086 connector->doublescan_allowed = true;
20772087 break;
20782088 case DRM_MODE_CONNECTOR_DVIA:
2079
- drm_connector_init(dev, &radeon_connector->base, &radeon_vga_connector_funcs, connector_type);
2080
- drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs);
20812089 if (i2c_bus->valid) {
20822090 radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
20832091 if (!radeon_connector->ddc_bus)
20842092 DRM_ERROR("DVIA: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
2093
+ else
2094
+ ddc = &radeon_connector->ddc_bus->adapter;
20852095 }
2096
+ drm_connector_init_with_ddc(dev, &radeon_connector->base,
2097
+ &radeon_vga_connector_funcs,
2098
+ connector_type,
2099
+ ddc);
2100
+ drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs);
20862101 radeon_connector->dac_load_detect = true;
20872102 drm_object_attach_property(&radeon_connector->base.base,
20882103 rdev->mode_info.load_detect_property,
....@@ -2107,13 +2122,18 @@
21072122 goto failed;
21082123 radeon_dig_connector->igp_lane_info = igp_lane_info;
21092124 radeon_connector->con_priv = radeon_dig_connector;
2110
- drm_connector_init(dev, &radeon_connector->base, &radeon_dvi_connector_funcs, connector_type);
2111
- drm_connector_helper_add(&radeon_connector->base, &radeon_dvi_connector_helper_funcs);
21122125 if (i2c_bus->valid) {
21132126 radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
21142127 if (!radeon_connector->ddc_bus)
21152128 DRM_ERROR("DVI: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
2129
+ else
2130
+ ddc = &radeon_connector->ddc_bus->adapter;
21162131 }
2132
+ drm_connector_init_with_ddc(dev, &radeon_connector->base,
2133
+ &radeon_dvi_connector_funcs,
2134
+ connector_type,
2135
+ ddc);
2136
+ drm_connector_helper_add(&radeon_connector->base, &radeon_dvi_connector_helper_funcs);
21172137 subpixel_order = SubPixelHorizontalRGB;
21182138 drm_object_attach_property(&radeon_connector->base.base,
21192139 rdev->mode_info.coherent_mode_property,
....@@ -2164,13 +2184,18 @@
21642184 goto failed;
21652185 radeon_dig_connector->igp_lane_info = igp_lane_info;
21662186 radeon_connector->con_priv = radeon_dig_connector;
2167
- drm_connector_init(dev, &radeon_connector->base, &radeon_dvi_connector_funcs, connector_type);
2168
- drm_connector_helper_add(&radeon_connector->base, &radeon_dvi_connector_helper_funcs);
21692187 if (i2c_bus->valid) {
21702188 radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
21712189 if (!radeon_connector->ddc_bus)
21722190 DRM_ERROR("HDMI: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
2191
+ else
2192
+ ddc = &radeon_connector->ddc_bus->adapter;
21732193 }
2194
+ drm_connector_init_with_ddc(dev, &radeon_connector->base,
2195
+ &radeon_dvi_connector_funcs,
2196
+ connector_type,
2197
+ ddc);
2198
+ drm_connector_helper_add(&radeon_connector->base, &radeon_dvi_connector_helper_funcs);
21742199 drm_object_attach_property(&radeon_connector->base.base,
21752200 rdev->mode_info.coherent_mode_property,
21762201 1);
....@@ -2214,15 +2239,20 @@
22142239 goto failed;
22152240 radeon_dig_connector->igp_lane_info = igp_lane_info;
22162241 radeon_connector->con_priv = radeon_dig_connector;
2217
- drm_connector_init(dev, &radeon_connector->base, &radeon_dp_connector_funcs, connector_type);
2218
- drm_connector_helper_add(&radeon_connector->base, &radeon_dp_connector_helper_funcs);
22192242 if (i2c_bus->valid) {
22202243 radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
2221
- if (radeon_connector->ddc_bus)
2244
+ if (radeon_connector->ddc_bus) {
22222245 has_aux = true;
2223
- else
2246
+ ddc = &radeon_connector->ddc_bus->adapter;
2247
+ } else {
22242248 DRM_ERROR("DP: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
2249
+ }
22252250 }
2251
+ drm_connector_init_with_ddc(dev, &radeon_connector->base,
2252
+ &radeon_dp_connector_funcs,
2253
+ connector_type,
2254
+ ddc);
2255
+ drm_connector_helper_add(&radeon_connector->base, &radeon_dp_connector_helper_funcs);
22262256 subpixel_order = SubPixelHorizontalRGB;
22272257 drm_object_attach_property(&radeon_connector->base.base,
22282258 rdev->mode_info.coherent_mode_property,
....@@ -2264,15 +2294,20 @@
22642294 goto failed;
22652295 radeon_dig_connector->igp_lane_info = igp_lane_info;
22662296 radeon_connector->con_priv = radeon_dig_connector;
2267
- drm_connector_init(dev, &radeon_connector->base, &radeon_edp_connector_funcs, connector_type);
2268
- drm_connector_helper_add(&radeon_connector->base, &radeon_dp_connector_helper_funcs);
22692297 if (i2c_bus->valid) {
22702298 radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
2271
- if (radeon_connector->ddc_bus)
2299
+ if (radeon_connector->ddc_bus) {
22722300 has_aux = true;
2273
- else
2301
+ ddc = &radeon_connector->ddc_bus->adapter;
2302
+ } else {
22742303 DRM_ERROR("DP: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
2304
+ }
22752305 }
2306
+ drm_connector_init_with_ddc(dev, &radeon_connector->base,
2307
+ &radeon_edp_connector_funcs,
2308
+ connector_type,
2309
+ ddc);
2310
+ drm_connector_helper_add(&radeon_connector->base, &radeon_dp_connector_helper_funcs);
22762311 drm_object_attach_property(&radeon_connector->base.base,
22772312 dev->mode_config.scaling_mode_property,
22782313 DRM_MODE_SCALE_FULLSCREEN);
....@@ -2283,7 +2318,10 @@
22832318 case DRM_MODE_CONNECTOR_SVIDEO:
22842319 case DRM_MODE_CONNECTOR_Composite:
22852320 case DRM_MODE_CONNECTOR_9PinDIN:
2286
- drm_connector_init(dev, &radeon_connector->base, &radeon_tv_connector_funcs, connector_type);
2321
+ drm_connector_init_with_ddc(dev, &radeon_connector->base,
2322
+ &radeon_tv_connector_funcs,
2323
+ connector_type,
2324
+ ddc);
22872325 drm_connector_helper_add(&radeon_connector->base, &radeon_tv_connector_helper_funcs);
22882326 radeon_connector->dac_load_detect = true;
22892327 drm_object_attach_property(&radeon_connector->base.base,
....@@ -2303,13 +2341,18 @@
23032341 goto failed;
23042342 radeon_dig_connector->igp_lane_info = igp_lane_info;
23052343 radeon_connector->con_priv = radeon_dig_connector;
2306
- drm_connector_init(dev, &radeon_connector->base, &radeon_lvds_connector_funcs, connector_type);
2307
- drm_connector_helper_add(&radeon_connector->base, &radeon_lvds_connector_helper_funcs);
23082344 if (i2c_bus->valid) {
23092345 radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
23102346 if (!radeon_connector->ddc_bus)
23112347 DRM_ERROR("LVDS: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
2348
+ else
2349
+ ddc = &radeon_connector->ddc_bus->adapter;
23122350 }
2351
+ drm_connector_init_with_ddc(dev, &radeon_connector->base,
2352
+ &radeon_lvds_connector_funcs,
2353
+ connector_type,
2354
+ ddc);
2355
+ drm_connector_helper_add(&radeon_connector->base, &radeon_lvds_connector_helper_funcs);
23132356 drm_object_attach_property(&radeon_connector->base.base,
23142357 dev->mode_config.scaling_mode_property,
23152358 DRM_MODE_SCALE_FULLSCREEN);
....@@ -2353,6 +2396,7 @@
23532396 struct radeon_device *rdev = dev->dev_private;
23542397 struct drm_connector *connector;
23552398 struct radeon_connector *radeon_connector;
2399
+ struct i2c_adapter *ddc = NULL;
23562400 uint32_t subpixel_order = SubPixelNone;
23572401
23582402 if (connector_type == DRM_MODE_CONNECTOR_Unknown)
....@@ -2387,13 +2431,18 @@
23872431
23882432 switch (connector_type) {
23892433 case DRM_MODE_CONNECTOR_VGA:
2390
- drm_connector_init(dev, &radeon_connector->base, &radeon_vga_connector_funcs, connector_type);
2391
- drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs);
23922434 if (i2c_bus->valid) {
23932435 radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
23942436 if (!radeon_connector->ddc_bus)
23952437 DRM_ERROR("VGA: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
2438
+ else
2439
+ ddc = &radeon_connector->ddc_bus->adapter;
23962440 }
2441
+ drm_connector_init_with_ddc(dev, &radeon_connector->base,
2442
+ &radeon_vga_connector_funcs,
2443
+ connector_type,
2444
+ ddc);
2445
+ drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs);
23972446 radeon_connector->dac_load_detect = true;
23982447 drm_object_attach_property(&radeon_connector->base.base,
23992448 rdev->mode_info.load_detect_property,
....@@ -2404,13 +2453,18 @@
24042453 connector->doublescan_allowed = true;
24052454 break;
24062455 case DRM_MODE_CONNECTOR_DVIA:
2407
- drm_connector_init(dev, &radeon_connector->base, &radeon_vga_connector_funcs, connector_type);
2408
- drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs);
24092456 if (i2c_bus->valid) {
24102457 radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
24112458 if (!radeon_connector->ddc_bus)
24122459 DRM_ERROR("DVIA: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
2460
+ else
2461
+ ddc = &radeon_connector->ddc_bus->adapter;
24132462 }
2463
+ drm_connector_init_with_ddc(dev, &radeon_connector->base,
2464
+ &radeon_vga_connector_funcs,
2465
+ connector_type,
2466
+ ddc);
2467
+ drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs);
24142468 radeon_connector->dac_load_detect = true;
24152469 drm_object_attach_property(&radeon_connector->base.base,
24162470 rdev->mode_info.load_detect_property,
....@@ -2422,13 +2476,18 @@
24222476 break;
24232477 case DRM_MODE_CONNECTOR_DVII:
24242478 case DRM_MODE_CONNECTOR_DVID:
2425
- drm_connector_init(dev, &radeon_connector->base, &radeon_dvi_connector_funcs, connector_type);
2426
- drm_connector_helper_add(&radeon_connector->base, &radeon_dvi_connector_helper_funcs);
24272479 if (i2c_bus->valid) {
24282480 radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
24292481 if (!radeon_connector->ddc_bus)
24302482 DRM_ERROR("DVI: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
2483
+ else
2484
+ ddc = &radeon_connector->ddc_bus->adapter;
24312485 }
2486
+ drm_connector_init_with_ddc(dev, &radeon_connector->base,
2487
+ &radeon_dvi_connector_funcs,
2488
+ connector_type,
2489
+ ddc);
2490
+ drm_connector_helper_add(&radeon_connector->base, &radeon_dvi_connector_helper_funcs);
24322491 if (connector_type == DRM_MODE_CONNECTOR_DVII) {
24332492 radeon_connector->dac_load_detect = true;
24342493 drm_object_attach_property(&radeon_connector->base.base,
....@@ -2445,7 +2504,10 @@
24452504 case DRM_MODE_CONNECTOR_SVIDEO:
24462505 case DRM_MODE_CONNECTOR_Composite:
24472506 case DRM_MODE_CONNECTOR_9PinDIN:
2448
- drm_connector_init(dev, &radeon_connector->base, &radeon_tv_connector_funcs, connector_type);
2507
+ drm_connector_init_with_ddc(dev, &radeon_connector->base,
2508
+ &radeon_tv_connector_funcs,
2509
+ connector_type,
2510
+ ddc);
24492511 drm_connector_helper_add(&radeon_connector->base, &radeon_tv_connector_helper_funcs);
24502512 radeon_connector->dac_load_detect = true;
24512513 /* RS400,RC410,RS480 chipset seems to report a lot
....@@ -2467,13 +2529,18 @@
24672529 connector->doublescan_allowed = false;
24682530 break;
24692531 case DRM_MODE_CONNECTOR_LVDS:
2470
- drm_connector_init(dev, &radeon_connector->base, &radeon_lvds_connector_funcs, connector_type);
2471
- drm_connector_helper_add(&radeon_connector->base, &radeon_lvds_connector_helper_funcs);
24722532 if (i2c_bus->valid) {
24732533 radeon_connector->ddc_bus = radeon_i2c_lookup(rdev, i2c_bus);
24742534 if (!radeon_connector->ddc_bus)
24752535 DRM_ERROR("LVDS: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
2536
+ else
2537
+ ddc = &radeon_connector->ddc_bus->adapter;
24762538 }
2539
+ drm_connector_init_with_ddc(dev, &radeon_connector->base,
2540
+ &radeon_lvds_connector_funcs,
2541
+ connector_type,
2542
+ ddc);
2543
+ drm_connector_helper_add(&radeon_connector->base, &radeon_lvds_connector_helper_funcs);
24772544 drm_object_attach_property(&radeon_connector->base.base,
24782545 dev->mode_config.scaling_mode_property,
24792546 DRM_MODE_SCALE_FULLSCREEN);