drm/connector: Allow max possible encoders to attach to a connector
[sfrench/cifs-2.6.git] / drivers / gpu / drm / nouveau / nouveau_connector.c
index 4116ee62adafea9762cc99121adad315c02b726f..54317bc31e3135564dd3eb5be6bd81c0219eff93 100644 (file)
@@ -252,7 +252,7 @@ nouveau_conn_reset(struct drm_connector *connector)
                return;
 
        if (connector->state)
-               __drm_atomic_helper_connector_destroy_state(connector->state);
+               nouveau_conn_atomic_destroy_state(connector, connector->state);
        __drm_atomic_helper_connector_reset(connector, &asyc->state);
        asyc->dither.mode = DITHERING_MODE_AUTO;
        asyc->dither.depth = DITHERING_DEPTH_AUTO;
@@ -366,9 +366,8 @@ find_encoder(struct drm_connector *connector, int type)
 {
        struct nouveau_encoder *nv_encoder;
        struct drm_encoder *enc;
-       int i;
 
-       drm_connector_for_each_possible_encoder(connector, enc, i) {
+       drm_connector_for_each_possible_encoder(connector, enc) {
                nv_encoder = nouveau_encoder(enc);
 
                if (type == DCB_OUTPUT_ANY ||
@@ -415,10 +414,10 @@ nouveau_connector_ddc_detect(struct drm_connector *connector)
        struct drm_device *dev = connector->dev;
        struct nouveau_encoder *nv_encoder = NULL, *found = NULL;
        struct drm_encoder *encoder;
-       int i, ret;
+       int ret;
        bool switcheroo_ddc = false;
 
-       drm_connector_for_each_possible_encoder(connector, encoder, i) {
+       drm_connector_for_each_possible_encoder(connector, encoder) {
                nv_encoder = nouveau_encoder(encoder);
 
                switch (nv_encoder->dcb->type) {
@@ -978,11 +977,13 @@ get_tmds_link_bandwidth(struct drm_connector *connector)
        struct nouveau_drm *drm = nouveau_drm(connector->dev);
        struct dcb_output *dcb = nv_connector->detected_encoder->dcb;
        struct drm_display_info *info = NULL;
-       const unsigned duallink_scale =
+       unsigned duallink_scale =
                nouveau_duallink && nv_encoder->dcb->duallink_possible ? 2 : 1;
 
-       if (drm_detect_hdmi_monitor(nv_connector->edid))
+       if (drm_detect_hdmi_monitor(nv_connector->edid)) {
                info = &nv_connector->base.display_info;
+               duallink_scale = 1;
+       }
 
        if (info) {
                if (nouveau_hdmimhz > 0)
@@ -1003,6 +1004,7 @@ get_tmds_link_bandwidth(struct drm_connector *connector)
                if (drm->client.device.info.family >= NV_DEVICE_INFO_V0_FERMI)
                        return 225000;
        }
+
        if (dcb->location != DCB_LOC_ON_CHIP ||
            drm->client.device.info.chipset >= 0x46)
                return 165000 * duallink_scale;
@@ -1346,7 +1348,7 @@ nouveau_connector_create(struct drm_device *dev,
                break;
        case DRM_MODE_CONNECTOR_DisplayPort:
        case DRM_MODE_CONNECTOR_eDP:
-               nv_connector->aux.dev = dev->dev;
+               nv_connector->aux.dev = connector->kdev;
                nv_connector->aux.transfer = nouveau_connector_aux_xfer;
                snprintf(aux_name, sizeof(aux_name), "sor-%04x-%04x",
                         dcbe->hasht, dcbe->hashm);
@@ -1413,8 +1415,7 @@ nouveau_connector_create(struct drm_device *dev,
        switch (type) {
        case DRM_MODE_CONNECTOR_DisplayPort:
        case DRM_MODE_CONNECTOR_eDP:
-               drm_dp_cec_register_connector(&nv_connector->aux,
-                                             connector->name, dev->dev);
+               drm_dp_cec_register_connector(&nv_connector->aux, connector);
                break;
        }