diff options
Diffstat (limited to 'drivers/gpu/drm/i915/intel_lvds.c')
-rw-r--r-- | drivers/gpu/drm/i915/intel_lvds.c | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c index 5abda1d2c018..fbcc7dff0d63 100644 --- a/drivers/gpu/drm/i915/intel_lvds.c +++ b/drivers/gpu/drm/i915/intel_lvds.c | |||
@@ -813,12 +813,28 @@ static int intel_dual_link_lvds_callback(const struct dmi_system_id *id) | |||
813 | static const struct dmi_system_id intel_dual_link_lvds[] = { | 813 | static const struct dmi_system_id intel_dual_link_lvds[] = { |
814 | { | 814 | { |
815 | .callback = intel_dual_link_lvds_callback, | 815 | .callback = intel_dual_link_lvds_callback, |
816 | .ident = "Apple MacBook Pro (Core i5/i7 Series)", | 816 | .ident = "Apple MacBook Pro 15\" (2010)", |
817 | .matches = { | ||
818 | DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."), | ||
819 | DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro6,2"), | ||
820 | }, | ||
821 | }, | ||
822 | { | ||
823 | .callback = intel_dual_link_lvds_callback, | ||
824 | .ident = "Apple MacBook Pro 15\" (2011)", | ||
817 | .matches = { | 825 | .matches = { |
818 | DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."), | 826 | DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."), |
819 | DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro8,2"), | 827 | DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro8,2"), |
820 | }, | 828 | }, |
821 | }, | 829 | }, |
830 | { | ||
831 | .callback = intel_dual_link_lvds_callback, | ||
832 | .ident = "Apple MacBook Pro 15\" (2012)", | ||
833 | .matches = { | ||
834 | DMI_MATCH(DMI_SYS_VENDOR, "Apple Inc."), | ||
835 | DMI_MATCH(DMI_PRODUCT_NAME, "MacBookPro9,1"), | ||
836 | }, | ||
837 | }, | ||
822 | { } /* terminating entry */ | 838 | { } /* terminating entry */ |
823 | }; | 839 | }; |
824 | 840 | ||
@@ -848,6 +864,11 @@ static bool compute_is_dual_link_lvds(struct intel_lvds_encoder *lvds_encoder) | |||
848 | if (i915.lvds_channel_mode > 0) | 864 | if (i915.lvds_channel_mode > 0) |
849 | return i915.lvds_channel_mode == 2; | 865 | return i915.lvds_channel_mode == 2; |
850 | 866 | ||
867 | /* single channel LVDS is limited to 112 MHz */ | ||
868 | if (lvds_encoder->attached_connector->base.panel.fixed_mode->clock | ||
869 | > 112999) | ||
870 | return true; | ||
871 | |||
851 | if (dmi_check_system(intel_dual_link_lvds)) | 872 | if (dmi_check_system(intel_dual_link_lvds)) |
852 | return true; | 873 | return true; |
853 | 874 | ||
@@ -1111,6 +1132,8 @@ void intel_lvds_init(struct drm_device *dev) | |||
1111 | out: | 1132 | out: |
1112 | mutex_unlock(&dev->mode_config.mutex); | 1133 | mutex_unlock(&dev->mode_config.mutex); |
1113 | 1134 | ||
1135 | intel_panel_init(&intel_connector->panel, fixed_mode, downclock_mode); | ||
1136 | |||
1114 | lvds_encoder->is_dual_link = compute_is_dual_link_lvds(lvds_encoder); | 1137 | lvds_encoder->is_dual_link = compute_is_dual_link_lvds(lvds_encoder); |
1115 | DRM_DEBUG_KMS("detected %s-link lvds configuration\n", | 1138 | DRM_DEBUG_KMS("detected %s-link lvds configuration\n", |
1116 | lvds_encoder->is_dual_link ? "dual" : "single"); | 1139 | lvds_encoder->is_dual_link ? "dual" : "single"); |
@@ -1125,7 +1148,6 @@ out: | |||
1125 | } | 1148 | } |
1126 | drm_connector_register(connector); | 1149 | drm_connector_register(connector); |
1127 | 1150 | ||
1128 | intel_panel_init(&intel_connector->panel, fixed_mode, downclock_mode); | ||
1129 | intel_panel_setup_backlight(connector, INVALID_PIPE); | 1151 | intel_panel_setup_backlight(connector, INVALID_PIPE); |
1130 | 1152 | ||
1131 | return; | 1153 | return; |