drm/radeon/kms: get HPD info for connectors
[deliverable/linux.git] / drivers / gpu / drm / radeon / radeon_combios.c
index b6761cde1ecb9bc40c2c6533983d4dea9486a868..c5021a3445de0dbafb59cff662a39d19f1a256f7 100644 (file)
@@ -50,7 +50,8 @@ radeon_add_legacy_connector(struct drm_device *dev,
                            uint32_t supported_device,
                            int connector_type,
                            struct radeon_i2c_bus_rec *i2c_bus,
-                           uint16_t connector_object_id);
+                           uint16_t connector_object_id,
+                           struct radeon_hpd *hpd);
 
 /* from radeon_legacy_encoder.c */
 extern void
@@ -1226,6 +1227,7 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
 {
        struct radeon_device *rdev = dev->dev_private;
        struct radeon_i2c_bus_rec ddc_i2c;
+       struct radeon_hpd hpd;
 
        rdev->mode_info.connector_table = radeon_connector_table;
        if (rdev->mode_info.connector_table == CT_NONE) {
@@ -1287,6 +1289,7 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
                if (rdev->flags & RADEON_SINGLE_CRTC) {
                        /* VGA - primary dac */
                        ddc_i2c = combios_setup_i2c_bus(rdev, RADEON_GPIO_VGA_DDC);
+                       hpd.hpd = RADEON_HPD_NONE;
                        radeon_add_legacy_encoder(dev,
                                                  radeon_get_encoder_id(dev,
                                                                        ATOM_DEVICE_CRT1_SUPPORT,
@@ -1296,10 +1299,12 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
                                                    ATOM_DEVICE_CRT1_SUPPORT,
                                                    DRM_MODE_CONNECTOR_VGA,
                                                    &ddc_i2c,
-                                                   CONNECTOR_OBJECT_ID_VGA);
+                                                   CONNECTOR_OBJECT_ID_VGA,
+                                                   &hpd);
                } else if (rdev->flags & RADEON_IS_MOBILITY) {
                        /* LVDS */
                        ddc_i2c = combios_setup_i2c_bus(rdev, 0);
+                       hpd.hpd = RADEON_HPD_NONE;
                        radeon_add_legacy_encoder(dev,
                                                  radeon_get_encoder_id(dev,
                                                                        ATOM_DEVICE_LCD1_SUPPORT,
@@ -1309,10 +1314,12 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
                                                    ATOM_DEVICE_LCD1_SUPPORT,
                                                    DRM_MODE_CONNECTOR_LVDS,
                                                    &ddc_i2c,
-                                                   CONNECTOR_OBJECT_ID_LVDS);
+                                                   CONNECTOR_OBJECT_ID_LVDS,
+                                                   &hpd);
 
                        /* VGA - primary dac */
                        ddc_i2c = combios_setup_i2c_bus(rdev, RADEON_GPIO_VGA_DDC);
+                       hpd.hpd = RADEON_HPD_NONE;
                        radeon_add_legacy_encoder(dev,
                                                  radeon_get_encoder_id(dev,
                                                                        ATOM_DEVICE_CRT1_SUPPORT,
@@ -1322,10 +1329,12 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
                                                    ATOM_DEVICE_CRT1_SUPPORT,
                                                    DRM_MODE_CONNECTOR_VGA,
                                                    &ddc_i2c,
-                                                   CONNECTOR_OBJECT_ID_VGA);
+                                                   CONNECTOR_OBJECT_ID_VGA,
+                                                   &hpd);
                } else {
                        /* DVI-I - tv dac, int tmds */
                        ddc_i2c = combios_setup_i2c_bus(rdev, RADEON_GPIO_DVI_DDC);
+                       hpd.hpd = RADEON_HPD_1;
                        radeon_add_legacy_encoder(dev,
                                                  radeon_get_encoder_id(dev,
                                                                        ATOM_DEVICE_DFP1_SUPPORT,
@@ -1341,10 +1350,12 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
                                                    ATOM_DEVICE_CRT2_SUPPORT,
                                                    DRM_MODE_CONNECTOR_DVII,
                                                    &ddc_i2c,
-                                                   CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_I);
+                                                   CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_I,
+                                                   &hpd);
 
                        /* VGA - primary dac */
                        ddc_i2c = combios_setup_i2c_bus(rdev, RADEON_GPIO_VGA_DDC);
+                       hpd.hpd = RADEON_HPD_NONE;
                        radeon_add_legacy_encoder(dev,
                                                  radeon_get_encoder_id(dev,
                                                                        ATOM_DEVICE_CRT1_SUPPORT,
@@ -1354,11 +1365,14 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
                                                    ATOM_DEVICE_CRT1_SUPPORT,
                                                    DRM_MODE_CONNECTOR_VGA,
                                                    &ddc_i2c,
-                                                   CONNECTOR_OBJECT_ID_VGA);
+                                                   CONNECTOR_OBJECT_ID_VGA,
+                                                   &hpd);
                }
 
                if (rdev->family != CHIP_R100 && rdev->family != CHIP_R200) {
                        /* TV - tv dac */
+                       ddc_i2c.valid = false;
+                       hpd.hpd = RADEON_HPD_NONE;
                        radeon_add_legacy_encoder(dev,
                                                  radeon_get_encoder_id(dev,
                                                                        ATOM_DEVICE_TV1_SUPPORT,
@@ -1368,7 +1382,8 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
                                                    ATOM_DEVICE_TV1_SUPPORT,
                                                    DRM_MODE_CONNECTOR_SVIDEO,
                                                    &ddc_i2c,
-                                                   CONNECTOR_OBJECT_ID_SVIDEO);
+                                                   CONNECTOR_OBJECT_ID_SVIDEO,
+                                                   &hpd);
                }
                break;
        case CT_IBOOK:
@@ -1376,6 +1391,7 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
                         rdev->mode_info.connector_table);
                /* LVDS */
                ddc_i2c = combios_setup_i2c_bus(rdev, RADEON_GPIO_DVI_DDC);
+               hpd.hpd = RADEON_HPD_NONE;
                radeon_add_legacy_encoder(dev,
                                          radeon_get_encoder_id(dev,
                                                                ATOM_DEVICE_LCD1_SUPPORT,
@@ -1383,9 +1399,11 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
                                          ATOM_DEVICE_LCD1_SUPPORT);
                radeon_add_legacy_connector(dev, 0, ATOM_DEVICE_LCD1_SUPPORT,
                                            DRM_MODE_CONNECTOR_LVDS, &ddc_i2c,
-                                           CONNECTOR_OBJECT_ID_LVDS);
+                                           CONNECTOR_OBJECT_ID_LVDS,
+                                           &hpd);
                /* VGA - TV DAC */
                ddc_i2c = combios_setup_i2c_bus(rdev, RADEON_GPIO_VGA_DDC);
+               hpd.hpd = RADEON_HPD_NONE;
                radeon_add_legacy_encoder(dev,
                                          radeon_get_encoder_id(dev,
                                                                ATOM_DEVICE_CRT2_SUPPORT,
@@ -1393,8 +1411,11 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
                                          ATOM_DEVICE_CRT2_SUPPORT);
                radeon_add_legacy_connector(dev, 1, ATOM_DEVICE_CRT2_SUPPORT,
                                            DRM_MODE_CONNECTOR_VGA, &ddc_i2c,
-                                           CONNECTOR_OBJECT_ID_VGA);
+                                           CONNECTOR_OBJECT_ID_VGA,
+                                           &hpd);
                /* TV - TV DAC */
+               ddc_i2c.valid = false;
+               hpd.hpd = RADEON_HPD_NONE;
                radeon_add_legacy_encoder(dev,
                                          radeon_get_encoder_id(dev,
                                                                ATOM_DEVICE_TV1_SUPPORT,
@@ -1403,13 +1424,15 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
                radeon_add_legacy_connector(dev, 2, ATOM_DEVICE_TV1_SUPPORT,
                                            DRM_MODE_CONNECTOR_SVIDEO,
                                            &ddc_i2c,
-                                           CONNECTOR_OBJECT_ID_SVIDEO);
+                                           CONNECTOR_OBJECT_ID_SVIDEO,
+                                           &hpd);
                break;
        case CT_POWERBOOK_EXTERNAL:
                DRM_INFO("Connector Table: %d (powerbook external tmds)\n",
                         rdev->mode_info.connector_table);
                /* LVDS */
                ddc_i2c = combios_setup_i2c_bus(rdev, RADEON_GPIO_DVI_DDC);
+               hpd.hpd = RADEON_HPD_NONE;
                radeon_add_legacy_encoder(dev,
                                          radeon_get_encoder_id(dev,
                                                                ATOM_DEVICE_LCD1_SUPPORT,
@@ -1417,9 +1440,11 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
                                          ATOM_DEVICE_LCD1_SUPPORT);
                radeon_add_legacy_connector(dev, 0, ATOM_DEVICE_LCD1_SUPPORT,
                                            DRM_MODE_CONNECTOR_LVDS, &ddc_i2c,
-                                           CONNECTOR_OBJECT_ID_LVDS);
+                                           CONNECTOR_OBJECT_ID_LVDS,
+                                           &hpd);
                /* DVI-I - primary dac, ext tmds */
                ddc_i2c = combios_setup_i2c_bus(rdev, RADEON_GPIO_VGA_DDC);
+               hpd.hpd = RADEON_HPD_2; /* ??? */
                radeon_add_legacy_encoder(dev,
                                          radeon_get_encoder_id(dev,
                                                                ATOM_DEVICE_DFP2_SUPPORT,
@@ -1435,8 +1460,11 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
                                            ATOM_DEVICE_DFP2_SUPPORT |
                                            ATOM_DEVICE_CRT1_SUPPORT,
                                            DRM_MODE_CONNECTOR_DVII, &ddc_i2c,
-                                           CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_I);
+                                           CONNECTOR_OBJECT_ID_DUAL_LINK_DVI_I,
+                                           &hpd);
                /* TV - TV DAC */
+               ddc_i2c.valid = false;
+               hpd.hpd = RADEON_HPD_NONE;
                radeon_add_legacy_encoder(dev,
                                          radeon_get_encoder_id(dev,
                                                                ATOM_DEVICE_TV1_SUPPORT,
@@ -1445,13 +1473,15 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
                radeon_add_legacy_connector(dev, 2, ATOM_DEVICE_TV1_SUPPORT,
                                            DRM_MODE_CONNECTOR_SVIDEO,
                                            &ddc_i2c,
-                                           CONNECTOR_OBJECT_ID_SVIDEO);
+                                           CONNECTOR_OBJECT_ID_SVIDEO,
+                                           &hpd);
                break;
        case CT_POWERBOOK_INTERNAL:
                DRM_INFO("Connector Table: %d (powerbook internal tmds)\n",
                         rdev->mode_info.connector_table);
                /* LVDS */
                ddc_i2c = combios_setup_i2c_bus(rdev, RADEON_GPIO_DVI_DDC);
+               hpd.hpd = RADEON_HPD_NONE;
                radeon_add_legacy_encoder(dev,
                                          radeon_get_encoder_id(dev,
                                                                ATOM_DEVICE_LCD1_SUPPORT,
@@ -1459,9 +1489,11 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
                                          ATOM_DEVICE_LCD1_SUPPORT);
                radeon_add_legacy_connector(dev, 0, ATOM_DEVICE_LCD1_SUPPORT,
                                            DRM_MODE_CONNECTOR_LVDS, &ddc_i2c,
-                                           CONNECTOR_OBJECT_ID_LVDS);
+                                           CONNECTOR_OBJECT_ID_LVDS,
+                                           &hpd);
                /* DVI-I - primary dac, int tmds */
                ddc_i2c = combios_setup_i2c_bus(rdev, RADEON_GPIO_VGA_DDC);
+               hpd.hpd = RADEON_HPD_1; /* ??? */
                radeon_add_legacy_encoder(dev,
                                          radeon_get_encoder_id(dev,
                                                                ATOM_DEVICE_DFP1_SUPPORT,
@@ -1476,8 +1508,11 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
                                            ATOM_DEVICE_DFP1_SUPPORT |
                                            ATOM_DEVICE_CRT1_SUPPORT,
                                            DRM_MODE_CONNECTOR_DVII, &ddc_i2c,
-                                           CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_I);
+                                           CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_I,
+                                           &hpd);
                /* TV - TV DAC */
+               ddc_i2c.valid = false;
+               hpd.hpd = RADEON_HPD_NONE;
                radeon_add_legacy_encoder(dev,
                                          radeon_get_encoder_id(dev,
                                                                ATOM_DEVICE_TV1_SUPPORT,
@@ -1486,13 +1521,15 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
                radeon_add_legacy_connector(dev, 2, ATOM_DEVICE_TV1_SUPPORT,
                                            DRM_MODE_CONNECTOR_SVIDEO,
                                            &ddc_i2c,
-                                           CONNECTOR_OBJECT_ID_SVIDEO);
+                                           CONNECTOR_OBJECT_ID_SVIDEO,
+                                           &hpd);
                break;
        case CT_POWERBOOK_VGA:
                DRM_INFO("Connector Table: %d (powerbook vga)\n",
                         rdev->mode_info.connector_table);
                /* LVDS */
                ddc_i2c = combios_setup_i2c_bus(rdev, RADEON_GPIO_DVI_DDC);
+               hpd.hpd = RADEON_HPD_NONE;
                radeon_add_legacy_encoder(dev,
                                          radeon_get_encoder_id(dev,
                                                                ATOM_DEVICE_LCD1_SUPPORT,
@@ -1500,9 +1537,11 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
                                          ATOM_DEVICE_LCD1_SUPPORT);
                radeon_add_legacy_connector(dev, 0, ATOM_DEVICE_LCD1_SUPPORT,
                                            DRM_MODE_CONNECTOR_LVDS, &ddc_i2c,
-                                           CONNECTOR_OBJECT_ID_LVDS);
+                                           CONNECTOR_OBJECT_ID_LVDS,
+                                           &hpd);
                /* VGA - primary dac */
                ddc_i2c = combios_setup_i2c_bus(rdev, RADEON_GPIO_VGA_DDC);
+               hpd.hpd = RADEON_HPD_NONE;
                radeon_add_legacy_encoder(dev,
                                          radeon_get_encoder_id(dev,
                                                                ATOM_DEVICE_CRT1_SUPPORT,
@@ -1510,8 +1549,11 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
                                          ATOM_DEVICE_CRT1_SUPPORT);
                radeon_add_legacy_connector(dev, 1, ATOM_DEVICE_CRT1_SUPPORT,
                                            DRM_MODE_CONNECTOR_VGA, &ddc_i2c,
-                                           CONNECTOR_OBJECT_ID_VGA);
+                                           CONNECTOR_OBJECT_ID_VGA,
+                                           &hpd);
                /* TV - TV DAC */
+               ddc_i2c.valid = false;
+               hpd.hpd = RADEON_HPD_NONE;
                radeon_add_legacy_encoder(dev,
                                          radeon_get_encoder_id(dev,
                                                                ATOM_DEVICE_TV1_SUPPORT,
@@ -1520,13 +1562,15 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
                radeon_add_legacy_connector(dev, 2, ATOM_DEVICE_TV1_SUPPORT,
                                            DRM_MODE_CONNECTOR_SVIDEO,
                                            &ddc_i2c,
-                                           CONNECTOR_OBJECT_ID_SVIDEO);
+                                           CONNECTOR_OBJECT_ID_SVIDEO,
+                                           &hpd);
                break;
        case CT_MINI_EXTERNAL:
                DRM_INFO("Connector Table: %d (mini external tmds)\n",
                         rdev->mode_info.connector_table);
                /* DVI-I - tv dac, ext tmds */
                ddc_i2c = combios_setup_i2c_bus(rdev, RADEON_GPIO_CRT2_DDC);
+               hpd.hpd = RADEON_HPD_2; /* ??? */
                radeon_add_legacy_encoder(dev,
                                          radeon_get_encoder_id(dev,
                                                                ATOM_DEVICE_DFP2_SUPPORT,
@@ -1542,8 +1586,11 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
                                            ATOM_DEVICE_DFP2_SUPPORT |
                                            ATOM_DEVICE_CRT2_SUPPORT,
                                            DRM_MODE_CONNECTOR_DVII, &ddc_i2c,
-                                           CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_I);
+                                           CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_I,
+                                           &hpd);
                /* TV - TV DAC */
+               ddc_i2c.valid = false;
+               hpd.hpd = RADEON_HPD_NONE;
                radeon_add_legacy_encoder(dev,
                                          radeon_get_encoder_id(dev,
                                                                ATOM_DEVICE_TV1_SUPPORT,
@@ -1552,13 +1599,15 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
                radeon_add_legacy_connector(dev, 1, ATOM_DEVICE_TV1_SUPPORT,
                                            DRM_MODE_CONNECTOR_SVIDEO,
                                            &ddc_i2c,
-                                           CONNECTOR_OBJECT_ID_SVIDEO);
+                                           CONNECTOR_OBJECT_ID_SVIDEO,
+                                           &hpd);
                break;
        case CT_MINI_INTERNAL:
                DRM_INFO("Connector Table: %d (mini internal tmds)\n",
                         rdev->mode_info.connector_table);
                /* DVI-I - tv dac, int tmds */
                ddc_i2c = combios_setup_i2c_bus(rdev, RADEON_GPIO_CRT2_DDC);
+               hpd.hpd = RADEON_HPD_1; /* ??? */
                radeon_add_legacy_encoder(dev,
                                          radeon_get_encoder_id(dev,
                                                                ATOM_DEVICE_DFP1_SUPPORT,
@@ -1573,8 +1622,11 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
                                            ATOM_DEVICE_DFP1_SUPPORT |
                                            ATOM_DEVICE_CRT2_SUPPORT,
                                            DRM_MODE_CONNECTOR_DVII, &ddc_i2c,
-                                           CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_I);
+                                           CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_I,
+                                           &hpd);
                /* TV - TV DAC */
+               ddc_i2c.valid = false;
+               hpd.hpd = RADEON_HPD_NONE;
                radeon_add_legacy_encoder(dev,
                                          radeon_get_encoder_id(dev,
                                                                ATOM_DEVICE_TV1_SUPPORT,
@@ -1583,13 +1635,15 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
                radeon_add_legacy_connector(dev, 1, ATOM_DEVICE_TV1_SUPPORT,
                                            DRM_MODE_CONNECTOR_SVIDEO,
                                            &ddc_i2c,
-                                           CONNECTOR_OBJECT_ID_SVIDEO);
+                                           CONNECTOR_OBJECT_ID_SVIDEO,
+                                           &hpd);
                break;
        case CT_IMAC_G5_ISIGHT:
                DRM_INFO("Connector Table: %d (imac g5 isight)\n",
                         rdev->mode_info.connector_table);
                /* DVI-D - int tmds */
                ddc_i2c = combios_setup_i2c_bus(rdev, RADEON_GPIO_MONID);
+               hpd.hpd = RADEON_HPD_1; /* ??? */
                radeon_add_legacy_encoder(dev,
                                          radeon_get_encoder_id(dev,
                                                                ATOM_DEVICE_DFP1_SUPPORT,
@@ -1597,9 +1651,11 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
                                          ATOM_DEVICE_DFP1_SUPPORT);
                radeon_add_legacy_connector(dev, 0, ATOM_DEVICE_DFP1_SUPPORT,
                                            DRM_MODE_CONNECTOR_DVID, &ddc_i2c,
-                                           CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_D);
+                                           CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_D,
+                                           &hpd);
                /* VGA - tv dac */
                ddc_i2c = combios_setup_i2c_bus(rdev, RADEON_GPIO_DVI_DDC);
+               hpd.hpd = RADEON_HPD_NONE;
                radeon_add_legacy_encoder(dev,
                                          radeon_get_encoder_id(dev,
                                                                ATOM_DEVICE_CRT2_SUPPORT,
@@ -1607,8 +1663,11 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
                                          ATOM_DEVICE_CRT2_SUPPORT);
                radeon_add_legacy_connector(dev, 1, ATOM_DEVICE_CRT2_SUPPORT,
                                            DRM_MODE_CONNECTOR_VGA, &ddc_i2c,
-                                           CONNECTOR_OBJECT_ID_VGA);
+                                           CONNECTOR_OBJECT_ID_VGA,
+                                           &hpd);
                /* TV - TV DAC */
+               ddc_i2c.valid = false;
+               hpd.hpd = RADEON_HPD_NONE;
                radeon_add_legacy_encoder(dev,
                                          radeon_get_encoder_id(dev,
                                                                ATOM_DEVICE_TV1_SUPPORT,
@@ -1617,13 +1676,15 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
                radeon_add_legacy_connector(dev, 2, ATOM_DEVICE_TV1_SUPPORT,
                                            DRM_MODE_CONNECTOR_SVIDEO,
                                            &ddc_i2c,
-                                           CONNECTOR_OBJECT_ID_SVIDEO);
+                                           CONNECTOR_OBJECT_ID_SVIDEO,
+                                           &hpd);
                break;
        case CT_EMAC:
                DRM_INFO("Connector Table: %d (emac)\n",
                         rdev->mode_info.connector_table);
                /* VGA - primary dac */
                ddc_i2c = combios_setup_i2c_bus(rdev, RADEON_GPIO_VGA_DDC);
+               hpd.hpd = RADEON_HPD_NONE;
                radeon_add_legacy_encoder(dev,
                                          radeon_get_encoder_id(dev,
                                                                ATOM_DEVICE_CRT1_SUPPORT,
@@ -1631,9 +1692,11 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
                                          ATOM_DEVICE_CRT1_SUPPORT);
                radeon_add_legacy_connector(dev, 0, ATOM_DEVICE_CRT1_SUPPORT,
                                            DRM_MODE_CONNECTOR_VGA, &ddc_i2c,
-                                           CONNECTOR_OBJECT_ID_VGA);
+                                           CONNECTOR_OBJECT_ID_VGA,
+                                           &hpd);
                /* VGA - tv dac */
                ddc_i2c = combios_setup_i2c_bus(rdev, RADEON_GPIO_CRT2_DDC);
+               hpd.hpd = RADEON_HPD_NONE;
                radeon_add_legacy_encoder(dev,
                                          radeon_get_encoder_id(dev,
                                                                ATOM_DEVICE_CRT2_SUPPORT,
@@ -1641,8 +1704,11 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
                                          ATOM_DEVICE_CRT2_SUPPORT);
                radeon_add_legacy_connector(dev, 1, ATOM_DEVICE_CRT2_SUPPORT,
                                            DRM_MODE_CONNECTOR_VGA, &ddc_i2c,
-                                           CONNECTOR_OBJECT_ID_VGA);
+                                           CONNECTOR_OBJECT_ID_VGA,
+                                           &hpd);
                /* TV - TV DAC */
+               ddc_i2c.valid = false;
+               hpd.hpd = RADEON_HPD_NONE;
                radeon_add_legacy_encoder(dev,
                                          radeon_get_encoder_id(dev,
                                                                ATOM_DEVICE_TV1_SUPPORT,
@@ -1651,7 +1717,8 @@ bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev)
                radeon_add_legacy_connector(dev, 2, ATOM_DEVICE_TV1_SUPPORT,
                                            DRM_MODE_CONNECTOR_SVIDEO,
                                            &ddc_i2c,
-                                           CONNECTOR_OBJECT_ID_SVIDEO);
+                                           CONNECTOR_OBJECT_ID_SVIDEO,
+                                           &hpd);
                break;
        default:
                DRM_INFO("Connector table: %d (invalid)\n",
@@ -1668,7 +1735,8 @@ static bool radeon_apply_legacy_quirks(struct drm_device *dev,
                                       int bios_index,
                                       enum radeon_combios_connector
                                       *legacy_connector,
-                                      struct radeon_i2c_bus_rec *ddc_i2c)
+                                      struct radeon_i2c_bus_rec *ddc_i2c,
+                                      struct radeon_hpd *hpd)
 {
        struct radeon_device *rdev = dev->dev_private;
 
@@ -1792,6 +1860,7 @@ bool radeon_get_legacy_connector_info_from_bios(struct drm_device *dev)
        enum radeon_combios_connector connector;
        int i = 0;
        struct radeon_i2c_bus_rec ddc_i2c;
+       struct radeon_hpd hpd;
 
        if (rdev->bios == NULL)
                return false;
@@ -1830,8 +1899,22 @@ bool radeon_get_legacy_connector_info_from_bios(struct drm_device *dev)
                                break;
                        }
 
+                       switch (connector) {
+                       case CONNECTOR_PROPRIETARY_LEGACY:
+                       case CONNECTOR_DVI_I_LEGACY:
+                       case CONNECTOR_DVI_D_LEGACY:
+                               if ((tmp >> 4) & 0x1)
+                                       hpd.hpd = RADEON_HPD_2;
+                               else
+                                       hpd.hpd = RADEON_HPD_1;
+                               break;
+                       default:
+                               hpd.hpd = RADEON_HPD_NONE;
+                               break;
+                       }
+
                        if (!radeon_apply_legacy_quirks(dev, i, &connector,
-                                                      &ddc_i2c))
+                                                       &ddc_i2c, &hpd))
                                continue;
 
                        switch (connector) {
@@ -1848,7 +1931,8 @@ bool radeon_get_legacy_connector_info_from_bios(struct drm_device *dev)
                                                            legacy_connector_convert
                                                            [connector],
                                                            &ddc_i2c,
-                                                           CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_D);
+                                                           CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_D,
+                                                           &hpd);
                                break;
                        case CONNECTOR_CRT_LEGACY:
                                if (tmp & 0x1) {
@@ -1874,7 +1958,8 @@ bool radeon_get_legacy_connector_info_from_bios(struct drm_device *dev)
                                                            legacy_connector_convert
                                                            [connector],
                                                            &ddc_i2c,
-                                                           CONNECTOR_OBJECT_ID_VGA);
+                                                           CONNECTOR_OBJECT_ID_VGA,
+                                                           &hpd);
                                break;
                        case CONNECTOR_DVI_I_LEGACY:
                                devices = 0;
@@ -1920,7 +2005,8 @@ bool radeon_get_legacy_connector_info_from_bios(struct drm_device *dev)
                                                            legacy_connector_convert
                                                            [connector],
                                                            &ddc_i2c,
-                                                           connector_object_id);
+                                                           connector_object_id,
+                                                           &hpd);
                                break;
                        case CONNECTOR_DVI_D_LEGACY:
                                if ((tmp >> 4) & 0x1) {
@@ -1938,7 +2024,8 @@ bool radeon_get_legacy_connector_info_from_bios(struct drm_device *dev)
                                                            legacy_connector_convert
                                                            [connector],
                                                            &ddc_i2c,
-                                                           connector_object_id);
+                                                           connector_object_id,
+                                                           &hpd);
                                break;
                        case CONNECTOR_CTV_LEGACY:
                        case CONNECTOR_STV_LEGACY:
@@ -1953,7 +2040,8 @@ bool radeon_get_legacy_connector_info_from_bios(struct drm_device *dev)
                                                            legacy_connector_convert
                                                            [connector],
                                                            &ddc_i2c,
-                                                           CONNECTOR_OBJECT_ID_SVIDEO);
+                                                           CONNECTOR_OBJECT_ID_SVIDEO,
+                                                           &hpd);
                                break;
                        default:
                                DRM_ERROR("Unknown connector type: %d\n",
@@ -1980,13 +2068,15 @@ bool radeon_get_legacy_connector_info_from_bios(struct drm_device *dev)
                                                  ATOM_DEVICE_DFP1_SUPPORT);
 
                        ddc_i2c = combios_setup_i2c_bus(rdev, RADEON_GPIO_DVI_DDC);
