aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu
diff options
context:
space:
mode:
authorDaniel Vetter <daniel.vetter@ffwll.ch>2012-07-12 14:08:18 -0400
committerDaniel Vetter <daniel.vetter@ffwll.ch>2012-07-25 12:23:46 -0400
commit66a9278eecbef1c746e7fac8f4bcb0485d7aa4d0 (patch)
treedf6a3a51e4ebe33384e532a3ccaae07be725ce37 /drivers/gpu
parentebc0fd882b000b119e0684815db8c2245e61162f (diff)
drm/i915: simplify possible_clones computation
Intel hw only has one MUX for encoders, so outputs are either not cloneable or all in the same group of cloneable outputs. This neatly simplifies the code and allows us to ditch some ugly if cascades in the dp and hdmi init code (well, we need these if cascades for other stuff still, but that can be taken care of in follow-up patches). Note that this changes two things: - dvo can now be cloned with sdvo, but dvo is gen2 whereas sdvo is gen3+, so no problem. Note that the old code had a bug and didn't allow cloning crt with dvo (but only the other way round). - sdvo-lvds can now be cloned with sdvo-non-tv. Spec says this won't work, but the only reason I've found is that you can't use the panel-fitter (used for lvds upscaling) with anything else. But we don't use the panel fitter for sdvo-lvds. Imo this part of Bspec is a) rather confusing b) mostly as a guideline to implementors (i.e. explicitly stating what is already implicit from the spec, without always going into the details of why). So I think we can ignore this - worst case we'll get a bug report from a user with with sdvo-lvds and sdvo-tmds and have to add that special case back in. Because sdvo lvds is a bit special explain in comments why sdvo LVDS outputs can be cloned, but native LVDS and eDP can't be cloned - we use the panel fitter for the later, but not for sdvo. Note that this also uncoditionally initializes the panel_vdd work used by eDP. Trying to be clever doesn't buy us anything (but strange bugs) and this way we can kill the is_edp check. v2: Incorporate review from Paulo - Add in a missing space. - Pimp comment message to address his concerns. Reviewed-by: Paulo Zanoni <paulo.r.zanoni@intel.com> Signed-Off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'drivers/gpu')
-rw-r--r--drivers/gpu/drm/i915/intel_crt.c4
-rw-r--r--drivers/gpu/drm/i915/intel_display.c18
-rw-r--r--drivers/gpu/drm/i915/intel_dp.c14
-rw-r--r--drivers/gpu/drm/i915/intel_drv.h25
-rw-r--r--drivers/gpu/drm/i915/intel_dvo.c7
-rw-r--r--drivers/gpu/drm/i915/intel_hdmi.c10
-rw-r--r--drivers/gpu/drm/i915/intel_lvds.c2
-rw-r--r--drivers/gpu/drm/i915/intel_sdvo.c14
-rw-r--r--drivers/gpu/drm/i915/intel_tv.c2
9 files changed, 35 insertions, 61 deletions
diff --git a/drivers/gpu/drm/i915/intel_crt.c b/drivers/gpu/drm/i915/intel_crt.c
index 7ed4a41c3965..e1d02be368a5 100644
--- a/drivers/gpu/drm/i915/intel_crt.c
+++ b/drivers/gpu/drm/i915/intel_crt.c
@@ -658,9 +658,7 @@ void intel_crt_init(struct drm_device *dev)
658 intel_connector_attach_encoder(intel_connector, &crt->base); 658 intel_connector_attach_encoder(intel_connector, &crt->base);
659 659
660 crt->base.type = INTEL_OUTPUT_ANALOG; 660 crt->base.type = INTEL_OUTPUT_ANALOG;
661 crt->base.clone_mask = (1 << INTEL_SDVO_NON_TV_CLONE_BIT | 661 crt->base.cloneable = true;
662 1 << INTEL_ANALOG_CLONE_BIT |
663 1 << INTEL_SDVO_LVDS_CLONE_BIT);
664 if (IS_HASWELL(dev)) 662 if (IS_HASWELL(dev))
665 crt->base.crtc_mask = (1 << 0); 663 crt->base.crtc_mask = (1 << 0);
666 else 664 else
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index e9e476eca89f..5c0a72606225 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -6707,15 +6707,23 @@ int intel_get_pipe_from_crtc_id(struct drm_device *dev, void *data,
6707 return 0; 6707 return 0;
6708} 6708}
6709 6709
6710static int intel_encoder_clones(struct drm_device *dev, int type_mask) 6710static int intel_encoder_clones(struct intel_encoder *encoder)
6711{ 6711{
6712 struct intel_encoder *encoder; 6712 struct drm_device *dev = encoder->base.dev;
6713 struct intel_encoder *source_encoder;
6713 int index_mask = 0; 6714 int index_mask = 0;
6714 int entry = 0; 6715 int entry = 0;
6715 6716
6716 list_for_each_entry(encoder, &dev->mode_config.encoder_list, base.head) { 6717 list_for_each_entry(source_encoder,
6717 if (type_mask & encoder->clone_mask) 6718 &dev->mode_config.encoder_list, base.head) {
6719
6720 if (encoder == source_encoder)
6718 index_mask |= (1 << entry); 6721 index_mask |= (1 << entry);
6722
6723 /* Intel hw has only one MUX where enocoders could be cloned. */
6724 if (encoder->cloneable && source_encoder->cloneable)
6725 index_mask |= (1 << entry);
6726
6719 entry++; 6727 entry++;
6720 } 6728 }
6721 6729
@@ -6874,7 +6882,7 @@ static void intel_setup_outputs(struct drm_device *dev)
6874 list_for_each_entry(encoder, &dev->mode_config.encoder_list, base.head) { 6882 list_for_each_entry(encoder, &dev->mode_config.encoder_list, base.head) {
6875 encoder->base.possible_crtcs = encoder->crtc_mask; 6883 encoder->base.possible_crtcs = encoder->crtc_mask;
6876 encoder->base.possible_clones = 6884 encoder->base.possible_clones =
6877 intel_encoder_clones(dev, encoder->clone_mask); 6885 intel_encoder_clones(encoder);
6878 } 6886 }
6879 6887
6880 /* disable all the possible outputs/crtcs before entering KMS mode */ 6888 /* disable all the possible outputs/crtcs before entering KMS mode */
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index 9f415643c8e2..d1489ab56fc9 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -2451,18 +2451,10 @@ intel_dp_init(struct drm_device *dev, int output_reg)
2451 2451
2452 connector->polled = DRM_CONNECTOR_POLL_HPD; 2452 connector->polled = DRM_CONNECTOR_POLL_HPD;
2453 2453
2454 if (output_reg == DP_B || output_reg == PCH_DP_B) 2454 intel_encoder->cloneable = false;
2455 intel_encoder->clone_mask = (1 << INTEL_DP_B_CLONE_BIT);
2456 else if (output_reg == DP_C || output_reg == PCH_DP_C)
2457 intel_encoder->clone_mask = (1 << INTEL_DP_C_CLONE_BIT);
2458 else if (output_reg == DP_D || output_reg == PCH_DP_D)
2459 intel_encoder->clone_mask = (1 << INTEL_DP_D_CLONE_BIT);
2460 2455
2461 if (is_edp(intel_dp)) { 2456 INIT_DELAYED_WORK(&intel_dp->panel_vdd_work,
2462 intel_encoder->clone_mask = (1 << INTEL_EDP_CLONE_BIT); 2457 ironlake_panel_vdd_work);
2463 INIT_DELAYED_WORK(&intel_dp->panel_vdd_work,
2464 ironlake_panel_vdd_work);
2465 }
2466 2458
2467 intel_encoder->crtc_mask = (1 << 0) | (1 << 1) | (1 << 2); 2459 intel_encoder->crtc_mask = (1 << 0) | (1 << 1) | (1 << 2);
2468 2460
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index 35488aae5d09..76ba554f6592 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -90,25 +90,6 @@
90#define INTEL_OUTPUT_DISPLAYPORT 7 90#define INTEL_OUTPUT_DISPLAYPORT 7
91#define INTEL_OUTPUT_EDP 8 91#define INTEL_OUTPUT_EDP 8
92 92
93/* Intel Pipe Clone Bit */
94#define INTEL_HDMIB_CLONE_BIT 1
95#define INTEL_HDMIC_CLONE_BIT 2
96#define INTEL_HDMID_CLONE_BIT 3
97#define INTEL_HDMIE_CLONE_BIT 4
98#define INTEL_HDMIF_CLONE_BIT 5
99#define INTEL_SDVO_NON_TV_CLONE_BIT 6
100#define INTEL_SDVO_TV_CLONE_BIT 7
101#define INTEL_SDVO_LVDS_CLONE_BIT 8
102#define INTEL_ANALOG_CLONE_BIT 9
103#define INTEL_TV_CLONE_BIT 10
104#define INTEL_DP_B_CLONE_BIT 11
105#define INTEL_DP_C_CLONE_BIT 12
106#define INTEL_DP_D_CLONE_BIT 13
107#define INTEL_LVDS_CLONE_BIT 14
108#define INTEL_DVO_TMDS_CLONE_BIT 15
109#define INTEL_DVO_LVDS_CLONE_BIT 16
110#define INTEL_EDP_CLONE_BIT 17
111
112#define INTEL_DVO_CHIP_NONE 0 93#define INTEL_DVO_CHIP_NONE 0
113#define INTEL_DVO_CHIP_LVDS 1 94#define INTEL_DVO_CHIP_LVDS 1
114#define INTEL_DVO_CHIP_TMDS 2 95#define INTEL_DVO_CHIP_TMDS 2
@@ -153,9 +134,13 @@ struct intel_encoder {
153 struct drm_encoder base; 134 struct drm_encoder base;
154 int type; 135 int type;
155 bool needs_tv_clock; 136 bool needs_tv_clock;
137 /*
138 * Intel hw has only one MUX where encoders could be clone, hence a
139 * simple flag is enough to compute the possible_clones mask.
140 */
141 bool cloneable;
156 void (*hot_plug)(struct intel_encoder *); 142 void (*hot_plug)(struct intel_encoder *);
157 int crtc_mask; 143 int crtc_mask;
158 int clone_mask;
159}; 144};
160 145
161struct intel_connector { 146struct intel_connector {
diff --git a/drivers/gpu/drm/i915/intel_dvo.c b/drivers/gpu/drm/i915/intel_dvo.c
index 36c542e5036b..556cf6bf2a55 100644
--- a/drivers/gpu/drm/i915/intel_dvo.c
+++ b/drivers/gpu/drm/i915/intel_dvo.c
@@ -396,17 +396,14 @@ void intel_dvo_init(struct drm_device *dev)
396 intel_encoder->crtc_mask = (1 << 0) | (1 << 1); 396 intel_encoder->crtc_mask = (1 << 0) | (1 << 1);
397 switch (dvo->type) { 397 switch (dvo->type) {
398 case INTEL_DVO_CHIP_TMDS: 398 case INTEL_DVO_CHIP_TMDS:
399 intel_encoder->clone_mask = 399 intel_encoder->cloneable = true;
400 (1 << INTEL_DVO_TMDS_CLONE_BIT) |
401 (1 << INTEL_ANALOG_CLONE_BIT);
402 drm_connector_init(dev, connector, 400 drm_connector_init(dev, connector,
403 &intel_dvo_connector_funcs, 401 &intel_dvo_connector_funcs,
404 DRM_MODE_CONNECTOR_DVII); 402 DRM_MODE_CONNECTOR_DVII);
405 encoder_type = DRM_MODE_ENCODER_TMDS; 403 encoder_type = DRM_MODE_ENCODER_TMDS;
406 break; 404 break;
407 case INTEL_DVO_CHIP_LVDS: 405 case INTEL_DVO_CHIP_LVDS:
408 intel_encoder->clone_mask = 406 intel_encoder->cloneable = false;
409 (1 << INTEL_DVO_LVDS_CLONE_BIT);
410 drm_connector_init(dev, connector, 407 drm_connector_init(dev, connector,
411 &intel_dvo_connector_funcs, 408 &intel_dvo_connector_funcs,
412 DRM_MODE_CONNECTOR_LVDS); 409 DRM_MODE_CONNECTOR_LVDS);
diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c
index 98f602427eb8..593b8fe2e00a 100644
--- a/drivers/gpu/drm/i915/intel_hdmi.c
+++ b/drivers/gpu/drm/i915/intel_hdmi.c
@@ -923,42 +923,36 @@ void intel_hdmi_init(struct drm_device *dev, int sdvox_reg)
923 connector->doublescan_allowed = 0; 923 connector->doublescan_allowed = 0;
924 intel_encoder->crtc_mask = (1 << 0) | (1 << 1) | (1 << 2); 924 intel_encoder->crtc_mask = (1 << 0) | (1 << 1) | (1 << 2);
925 925
926 intel_encoder->cloneable = false;
927
926 /* Set up the DDC bus. */ 928 /* Set up the DDC bus. */
927 if (sdvox_reg == SDVOB) { 929 if (sdvox_reg == SDVOB) {
928 intel_encoder->clone_mask = (1 << INTEL_HDMIB_CLONE_BIT);
929 intel_hdmi->ddc_bus = GMBUS_PORT_DPB; 930 intel_hdmi->ddc_bus = GMBUS_PORT_DPB;
930 dev_priv->hotplug_supported_mask |= HDMIB_HOTPLUG_INT_STATUS; 931 dev_priv->hotplug_supported_mask |= HDMIB_HOTPLUG_INT_STATUS;
931 } else if (sdvox_reg == SDVOC) { 932 } else if (sdvox_reg == SDVOC) {
932 intel_encoder->clone_mask = (1 << INTEL_HDMIC_CLONE_BIT);
933 intel_hdmi->ddc_bus = GMBUS_PORT_DPC; 933 intel_hdmi->ddc_bus = GMBUS_PORT_DPC;
934 dev_priv->hotplug_supported_mask |= HDMIC_HOTPLUG_INT_STATUS; 934 dev_priv->hotplug_supported_mask |= HDMIC_HOTPLUG_INT_STATUS;
935 } else if (sdvox_reg == HDMIB) { 935 } else if (sdvox_reg == HDMIB) {
936 intel_encoder->clone_mask = (1 << INTEL_HDMID_CLONE_BIT);
937 intel_hdmi->ddc_bus = GMBUS_PORT_DPB; 936 intel_hdmi->ddc_bus = GMBUS_PORT_DPB;
938 dev_priv->hotplug_supported_mask |= HDMIB_HOTPLUG_INT_STATUS; 937 dev_priv->hotplug_supported_mask |= HDMIB_HOTPLUG_INT_STATUS;
939 } else if (sdvox_reg == HDMIC) { 938 } else if (sdvox_reg == HDMIC) {
940 intel_encoder->clone_mask = (1 << INTEL_HDMIE_CLONE_BIT);
941 intel_hdmi->ddc_bus = GMBUS_PORT_DPC; 939 intel_hdmi->ddc_bus = GMBUS_PORT_DPC;
942 dev_priv->hotplug_supported_mask |= HDMIC_HOTPLUG_INT_STATUS; 940 dev_priv->hotplug_supported_mask |= HDMIC_HOTPLUG_INT_STATUS;
943 } else if (sdvox_reg == HDMID) { 941 } else if (sdvox_reg == HDMID) {
944 intel_encoder->clone_mask = (1 << INTEL_HDMIF_CLONE_BIT);
945 intel_hdmi->ddc_bus = GMBUS_PORT_DPD; 942 intel_hdmi->ddc_bus = GMBUS_PORT_DPD;
946 dev_priv->hotplug_supported_mask |= HDMID_HOTPLUG_INT_STATUS; 943 dev_priv->hotplug_supported_mask |= HDMID_HOTPLUG_INT_STATUS;
947 } else if (sdvox_reg == DDI_BUF_CTL(PORT_B)) { 944 } else if (sdvox_reg == DDI_BUF_CTL(PORT_B)) {
948 DRM_DEBUG_DRIVER("LPT: detected output on DDI B\n"); 945 DRM_DEBUG_DRIVER("LPT: detected output on DDI B\n");
949 intel_encoder->clone_mask = (1 << INTEL_HDMIB_CLONE_BIT);
950 intel_hdmi->ddc_bus = GMBUS_PORT_DPB; 946 intel_hdmi->ddc_bus = GMBUS_PORT_DPB;
951 intel_hdmi->ddi_port = PORT_B; 947 intel_hdmi->ddi_port = PORT_B;
952 dev_priv->hotplug_supported_mask |= HDMIB_HOTPLUG_INT_STATUS; 948 dev_priv->hotplug_supported_mask |= HDMIB_HOTPLUG_INT_STATUS;
953 } else if (sdvox_reg == DDI_BUF_CTL(PORT_C)) { 949 } else if (sdvox_reg == DDI_BUF_CTL(PORT_C)) {
954 DRM_DEBUG_DRIVER("LPT: detected output on DDI C\n"); 950 DRM_DEBUG_DRIVER("LPT: detected output on DDI C\n");
955 intel_encoder->clone_mask = (1 << INTEL_HDMIC_CLONE_BIT);
956 intel_hdmi->ddc_bus = GMBUS_PORT_DPC; 951 intel_hdmi->ddc_bus = GMBUS_PORT_DPC;
957 intel_hdmi->ddi_port = PORT_C; 952 intel_hdmi->ddi_port = PORT_C;
958 dev_priv->hotplug_supported_mask |= HDMIC_HOTPLUG_INT_STATUS; 953 dev_priv->hotplug_supported_mask |= HDMIC_HOTPLUG_INT_STATUS;
959 } else if (sdvox_reg == DDI_BUF_CTL(PORT_D)) { 954 } else if (sdvox_reg == DDI_BUF_CTL(PORT_D)) {
960 DRM_DEBUG_DRIVER("LPT: detected output on DDI D\n"); 955 DRM_DEBUG_DRIVER("LPT: detected output on DDI D\n");
961 intel_encoder->clone_mask = (1 << INTEL_HDMID_CLONE_BIT);
962 intel_hdmi->ddc_bus = GMBUS_PORT_DPD; 956 intel_hdmi->ddc_bus = GMBUS_PORT_DPD;
963 intel_hdmi->ddi_port = PORT_D; 957 intel_hdmi->ddi_port = PORT_D;
964 dev_priv->hotplug_supported_mask |= HDMID_HOTPLUG_INT_STATUS; 958 dev_priv->hotplug_supported_mask |= HDMID_HOTPLUG_INT_STATUS;
diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c
index e05c0d3e3440..d789fdad5d37 100644
--- a/drivers/gpu/drm/i915/intel_lvds.c
+++ b/drivers/gpu/drm/i915/intel_lvds.c
@@ -967,7 +967,7 @@ bool intel_lvds_init(struct drm_device *dev)
967 intel_connector_attach_encoder(intel_connector, intel_encoder); 967 intel_connector_attach_encoder(intel_connector, intel_encoder);
968 intel_encoder->type = INTEL_OUTPUT_LVDS; 968 intel_encoder->type = INTEL_OUTPUT_LVDS;
969 969
970 intel_encoder->clone_mask = (1 << INTEL_LVDS_CLONE_BIT); 970 intel_encoder->cloneable = false;
971 if (HAS_PCH_SPLIT(dev)) 971 if (HAS_PCH_SPLIT(dev))
972 intel_encoder->crtc_mask = (1 << 0) | (1 << 1) | (1 << 2); 972 intel_encoder->crtc_mask = (1 << 0) | (1 << 1) | (1 << 2);
973 else if (IS_GEN4(dev)) 973 else if (IS_GEN4(dev))
diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c
index 26a6a4d0d078..d881602a9155 100644
--- a/drivers/gpu/drm/i915/intel_sdvo.c
+++ b/drivers/gpu/drm/i915/intel_sdvo.c
@@ -2078,8 +2078,7 @@ intel_sdvo_dvi_init(struct intel_sdvo *intel_sdvo, int device)
2078 connector->connector_type = DRM_MODE_CONNECTOR_HDMIA; 2078 connector->connector_type = DRM_MODE_CONNECTOR_HDMIA;
2079 intel_sdvo->is_hdmi = true; 2079 intel_sdvo->is_hdmi = true;
2080 } 2080 }
2081 intel_sdvo->base.clone_mask = ((1 << INTEL_SDVO_NON_TV_CLONE_BIT) | 2081 intel_sdvo->base.cloneable = true;
2082 (1 << INTEL_ANALOG_CLONE_BIT));
2083 2082
2084 intel_sdvo_connector_init(intel_sdvo_connector, intel_sdvo); 2083 intel_sdvo_connector_init(intel_sdvo_connector, intel_sdvo);
2085 if (intel_sdvo->is_hdmi) 2084 if (intel_sdvo->is_hdmi)
@@ -2110,7 +2109,7 @@ intel_sdvo_tv_init(struct intel_sdvo *intel_sdvo, int type)
2110 2109
2111 intel_sdvo->is_tv = true; 2110 intel_sdvo->is_tv = true;
2112 intel_sdvo->base.needs_tv_clock = true; 2111 intel_sdvo->base.needs_tv_clock = true;
2113 intel_sdvo->base.clone_mask = 1 << INTEL_SDVO_TV_CLONE_BIT; 2112 intel_sdvo->base.cloneable = false;
2114 2113
2115 intel_sdvo_connector_init(intel_sdvo_connector, intel_sdvo); 2114 intel_sdvo_connector_init(intel_sdvo_connector, intel_sdvo);
2116 2115
@@ -2153,8 +2152,7 @@ intel_sdvo_analog_init(struct intel_sdvo *intel_sdvo, int device)
2153 intel_sdvo_connector->output_flag = SDVO_OUTPUT_RGB1; 2152 intel_sdvo_connector->output_flag = SDVO_OUTPUT_RGB1;
2154 } 2153 }
2155 2154
2156 intel_sdvo->base.clone_mask = ((1 << INTEL_SDVO_NON_TV_CLONE_BIT) | 2155 intel_sdvo->base.cloneable = true;
2157 (1 << INTEL_ANALOG_CLONE_BIT));
2158 2156
2159 intel_sdvo_connector_init(intel_sdvo_connector, 2157 intel_sdvo_connector_init(intel_sdvo_connector,
2160 intel_sdvo); 2158 intel_sdvo);
@@ -2186,8 +2184,10 @@ intel_sdvo_lvds_init(struct intel_sdvo *intel_sdvo, int device)
2186 intel_sdvo_connector->output_flag = SDVO_OUTPUT_LVDS1; 2184 intel_sdvo_connector->output_flag = SDVO_OUTPUT_LVDS1;
2187 } 2185 }
2188 2186
2189 intel_sdvo->base.clone_mask = ((1 << INTEL_ANALOG_CLONE_BIT) | 2187 /* SDVO LVDS is cloneable because the SDVO encoder does the upscaling,
2190 (1 << INTEL_SDVO_LVDS_CLONE_BIT)); 2188 * as opposed to native LVDS, where we upscale with the panel-fitter
2189 * (and hence only the native LVDS resolution could be cloned). */
2190 intel_sdvo->base.cloneable = true;
2191 2191
2192 intel_sdvo_connector_init(intel_sdvo_connector, intel_sdvo); 2192 intel_sdvo_connector_init(intel_sdvo_connector, intel_sdvo);
2193 if (!intel_sdvo_create_enhance_property(intel_sdvo, intel_sdvo_connector)) 2193 if (!intel_sdvo_create_enhance_property(intel_sdvo, intel_sdvo_connector))
diff --git a/drivers/gpu/drm/i915/intel_tv.c b/drivers/gpu/drm/i915/intel_tv.c
index befce6c49704..1a0bab07699e 100644
--- a/drivers/gpu/drm/i915/intel_tv.c
+++ b/drivers/gpu/drm/i915/intel_tv.c
@@ -1622,7 +1622,7 @@ intel_tv_init(struct drm_device *dev)
1622 intel_connector_attach_encoder(intel_connector, intel_encoder); 1622 intel_connector_attach_encoder(intel_connector, intel_encoder);
1623 intel_encoder->type = INTEL_OUTPUT_TVOUT; 1623 intel_encoder->type = INTEL_OUTPUT_TVOUT;
1624 intel_encoder->crtc_mask = (1 << 0) | (1 << 1); 1624 intel_encoder->crtc_mask = (1 << 0) | (1 << 1);
1625 intel_encoder->clone_mask = (1 << INTEL_TV_CLONE_BIT); 1625 intel_encoder->cloneable = false;
1626 intel_encoder->base.possible_crtcs = ((1 << 0) | (1 << 1)); 1626 intel_encoder->base.possible_crtcs = ((1 << 0) | (1 << 1));
1627 intel_encoder->base.possible_clones = (1 << INTEL_OUTPUT_TVOUT); 1627 intel_encoder->base.possible_clones = (1 << INTEL_OUTPUT_TVOUT);
1628 intel_tv->type = DRM_MODE_CONNECTOR_Unknown; 1628 intel_tv->type = DRM_MODE_CONNECTOR_Unknown;