diff options
Diffstat (limited to 'drivers/gpu/drm/i915/intel_tv.c')
-rw-r--r-- | drivers/gpu/drm/i915/intel_tv.c | 194 |
1 files changed, 39 insertions, 155 deletions
diff --git a/drivers/gpu/drm/i915/intel_tv.c b/drivers/gpu/drm/i915/intel_tv.c index d7d39b2327df..081cb9014525 100644 --- a/drivers/gpu/drm/i915/intel_tv.c +++ b/drivers/gpu/drm/i915/intel_tv.c | |||
@@ -916,143 +916,6 @@ intel_tv_dpms(struct drm_encoder *encoder, int mode) | |||
916 | } | 916 | } |
917 | } | 917 | } |
918 | 918 | ||
919 | static void | ||
920 | intel_tv_save(struct drm_connector *connector) | ||
921 | { | ||
922 | struct drm_device *dev = connector->dev; | ||
923 | struct drm_i915_private *dev_priv = dev->dev_private; | ||
924 | struct intel_encoder *intel_encoder = to_intel_encoder(connector); | ||
925 | struct intel_tv_priv *tv_priv = intel_encoder->dev_priv; | ||
926 | int i; | ||
927 | |||
928 | tv_priv->save_TV_H_CTL_1 = I915_READ(TV_H_CTL_1); | ||
929 | tv_priv->save_TV_H_CTL_2 = I915_READ(TV_H_CTL_2); | ||
930 | tv_priv->save_TV_H_CTL_3 = I915_READ(TV_H_CTL_3); | ||
931 | tv_priv->save_TV_V_CTL_1 = I915_READ(TV_V_CTL_1); | ||
932 | tv_priv->save_TV_V_CTL_2 = I915_READ(TV_V_CTL_2); | ||
933 | tv_priv->save_TV_V_CTL_3 = I915_READ(TV_V_CTL_3); | ||
934 | tv_priv->save_TV_V_CTL_4 = I915_READ(TV_V_CTL_4); | ||
935 | tv_priv->save_TV_V_CTL_5 = I915_READ(TV_V_CTL_5); | ||
936 | tv_priv->save_TV_V_CTL_6 = I915_READ(TV_V_CTL_6); | ||
937 | tv_priv->save_TV_V_CTL_7 = I915_READ(TV_V_CTL_7); | ||
938 | tv_priv->save_TV_SC_CTL_1 = I915_READ(TV_SC_CTL_1); | ||
939 | tv_priv->save_TV_SC_CTL_2 = I915_READ(TV_SC_CTL_2); | ||
940 | tv_priv->save_TV_SC_CTL_3 = I915_READ(TV_SC_CTL_3); | ||
941 | |||
942 | tv_priv->save_TV_CSC_Y = I915_READ(TV_CSC_Y); | ||
943 | tv_priv->save_TV_CSC_Y2 = I915_READ(TV_CSC_Y2); | ||
944 | tv_priv->save_TV_CSC_U = I915_READ(TV_CSC_U); | ||
945 | tv_priv->save_TV_CSC_U2 = I915_READ(TV_CSC_U2); | ||
946 | tv_priv->save_TV_CSC_V = I915_READ(TV_CSC_V); | ||
947 | tv_priv->save_TV_CSC_V2 = I915_READ(TV_CSC_V2); | ||
948 | tv_priv->save_TV_CLR_KNOBS = I915_READ(TV_CLR_KNOBS); | ||
949 | tv_priv->save_TV_CLR_LEVEL = I915_READ(TV_CLR_LEVEL); | ||
950 | tv_priv->save_TV_WIN_POS = I915_READ(TV_WIN_POS); | ||
951 | tv_priv->save_TV_WIN_SIZE = I915_READ(TV_WIN_SIZE); | ||
952 | tv_priv->save_TV_FILTER_CTL_1 = I915_READ(TV_FILTER_CTL_1); | ||
953 | tv_priv->save_TV_FILTER_CTL_2 = I915_READ(TV_FILTER_CTL_2); | ||
954 | tv_priv->save_TV_FILTER_CTL_3 = I915_READ(TV_FILTER_CTL_3); | ||
955 | |||
956 | for (i = 0; i < 60; i++) | ||
957 | tv_priv->save_TV_H_LUMA[i] = I915_READ(TV_H_LUMA_0 + (i <<2)); | ||
958 | for (i = 0; i < 60; i++) | ||
959 | tv_priv->save_TV_H_CHROMA[i] = I915_READ(TV_H_CHROMA_0 + (i <<2)); | ||
960 | for (i = 0; i < 43; i++) | ||
961 | tv_priv->save_TV_V_LUMA[i] = I915_READ(TV_V_LUMA_0 + (i <<2)); | ||
962 | for (i = 0; i < 43; i++) | ||
963 | tv_priv->save_TV_V_CHROMA[i] = I915_READ(TV_V_CHROMA_0 + (i <<2)); | ||
964 | |||
965 | tv_priv->save_TV_DAC = I915_READ(TV_DAC); | ||
966 | tv_priv->save_TV_CTL = I915_READ(TV_CTL); | ||
967 | } | ||
968 | |||
969 | static void | ||
970 | intel_tv_restore(struct drm_connector *connector) | ||
971 | { | ||
972 | struct drm_device *dev = connector->dev; | ||
973 | struct drm_i915_private *dev_priv = dev->dev_private; | ||
974 | struct intel_encoder *intel_encoder = to_intel_encoder(connector); | ||
975 | struct intel_tv_priv *tv_priv = intel_encoder->dev_priv; | ||
976 | struct drm_crtc *crtc = connector->encoder->crtc; | ||
977 | struct intel_crtc *intel_crtc; | ||
978 | int i; | ||
979 | |||
980 | /* FIXME: No CRTC? */ | ||
981 | if (!crtc) | ||
982 | return; | ||
983 | |||
984 | intel_crtc = to_intel_crtc(crtc); | ||
985 | I915_WRITE(TV_H_CTL_1, tv_priv->save_TV_H_CTL_1); | ||
986 | I915_WRITE(TV_H_CTL_2, tv_priv->save_TV_H_CTL_2); | ||
987 | I915_WRITE(TV_H_CTL_3, tv_priv->save_TV_H_CTL_3); | ||
988 | I915_WRITE(TV_V_CTL_1, tv_priv->save_TV_V_CTL_1); | ||
989 | I915_WRITE(TV_V_CTL_2, tv_priv->save_TV_V_CTL_2); | ||
990 | I915_WRITE(TV_V_CTL_3, tv_priv->save_TV_V_CTL_3); | ||
991 | I915_WRITE(TV_V_CTL_4, tv_priv->save_TV_V_CTL_4); | ||
992 | I915_WRITE(TV_V_CTL_5, tv_priv->save_TV_V_CTL_5); | ||
993 | I915_WRITE(TV_V_CTL_6, tv_priv->save_TV_V_CTL_6); | ||
994 | I915_WRITE(TV_V_CTL_7, tv_priv->save_TV_V_CTL_7); | ||
995 | I915_WRITE(TV_SC_CTL_1, tv_priv->save_TV_SC_CTL_1); | ||
996 | I915_WRITE(TV_SC_CTL_2, tv_priv->save_TV_SC_CTL_2); | ||
997 | I915_WRITE(TV_SC_CTL_3, tv_priv->save_TV_SC_CTL_3); | ||
998 | |||
999 | I915_WRITE(TV_CSC_Y, tv_priv->save_TV_CSC_Y); | ||
1000 | I915_WRITE(TV_CSC_Y2, tv_priv->save_TV_CSC_Y2); | ||
1001 | I915_WRITE(TV_CSC_U, tv_priv->save_TV_CSC_U); | ||
1002 | I915_WRITE(TV_CSC_U2, tv_priv->save_TV_CSC_U2); | ||
1003 | I915_WRITE(TV_CSC_V, tv_priv->save_TV_CSC_V); | ||
1004 | I915_WRITE(TV_CSC_V2, tv_priv->save_TV_CSC_V2); | ||
1005 | I915_WRITE(TV_CLR_KNOBS, tv_priv->save_TV_CLR_KNOBS); | ||
1006 | I915_WRITE(TV_CLR_LEVEL, tv_priv->save_TV_CLR_LEVEL); | ||
1007 | |||
1008 | { | ||
1009 | int pipeconf_reg = (intel_crtc->pipe == 0) ? | ||
1010 | PIPEACONF : PIPEBCONF; | ||
1011 | int dspcntr_reg = (intel_crtc->plane == 0) ? | ||
1012 | DSPACNTR : DSPBCNTR; | ||
1013 | int pipeconf = I915_READ(pipeconf_reg); | ||
1014 | int dspcntr = I915_READ(dspcntr_reg); | ||
1015 | int dspbase_reg = (intel_crtc->plane == 0) ? | ||
1016 | DSPAADDR : DSPBADDR; | ||
1017 | /* Pipe must be off here */ | ||
1018 | I915_WRITE(dspcntr_reg, dspcntr & ~DISPLAY_PLANE_ENABLE); | ||
1019 | /* Flush the plane changes */ | ||
1020 | I915_WRITE(dspbase_reg, I915_READ(dspbase_reg)); | ||
1021 | |||
1022 | if (!IS_I9XX(dev)) { | ||
1023 | /* Wait for vblank for the disable to take effect */ | ||
1024 | intel_wait_for_vblank(dev); | ||
1025 | } | ||
1026 | |||
1027 | I915_WRITE(pipeconf_reg, pipeconf & ~PIPEACONF_ENABLE); | ||
1028 | /* Wait for vblank for the disable to take effect. */ | ||
1029 | intel_wait_for_vblank(dev); | ||
1030 | |||
1031 | /* Filter ctl must be set before TV_WIN_SIZE */ | ||
1032 | I915_WRITE(TV_FILTER_CTL_1, tv_priv->save_TV_FILTER_CTL_1); | ||
1033 | I915_WRITE(TV_FILTER_CTL_2, tv_priv->save_TV_FILTER_CTL_2); | ||
1034 | I915_WRITE(TV_FILTER_CTL_3, tv_priv->save_TV_FILTER_CTL_3); | ||
1035 | I915_WRITE(TV_WIN_POS, tv_priv->save_TV_WIN_POS); | ||
1036 | I915_WRITE(TV_WIN_SIZE, tv_priv->save_TV_WIN_SIZE); | ||
1037 | I915_WRITE(pipeconf_reg, pipeconf); | ||
1038 | I915_WRITE(dspcntr_reg, dspcntr); | ||
1039 | /* Flush the plane changes */ | ||
1040 | I915_WRITE(dspbase_reg, I915_READ(dspbase_reg)); | ||
1041 | } | ||
1042 | |||
1043 | for (i = 0; i < 60; i++) | ||
1044 | I915_WRITE(TV_H_LUMA_0 + (i <<2), tv_priv->save_TV_H_LUMA[i]); | ||
1045 | for (i = 0; i < 60; i++) | ||
1046 | I915_WRITE(TV_H_CHROMA_0 + (i <<2), tv_priv->save_TV_H_CHROMA[i]); | ||
1047 | for (i = 0; i < 43; i++) | ||
1048 | I915_WRITE(TV_V_LUMA_0 + (i <<2), tv_priv->save_TV_V_LUMA[i]); | ||
1049 | for (i = 0; i < 43; i++) | ||
1050 | I915_WRITE(TV_V_CHROMA_0 + (i <<2), tv_priv->save_TV_V_CHROMA[i]); | ||
1051 | |||
1052 | I915_WRITE(TV_DAC, tv_priv->save_TV_DAC); | ||
1053 | I915_WRITE(TV_CTL, tv_priv->save_TV_CTL); | ||
1054 | } | ||
1055 | |||
1056 | static const struct tv_mode * | 919 | static const struct tv_mode * |
1057 | intel_tv_mode_lookup (char *tv_format) | 920 | intel_tv_mode_lookup (char *tv_format) |
1058 | { | 921 | { |
@@ -1078,7 +941,8 @@ intel_tv_mode_find (struct intel_encoder *intel_encoder) | |||
1078 | static enum drm_mode_status | 941 | static enum drm_mode_status |
1079 | intel_tv_mode_valid(struct drm_connector *connector, struct drm_display_mode *mode) | 942 | intel_tv_mode_valid(struct drm_connector *connector, struct drm_display_mode *mode) |
1080 | { | 943 | { |
1081 | struct intel_encoder *intel_encoder = to_intel_encoder(connector); | 944 | struct drm_encoder *encoder = intel_attached_encoder(connector); |
945 | struct intel_encoder *intel_encoder = enc_to_intel_encoder(encoder); | ||
1082 | const struct tv_mode *tv_mode = intel_tv_mode_find(intel_encoder); | 946 | const struct tv_mode *tv_mode = intel_tv_mode_find(intel_encoder); |
1083 | 947 | ||
1084 | /* Ensure TV refresh is close to desired refresh */ | 948 | /* Ensure TV refresh is close to desired refresh */ |
@@ -1399,6 +1263,15 @@ intel_tv_detect_type (struct drm_crtc *crtc, struct intel_encoder *intel_encoder | |||
1399 | DAC_A_0_7_V | | 1263 | DAC_A_0_7_V | |
1400 | DAC_B_0_7_V | | 1264 | DAC_B_0_7_V | |
1401 | DAC_C_0_7_V); | 1265 | DAC_C_0_7_V); |
1266 | |||
1267 | /* | ||
1268 | * The TV sense state should be cleared to zero on cantiga platform. Otherwise | ||
1269 | * the TV is misdetected. This is hardware requirement. | ||
1270 | */ | ||
1271 | if (IS_GM45(dev)) | ||
1272 | tv_dac &= ~(TVDAC_STATE_CHG_EN | TVDAC_A_SENSE_CTL | | ||
1273 | TVDAC_B_SENSE_CTL | TVDAC_C_SENSE_CTL); | ||
1274 | |||
1402 | I915_WRITE(TV_CTL, tv_ctl); | 1275 | I915_WRITE(TV_CTL, tv_ctl); |
1403 | I915_WRITE(TV_DAC, tv_dac); | 1276 | I915_WRITE(TV_DAC, tv_dac); |
1404 | intel_wait_for_vblank(dev); | 1277 | intel_wait_for_vblank(dev); |
@@ -1441,7 +1314,8 @@ intel_tv_detect_type (struct drm_crtc *crtc, struct intel_encoder *intel_encoder | |||
1441 | */ | 1314 | */ |
1442 | static void intel_tv_find_better_format(struct drm_connector *connector) | 1315 | static void intel_tv_find_better_format(struct drm_connector *connector) |
1443 | { | 1316 | { |
1444 | struct intel_encoder *intel_encoder = to_intel_encoder(connector); | 1317 | struct drm_encoder *encoder = intel_attached_encoder(connector); |
1318 | struct intel_encoder *intel_encoder = enc_to_intel_encoder(encoder); | ||
1445 | struct intel_tv_priv *tv_priv = intel_encoder->dev_priv; | 1319 | struct intel_tv_priv *tv_priv = intel_encoder->dev_priv; |
1446 | const struct tv_mode *tv_mode = intel_tv_mode_find(intel_encoder); | 1320 | const struct tv_mode *tv_mode = intel_tv_mode_find(intel_encoder); |
1447 | int i; | 1321 | int i; |
@@ -1475,9 +1349,9 @@ intel_tv_detect(struct drm_connector *connector) | |||
1475 | { | 1349 | { |
1476 | struct drm_crtc *crtc; | 1350 | struct drm_crtc *crtc; |
1477 | struct drm_display_mode mode; | 1351 | struct drm_display_mode mode; |
1478 | struct intel_encoder *intel_encoder = to_intel_encoder(connector); | 1352 | struct drm_encoder *encoder = intel_attached_encoder(connector); |
1353 | struct intel_encoder *intel_encoder = enc_to_intel_encoder(encoder); | ||
1479 | struct intel_tv_priv *tv_priv = intel_encoder->dev_priv; | 1354 | struct intel_tv_priv *tv_priv = intel_encoder->dev_priv; |
1480 | struct drm_encoder *encoder = &intel_encoder->enc; | ||
1481 | int dpms_mode; | 1355 | int dpms_mode; |
1482 | int type = tv_priv->type; | 1356 | int type = tv_priv->type; |
1483 | 1357 | ||
@@ -1487,10 +1361,12 @@ intel_tv_detect(struct drm_connector *connector) | |||
1487 | if (encoder->crtc && encoder->crtc->enabled) { | 1361 | if (encoder->crtc && encoder->crtc->enabled) { |
1488 | type = intel_tv_detect_type(encoder->crtc, intel_encoder); | 1362 | type = intel_tv_detect_type(encoder->crtc, intel_encoder); |
1489 | } else { | 1363 | } else { |
1490 | crtc = intel_get_load_detect_pipe(intel_encoder, &mode, &dpms_mode); | 1364 | crtc = intel_get_load_detect_pipe(intel_encoder, connector, |
1365 | &mode, &dpms_mode); | ||
1491 | if (crtc) { | 1366 | if (crtc) { |
1492 | type = intel_tv_detect_type(crtc, intel_encoder); | 1367 | type = intel_tv_detect_type(crtc, intel_encoder); |
1493 | intel_release_load_detect_pipe(intel_encoder, dpms_mode); | 1368 | intel_release_load_detect_pipe(intel_encoder, connector, |
1369 | dpms_mode); | ||
1494 | } else | 1370 | } else |
1495 | type = -1; | 1371 | type = -1; |
1496 | } | 1372 | } |
@@ -1525,7 +1401,8 @@ static void | |||
1525 | intel_tv_chose_preferred_modes(struct drm_connector *connector, | 1401 | intel_tv_chose_preferred_modes(struct drm_connector *connector, |
1526 | struct drm_display_mode *mode_ptr) | 1402 | struct drm_display_mode *mode_ptr) |
1527 | { | 1403 | { |
1528 | struct intel_encoder *intel_encoder = to_intel_encoder(connector); | 1404 | struct drm_encoder *encoder = intel_attached_encoder(connector); |
1405 | struct intel_encoder *intel_encoder = enc_to_intel_encoder(encoder); | ||
1529 | const struct tv_mode *tv_mode = intel_tv_mode_find(intel_encoder); | 1406 | const struct tv_mode *tv_mode = intel_tv_mode_find(intel_encoder); |
1530 | 1407 | ||
1531 | if (tv_mode->nbr_end < 480 && mode_ptr->vdisplay == 480) | 1408 | if (tv_mode->nbr_end < 480 && mode_ptr->vdisplay == 480) |
@@ -1550,7 +1427,8 @@ static int | |||
1550 | intel_tv_get_modes(struct drm_connector *connector) | 1427 | intel_tv_get_modes(struct drm_connector *connector) |
1551 | { | 1428 | { |
1552 | struct drm_display_mode *mode_ptr; | 1429 | struct drm_display_mode *mode_ptr; |
1553 | struct intel_encoder *intel_encoder = to_intel_encoder(connector); | 1430 | struct drm_encoder *encoder = intel_attached_encoder(connector); |
1431 | struct intel_encoder *intel_encoder = enc_to_intel_encoder(encoder); | ||
1554 | const struct tv_mode *tv_mode = intel_tv_mode_find(intel_encoder); | 1432 | const struct tv_mode *tv_mode = intel_tv_mode_find(intel_encoder); |
1555 | int j, count = 0; | 1433 | int j, count = 0; |
1556 | u64 tmp; | 1434 | u64 tmp; |
@@ -1604,11 +1482,9 @@ intel_tv_get_modes(struct drm_connector *connector) | |||
1604 | static void | 1482 | static void |
1605 | intel_tv_destroy (struct drm_connector *connector) | 1483 | intel_tv_destroy (struct drm_connector *connector) |
1606 | { | 1484 | { |
1607 | struct intel_encoder *intel_encoder = to_intel_encoder(connector); | ||
1608 | |||
1609 | drm_sysfs_connector_remove(connector); | 1485 | drm_sysfs_connector_remove(connector); |
1610 | drm_connector_cleanup(connector); | 1486 | drm_connector_cleanup(connector); |
1611 | kfree(intel_encoder); | 1487 | kfree(connector); |
1612 | } | 1488 | } |
1613 | 1489 | ||
1614 | 1490 | ||
@@ -1617,9 +1493,9 @@ intel_tv_set_property(struct drm_connector *connector, struct drm_property *prop | |||
1617 | uint64_t val) | 1493 | uint64_t val) |
1618 | { | 1494 | { |
1619 | struct drm_device *dev = connector->dev; | 1495 | struct drm_device *dev = connector->dev; |
1620 | struct intel_encoder *intel_encoder = to_intel_encoder(connector); | 1496 | struct drm_encoder *encoder = intel_attached_encoder(connector); |
1497 | struct intel_encoder *intel_encoder = enc_to_intel_encoder(encoder); | ||
1621 | struct intel_tv_priv *tv_priv = intel_encoder->dev_priv; | 1498 | struct intel_tv_priv *tv_priv = intel_encoder->dev_priv; |
1622 | struct drm_encoder *encoder = &intel_encoder->enc; | ||
1623 | struct drm_crtc *crtc = encoder->crtc; | 1499 | struct drm_crtc *crtc = encoder->crtc; |
1624 | int ret = 0; | 1500 | int ret = 0; |
1625 | bool changed = false; | 1501 | bool changed = false; |
@@ -1676,8 +1552,6 @@ static const struct drm_encoder_helper_funcs intel_tv_helper_funcs = { | |||
1676 | 1552 | ||
1677 | static const struct drm_connector_funcs intel_tv_connector_funcs = { | 1553 | static const struct drm_connector_funcs intel_tv_connector_funcs = { |
1678 | .dpms = drm_helper_connector_dpms, | 1554 | .dpms = drm_helper_connector_dpms, |
1679 | .save = intel_tv_save, | ||
1680 | .restore = intel_tv_restore, | ||
1681 | .detect = intel_tv_detect, | 1555 | .detect = intel_tv_detect, |
1682 | .destroy = intel_tv_destroy, | 1556 | .destroy = intel_tv_destroy, |
1683 | .set_property = intel_tv_set_property, | 1557 | .set_property = intel_tv_set_property, |
@@ -1687,12 +1561,15 @@ static const struct drm_connector_funcs intel_tv_connector_funcs = { | |||
1687 | static const struct drm_connector_helper_funcs intel_tv_connector_helper_funcs = { | 1561 | static const struct drm_connector_helper_funcs intel_tv_connector_helper_funcs = { |
1688 | .mode_valid = intel_tv_mode_valid, | 1562 | .mode_valid = intel_tv_mode_valid, |
1689 | .get_modes = intel_tv_get_modes, | 1563 | .get_modes = intel_tv_get_modes, |
1690 | .best_encoder = intel_best_encoder, | 1564 | .best_encoder = intel_attached_encoder, |
1691 | }; | 1565 | }; |
1692 | 1566 | ||
1693 | static void intel_tv_enc_destroy(struct drm_encoder *encoder) | 1567 | static void intel_tv_enc_destroy(struct drm_encoder *encoder) |
1694 | { | 1568 | { |
1569 | struct intel_encoder *intel_encoder = enc_to_intel_encoder(encoder); | ||
1570 | |||
1695 | drm_encoder_cleanup(encoder); | 1571 | drm_encoder_cleanup(encoder); |
1572 | kfree(intel_encoder); | ||
1696 | } | 1573 | } |
1697 | 1574 | ||
1698 | static const struct drm_encoder_funcs intel_tv_enc_funcs = { | 1575 | static const struct drm_encoder_funcs intel_tv_enc_funcs = { |
@@ -1741,6 +1618,7 @@ intel_tv_init(struct drm_device *dev) | |||
1741 | struct drm_i915_private *dev_priv = dev->dev_private; | 1618 | struct drm_i915_private *dev_priv = dev->dev_private; |
1742 | struct drm_connector *connector; | 1619 | struct drm_connector *connector; |
1743 | struct intel_encoder *intel_encoder; | 1620 | struct intel_encoder *intel_encoder; |
1621 | struct intel_connector *intel_connector; | ||
1744 | struct intel_tv_priv *tv_priv; | 1622 | struct intel_tv_priv *tv_priv; |
1745 | u32 tv_dac_on, tv_dac_off, save_tv_dac; | 1623 | u32 tv_dac_on, tv_dac_off, save_tv_dac; |
1746 | char **tv_format_names; | 1624 | char **tv_format_names; |
@@ -1786,7 +1664,13 @@ intel_tv_init(struct drm_device *dev) | |||
1786 | return; | 1664 | return; |
1787 | } | 1665 | } |
1788 | 1666 | ||
1789 | connector = &intel_encoder->base; | 1667 | intel_connector = kzalloc(sizeof(struct intel_connector), GFP_KERNEL); |
1668 | if (!intel_connector) { | ||
1669 | kfree(intel_encoder); | ||
1670 | return; | ||
1671 | } | ||
1672 | |||
1673 | connector = &intel_connector->base; | ||
1790 | 1674 | ||
1791 | drm_connector_init(dev, connector, &intel_tv_connector_funcs, | 1675 | drm_connector_init(dev, connector, &intel_tv_connector_funcs, |
1792 | DRM_MODE_CONNECTOR_SVIDEO); | 1676 | DRM_MODE_CONNECTOR_SVIDEO); |
@@ -1794,7 +1678,7 @@ intel_tv_init(struct drm_device *dev) | |||
1794 | drm_encoder_init(dev, &intel_encoder->enc, &intel_tv_enc_funcs, | 1678 | drm_encoder_init(dev, &intel_encoder->enc, &intel_tv_enc_funcs, |
1795 | DRM_MODE_ENCODER_TVDAC); | 1679 | DRM_MODE_ENCODER_TVDAC); |
1796 | 1680 | ||
1797 | drm_mode_connector_attach_encoder(&intel_encoder->base, &intel_encoder->enc); | 1681 | drm_mode_connector_attach_encoder(&intel_connector->base, &intel_encoder->enc); |
1798 | tv_priv = (struct intel_tv_priv *)(intel_encoder + 1); | 1682 | tv_priv = (struct intel_tv_priv *)(intel_encoder + 1); |
1799 | intel_encoder->type = INTEL_OUTPUT_TVOUT; | 1683 | intel_encoder->type = INTEL_OUTPUT_TVOUT; |
1800 | intel_encoder->crtc_mask = (1 << 0) | (1 << 1); | 1684 | intel_encoder->crtc_mask = (1 << 0) | (1 << 1); |