+                       hpd.hpd = RADEON_HPD_NONE;
                        radeon_add_legacy_connector(dev,
                                                    0,
                                                    ATOM_DEVICE_CRT1_SUPPORT |
                                                    ATOM_DEVICE_DFP1_SUPPORT,
                                                    DRM_MODE_CONNECTOR_DVII,
                                                    &ddc_i2c,
-                                                   CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_I);
+                                                   CONNECTOR_OBJECT_ID_SINGLE_LINK_DVI_I,
+                                                   &hpd);
                } else {
                        uint16_t crt_info =
                                combios_get_table_offset(dev, COMBIOS_CRT_INFO_TABLE);
@@ -1998,12 +2088,14 @@ bool radeon_get_legacy_connector_info_from_bios(struct drm_device *dev)
                                                                                1),
                                                          ATOM_DEVICE_CRT1_SUPPORT);
                                ddc_i2c = combios_setup_i2c_bus(rdev, RADEON_GPIO_VGA_DDC);
+                               hpd.hpd = RADEON_HPD_NONE;
                                radeon_add_legacy_connector(dev,
                                                            0,
                                                            ATOM_DEVICE_CRT1_SUPPORT,
                                                            DRM_MODE_CONNECTOR_VGA,
                                                            &ddc_i2c,
-                                                           CONNECTOR_OBJECT_ID_VGA);
+                                                           CONNECTOR_OBJECT_ID_VGA,
+                                                           &hpd);
                        } else {
                                DRM_DEBUG("No connector info found\n");
                                return false;
@@ -2098,12 +2190,14 @@ bool radeon_get_legacy_connector_info_from_bios(struct drm_device *dev)
                        } else
                                ddc_i2c.valid = false;
 
