summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/nouveau
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/nouveau')
-rw-r--r--drivers/gpu/drm/nouveau/nouveau_connector.c26
1 files changed, 22 insertions, 4 deletions
diff --git a/drivers/gpu/drm/nouveau/nouveau_connector.c b/drivers/gpu/drm/nouveau/nouveau_connector.c
index a8c44c9eedf6..79190206b398 100644
--- a/drivers/gpu/drm/nouveau/nouveau_connector.c
+++ b/drivers/gpu/drm/nouveau/nouveau_connector.c
@@ -737,7 +737,7 @@ nouveau_connector_create(struct drm_device *dev,
struct nouveau_connector *nv_connector = NULL;
struct drm_connector *connector;
struct drm_encoder *encoder;
- int type;
+ int type, ret = 0;
NV_DEBUG_KMS(dev, "\n");
@@ -813,9 +813,21 @@ nouveau_connector_create(struct drm_device *dev,
if (!connector->encoder_ids[0]) {
NV_WARN(dev, " no encoders, ignoring\n");
- drm_connector_cleanup(connector);
- kfree(connector);
- return 0;
+ goto fail;
+ }
+
+ /* Check if we need dithering enabled */
+ if (dcb->type == DCB_CONNECTOR_LVDS) {
+ bool dummy, is_24bit = false;
+
+ ret = nouveau_bios_parse_lvds_table(dev, 0, &dummy, &is_24bit);
+ if (ret) {
+ NV_ERROR(dev, "Error parsing LVDS table, disabling "
+ "LVDS\n");
+ goto fail;
+ }
+
+ nv_connector->use_dithering = !is_24bit;
}
/* Init DVI-I specific properties */
@@ -865,4 +877,10 @@ nouveau_connector_create(struct drm_device *dev,
drm_sysfs_connector_add(connector);
return 0;
+
+fail:
+ drm_connector_cleanup(connector);
+ kfree(connector);
+ return ret;
+
}