diff options
Diffstat (limited to 'drivers/gpu/drm/nouveau/nouveau_connector.c')
| -rw-r--r-- | drivers/gpu/drm/nouveau/nouveau_connector.c | 54 |
1 files changed, 15 insertions, 39 deletions
diff --git a/drivers/gpu/drm/nouveau/nouveau_connector.c b/drivers/gpu/drm/nouveau/nouveau_connector.c index 939d4df07777..cea6696b1906 100644 --- a/drivers/gpu/drm/nouveau/nouveau_connector.c +++ b/drivers/gpu/drm/nouveau/nouveau_connector.c | |||
| @@ -39,7 +39,7 @@ | |||
| 39 | 39 | ||
| 40 | static void nouveau_connector_hotplug(void *, int); | 40 | static void nouveau_connector_hotplug(void *, int); |
| 41 | 41 | ||
| 42 | static struct nouveau_encoder * | 42 | struct nouveau_encoder * |
| 43 | find_encoder(struct drm_connector *connector, int type) | 43 | find_encoder(struct drm_connector *connector, int type) |
| 44 | { | 44 | { |
| 45 | struct drm_device *dev = connector->dev; | 45 | struct drm_device *dev = connector->dev; |
| @@ -116,10 +116,6 @@ nouveau_connector_destroy(struct drm_connector *connector) | |||
| 116 | nouveau_connector_hotplug, connector); | 116 | nouveau_connector_hotplug, connector); |
| 117 | } | 117 | } |
| 118 | 118 | ||
| 119 | if (connector->connector_type == DRM_MODE_CONNECTOR_LVDS || | ||
| 120 | connector->connector_type == DRM_MODE_CONNECTOR_eDP) | ||
| 121 | nouveau_backlight_exit(connector); | ||
| 122 | |||
| 123 | kfree(nv_connector->edid); | 119 | kfree(nv_connector->edid); |
| 124 | drm_sysfs_connector_remove(connector); | 120 | drm_sysfs_connector_remove(connector); |
| 125 | drm_connector_cleanup(connector); | 121 | drm_connector_cleanup(connector); |
| @@ -712,12 +708,9 @@ nouveau_connector_mode_valid(struct drm_connector *connector, | |||
| 712 | case OUTPUT_TV: | 708 | case OUTPUT_TV: |
| 713 | return get_slave_funcs(encoder)->mode_valid(encoder, mode); | 709 | return get_slave_funcs(encoder)->mode_valid(encoder, mode); |
| 714 | case OUTPUT_DP: | 710 | case OUTPUT_DP: |
| 715 | if (nv_encoder->dp.link_bw == DP_LINK_BW_2_7) | 711 | max_clock = nv_encoder->dp.link_nr; |
| 716 | max_clock = nv_encoder->dp.link_nr * 270000; | 712 | max_clock *= nv_encoder->dp.link_bw; |
| 717 | else | 713 | clock = clock * nouveau_connector_bpp(connector) / 10; |
| 718 | max_clock = nv_encoder->dp.link_nr * 162000; | ||
| 719 | |||
| 720 | clock = clock * nouveau_connector_bpp(connector) / 8; | ||
| 721 | break; | 714 | break; |
| 722 | default: | 715 | default: |
| 723 | BUG_ON(1); | 716 | BUG_ON(1); |
| @@ -871,7 +864,6 @@ nouveau_connector_create(struct drm_device *dev, int index) | |||
| 871 | dev->mode_config.scaling_mode_property, | 864 | dev->mode_config.scaling_mode_property, |
| 872 | nv_connector->scaling_mode); | 865 | nv_connector->scaling_mode); |
| 873 | } | 866 | } |
| 874 | connector->polled = DRM_CONNECTOR_POLL_CONNECT; | ||
| 875 | /* fall-through */ | 867 | /* fall-through */ |
| 876 | case DCB_CONNECTOR_TV_0: | 868 | case DCB_CONNECTOR_TV_0: |
| 877 | case DCB_CONNECTOR_TV_1: | 869 | case DCB_CONNECTOR_TV_1: |
| @@ -888,27 +880,20 @@ nouveau_connector_create(struct drm_device *dev, int index) | |||
| 888 | dev->mode_config.dithering_mode_property, | 880 | dev->mode_config.dithering_mode_property, |
| 889 | nv_connector->use_dithering ? | 881 | nv_connector->use_dithering ? |
| 890 | DRM_MODE_DITHERING_ON : DRM_MODE_DITHERING_OFF); | 882 | DRM_MODE_DITHERING_ON : DRM_MODE_DITHERING_OFF); |
| 891 | |||
| 892 | if (connector->connector_type != DRM_MODE_CONNECTOR_LVDS) { | ||
| 893 | if (dev_priv->card_type >= NV_50) | ||
| 894 | connector->polled = DRM_CONNECTOR_POLL_HPD; | ||
| 895 | else | ||
| 896 | connector->polled = DRM_CONNECTOR_POLL_CONNECT; | ||
| 897 | } | ||
| 898 | break; | 883 | break; |
| 899 | } | 884 | } |
| 900 | 885 | ||
| 901 | if (pgpio->irq_register) { | 886 | if (nv_connector->dcb->gpio_tag != 0xff && pgpio->irq_register) { |
| 902 | pgpio->irq_register(dev, nv_connector->dcb->gpio_tag, | 887 | pgpio->irq_register(dev, nv_connector->dcb->gpio_tag, |
| 903 | nouveau_connector_hotplug, connector); | 888 | nouveau_connector_hotplug, connector); |
| 889 | |||
| 890 | connector->polled = DRM_CONNECTOR_POLL_HPD; | ||
| 891 | } else { | ||
| 892 | connector->polled = DRM_CONNECTOR_POLL_CONNECT; | ||
| 904 | } | 893 | } |
| 905 | 894 | ||
| 906 | drm_sysfs_connector_add(connector); | 895 | drm_sysfs_connector_add(connector); |
| 907 | 896 | ||
| 908 | if (connector->connector_type == DRM_MODE_CONNECTOR_LVDS || | ||
| 909 | connector->connector_type == DRM_MODE_CONNECTOR_eDP) | ||
| 910 | nouveau_backlight_init(connector); | ||
| 911 | |||
| 912 | dcb->drm = connector; | 897 | dcb->drm = connector; |
| 913 | return dcb->drm; | 898 | return dcb->drm; |
| 914 | 899 | ||
| @@ -925,22 +910,13 @@ nouveau_connector_hotplug(void *data, int plugged) | |||
| 925 | struct drm_connector *connector = data; | 910 | struct drm_connector *connector = data; |
| 926 | struct drm_device *dev = connector->dev; | 911 | struct drm_device *dev = connector->dev; |
| 927 | 912 | ||
| 928 | NV_INFO(dev, "%splugged %s\n", plugged ? "" : "un", | 913 | NV_DEBUG(dev, "%splugged %s\n", plugged ? "" : "un", |
| 929 | drm_get_connector_name(connector)); | 914 | drm_get_connector_name(connector)); |
| 930 | |||
| 931 | if (connector->encoder && connector->encoder->crtc && | ||
| 932 | connector->encoder->crtc->enabled) { | ||
| 933 | struct nouveau_encoder *nv_encoder = nouveau_encoder(connector->encoder); | ||
| 934 | struct drm_encoder_helper_funcs *helper = | ||
| 935 | connector->encoder->helper_private; | ||
| 936 | 915 | ||
| 937 | if (nv_encoder->dcb->type == OUTPUT_DP) { | 916 | if (plugged) |
| 938 | if (plugged) | 917 | drm_helper_connector_dpms(connector, DRM_MODE_DPMS_ON); |
| 939 | helper->dpms(connector->encoder, DRM_MODE_DPMS_ON); | 918 | else |
| 940 | else | 919 | drm_helper_connector_dpms(connector, DRM_MODE_DPMS_OFF); |
| 941 | helper->dpms(connector->encoder, DRM_MODE_DPMS_OFF); | ||
| 942 | } | ||
| 943 | } | ||
| 944 | 920 | ||
| 945 | drm_helper_hpd_irq_event(dev); | 921 | drm_helper_hpd_irq_event(dev); |
| 946 | } | 922 | } |