+                       hpd.hpd = RADEON_HPD_NONE;
                        radeon_add_legacy_connector(dev,
                                                    5,
                                                    ATOM_DEVICE_LCD1_SUPPORT,
                                                    DRM_MODE_CONNECTOR_LVDS,
                                                    &ddc_i2c,
-                                                   CONNECTOR_OBJECT_ID_LVDS);
+                                                   CONNECTOR_OBJECT_ID_LVDS,
+                                                   &hpd);
                }
        }
 
@@ -2114,6 +2208,7 @@ bool radeon_get_legacy_connector_info_from_bios(struct drm_device *dev)
                if (tv_info) {
                        if (RBIOS8(tv_info + 6) == 'T') {
                                if (radeon_apply_legacy_tv_quirks(dev)) {
+                                       hpd.hpd = RADEON_HPD_NONE;
                                        radeon_add_legacy_encoder(dev,
                                                                  radeon_get_encoder_id
                                                                  (dev,
@@ -2124,7 +2219,8 @@ bool radeon_get_legacy_connector_info_from_bios(struct drm_device *dev)
                                                                    ATOM_DEVICE_TV1_SUPPORT,
                                                                    DRM_MODE_CONNECTOR_SVIDEO,
                                                                    &ddc_i2c,
-                                                                   CONNECTOR_OBJECT_ID_SVIDEO);
+                                                                   CONNECTOR_OBJECT_ID_SVIDEO,
+                                                                   &hpd);
                                }
                        }
                }
This page took 0.044726 seconds and 5 git commands to generate.