Rev 1313 | Rev 1403 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1313 | Rev 1321 | ||
---|---|---|---|
Line 38... | Line 38... | ||
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); |
Line -... | Line 42... | ||
- | 42 | ||
- | 43 | void radeon_connector_hotplug(struct drm_connector *connector) |
|
- | 44 | { |
|
- | 45 | struct drm_device *dev = connector->dev; |
|
- | 46 | struct radeon_device *rdev = dev->dev_private; |
|
- | 47 | struct radeon_connector *radeon_connector = to_radeon_connector(connector); |
|
- | 48 | ||
- | 49 | if (radeon_connector->hpd.hpd != RADEON_HPD_NONE) |
|
- | 50 | radeon_hpd_set_polarity(rdev, radeon_connector->hpd.hpd); |
|
- | 51 | ||
- | 52 | if (connector->connector_type == DRM_MODE_CONNECTOR_DisplayPort) { |
|
- | 53 | if (radeon_dp_getsinktype(radeon_connector) == CONNECTOR_OBJECT_ID_DISPLAYPORT) { |
|
- | 54 | if (radeon_dp_needs_link_train(radeon_connector)) { |
|
- | 55 | if (connector->encoder) |
|
- | 56 | dp_link_train(connector->encoder, connector); |
|
- | 57 | } |
|
- | 58 | } |
|
- | 59 | } |
|
- | 60 | ||
- | 61 | } |
|
42 | 62 | ||
43 | static void radeon_property_change_mode(struct drm_encoder *encoder) |
63 | static void radeon_property_change_mode(struct drm_encoder *encoder) |
44 | { |
64 | { |
Line 45... | Line 65... | ||
45 | struct drm_crtc *crtc = encoder->crtc; |
65 | struct drm_crtc *crtc = encoder->crtc; |
Line 443... | Line 463... | ||
443 | /* check for edid as well */ |
463 | /* check for edid as well */ |
444 | if (radeon_connector->edid) |
464 | if (radeon_connector->edid) |
445 | ret = connector_status_connected; |
465 | ret = connector_status_connected; |
446 | else { |
466 | else { |
447 | if (radeon_connector->ddc_bus) { |
467 | if (radeon_connector->ddc_bus) { |
448 | radeon_i2c_do_lock(radeon_connector, 1); |
468 | radeon_i2c_do_lock(radeon_connector->ddc_bus, 1); |
449 | radeon_connector->edid = drm_get_edid(&radeon_connector->base, |
469 | radeon_connector->edid = drm_get_edid(&radeon_connector->base, |
450 | &radeon_connector->ddc_bus->adapter); |
470 | &radeon_connector->ddc_bus->adapter); |
451 | radeon_i2c_do_lock(radeon_connector, 0); |
471 | radeon_i2c_do_lock(radeon_connector->ddc_bus, 0); |
452 | if (radeon_connector->edid) |
472 | if (radeon_connector->edid) |
453 | ret = connector_status_connected; |
473 | ret = connector_status_connected; |
454 | } |
474 | } |
455 | } |
475 | } |
456 | /* check acpi lid status ??? */ |
476 | /* check acpi lid status ??? */ |
Line 551... | Line 571... | ||
551 | 571 | ||
552 | encoder = radeon_best_single_encoder(connector); |
572 | encoder = radeon_best_single_encoder(connector); |
553 | if (!encoder) |
573 | if (!encoder) |
Line 554... | Line 574... | ||
554 | ret = connector_status_disconnected; |
574 | ret = connector_status_disconnected; |
555 | 575 | ||
556 | radeon_i2c_do_lock(radeon_connector, 1); |
576 | radeon_i2c_do_lock(radeon_connector->ddc_bus, 1); |
557 | dret = radeon_ddc_probe(radeon_connector); |
577 | dret = radeon_ddc_probe(radeon_connector); |
558 | radeon_i2c_do_lock(radeon_connector, 0); |
578 | radeon_i2c_do_lock(radeon_connector->ddc_bus, 0); |
559 | if (dret) { |
579 | if (dret) { |
560 | if (radeon_connector->edid) { |
580 | if (radeon_connector->edid) { |
561 | kfree(radeon_connector->edid); |
581 | kfree(radeon_connector->edid); |
562 | radeon_connector->edid = NULL; |
582 | radeon_connector->edid = NULL; |
563 | } |
583 | } |
564 | radeon_i2c_do_lock(radeon_connector, 1); |
584 | radeon_i2c_do_lock(radeon_connector->ddc_bus, 1); |
Line 565... | Line 585... | ||
565 | radeon_connector->edid = drm_get_edid(&radeon_connector->base, &radeon_connector->ddc_bus->adapter); |
585 | radeon_connector->edid = drm_get_edid(&radeon_connector->base, &radeon_connector->ddc_bus->adapter); |
566 | radeon_i2c_do_lock(radeon_connector, 0); |
586 | radeon_i2c_do_lock(radeon_connector->ddc_bus, 0); |
567 | 587 | ||
568 | if (!radeon_connector->edid) { |
588 | if (!radeon_connector->edid) { |
Line 706... | Line 726... | ||
706 | struct drm_mode_object *obj; |
726 | struct drm_mode_object *obj; |
707 | int i; |
727 | int i; |
708 | enum drm_connector_status ret = connector_status_disconnected; |
728 | enum drm_connector_status ret = connector_status_disconnected; |
709 | bool dret; |
729 | bool dret; |
Line 710... | Line 730... | ||
710 | 730 | ||
711 | radeon_i2c_do_lock(radeon_connector, 1); |
731 | radeon_i2c_do_lock(radeon_connector->ddc_bus, 1); |
712 | dret = radeon_ddc_probe(radeon_connector); |
732 | dret = radeon_ddc_probe(radeon_connector); |
713 | radeon_i2c_do_lock(radeon_connector, 0); |
733 | radeon_i2c_do_lock(radeon_connector->ddc_bus, 0); |
714 | if (dret) { |
734 | if (dret) { |
715 | if (radeon_connector->edid) { |
735 | if (radeon_connector->edid) { |
716 | kfree(radeon_connector->edid); |
736 | kfree(radeon_connector->edid); |
717 | radeon_connector->edid = NULL; |
737 | radeon_connector->edid = NULL; |
718 | } |
738 | } |
719 | radeon_i2c_do_lock(radeon_connector, 1); |
739 | radeon_i2c_do_lock(radeon_connector->ddc_bus, 1); |
720 | radeon_connector->edid = drm_get_edid(&radeon_connector->base, &radeon_connector->ddc_bus->adapter); |
740 | radeon_connector->edid = drm_get_edid(&radeon_connector->base, &radeon_connector->ddc_bus->adapter); |
Line 721... | Line 741... | ||
721 | radeon_i2c_do_lock(radeon_connector, 0); |
741 | radeon_i2c_do_lock(radeon_connector->ddc_bus, 0); |
722 | 742 | ||
723 | if (!radeon_connector->edid) { |
743 | if (!radeon_connector->edid) { |
724 | DRM_ERROR("%s: probed a monitor but no|invalid EDID\n", |
744 | DRM_ERROR("%s: probed a monitor but no|invalid EDID\n", |
Line 733... | Line 753... | ||
733 | kfree(radeon_connector->edid); |
753 | kfree(radeon_connector->edid); |
734 | radeon_connector->edid = NULL; |
754 | radeon_connector->edid = NULL; |
735 | ret = connector_status_disconnected; |
755 | ret = connector_status_disconnected; |
736 | } else |
756 | } else |
737 | ret = connector_status_connected; |
757 | ret = connector_status_connected; |
- | 758 | ||
- | 759 | /* multiple connectors on the same encoder with the same ddc line |
|
- | 760 | * This tends to be HDMI and DVI on the same encoder with the |
|
- | 761 | * same ddc line. If the edid says HDMI, consider the HDMI port |
|
- | 762 | * connected and the DVI port disconnected. If the edid doesn't |
|
- | 763 | * say HDMI, vice versa. |
|
- | 764 | */ |
|
- | 765 | if (radeon_connector->shared_ddc && connector_status_connected) { |
|
- | 766 | struct drm_device *dev = connector->dev; |
|
- | 767 | struct drm_connector *list_connector; |
|
- | 768 | struct radeon_connector *list_radeon_connector; |
|
- | 769 | list_for_each_entry(list_connector, &dev->mode_config.connector_list, head) { |
|
- | 770 | if (connector == list_connector) |
|
- | 771 | continue; |
|
- | 772 | list_radeon_connector = to_radeon_connector(list_connector); |
|
- | 773 | if (radeon_connector->devices == list_radeon_connector->devices) { |
|
- | 774 | if (drm_detect_hdmi_monitor(radeon_connector->edid)) { |
|
- | 775 | if (connector->connector_type == DRM_MODE_CONNECTOR_DVID) { |
|
- | 776 | kfree(radeon_connector->edid); |
|
- | 777 | radeon_connector->edid = NULL; |
|
- | 778 | ret = connector_status_disconnected; |
|
- | 779 | } |
|
- | 780 | } else { |
|
- | 781 | if ((connector->connector_type == DRM_MODE_CONNECTOR_HDMIA) || |
|
- | 782 | (connector->connector_type == DRM_MODE_CONNECTOR_HDMIB)) { |
|
- | 783 | kfree(radeon_connector->edid); |
|
- | 784 | radeon_connector->edid = NULL; |
|
- | 785 | ret = connector_status_disconnected; |
|
- | 786 | } |
|
- | 787 | } |
|
- | 788 | } |
|
- | 789 | } |
|
- | 790 | } |
|
738 | } |
791 | } |
739 | } |
792 | } |
Line 740... | Line 793... | ||
740 | 793 | ||
741 | if ((ret == connector_status_connected) && (radeon_connector->use_digital == true)) |
794 | if ((ret == connector_status_connected) && (radeon_connector->use_digital == true)) |
Line 861... | Line 914... | ||
861 | .set_property = radeon_connector_set_property, |
914 | .set_property = radeon_connector_set_property, |
862 | .destroy = radeon_connector_destroy, |
915 | .destroy = radeon_connector_destroy, |
863 | .force = radeon_dvi_force, |
916 | .force = radeon_dvi_force, |
864 | }; |
917 | }; |
Line -... | Line 918... | ||
- | 918 | ||
- | 919 | static void radeon_dp_connector_destroy(struct drm_connector *connector) |
|
- | 920 | { |
|
- | 921 | struct radeon_connector *radeon_connector = to_radeon_connector(connector); |
|
- | 922 | struct radeon_connector_atom_dig *radeon_dig_connector = radeon_connector->con_priv; |
|
- | 923 | ||
- | 924 | if (radeon_connector->ddc_bus) |
|
- | 925 | radeon_i2c_destroy(radeon_connector->ddc_bus); |
|
- | 926 | if (radeon_connector->edid) |
|
- | 927 | kfree(radeon_connector->edid); |
|
- | 928 | if (radeon_dig_connector->dp_i2c_bus) |
|
- | 929 | radeon_i2c_destroy(radeon_dig_connector->dp_i2c_bus); |
|
- | 930 | kfree(radeon_connector->con_priv); |
|
- | 931 | drm_sysfs_connector_remove(connector); |
|
- | 932 | drm_connector_cleanup(connector); |
|
- | 933 | kfree(connector); |
|
- | 934 | } |
|
- | 935 | ||
- | 936 | static int radeon_dp_get_modes(struct drm_connector *connector) |
|
- | 937 | { |
|
- | 938 | struct radeon_connector *radeon_connector = to_radeon_connector(connector); |
|
- | 939 | int ret; |
|
- | 940 | ||
- | 941 | ret = radeon_ddc_get_modes(radeon_connector); |
|
- | 942 | return ret; |
|
- | 943 | } |
|
- | 944 | ||
- | 945 | static enum drm_connector_status radeon_dp_detect(struct drm_connector *connector) |
|
- | 946 | { |
|
- | 947 | struct radeon_connector *radeon_connector = to_radeon_connector(connector); |
|
- | 948 | enum drm_connector_status ret = connector_status_disconnected; |
|
- | 949 | struct radeon_connector_atom_dig *radeon_dig_connector = radeon_connector->con_priv; |
|
- | 950 | u8 sink_type; |
|
- | 951 | ||
- | 952 | if (radeon_connector->edid) { |
|
- | 953 | kfree(radeon_connector->edid); |
|
- | 954 | radeon_connector->edid = NULL; |
|
- | 955 | } |
|
- | 956 | ||
- | 957 | sink_type = radeon_dp_getsinktype(radeon_connector); |
|
- | 958 | if (sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) { |
|
- | 959 | if (radeon_dp_getdpcd(radeon_connector)) { |
|
- | 960 | radeon_dig_connector->dp_sink_type = sink_type; |
|
- | 961 | ret = connector_status_connected; |
|
- | 962 | } |
|
- | 963 | } else { |
|
- | 964 | radeon_i2c_do_lock(radeon_connector->ddc_bus, 1); |
|
- | 965 | if (radeon_ddc_probe(radeon_connector)) { |
|
- | 966 | radeon_dig_connector->dp_sink_type = sink_type; |
|
- | 967 | ret = connector_status_connected; |
|
- | 968 | } |
|
- | 969 | radeon_i2c_do_lock(radeon_connector->ddc_bus, 0); |
|
- | 970 | } |
|
- | 971 | ||
- | 972 | return ret; |
|
- | 973 | } |
|
- | 974 | ||
- | 975 | static int radeon_dp_mode_valid(struct drm_connector *connector, |
|
- | 976 | struct drm_display_mode *mode) |
|
- | 977 | { |
|
- | 978 | struct radeon_connector *radeon_connector = to_radeon_connector(connector); |
|
- | 979 | struct radeon_connector_atom_dig *radeon_dig_connector = radeon_connector->con_priv; |
|
- | 980 | ||
- | 981 | /* XXX check mode bandwidth */ |
|
- | 982 | ||
- | 983 | if (radeon_dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) |
|
- | 984 | return radeon_dp_mode_valid_helper(radeon_connector, mode); |
|
- | 985 | else |
|
- | 986 | return MODE_OK; |
|
- | 987 | } |
|
- | 988 | ||
- | 989 | struct drm_connector_helper_funcs radeon_dp_connector_helper_funcs = { |
|
- | 990 | .get_modes = radeon_dp_get_modes, |
|
- | 991 | .mode_valid = radeon_dp_mode_valid, |
|
- | 992 | .best_encoder = radeon_dvi_encoder, |
|
- | 993 | }; |
|
- | 994 | ||
- | 995 | struct drm_connector_funcs radeon_dp_connector_funcs = { |
|
- | 996 | .dpms = drm_helper_connector_dpms, |
|
- | 997 | .detect = radeon_dp_detect, |
|
- | 998 | .fill_modes = drm_helper_probe_single_connector_modes, |
|
- | 999 | .set_property = radeon_connector_set_property, |
|
- | 1000 | .destroy = radeon_dp_connector_destroy, |
|
- | 1001 | .force = radeon_dvi_force, |
|
- | 1002 | }; |
|
865 | 1003 | ||
866 | void |
1004 | void |
867 | radeon_add_atom_connector(struct drm_device *dev, |
1005 | radeon_add_atom_connector(struct drm_device *dev, |
868 | uint32_t connector_id, |
1006 | uint32_t connector_id, |
869 | uint32_t supported_device, |
1007 | uint32_t supported_device, |
870 | int connector_type, |
1008 | int connector_type, |
871 | struct radeon_i2c_bus_rec *i2c_bus, |
1009 | struct radeon_i2c_bus_rec *i2c_bus, |
872 | bool linkb, |
1010 | bool linkb, |
873 | uint32_t igp_lane_info, |
1011 | uint32_t igp_lane_info, |
- | 1012 | uint16_t connector_object_id, |
|
874 | uint16_t connector_object_id) |
1013 | struct radeon_hpd *hpd) |
875 | { |
1014 | { |
876 | struct radeon_device *rdev = dev->dev_private; |
1015 | struct radeon_device *rdev = dev->dev_private; |
877 | struct drm_connector *connector; |
1016 | struct drm_connector *connector; |
878 | struct radeon_connector *radeon_connector; |
1017 | struct radeon_connector *radeon_connector; |
Line 909... | Line 1048... | ||
909 | 1048 | ||
910 | radeon_connector->connector_id = connector_id; |
1049 | radeon_connector->connector_id = connector_id; |
911 | radeon_connector->devices = supported_device; |
1050 | radeon_connector->devices = supported_device; |
912 | radeon_connector->shared_ddc = shared_ddc; |
1051 | radeon_connector->shared_ddc = shared_ddc; |
- | 1052 | radeon_connector->connector_object_id = connector_object_id; |
|
913 | radeon_connector->connector_object_id = connector_object_id; |
1053 | radeon_connector->hpd = *hpd; |
914 | switch (connector_type) { |
1054 | switch (connector_type) { |
915 | case DRM_MODE_CONNECTOR_VGA: |
1055 | case DRM_MODE_CONNECTOR_VGA: |
916 | drm_connector_init(dev, &radeon_connector->base, &radeon_vga_connector_funcs, connector_type); |
1056 | drm_connector_init(dev, &radeon_connector->base, &radeon_vga_connector_funcs, connector_type); |
917 | ret = drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs); |
1057 | ret = drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs); |
Line 961... | Line 1101... | ||
961 | } |
1101 | } |
962 | subpixel_order = SubPixelHorizontalRGB; |
1102 | subpixel_order = SubPixelHorizontalRGB; |
963 | drm_connector_attach_property(&radeon_connector->base, |
1103 | drm_connector_attach_property(&radeon_connector->base, |
964 | rdev->mode_info.coherent_mode_property, |
1104 | rdev->mode_info.coherent_mode_property, |
965 | 1); |
1105 | 1); |
- | 1106 | if (connector_type == DRM_MODE_CONNECTOR_DVII) { |
|
966 | radeon_connector->dac_load_detect = true; |
1107 | radeon_connector->dac_load_detect = true; |
967 | drm_connector_attach_property(&radeon_connector->base, |
1108 | drm_connector_attach_property(&radeon_connector->base, |
968 | rdev->mode_info.load_detect_property, |
1109 | rdev->mode_info.load_detect_property, |
969 | 1); |
1110 | 1); |
- | 1111 | } |
|
970 | break; |
1112 | break; |
971 | case DRM_MODE_CONNECTOR_HDMIA: |
1113 | case DRM_MODE_CONNECTOR_HDMIA: |
972 | case DRM_MODE_CONNECTOR_HDMIB: |
1114 | case DRM_MODE_CONNECTOR_HDMIB: |
973 | radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL); |
1115 | radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL); |
974 | if (!radeon_dig_connector) |
1116 | if (!radeon_dig_connector) |
Line 995... | Line 1137... | ||
995 | if (!radeon_dig_connector) |
1137 | if (!radeon_dig_connector) |
996 | goto failed; |
1138 | goto failed; |
997 | radeon_dig_connector->linkb = linkb; |
1139 | radeon_dig_connector->linkb = linkb; |
998 | radeon_dig_connector->igp_lane_info = igp_lane_info; |
1140 | radeon_dig_connector->igp_lane_info = igp_lane_info; |
999 | radeon_connector->con_priv = radeon_dig_connector; |
1141 | radeon_connector->con_priv = radeon_dig_connector; |
1000 | drm_connector_init(dev, &radeon_connector->base, &radeon_dvi_connector_funcs, connector_type); |
1142 | drm_connector_init(dev, &radeon_connector->base, &radeon_dp_connector_funcs, connector_type); |
1001 | ret = drm_connector_helper_add(&radeon_connector->base, &radeon_dvi_connector_helper_funcs); |
1143 | ret = drm_connector_helper_add(&radeon_connector->base, &radeon_dp_connector_helper_funcs); |
1002 | if (ret) |
1144 | if (ret) |
1003 | goto failed; |
1145 | goto failed; |
1004 | if (i2c_bus->valid) { |
1146 | if (i2c_bus->valid) { |
- | 1147 | /* add DP i2c bus */ |
|
- | 1148 | radeon_dig_connector->dp_i2c_bus = radeon_i2c_create_dp(dev, i2c_bus, "DP-auxch"); |
|
- | 1149 | if (!radeon_dig_connector->dp_i2c_bus) |
|
- | 1150 | goto failed; |
|
1005 | radeon_connector->ddc_bus = radeon_i2c_create(dev, i2c_bus, "DP"); |
1151 | radeon_connector->ddc_bus = radeon_i2c_create(dev, i2c_bus, "DP"); |
1006 | if (!radeon_connector->ddc_bus) |
1152 | if (!radeon_connector->ddc_bus) |
1007 | goto failed; |
1153 | goto failed; |
1008 | } |
1154 | } |
1009 | subpixel_order = SubPixelHorizontalRGB; |
1155 | subpixel_order = SubPixelHorizontalRGB; |
- | 1156 | drm_connector_attach_property(&radeon_connector->base, |
|
- | 1157 | rdev->mode_info.coherent_mode_property, |
|
- | 1158 | 1); |
|
1010 | break; |
1159 | break; |
1011 | case DRM_MODE_CONNECTOR_SVIDEO: |
1160 | case DRM_MODE_CONNECTOR_SVIDEO: |
1012 | case DRM_MODE_CONNECTOR_Composite: |
1161 | case DRM_MODE_CONNECTOR_Composite: |
1013 | case DRM_MODE_CONNECTOR_9PinDIN: |
1162 | case DRM_MODE_CONNECTOR_9PinDIN: |
1014 | if (radeon_tv == 1) { |
1163 | if (radeon_tv == 1) { |
Line 1018... | Line 1167... | ||
1018 | goto failed; |
1167 | goto failed; |
1019 | radeon_connector->dac_load_detect = true; |
1168 | radeon_connector->dac_load_detect = true; |
1020 | drm_connector_attach_property(&radeon_connector->base, |
1169 | drm_connector_attach_property(&radeon_connector->base, |
1021 | rdev->mode_info.load_detect_property, |
1170 | rdev->mode_info.load_detect_property, |
1022 | 1); |
1171 | 1); |
- | 1172 | drm_connector_attach_property(&radeon_connector->base, |
|
- | 1173 | rdev->mode_info.tv_std_property, |
|
- | 1174 | 1); |
|
1023 | } |
1175 | } |
1024 | break; |
1176 | break; |
1025 | case DRM_MODE_CONNECTOR_LVDS: |
1177 | case DRM_MODE_CONNECTOR_LVDS: |
1026 | radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL); |
1178 | radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL); |
1027 | if (!radeon_dig_connector) |
1179 | if (!radeon_dig_connector) |
Line 1036... | Line 1188... | ||
1036 | if (i2c_bus->valid) { |
1188 | if (i2c_bus->valid) { |
1037 | radeon_connector->ddc_bus = radeon_i2c_create(dev, i2c_bus, "LVDS"); |
1189 | radeon_connector->ddc_bus = radeon_i2c_create(dev, i2c_bus, "LVDS"); |
1038 | if (!radeon_connector->ddc_bus) |
1190 | if (!radeon_connector->ddc_bus) |
1039 | goto failed; |
1191 | goto failed; |
1040 | } |
1192 | } |
1041 | drm_mode_create_scaling_mode_property(dev); |
- | |
1042 | drm_connector_attach_property(&radeon_connector->base, |
1193 | drm_connector_attach_property(&radeon_connector->base, |
1043 | dev->mode_config.scaling_mode_property, |
1194 | dev->mode_config.scaling_mode_property, |
1044 | DRM_MODE_SCALE_FULLSCREEN); |
1195 | DRM_MODE_SCALE_FULLSCREEN); |
1045 | subpixel_order = SubPixelHorizontalRGB; |
1196 | subpixel_order = SubPixelHorizontalRGB; |
1046 | break; |
1197 | break; |
Line 1061... | Line 1212... | ||
1061 | radeon_add_legacy_connector(struct drm_device *dev, |
1212 | radeon_add_legacy_connector(struct drm_device *dev, |
1062 | uint32_t connector_id, |
1213 | uint32_t connector_id, |
1063 | uint32_t supported_device, |
1214 | uint32_t supported_device, |
1064 | int connector_type, |
1215 | int connector_type, |
1065 | struct radeon_i2c_bus_rec *i2c_bus, |
1216 | struct radeon_i2c_bus_rec *i2c_bus, |
1066 | uint16_t connector_object_id) |
1217 | uint16_t connector_object_id, |
- | 1218 | struct radeon_hpd *hpd) |
|
1067 | { |
1219 | { |
1068 | struct radeon_device *rdev = dev->dev_private; |
1220 | struct radeon_device *rdev = dev->dev_private; |
1069 | struct drm_connector *connector; |
1221 | struct drm_connector *connector; |
1070 | struct radeon_connector *radeon_connector; |
1222 | struct radeon_connector *radeon_connector; |
1071 | uint32_t subpixel_order = SubPixelNone; |
1223 | uint32_t subpixel_order = SubPixelNone; |
Line 1091... | Line 1243... | ||
1091 | connector = &radeon_connector->base; |
1243 | connector = &radeon_connector->base; |
Line 1092... | Line 1244... | ||
1092 | 1244 | ||
1093 | radeon_connector->connector_id = connector_id; |
1245 | radeon_connector->connector_id = connector_id; |
1094 | radeon_connector->devices = supported_device; |
1246 | radeon_connector->devices = supported_device; |
- | 1247 | radeon_connector->connector_object_id = connector_object_id; |
|
1095 | radeon_connector->connector_object_id = connector_object_id; |
1248 | radeon_connector->hpd = *hpd; |
1096 | switch (connector_type) { |
1249 | switch (connector_type) { |
1097 | case DRM_MODE_CONNECTOR_VGA: |
1250 | case DRM_MODE_CONNECTOR_VGA: |
1098 | drm_connector_init(dev, &radeon_connector->base, &radeon_vga_connector_funcs, connector_type); |
1251 | drm_connector_init(dev, &radeon_connector->base, &radeon_vga_connector_funcs, connector_type); |
1099 | ret = drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs); |
1252 | ret = drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs); |
Line 1158... | Line 1311... | ||
1158 | if (rdev->family == CHIP_RS400 || rdev->family == CHIP_RS480) |
1311 | if (rdev->family == CHIP_RS400 || rdev->family == CHIP_RS480) |
1159 | radeon_connector->dac_load_detect = false; |
1312 | radeon_connector->dac_load_detect = false; |
1160 | drm_connector_attach_property(&radeon_connector->base, |
1313 | drm_connector_attach_property(&radeon_connector->base, |
1161 | rdev->mode_info.load_detect_property, |
1314 | rdev->mode_info.load_detect_property, |
1162 | 1); |
1315 | 1); |
- | 1316 | drm_connector_attach_property(&radeon_connector->base, |
|
- | 1317 | rdev->mode_info.tv_std_property, |
|
- | 1318 | 1); |
|
1163 | } |
1319 | } |
1164 | break; |
1320 | break; |
1165 | case DRM_MODE_CONNECTOR_LVDS: |
1321 | case DRM_MODE_CONNECTOR_LVDS: |
1166 | drm_connector_init(dev, &radeon_connector->base, &radeon_lvds_connector_funcs, connector_type); |
1322 | drm_connector_init(dev, &radeon_connector->base, &radeon_lvds_connector_funcs, connector_type); |
1167 | ret = drm_connector_helper_add(&radeon_connector->base, &radeon_lvds_connector_helper_funcs); |
1323 | ret = drm_connector_helper_add(&radeon_connector->base, &radeon_lvds_connector_helper_funcs); |