Loading drivers/gpu/drm/nouveau/nouveau_connector.c +41 −32 Original line number Diff line number Diff line Loading @@ -218,7 +218,7 @@ nouveau_connector_set_encoder(struct drm_connector *connector, connector->interlace_allowed = true; } if (connector->connector_type == DRM_MODE_CONNECTOR_DVII) { if (nv_connector->dcb->type == DCB_CONNECTOR_DVI_I) { drm_connector_property_set_value(connector, dev->mode_config.dvi_i_subconnector_property, nv_encoder->dcb->type == OUTPUT_TMDS ? Loading @@ -236,7 +236,7 @@ nouveau_connector_detect(struct drm_connector *connector) struct nouveau_i2c_chan *i2c; int type, flags; if (connector->connector_type == DRM_MODE_CONNECTOR_LVDS) if (nv_connector->dcb->type == DCB_CONNECTOR_LVDS) nv_encoder = find_encoder_by_type(connector, OUTPUT_LVDS); if (nv_encoder && nv_connector->native_mode) { #ifdef CONFIG_ACPI Loading Loading @@ -279,7 +279,7 @@ nouveau_connector_detect(struct drm_connector *connector) * same i2c channel so the value returned from ddc_detect * isn't necessarily correct. */ if (connector->connector_type == DRM_MODE_CONNECTOR_DVII) { if (nv_connector->dcb->type == DCB_CONNECTOR_DVI_I) { if (nv_connector->edid->input & DRM_EDID_INPUT_DIGITAL) type = OUTPUT_TMDS; else Loading Loading @@ -321,11 +321,11 @@ nouveau_connector_detect(struct drm_connector *connector) static void nouveau_connector_force(struct drm_connector *connector) { struct drm_device *dev = connector->dev; struct nouveau_connector *nv_connector = nouveau_connector(connector); struct nouveau_encoder *nv_encoder; int type; if (connector->connector_type == DRM_MODE_CONNECTOR_DVII) { if (nv_connector->dcb->type == DCB_CONNECTOR_DVI_I) { if (connector->force == DRM_FORCE_ON_DIGITAL) type = OUTPUT_TMDS; else Loading @@ -335,7 +335,7 @@ nouveau_connector_force(struct drm_connector *connector) nv_encoder = find_encoder_by_type(connector, type); if (!nv_encoder) { NV_ERROR(dev, "can't find encoder to force %s on!\n", NV_ERROR(connector->dev, "can't find encoder to force %s on!\n", drm_get_connector_name(connector)); connector->status = connector_status_disconnected; return; Loading Loading @@ -369,7 +369,7 @@ nouveau_connector_set_property(struct drm_connector *connector, } /* LVDS always needs gpu scaling */ if (connector->connector_type == DRM_MODE_CONNECTOR_LVDS && if (nv_connector->dcb->type == DCB_CONNECTOR_LVDS && value == DRM_MODE_SCALE_NONE) return -EINVAL; Loading Loading @@ -535,7 +535,7 @@ nouveau_connector_get_modes(struct drm_connector *connector) /* If we're not LVDS, destroy the previous native mode, the attached * monitor could have changed. */ if (connector->connector_type != DRM_MODE_CONNECTOR_LVDS && if (nv_connector->dcb->type != DCB_CONNECTOR_LVDS && nv_connector->native_mode) { drm_mode_destroy(dev, nv_connector->native_mode); nv_connector->native_mode = NULL; Loading Loading @@ -563,7 +563,7 @@ nouveau_connector_get_modes(struct drm_connector *connector) ret = get_slave_funcs(nv_encoder)-> get_modes(to_drm_encoder(nv_encoder), connector); if (connector->connector_type == DRM_MODE_CONNECTOR_LVDS) if (nv_encoder->dcb->type == OUTPUT_LVDS) ret += nouveau_connector_scaler_modes_add(connector); return ret; Loading Loading @@ -771,20 +771,26 @@ nouveau_connector_create(struct drm_device *dev, type = DRM_MODE_CONNECTOR_DVII; break; case DCB_CONNECTOR_DVI_D: case DCB_CONNECTOR_HDMI_0: case DCB_CONNECTOR_HDMI_1: NV_INFO(dev, "Detected a DVI-D connector\n"); type = DRM_MODE_CONNECTOR_DVID; break; case DCB_CONNECTOR_HDMI_0: case DCB_CONNECTOR_HDMI_1: NV_INFO(dev, "Detected a HDMI connector\n"); type = DRM_MODE_CONNECTOR_HDMIA; break; case DCB_CONNECTOR_LVDS: NV_INFO(dev, "Detected a LVDS connector\n"); type = DRM_MODE_CONNECTOR_LVDS; break; case DCB_CONNECTOR_DP: case DCB_CONNECTOR_eDP: NV_INFO(dev, "Detected a DisplayPort connector\n"); type = DRM_MODE_CONNECTOR_DisplayPort; break; case DCB_CONNECTOR_eDP: NV_INFO(dev, "Detected an eDP connector\n"); type = DRM_MODE_CONNECTOR_eDP; break; default: NV_ERROR(dev, "unknown connector type: 0x%02x!!\n", dcb->type); return -EINVAL; Loading Loading @@ -824,41 +830,44 @@ nouveau_connector_create(struct drm_device *dev, } /* Init DVI-I specific properties */ if (type == DRM_MODE_CONNECTOR_DVII) { if (dcb->type == DCB_CONNECTOR_DVI_I) { drm_mode_create_dvi_i_properties(dev); drm_connector_attach_property(connector, dev->mode_config.dvi_i_subconnector_property, 0); drm_connector_attach_property(connector, dev->mode_config.dvi_i_select_subconnector_property, 0); } if (type != DRM_MODE_CONNECTOR_LVDS) if (dcb->type != DCB_CONNECTOR_LVDS) nv_connector->use_dithering = false; if (type == DRM_MODE_CONNECTOR_DVID || type == DRM_MODE_CONNECTOR_DVII || type == DRM_MODE_CONNECTOR_LVDS || type == DRM_MODE_CONNECTOR_DisplayPort) { nv_connector->scaling_mode = DRM_MODE_SCALE_FULLSCREEN; drm_connector_attach_property(connector, dev->mode_config.scaling_mode_property, switch (dcb->type) { case DCB_CONNECTOR_VGA: if (dev_priv->card_type >= NV_50) { drm_connector_attach_property(connector, dev->mode_config.scaling_mode_property, nv_connector->scaling_mode); drm_connector_attach_property(connector, dev->mode_config.dithering_mode_property, nv_connector->use_dithering ? DRM_MODE_DITHERING_ON : DRM_MODE_DITHERING_OFF); } else { } /* fall-through */ case DCB_CONNECTOR_TV_0: case DCB_CONNECTOR_TV_1: case DCB_CONNECTOR_TV_3: nv_connector->scaling_mode = DRM_MODE_SCALE_NONE; break; default: nv_connector->scaling_mode = DRM_MODE_SCALE_FULLSCREEN; if (type == DRM_MODE_CONNECTOR_VGA && dev_priv->card_type >= NV_50) { drm_connector_attach_property(connector, dev->mode_config.scaling_mode_property, nv_connector->scaling_mode); } drm_connector_attach_property(connector, dev->mode_config.dithering_mode_property, nv_connector->use_dithering ? DRM_MODE_DITHERING_ON : DRM_MODE_DITHERING_OFF); break; } drm_sysfs_connector_add(connector); if (connector->connector_type == DRM_MODE_CONNECTOR_LVDS) { if (dcb->type == DCB_CONNECTOR_LVDS) { ret = nouveau_connector_create_lvds(dev, connector); if (ret) { connector->funcs->destroy(connector); Loading Loading
drivers/gpu/drm/nouveau/nouveau_connector.c +41 −32 Original line number Diff line number Diff line Loading @@ -218,7 +218,7 @@ nouveau_connector_set_encoder(struct drm_connector *connector, connector->interlace_allowed = true; } if (connector->connector_type == DRM_MODE_CONNECTOR_DVII) { if (nv_connector->dcb->type == DCB_CONNECTOR_DVI_I) { drm_connector_property_set_value(connector, dev->mode_config.dvi_i_subconnector_property, nv_encoder->dcb->type == OUTPUT_TMDS ? Loading @@ -236,7 +236,7 @@ nouveau_connector_detect(struct drm_connector *connector) struct nouveau_i2c_chan *i2c; int type, flags; if (connector->connector_type == DRM_MODE_CONNECTOR_LVDS) if (nv_connector->dcb->type == DCB_CONNECTOR_LVDS) nv_encoder = find_encoder_by_type(connector, OUTPUT_LVDS); if (nv_encoder && nv_connector->native_mode) { #ifdef CONFIG_ACPI Loading Loading @@ -279,7 +279,7 @@ nouveau_connector_detect(struct drm_connector *connector) * same i2c channel so the value returned from ddc_detect * isn't necessarily correct. */ if (connector->connector_type == DRM_MODE_CONNECTOR_DVII) { if (nv_connector->dcb->type == DCB_CONNECTOR_DVI_I) { if (nv_connector->edid->input & DRM_EDID_INPUT_DIGITAL) type = OUTPUT_TMDS; else Loading Loading @@ -321,11 +321,11 @@ nouveau_connector_detect(struct drm_connector *connector) static void nouveau_connector_force(struct drm_connector *connector) { struct drm_device *dev = connector->dev; struct nouveau_connector *nv_connector = nouveau_connector(connector); struct nouveau_encoder *nv_encoder; int type; if (connector->connector_type == DRM_MODE_CONNECTOR_DVII) { if (nv_connector->dcb->type == DCB_CONNECTOR_DVI_I) { if (connector->force == DRM_FORCE_ON_DIGITAL) type = OUTPUT_TMDS; else Loading @@ -335,7 +335,7 @@ nouveau_connector_force(struct drm_connector *connector) nv_encoder = find_encoder_by_type(connector, type); if (!nv_encoder) { NV_ERROR(dev, "can't find encoder to force %s on!\n", NV_ERROR(connector->dev, "can't find encoder to force %s on!\n", drm_get_connector_name(connector)); connector->status = connector_status_disconnected; return; Loading Loading @@ -369,7 +369,7 @@ nouveau_connector_set_property(struct drm_connector *connector, } /* LVDS always needs gpu scaling */ if (connector->connector_type == DRM_MODE_CONNECTOR_LVDS && if (nv_connector->dcb->type == DCB_CONNECTOR_LVDS && value == DRM_MODE_SCALE_NONE) return -EINVAL; Loading Loading @@ -535,7 +535,7 @@ nouveau_connector_get_modes(struct drm_connector *connector) /* If we're not LVDS, destroy the previous native mode, the attached * monitor could have changed. */ if (connector->connector_type != DRM_MODE_CONNECTOR_LVDS && if (nv_connector->dcb->type != DCB_CONNECTOR_LVDS && nv_connector->native_mode) { drm_mode_destroy(dev, nv_connector->native_mode); nv_connector->native_mode = NULL; Loading Loading @@ -563,7 +563,7 @@ nouveau_connector_get_modes(struct drm_connector *connector) ret = get_slave_funcs(nv_encoder)-> get_modes(to_drm_encoder(nv_encoder), connector); if (connector->connector_type == DRM_MODE_CONNECTOR_LVDS) if (nv_encoder->dcb->type == OUTPUT_LVDS) ret += nouveau_connector_scaler_modes_add(connector); return ret; Loading Loading @@ -771,20 +771,26 @@ nouveau_connector_create(struct drm_device *dev, type = DRM_MODE_CONNECTOR_DVII; break; case DCB_CONNECTOR_DVI_D: case DCB_CONNECTOR_HDMI_0: case DCB_CONNECTOR_HDMI_1: NV_INFO(dev, "Detected a DVI-D connector\n"); type = DRM_MODE_CONNECTOR_DVID; break; case DCB_CONNECTOR_HDMI_0: case DCB_CONNECTOR_HDMI_1: NV_INFO(dev, "Detected a HDMI connector\n"); type = DRM_MODE_CONNECTOR_HDMIA; break; case DCB_CONNECTOR_LVDS: NV_INFO(dev, "Detected a LVDS connector\n"); type = DRM_MODE_CONNECTOR_LVDS; break; case DCB_CONNECTOR_DP: case DCB_CONNECTOR_eDP: NV_INFO(dev, "Detected a DisplayPort connector\n"); type = DRM_MODE_CONNECTOR_DisplayPort; break; case DCB_CONNECTOR_eDP: NV_INFO(dev, "Detected an eDP connector\n"); type = DRM_MODE_CONNECTOR_eDP; break; default: NV_ERROR(dev, "unknown connector type: 0x%02x!!\n", dcb->type); return -EINVAL; Loading Loading @@ -824,41 +830,44 @@ nouveau_connector_create(struct drm_device *dev, } /* Init DVI-I specific properties */ if (type == DRM_MODE_CONNECTOR_DVII) { if (dcb->type == DCB_CONNECTOR_DVI_I) { drm_mode_create_dvi_i_properties(dev); drm_connector_attach_property(connector, dev->mode_config.dvi_i_subconnector_property, 0); drm_connector_attach_property(connector, dev->mode_config.dvi_i_select_subconnector_property, 0); } if (type != DRM_MODE_CONNECTOR_LVDS) if (dcb->type != DCB_CONNECTOR_LVDS) nv_connector->use_dithering = false; if (type == DRM_MODE_CONNECTOR_DVID || type == DRM_MODE_CONNECTOR_DVII || type == DRM_MODE_CONNECTOR_LVDS || type == DRM_MODE_CONNECTOR_DisplayPort) { nv_connector->scaling_mode = DRM_MODE_SCALE_FULLSCREEN; drm_connector_attach_property(connector, dev->mode_config.scaling_mode_property, switch (dcb->type) { case DCB_CONNECTOR_VGA: if (dev_priv->card_type >= NV_50) { drm_connector_attach_property(connector, dev->mode_config.scaling_mode_property, nv_connector->scaling_mode); drm_connector_attach_property(connector, dev->mode_config.dithering_mode_property, nv_connector->use_dithering ? DRM_MODE_DITHERING_ON : DRM_MODE_DITHERING_OFF); } else { } /* fall-through */ case DCB_CONNECTOR_TV_0: case DCB_CONNECTOR_TV_1: case DCB_CONNECTOR_TV_3: nv_connector->scaling_mode = DRM_MODE_SCALE_NONE; break; default: nv_connector->scaling_mode = DRM_MODE_SCALE_FULLSCREEN; if (type == DRM_MODE_CONNECTOR_VGA && dev_priv->card_type >= NV_50) { drm_connector_attach_property(connector, dev->mode_config.scaling_mode_property, nv_connector->scaling_mode); } drm_connector_attach_property(connector, dev->mode_config.dithering_mode_property, nv_connector->use_dithering ? DRM_MODE_DITHERING_ON : DRM_MODE_DITHERING_OFF); break; } drm_sysfs_connector_add(connector); if (connector->connector_type == DRM_MODE_CONNECTOR_LVDS) { if (dcb->type == DCB_CONNECTOR_LVDS) { ret = nouveau_connector_create_lvds(dev, connector); if (ret) { connector->funcs->destroy(connector); Loading