aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBen Skeggs <bskeggs@redhat.com>2011-11-14 23:31:13 -0500
committerBen Skeggs <bskeggs@redhat.com>2011-12-21 04:01:43 -0500
commitd4c2c99bdc8385a0e51ce4ef2df124d14b6b9c9d (patch)
tree43b5f136b139ce5b310cfbbd8060ade68bc0ca95
parentc37e99050c84c40441e614bd41474e12b6cc2079 (diff)
drm/nouveau/dp: remove broken display depth function, use the improved one
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
-rw-r--r--drivers/gpu/drm/nouveau/nouveau_connector.c34
1 files changed, 12 insertions, 22 deletions
diff --git a/drivers/gpu/drm/nouveau/nouveau_connector.c b/drivers/gpu/drm/nouveau/nouveau_connector.c
index f6c8e1da4228..df99c7f1191a 100644
--- a/drivers/gpu/drm/nouveau/nouveau_connector.c
+++ b/drivers/gpu/drm/nouveau/nouveau_connector.c
@@ -78,23 +78,6 @@ nouveau_encoder_connector_get(struct nouveau_encoder *encoder)
78 return NULL; 78 return NULL;
79} 79}
80 80
81/*TODO: This could use improvement, and learn to handle the fixed
82 * BIOS tables etc. It's fine currently, for its only user.
83 */
84int
85nouveau_connector_bpp(struct drm_connector *connector)
86{
87 struct nouveau_connector *nv_connector = nouveau_connector(connector);
88
89 if (nv_connector->edid && nv_connector->edid->revision >= 4) {
90 u8 bpc = ((nv_connector->edid->input & 0x70) >> 3) + 4;
91 if (bpc > 4)
92 return bpc;
93 }
94
95 return 18;
96}
97
98static void 81static void
99nouveau_connector_destroy(struct drm_connector *connector) 82nouveau_connector_destroy(struct drm_connector *connector)
100{ 83{
@@ -714,6 +697,12 @@ nouveau_connector_get_modes(struct drm_connector *connector)
714 nv_connector->native_mode = drm_mode_duplicate(dev, &mode); 697 nv_connector->native_mode = drm_mode_duplicate(dev, &mode);
715 } 698 }
716 699
700 /* Determine display colour depth for everything except LVDS now,
701 * DP requires this before mode_valid() is called.
702 */
703 if (connector->connector_type != DRM_MODE_CONNECTOR_LVDS)
704 nouveau_connector_detect_depth(connector);
705
717 /* Find the native mode if this is a digital panel, if we didn't 706 /* Find the native mode if this is a digital panel, if we didn't
718 * find any modes through DDC previously add the native mode to 707 * find any modes through DDC previously add the native mode to
719 * the list of modes. 708 * the list of modes.
@@ -729,11 +718,12 @@ nouveau_connector_get_modes(struct drm_connector *connector)
729 ret = 1; 718 ret = 1;
730 } 719 }
731 720
732 /* Attempt to determine display colour depth, this has to happen after 721 /* Determine LVDS colour depth, must happen after determining
733 * we've determined the "native" mode for LVDS, as the VBIOS tables 722 * "native" mode as some VBIOS tables require us to use the
734 * require us to compare against a pixel clock in some cases.. 723 * pixel clock as part of the lookup...
735 */ 724 */
736 nouveau_connector_detect_depth(connector); 725 if (connector->connector_type == DRM_MODE_CONNECTOR_LVDS)
726 nouveau_connector_detect_depth(connector);
737 727
738 if (nv_encoder->dcb->type == OUTPUT_TV) 728 if (nv_encoder->dcb->type == OUTPUT_TV)
739 ret = get_slave_funcs(encoder)->get_modes(encoder, connector); 729 ret = get_slave_funcs(encoder)->get_modes(encoder, connector);
@@ -799,7 +789,7 @@ nouveau_connector_mode_valid(struct drm_connector *connector,
799 case OUTPUT_DP: 789 case OUTPUT_DP:
800 max_clock = nv_encoder->dp.link_nr; 790 max_clock = nv_encoder->dp.link_nr;
801 max_clock *= nv_encoder->dp.link_bw; 791 max_clock *= nv_encoder->dp.link_bw;
802 clock = clock * nouveau_connector_bpp(connector) / 10; 792 clock = clock * (connector->display_info.bpc * 3) / 10;
803 break; 793 break;
804 default: 794 default:
805 BUG_ON(1); 795 BUG_ON(1);