hc
2023-12-11 d2ccde1c8e90d38cee87a1b0309ad2827f3fd30d
kernel/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
....@@ -23,10 +23,11 @@
2323 * Authors: Dave Airlie
2424 * Alex Deucher
2525 */
26
-#include <drm/drmP.h>
26
+
2727 #include <drm/drm_edid.h>
28
-#include <drm/drm_crtc_helper.h>
2928 #include <drm/drm_fb_helper.h>
29
+#include <drm/drm_dp_helper.h>
30
+#include <drm/drm_probe_helper.h>
3031 #include <drm/amdgpu_drm.h>
3132 #include "amdgpu.h"
3233 #include "atom.h"
....@@ -34,13 +35,14 @@
3435 #include "atombios_dp.h"
3536 #include "amdgpu_connectors.h"
3637 #include "amdgpu_i2c.h"
38
+#include "amdgpu_display.h"
3739
3840 #include <linux/pm_runtime.h>
3941
4042 void amdgpu_connector_hotplug(struct drm_connector *connector)
4143 {
4244 struct drm_device *dev = connector->dev;
43
- struct amdgpu_device *adev = dev->dev_private;
45
+ struct amdgpu_device *adev = drm_to_adev(dev);
4446 struct amdgpu_connector *amdgpu_connector = to_amdgpu_connector(connector);
4547
4648 /* bail if the connector does not have hpd pin, e.g.,
....@@ -216,11 +218,10 @@
216218 struct drm_encoder *encoder;
217219 const struct drm_connector_helper_funcs *connector_funcs = connector->helper_private;
218220 bool connected;
219
- int i;
220221
221222 best_encoder = connector_funcs->best_encoder(connector);
222223
223
- drm_connector_for_each_possible_encoder(connector, encoder, i) {
224
+ drm_connector_for_each_possible_encoder(connector, encoder) {
224225 if ((encoder == best_encoder) && (status == connector_status_connected))
225226 connected = true;
226227 else
....@@ -235,9 +236,8 @@
235236 int encoder_type)
236237 {
237238 struct drm_encoder *encoder;
238
- int i;
239239
240
- drm_connector_for_each_possible_encoder(connector, encoder, i) {
240
+ drm_connector_for_each_possible_encoder(connector, encoder) {
241241 if (encoder->encoder_type == encoder_type)
242242 return encoder;
243243 }
....@@ -280,7 +280,7 @@
280280 static void amdgpu_connector_get_edid(struct drm_connector *connector)
281281 {
282282 struct drm_device *dev = connector->dev;
283
- struct amdgpu_device *adev = dev->dev_private;
283
+ struct amdgpu_device *adev = drm_to_adev(dev);
284284 struct amdgpu_connector *amdgpu_connector = to_amdgpu_connector(connector);
285285
286286 if (amdgpu_connector->edid)
....@@ -315,8 +315,10 @@
315315 if (!amdgpu_connector->edid) {
316316 /* some laptops provide a hardcoded edid in rom for LCDs */
317317 if (((connector->connector_type == DRM_MODE_CONNECTOR_LVDS) ||
318
- (connector->connector_type == DRM_MODE_CONNECTOR_eDP)))
318
+ (connector->connector_type == DRM_MODE_CONNECTOR_eDP))) {
319319 amdgpu_connector->edid = amdgpu_connector_get_hardcoded_edid(adev);
320
+ drm_connector_update_edid_property(connector, amdgpu_connector->edid);
321
+ }
320322 }
321323 }
322324
....@@ -346,10 +348,9 @@
346348 amdgpu_connector_best_single_encoder(struct drm_connector *connector)
347349 {
348350 struct drm_encoder *encoder;
349
- int i;
350351
351352 /* pick the first one */
352
- drm_connector_for_each_possible_encoder(connector, encoder, i)
353
+ drm_connector_for_each_possible_encoder(connector, encoder)
353354 return encoder;
354355
355356 return NULL;
....@@ -471,7 +472,7 @@
471472 uint64_t val)
472473 {
473474 struct drm_device *dev = connector->dev;
474
- struct amdgpu_device *adev = dev->dev_private;
475
+ struct amdgpu_device *adev = drm_to_adev(dev);
475476 struct drm_encoder *encoder;
476477 struct amdgpu_encoder *amdgpu_encoder;
477478
....@@ -843,7 +844,7 @@
843844 struct drm_display_mode *mode)
844845 {
845846 struct drm_device *dev = connector->dev;
846
- struct amdgpu_device *adev = dev->dev_private;
847
+ struct amdgpu_device *adev = drm_to_adev(dev);
847848
848849 /* XXX check mode bandwidth */
849850
....@@ -950,7 +951,7 @@
950951 amdgpu_connector_check_hpd_status_unchanged(struct drm_connector *connector)
951952 {
952953 struct drm_device *dev = connector->dev;
953
- struct amdgpu_device *adev = dev->dev_private;
954
+ struct amdgpu_device *adev = drm_to_adev(dev);
954955 struct amdgpu_connector *amdgpu_connector = to_amdgpu_connector(connector);
955956 enum drm_connector_status status;
956957
....@@ -981,7 +982,7 @@
981982 amdgpu_connector_dvi_detect(struct drm_connector *connector, bool force)
982983 {
983984 struct drm_device *dev = connector->dev;
984
- struct amdgpu_device *adev = dev->dev_private;
985
+ struct amdgpu_device *adev = drm_to_adev(dev);
985986 struct amdgpu_connector *amdgpu_connector = to_amdgpu_connector(connector);
986987 const struct drm_encoder_helper_funcs *encoder_funcs;
987988 int r;
....@@ -1034,8 +1035,12 @@
10341035 */
10351036 if (amdgpu_connector->shared_ddc && (ret == connector_status_connected)) {
10361037 struct drm_connector *list_connector;
1038
+ struct drm_connector_list_iter iter;
10371039 struct amdgpu_connector *list_amdgpu_connector;
1038
- list_for_each_entry(list_connector, &dev->mode_config.connector_list, head) {
1040
+
1041
+ drm_connector_list_iter_begin(dev, &iter);
1042
+ drm_for_each_connector_iter(list_connector,
1043
+ &iter) {
10391044 if (connector == list_connector)
10401045 continue;
10411046 list_amdgpu_connector = to_amdgpu_connector(list_connector);
....@@ -1052,6 +1057,7 @@
10521057 }
10531058 }
10541059 }
1060
+ drm_connector_list_iter_end(&iter);
10551061 }
10561062 }
10571063 }
....@@ -1077,9 +1083,8 @@
10771083 /* find analog encoder */
10781084 if (amdgpu_connector->dac_load_detect) {
10791085 struct drm_encoder *encoder;
1080
- int i;
10811086
1082
- drm_connector_for_each_possible_encoder(connector, encoder, i) {
1087
+ drm_connector_for_each_possible_encoder(connector, encoder) {
10831088 if (encoder->encoder_type != DRM_MODE_ENCODER_DAC &&
10841089 encoder->encoder_type != DRM_MODE_ENCODER_TVDAC)
10851090 continue;
....@@ -1129,9 +1134,8 @@
11291134 {
11301135 struct amdgpu_connector *amdgpu_connector = to_amdgpu_connector(connector);
11311136 struct drm_encoder *encoder;
1132
- int i;
11331137
1134
- drm_connector_for_each_possible_encoder(connector, encoder, i) {
1138
+ drm_connector_for_each_possible_encoder(connector, encoder) {
11351139 if (amdgpu_connector->use_digital == true) {
11361140 if (encoder->encoder_type == DRM_MODE_ENCODER_TMDS)
11371141 return encoder;
....@@ -1146,7 +1150,7 @@
11461150
11471151 /* then check use digitial */
11481152 /* pick the first one */
1149
- drm_connector_for_each_possible_encoder(connector, encoder, i)
1153
+ drm_connector_for_each_possible_encoder(connector, encoder)
11501154 return encoder;
11511155
11521156 return NULL;
....@@ -1165,7 +1169,7 @@
11651169 struct drm_display_mode *mode)
11661170 {
11671171 struct drm_device *dev = connector->dev;
1168
- struct amdgpu_device *adev = dev->dev_private;
1172
+ struct amdgpu_device *adev = drm_to_adev(dev);
11691173 struct amdgpu_connector *amdgpu_connector = to_amdgpu_connector(connector);
11701174
11711175 /* XXX check mode bandwidth */
....@@ -1283,9 +1287,8 @@
12831287 {
12841288 struct drm_encoder *encoder;
12851289 struct amdgpu_encoder *amdgpu_encoder;
1286
- int i;
12871290
1288
- drm_connector_for_each_possible_encoder(connector, encoder, i) {
1291
+ drm_connector_for_each_possible_encoder(connector, encoder) {
12891292 amdgpu_encoder = to_amdgpu_encoder(encoder);
12901293
12911294 switch (amdgpu_encoder->encoder_id) {
....@@ -1304,10 +1307,9 @@
13041307 {
13051308 struct drm_encoder *encoder;
13061309 struct amdgpu_encoder *amdgpu_encoder;
1307
- int i;
13081310 bool found = false;
13091311
1310
- drm_connector_for_each_possible_encoder(connector, encoder, i) {
1312
+ drm_connector_for_each_possible_encoder(connector, encoder) {
13111313 amdgpu_encoder = to_amdgpu_encoder(encoder);
13121314 if (amdgpu_encoder->caps & ATOM_ENCODER_CAP_RECORD_HBR2)
13131315 found = true;
....@@ -1319,7 +1321,7 @@
13191321 bool amdgpu_connector_is_dp12_capable(struct drm_connector *connector)
13201322 {
13211323 struct drm_device *dev = connector->dev;
1322
- struct amdgpu_device *adev = dev->dev_private;
1324
+ struct amdgpu_device *adev = drm_to_adev(dev);
13231325
13241326 if ((adev->clock.default_dispclk >= 53900) &&
13251327 amdgpu_connector_encoder_is_hbr2(connector)) {
....@@ -1333,7 +1335,7 @@
13331335 amdgpu_connector_dp_detect(struct drm_connector *connector, bool force)
13341336 {
13351337 struct drm_device *dev = connector->dev;
1336
- struct amdgpu_device *adev = dev->dev_private;
1338
+ struct amdgpu_device *adev = drm_to_adev(dev);
13371339 struct amdgpu_connector *amdgpu_connector = to_amdgpu_connector(connector);
13381340 enum drm_connector_status ret = connector_status_disconnected;
13391341 struct amdgpu_connector_atom_dig *amdgpu_dig_connector = amdgpu_connector->con_priv;
....@@ -1421,6 +1423,12 @@
14211423 pm_runtime_put_autosuspend(connector->dev->dev);
14221424 }
14231425
1426
+ if (connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort ||
1427
+ connector->connector_type == DRM_MODE_CONNECTOR_eDP)
1428
+ drm_dp_set_subconnector_property(&amdgpu_connector->base,
1429
+ ret,
1430
+ amdgpu_dig_connector->dpcd,
1431
+ amdgpu_dig_connector->downstream_ports);
14241432 return ret;
14251433 }
14261434
....@@ -1477,6 +1485,20 @@
14771485 return MODE_OK;
14781486 }
14791487
1488
+static int
1489
+amdgpu_connector_late_register(struct drm_connector *connector)
1490
+{
1491
+ struct amdgpu_connector *amdgpu_connector = to_amdgpu_connector(connector);
1492
+ int r = 0;
1493
+
1494
+ if (amdgpu_connector->ddc_bus->has_aux) {
1495
+ amdgpu_connector->ddc_bus->aux.dev = amdgpu_connector->base.kdev;
1496
+ r = drm_dp_aux_register(&amdgpu_connector->ddc_bus->aux);
1497
+ }
1498
+
1499
+ return r;
1500
+}
1501
+
14801502 static const struct drm_connector_helper_funcs amdgpu_connector_dp_helper_funcs = {
14811503 .get_modes = amdgpu_connector_dp_get_modes,
14821504 .mode_valid = amdgpu_connector_dp_mode_valid,
....@@ -1491,6 +1513,7 @@
14911513 .early_unregister = amdgpu_connector_unregister,
14921514 .destroy = amdgpu_connector_destroy,
14931515 .force = amdgpu_connector_dvi_force,
1516
+ .late_register = amdgpu_connector_late_register,
14941517 };
14951518
14961519 static const struct drm_connector_funcs amdgpu_connector_edp_funcs = {
....@@ -1501,6 +1524,7 @@
15011524 .early_unregister = amdgpu_connector_unregister,
15021525 .destroy = amdgpu_connector_destroy,
15031526 .force = amdgpu_connector_dvi_force,
1527
+ .late_register = amdgpu_connector_late_register,
15041528 };
15051529
15061530 void
....@@ -1513,12 +1537,14 @@
15131537 struct amdgpu_hpd *hpd,
15141538 struct amdgpu_router *router)
15151539 {
1516
- struct drm_device *dev = adev->ddev;
1540
+ struct drm_device *dev = adev_to_drm(adev);
15171541 struct drm_connector *connector;
1542
+ struct drm_connector_list_iter iter;
15181543 struct amdgpu_connector *amdgpu_connector;
15191544 struct amdgpu_connector_atom_dig *amdgpu_dig_connector;
15201545 struct drm_encoder *encoder;
15211546 struct amdgpu_encoder *amdgpu_encoder;
1547
+ struct i2c_adapter *ddc = NULL;
15221548 uint32_t subpixel_order = SubPixelNone;
15231549 bool shared_ddc = false;
15241550 bool is_dp_bridge = false;
....@@ -1528,10 +1554,12 @@
15281554 return;
15291555
15301556 /* see if we already added it */
1531
- list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
1557
+ drm_connector_list_iter_begin(dev, &iter);
1558
+ drm_for_each_connector_iter(connector, &iter) {
15321559 amdgpu_connector = to_amdgpu_connector(connector);
15331560 if (amdgpu_connector->connector_id == connector_id) {
15341561 amdgpu_connector->devices |= supported_device;
1562
+ drm_connector_list_iter_end(&iter);
15351563 return;
15361564 }
15371565 if (amdgpu_connector->ddc_bus && i2c_bus->valid) {
....@@ -1546,6 +1574,7 @@
15461574 }
15471575 }
15481576 }
1577
+ drm_connector_list_iter_end(&iter);
15491578
15501579 /* check if it's a dp bridge */
15511580 list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
....@@ -1588,17 +1617,21 @@
15881617 amdgpu_connector->con_priv = amdgpu_dig_connector;
15891618 if (i2c_bus->valid) {
15901619 amdgpu_connector->ddc_bus = amdgpu_i2c_lookup(adev, i2c_bus);
1591
- if (amdgpu_connector->ddc_bus)
1620
+ if (amdgpu_connector->ddc_bus) {
15921621 has_aux = true;
1593
- else
1622
+ ddc = &amdgpu_connector->ddc_bus->adapter;
1623
+ } else {
15941624 DRM_ERROR("DP: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
1625
+ }
15951626 }
15961627 switch (connector_type) {
15971628 case DRM_MODE_CONNECTOR_VGA:
15981629 case DRM_MODE_CONNECTOR_DVIA:
15991630 default:
1600
- drm_connector_init(dev, &amdgpu_connector->base,
1601
- &amdgpu_connector_dp_funcs, connector_type);
1631
+ drm_connector_init_with_ddc(dev, &amdgpu_connector->base,
1632
+ &amdgpu_connector_dp_funcs,
1633
+ connector_type,
1634
+ ddc);
16021635 drm_connector_helper_add(&amdgpu_connector->base,
16031636 &amdgpu_connector_dp_helper_funcs);
16041637 connector->interlace_allowed = true;
....@@ -1616,8 +1649,10 @@
16161649 case DRM_MODE_CONNECTOR_HDMIA:
16171650 case DRM_MODE_CONNECTOR_HDMIB:
16181651 case DRM_MODE_CONNECTOR_DisplayPort:
1619
- drm_connector_init(dev, &amdgpu_connector->base,
1620
- &amdgpu_connector_dp_funcs, connector_type);
1652
+ drm_connector_init_with_ddc(dev, &amdgpu_connector->base,
1653
+ &amdgpu_connector_dp_funcs,
1654
+ connector_type,
1655
+ ddc);
16211656 drm_connector_helper_add(&amdgpu_connector->base,
16221657 &amdgpu_connector_dp_helper_funcs);
16231658 drm_object_attach_property(&amdgpu_connector->base.base,
....@@ -1638,10 +1673,12 @@
16381673 adev->mode_info.dither_property,
16391674 AMDGPU_FMT_DITHER_DISABLE);
16401675
1641
- if (amdgpu_audio != 0)
1676
+ if (amdgpu_audio != 0) {
16421677 drm_object_attach_property(&amdgpu_connector->base.base,
16431678 adev->mode_info.audio_property,
16441679 AMDGPU_AUDIO_AUTO);
1680
+ amdgpu_connector->audio = AMDGPU_AUDIO_AUTO;
1681
+ }
16451682
16461683 subpixel_order = SubPixelHorizontalRGB;
16471684 connector->interlace_allowed = true;
....@@ -1658,8 +1695,10 @@
16581695 break;
16591696 case DRM_MODE_CONNECTOR_LVDS:
16601697 case DRM_MODE_CONNECTOR_eDP:
1661
- drm_connector_init(dev, &amdgpu_connector->base,
1662
- &amdgpu_connector_edp_funcs, connector_type);
1698
+ drm_connector_init_with_ddc(dev, &amdgpu_connector->base,
1699
+ &amdgpu_connector_edp_funcs,
1700
+ connector_type,
1701
+ ddc);
16631702 drm_connector_helper_add(&amdgpu_connector->base,
16641703 &amdgpu_connector_dp_helper_funcs);
16651704 drm_object_attach_property(&amdgpu_connector->base.base,
....@@ -1673,13 +1712,18 @@
16731712 } else {
16741713 switch (connector_type) {
16751714 case DRM_MODE_CONNECTOR_VGA:
1676
- drm_connector_init(dev, &amdgpu_connector->base, &amdgpu_connector_vga_funcs, connector_type);
1677
- drm_connector_helper_add(&amdgpu_connector->base, &amdgpu_connector_vga_helper_funcs);
16781715 if (i2c_bus->valid) {
16791716 amdgpu_connector->ddc_bus = amdgpu_i2c_lookup(adev, i2c_bus);
16801717 if (!amdgpu_connector->ddc_bus)
16811718 DRM_ERROR("VGA: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
1719
+ else
1720
+ ddc = &amdgpu_connector->ddc_bus->adapter;
16821721 }
1722
+ drm_connector_init_with_ddc(dev, &amdgpu_connector->base,
1723
+ &amdgpu_connector_vga_funcs,
1724
+ connector_type,
1725
+ ddc);
1726
+ drm_connector_helper_add(&amdgpu_connector->base, &amdgpu_connector_vga_helper_funcs);
16831727 amdgpu_connector->dac_load_detect = true;
16841728 drm_object_attach_property(&amdgpu_connector->base.base,
16851729 adev->mode_info.load_detect_property,
....@@ -1693,13 +1737,18 @@
16931737 connector->doublescan_allowed = true;
16941738 break;
16951739 case DRM_MODE_CONNECTOR_DVIA:
1696
- drm_connector_init(dev, &amdgpu_connector->base, &amdgpu_connector_vga_funcs, connector_type);
1697
- drm_connector_helper_add(&amdgpu_connector->base, &amdgpu_connector_vga_helper_funcs);
16981740 if (i2c_bus->valid) {
16991741 amdgpu_connector->ddc_bus = amdgpu_i2c_lookup(adev, i2c_bus);
17001742 if (!amdgpu_connector->ddc_bus)
17011743 DRM_ERROR("DVIA: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
1744
+ else
1745
+ ddc = &amdgpu_connector->ddc_bus->adapter;
17021746 }
1747
+ drm_connector_init_with_ddc(dev, &amdgpu_connector->base,
1748
+ &amdgpu_connector_vga_funcs,
1749
+ connector_type,
1750
+ ddc);
1751
+ drm_connector_helper_add(&amdgpu_connector->base, &amdgpu_connector_vga_helper_funcs);
17031752 amdgpu_connector->dac_load_detect = true;
17041753 drm_object_attach_property(&amdgpu_connector->base.base,
17051754 adev->mode_info.load_detect_property,
....@@ -1718,13 +1767,18 @@
17181767 if (!amdgpu_dig_connector)
17191768 goto failed;
17201769 amdgpu_connector->con_priv = amdgpu_dig_connector;
1721
- drm_connector_init(dev, &amdgpu_connector->base, &amdgpu_connector_dvi_funcs, connector_type);
1722
- drm_connector_helper_add(&amdgpu_connector->base, &amdgpu_connector_dvi_helper_funcs);
17231770 if (i2c_bus->valid) {
17241771 amdgpu_connector->ddc_bus = amdgpu_i2c_lookup(adev, i2c_bus);
17251772 if (!amdgpu_connector->ddc_bus)
17261773 DRM_ERROR("DVI: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
1774
+ else
1775
+ ddc = &amdgpu_connector->ddc_bus->adapter;
17271776 }
1777
+ drm_connector_init_with_ddc(dev, &amdgpu_connector->base,
1778
+ &amdgpu_connector_dvi_funcs,
1779
+ connector_type,
1780
+ ddc);
1781
+ drm_connector_helper_add(&amdgpu_connector->base, &amdgpu_connector_dvi_helper_funcs);
17281782 subpixel_order = SubPixelHorizontalRGB;
17291783 drm_object_attach_property(&amdgpu_connector->base.base,
17301784 adev->mode_info.coherent_mode_property,
....@@ -1746,6 +1800,7 @@
17461800 drm_object_attach_property(&amdgpu_connector->base.base,
17471801 adev->mode_info.audio_property,
17481802 AMDGPU_AUDIO_AUTO);
1803
+ amdgpu_connector->audio = AMDGPU_AUDIO_AUTO;
17491804 }
17501805 drm_object_attach_property(&amdgpu_connector->base.base,
17511806 adev->mode_info.dither_property,
....@@ -1768,13 +1823,18 @@
17681823 if (!amdgpu_dig_connector)
17691824 goto failed;
17701825 amdgpu_connector->con_priv = amdgpu_dig_connector;
1771
- drm_connector_init(dev, &amdgpu_connector->base, &amdgpu_connector_dvi_funcs, connector_type);
1772
- drm_connector_helper_add(&amdgpu_connector->base, &amdgpu_connector_dvi_helper_funcs);
17731826 if (i2c_bus->valid) {
17741827 amdgpu_connector->ddc_bus = amdgpu_i2c_lookup(adev, i2c_bus);
17751828 if (!amdgpu_connector->ddc_bus)
17761829 DRM_ERROR("HDMI: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
1830
+ else
1831
+ ddc = &amdgpu_connector->ddc_bus->adapter;
17771832 }
1833
+ drm_connector_init_with_ddc(dev, &amdgpu_connector->base,
1834
+ &amdgpu_connector_dvi_funcs,
1835
+ connector_type,
1836
+ ddc);
1837
+ drm_connector_helper_add(&amdgpu_connector->base, &amdgpu_connector_dvi_helper_funcs);
17781838 drm_object_attach_property(&amdgpu_connector->base.base,
17791839 adev->mode_info.coherent_mode_property,
17801840 1);
....@@ -1794,6 +1854,7 @@
17941854 drm_object_attach_property(&amdgpu_connector->base.base,
17951855 adev->mode_info.audio_property,
17961856 AMDGPU_AUDIO_AUTO);
1857
+ amdgpu_connector->audio = AMDGPU_AUDIO_AUTO;
17971858 }
17981859 drm_object_attach_property(&amdgpu_connector->base.base,
17991860 adev->mode_info.dither_property,
....@@ -1810,15 +1871,20 @@
18101871 if (!amdgpu_dig_connector)
18111872 goto failed;
18121873 amdgpu_connector->con_priv = amdgpu_dig_connector;
1813
- drm_connector_init(dev, &amdgpu_connector->base, &amdgpu_connector_dp_funcs, connector_type);
1814
- drm_connector_helper_add(&amdgpu_connector->base, &amdgpu_connector_dp_helper_funcs);
18151874 if (i2c_bus->valid) {
18161875 amdgpu_connector->ddc_bus = amdgpu_i2c_lookup(adev, i2c_bus);
1817
- if (amdgpu_connector->ddc_bus)
1876
+ if (amdgpu_connector->ddc_bus) {
18181877 has_aux = true;
1819
- else
1878
+ ddc = &amdgpu_connector->ddc_bus->adapter;
1879
+ } else {
18201880 DRM_ERROR("DP: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
1881
+ }
18211882 }
1883
+ drm_connector_init_with_ddc(dev, &amdgpu_connector->base,
1884
+ &amdgpu_connector_dp_funcs,
1885
+ connector_type,
1886
+ ddc);
1887
+ drm_connector_helper_add(&amdgpu_connector->base, &amdgpu_connector_dp_helper_funcs);
18221888 subpixel_order = SubPixelHorizontalRGB;
18231889 drm_object_attach_property(&amdgpu_connector->base.base,
18241890 adev->mode_info.coherent_mode_property,
....@@ -1839,6 +1905,7 @@
18391905 drm_object_attach_property(&amdgpu_connector->base.base,
18401906 adev->mode_info.audio_property,
18411907 AMDGPU_AUDIO_AUTO);
1908
+ amdgpu_connector->audio = AMDGPU_AUDIO_AUTO;
18421909 }
18431910 drm_object_attach_property(&amdgpu_connector->base.base,
18441911 adev->mode_info.dither_property,
....@@ -1852,15 +1919,20 @@
18521919 if (!amdgpu_dig_connector)
18531920 goto failed;
18541921 amdgpu_connector->con_priv = amdgpu_dig_connector;
1855
- drm_connector_init(dev, &amdgpu_connector->base, &amdgpu_connector_edp_funcs, connector_type);
1856
- drm_connector_helper_add(&amdgpu_connector->base, &amdgpu_connector_dp_helper_funcs);
18571922 if (i2c_bus->valid) {
18581923 amdgpu_connector->ddc_bus = amdgpu_i2c_lookup(adev, i2c_bus);
1859
- if (amdgpu_connector->ddc_bus)
1924
+ if (amdgpu_connector->ddc_bus) {
18601925 has_aux = true;
1861
- else
1926
+ ddc = &amdgpu_connector->ddc_bus->adapter;
1927
+ } else {
18621928 DRM_ERROR("DP: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
1929
+ }
18631930 }
1931
+ drm_connector_init_with_ddc(dev, &amdgpu_connector->base,
1932
+ &amdgpu_connector_edp_funcs,
1933
+ connector_type,
1934
+ ddc);
1935
+ drm_connector_helper_add(&amdgpu_connector->base, &amdgpu_connector_dp_helper_funcs);
18641936 drm_object_attach_property(&amdgpu_connector->base.base,
18651937 dev->mode_config.scaling_mode_property,
18661938 DRM_MODE_SCALE_FULLSCREEN);
....@@ -1873,13 +1945,18 @@
18731945 if (!amdgpu_dig_connector)
18741946 goto failed;
18751947 amdgpu_connector->con_priv = amdgpu_dig_connector;
1876
- drm_connector_init(dev, &amdgpu_connector->base, &amdgpu_connector_lvds_funcs, connector_type);
1877
- drm_connector_helper_add(&amdgpu_connector->base, &amdgpu_connector_lvds_helper_funcs);
18781948 if (i2c_bus->valid) {
18791949 amdgpu_connector->ddc_bus = amdgpu_i2c_lookup(adev, i2c_bus);
18801950 if (!amdgpu_connector->ddc_bus)
18811951 DRM_ERROR("LVDS: Failed to assign ddc bus! Check dmesg for i2c errors.\n");
1952
+ else
1953
+ ddc = &amdgpu_connector->ddc_bus->adapter;
18821954 }
1955
+ drm_connector_init_with_ddc(dev, &amdgpu_connector->base,
1956
+ &amdgpu_connector_lvds_funcs,
1957
+ connector_type,
1958
+ ddc);
1959
+ drm_connector_helper_add(&amdgpu_connector->base, &amdgpu_connector_lvds_helper_funcs);
18831960 drm_object_attach_property(&amdgpu_connector->base.base,
18841961 dev->mode_config.scaling_mode_property,
18851962 DRM_MODE_SCALE_FULLSCREEN);
....@@ -1899,11 +1976,15 @@
18991976 connector->polled = DRM_CONNECTOR_POLL_HPD;
19001977
19011978 connector->display_info.subpixel_order = subpixel_order;
1902
- drm_connector_register(connector);
19031979
19041980 if (has_aux)
19051981 amdgpu_atombios_dp_aux_init(amdgpu_connector);
19061982
1983
+ if (connector_type == DRM_MODE_CONNECTOR_DisplayPort ||
1984
+ connector_type == DRM_MODE_CONNECTOR_eDP) {
1985
+ drm_connector_attach_dp_subconnector_property(&amdgpu_connector->base);
1986
+ }
1987
+
19071988 return;
19081989
19091990 failed: