[Openchrome-devel] drm-openchrome: Branch 'drm-next-4.13' - 2 commits - drivers/gpu/drm

Kevin Brace kevinbrace at kemper.freedesktop.org
Fri Nov 3 22:41:15 UTC 2017


 drivers/gpu/drm/openchrome/via_analog.c  |   60 +++++++-
 drivers/gpu/drm/openchrome/via_display.c |   12 -
 drivers/gpu/drm/openchrome/via_display.h |    3 
 drivers/gpu/drm/openchrome/via_drv.h     |    8 -
 drivers/gpu/drm/openchrome/via_fp.c      |  223 ++++++++++++++++---------------
 drivers/gpu/drm/openchrome/via_tmds.c    |   61 +++++++-
 6 files changed, 231 insertions(+), 136 deletions(-)

New commits:
commit 6215de0acc85d2c989a04325115c54485da832c1
Author: Kevin Brace <kevinbrace at gmx.com>
Date:   Fri Nov 3 15:38:46 2017 -0700

    Version bumped to 3.0.52
    
    Made improvements in how I2C bus is used to detect the presence
    of a display device.
    
    Signed-off-by: Kevin Brace <kevinbrace at gmx.com>

diff --git a/drivers/gpu/drm/openchrome/via_drv.h b/drivers/gpu/drm/openchrome/via_drv.h
index 3b23925f8df6..6b949aff976a 100644
--- a/drivers/gpu/drm/openchrome/via_drv.h
+++ b/drivers/gpu/drm/openchrome/via_drv.h
@@ -30,11 +30,11 @@
 #define DRIVER_AUTHOR       "OpenChrome Project"
 #define DRIVER_NAME         "openchrome"
 #define DRIVER_DESC         "OpenChrome DRM for VIA Technologies Chrome IGP"
-#define DRIVER_DATE         "20171027"
+#define DRIVER_DATE         "20171103"
 
 #define DRIVER_MAJOR		3
 #define DRIVER_MINOR		0
-#define DRIVER_PATCHLEVEL	51
+#define DRIVER_PATCHLEVEL	52
 
 #include <linux/module.h>
 
commit 263ace813d03d4a4a9f6324a39d597639421eb4d
Author: Kevin Brace <kevinbrace at gmx.com>
Date:   Fri Nov 3 14:58:55 2017 -0700

    Complete rewrite of I2C bus control code
    
    The previous developer's code was not well thought out, so it had
    to be rewritten extensively.
    
    Signed-off-by: Kevin Brace <kevinbrace at gmx.com>

diff --git a/drivers/gpu/drm/openchrome/via_analog.c b/drivers/gpu/drm/openchrome/via_analog.c
index 6f3fd48469f4..f4393701bb72 100644
--- a/drivers/gpu/drm/openchrome/via_analog.c
+++ b/drivers/gpu/drm/openchrome/via_analog.c
@@ -215,19 +215,31 @@ static const struct drm_encoder_helper_funcs via_dac_enc_helper_funcs = {
 static enum drm_connector_status
 via_analog_detect(struct drm_connector *connector, bool force)
 {
-	struct via_connector *con = container_of(connector, struct via_connector, base);
+	struct via_connector *con = container_of(connector,
+					struct via_connector, base);
 	enum drm_connector_status ret = connector_status_disconnected;
+	struct i2c_adapter *i2c_bus;
 	struct edid *edid = NULL;
 
-	drm_mode_connector_update_edid_property(connector, edid);
-	if (con->ddc_bus) {
-		edid = drm_get_edid(connector, con->ddc_bus);
+	DRM_DEBUG_KMS("Entered %s.\n", __func__);
+
+	if (con->i2c_bus & VIA_I2C_BUS1) {
+		i2c_bus = via_find_ddc_bus(0x26);
+	} else {
+		i2c_bus = NULL;
+	}
+
+	if (i2c_bus) {
+		edid = drm_get_edid(&con->base, i2c_bus);
 		if (edid) {
-			drm_mode_connector_update_edid_property(connector, edid);
+			drm_mode_connector_update_edid_property(connector,
+								edid);
 			kfree(edid);
 			ret = connector_status_connected;
 		}
 	}
+
+	DRM_DEBUG_KMS("Exiting %s.\n", __func__);
 	return ret;
 }
 
@@ -239,17 +251,47 @@ static const struct drm_connector_funcs via_analog_connector_funcs = {
 	.destroy = via_connector_destroy,
 };
 
+static int via_analog_get_modes(struct drm_connector *connector)
+{
+	struct via_connector *con = container_of(connector,
+					struct via_connector, base);
+	int count = 0;
+	struct i2c_adapter *i2c_bus;
+	struct edid *edid = NULL;
+
+	DRM_DEBUG_KMS("Entered %s.\n", __func__);
+
+	if (con->i2c_bus & VIA_I2C_BUS1) {
+		i2c_bus = via_find_ddc_bus(0x26);
+	} else {
+		i2c_bus = NULL;
+	}
+
+	if (i2c_bus) {
+		edid = drm_get_edid(&con->base, i2c_bus);
+		if (edid) {
+			count = drm_add_edid_modes(connector, edid);
+			kfree(edid);
+		}
+	}
+
+	DRM_DEBUG_KMS("Exiting %s.\n", __func__);
+	return count;
+}
+
 static const struct drm_connector_helper_funcs via_analog_connector_helper_funcs = {
 	.mode_valid = via_connector_mode_valid,
-	.get_modes = via_get_edid_modes,
+	.get_modes = via_analog_get_modes,
 	.best_encoder = via_best_encoder,
 };
 
-void
-via_analog_init(struct drm_device *dev)
+void via_analog_init(struct drm_device *dev)
 {
 	struct via_connector *con;
 	struct via_encoder *enc;
+	struct via_device *dev_priv = dev->dev_private;
+
+	dev_priv->analog_i2c_bus = VIA_I2C_BUS1;
 
 	enc = kzalloc(sizeof(*enc) + sizeof(*con), GFP_KERNEL);
 	if (!enc) {
@@ -265,7 +307,7 @@ via_analog_init(struct drm_device *dev)
 	drm_connector_helper_add(&con->base, &via_analog_connector_helper_funcs);
 	drm_connector_register(&con->base);
 
-	con->ddc_bus = via_find_ddc_bus(0x26);
+	con->i2c_bus = dev_priv->analog_i2c_bus;
 	con->base.doublescan_allowed = false;
 	con->base.interlace_allowed = true;
 
diff --git a/drivers/gpu/drm/openchrome/via_display.c b/drivers/gpu/drm/openchrome/via_display.c
index cb25d3de1e8f..95eb322ab641 100644
--- a/drivers/gpu/drm/openchrome/via_display.c
+++ b/drivers/gpu/drm/openchrome/via_display.c
@@ -271,18 +271,6 @@ void via_encoder_cleanup(struct drm_encoder *encoder)
 	kfree(enc);
 }
 
-/*
- * Shared connector routines.
- */
-int
-via_get_edid_modes(struct drm_connector *connector)
-{
-	struct via_connector *con = container_of(connector, struct via_connector, base);
-	struct edid *edid = drm_get_edid(&con->base, con->ddc_bus);
-
-	return drm_add_edid_modes(connector, edid);
-}
-
 int
 via_connector_mode_valid(struct drm_connector *connector,
 			struct drm_display_mode *mode)
diff --git a/drivers/gpu/drm/openchrome/via_display.h b/drivers/gpu/drm/openchrome/via_display.h
index 642907a83a36..fde38d90416f 100644
--- a/drivers/gpu/drm/openchrome/via_display.h
+++ b/drivers/gpu/drm/openchrome/via_display.h
@@ -99,7 +99,7 @@ struct via_crtc {
 
 struct via_connector {
 	struct drm_connector base;
-	struct i2c_adapter *ddc_bus;
+	u32 i2c_bus;
 	struct list_head props;
 	uint32_t flags;
 };
@@ -180,7 +180,6 @@ extern int via_connector_set_property(struct drm_connector *connector,
 extern int via_connector_mode_valid(struct drm_connector *connector,
 					struct drm_display_mode *mode);
 extern void via_connector_destroy(struct drm_connector *connector);
-extern int via_get_edid_modes(struct drm_connector *connector);
 
 extern void via_tmds_probe(struct drm_device *dev);
 extern void via_fp_probe(struct drm_device *dev);
diff --git a/drivers/gpu/drm/openchrome/via_drv.h b/drivers/gpu/drm/openchrome/via_drv.h
index 371aee96f6ae..3b23925f8df6 100644
--- a/drivers/gpu/drm/openchrome/via_drv.h
+++ b/drivers/gpu/drm/openchrome/via_drv.h
@@ -209,15 +209,19 @@ struct via_device {
 	 * is needed for properly controlling its FP. */
 	bool is_quanta_il1;
 
+	u32 analog_i2c_bus;
+
 	bool int_tmds_presence;
 	u32 int_tmds_di_port;
 	u32 int_tmds_i2c_bus;
 
 	bool int_fp1_presence;
 	u32 int_fp1_di_port;
+	u32 int_fp1_i2c_bus;
 
 	bool int_fp2_presence;
 	u32 int_fp2_di_port;
+	u32 int_fp2_i2c_bus;
 
 	/* Keeping track of the number of DVI connectors. */
 	u32 number_dvi;
diff --git a/drivers/gpu/drm/openchrome/via_fp.c b/drivers/gpu/drm/openchrome/via_fp.c
index 8c9c2ced8f5b..ab4bb8bd13b0 100644
--- a/drivers/gpu/drm/openchrome/via_fp.c
+++ b/drivers/gpu/drm/openchrome/via_fp.c
@@ -924,12 +924,26 @@ via_lcd_detect(struct drm_connector *connector,  bool force)
 {
 	struct via_connector *con = container_of(connector, struct via_connector, base);
 	enum drm_connector_status ret = connector_status_disconnected;
-	struct edid *edid = drm_get_edid(&con->base, con->ddc_bus);
+	struct i2c_adapter *i2c_bus;
+	struct edid *edid = NULL;
 
-	if (edid) {
-		drm_mode_connector_update_edid_property(&con->base, edid);
-		kfree(edid);
-		ret = connector_status_connected;
+	DRM_DEBUG_KMS("Entered %s.\n", __func__);
+
+	if (con->i2c_bus & VIA_I2C_BUS2) {
+		i2c_bus = via_find_ddc_bus(0x31);
+	} else if (con->i2c_bus & VIA_I2C_BUS3) {
+		i2c_bus = via_find_ddc_bus(0x2c);
+	} else {
+		i2c_bus = NULL;
+	}
+
+	if (i2c_bus) {
+		edid = drm_get_edid(&con->base, i2c_bus);
+		if (edid) {
+			drm_mode_connector_update_edid_property(&con->base, edid);
+			kfree(edid);
+			ret = connector_status_connected;
+		}
 	} else {
 		struct via_device *dev_priv = connector->dev->dev_private;
 		u8 mask = BIT(1);
@@ -943,6 +957,8 @@ via_lcd_detect(struct drm_connector *connector,  bool force)
 		if (machine_is_olpc())
 			ret = connector_status_connected;
 	}
+
+	DRM_DEBUG_KMS("Exiting %s.\n", __func__);
 	return ret;
 }
 
@@ -998,35 +1014,59 @@ struct drm_connector_funcs via_lcd_connector_funcs = {
 static int
 via_lcd_get_modes(struct drm_connector *connector)
 {
-	int count = via_get_edid_modes(connector);
-
-	/* If no edid then we detect the mode using
-	 * the scratch pad registers. */
-	if (!count) {
-		struct drm_display_mode *native_mode = NULL;
-		struct drm_device *dev = connector->dev;
-
-		/* OLPC is very special */
-		if (machine_is_olpc()) {
-			native_mode = drm_mode_create(dev);
-
-			native_mode->clock = 56519;
-			native_mode->hdisplay = 1200;
-			native_mode->hsync_start = 1211;
-			native_mode->hsync_end = 1243;
-			native_mode->htotal = 1264;
-			native_mode->hskew = 0;
-			native_mode->vdisplay = 900;
-			native_mode->vsync_start = 901;
-			native_mode->vsync_end = 911;
-			native_mode->vtotal = 912;
-			native_mode->vscan = 0;
-			native_mode->vrefresh = 50;
-			native_mode->hsync = 0;
+	struct via_connector *con = container_of(connector, struct via_connector, base);
+	struct drm_device *dev = connector->dev;
+	struct via_device *dev_priv = dev->dev_private;
+	struct i2c_adapter *i2c_bus;
+	struct edid *edid = NULL;
+	struct drm_display_mode *native_mode = NULL;
+	u8 reg_value;
+	int hdisplay, vdisplay;
+	int count = 0;
+
+	DRM_DEBUG_KMS("Entered %s.\n", __func__);
+
+	/* OLPC is very special */
+	if (machine_is_olpc()) {
+		native_mode = drm_mode_create(dev);
+
+		native_mode->clock = 56519;
+		native_mode->hdisplay = 1200;
+		native_mode->hsync_start = 1211;
+		native_mode->hsync_end = 1243;
+		native_mode->htotal = 1264;
+		native_mode->hskew = 0;
+		native_mode->vdisplay = 900;
+		native_mode->vsync_start = 901;
+		native_mode->vsync_end = 911;
+		native_mode->vtotal = 912;
+		native_mode->vscan = 0;
+		native_mode->vrefresh = 50;
+		native_mode->hsync = 0;
+
+		native_mode->type = DRM_MODE_TYPE_PREFERRED |
+					DRM_MODE_TYPE_DRIVER;
+		drm_mode_set_name(native_mode);
+		drm_mode_probed_add(connector, native_mode);
+		count = 1;
+	} else {
+		if (con->i2c_bus & VIA_I2C_BUS2) {
+			i2c_bus = via_find_ddc_bus(0x31);
+		} else if (con->i2c_bus & VIA_I2C_BUS3) {
+			i2c_bus = via_find_ddc_bus(0x2c);
 		} else {
-			struct via_device *dev_priv = dev->dev_private;
-			u8 reg_value = (vga_rcrt(VGABASE, 0x3F) & 0x0F);
-			int hdisplay = 0, vdisplay = 0;
+			i2c_bus = NULL;
+		}
+
+		if (i2c_bus) {
+			edid = drm_get_edid(&con->base, i2c_bus);
+			if (edid) {
+				count = drm_add_edid_modes(connector, edid);
+				kfree(edid);
+			}
+		} else {
+			reg_value = (vga_rcrt(VGABASE, 0x3F) & 0x0F);
+			hdisplay = vdisplay = 0;
 
 			switch (reg_value) {
 			case 0x00:
@@ -1113,18 +1153,21 @@ via_lcd_get_modes(struct drm_connector *connector)
 				break;
 			}
 
-			if (hdisplay && vdisplay)
+			if (hdisplay && vdisplay) {
 				native_mode = drm_cvt_mode(dev, hdisplay, vdisplay,
 							60, false, false, false);
-		}
+			}
 
-		if (native_mode) {
-			native_mode->type = DRM_MODE_TYPE_PREFERRED | DRM_MODE_TYPE_DRIVER;
-			drm_mode_set_name(native_mode);
-			drm_mode_probed_add(connector, native_mode);
-			count = 1;
+			if (native_mode) {
+				native_mode->type = DRM_MODE_TYPE_PREFERRED | DRM_MODE_TYPE_DRIVER;
+				drm_mode_set_name(native_mode);
+				drm_mode_probed_add(connector, native_mode);
+				count = 1;
+			}
 		}
 	}
+
+	DRM_DEBUG_KMS("Exiting %s.\n", __func__);
 	return count;
 }
 
@@ -1363,20 +1406,40 @@ void via_fp_probe(struct drm_device *dev)
 		break;
 	}
 
-	DRM_DEBUG_KMS("dev_priv->int_fp1_presence: %x\n",
+	dev_priv->int_fp1_i2c_bus = VIA_I2C_NONE;
+	dev_priv->int_fp2_i2c_bus = VIA_I2C_NONE;
+
+	if ((dev_priv->int_fp1_presence)
+		&& (!(dev_priv->mapped_i2c_bus & VIA_I2C_BUS2))) {
+		dev_priv->int_fp1_i2c_bus = VIA_I2C_BUS2;
+		dev_priv->mapped_i2c_bus |= VIA_I2C_BUS2;
+	}
+
+	if ((dev_priv->int_fp2_presence)
+		&& (!(dev_priv->mapped_i2c_bus & VIA_I2C_BUS2))) {
+		dev_priv->int_fp2_i2c_bus = VIA_I2C_BUS2;
+		dev_priv->mapped_i2c_bus |= VIA_I2C_BUS2;
+	}
+
+	DRM_DEBUG_KMS("int_fp1_presence: %x\n",
 			dev_priv->int_fp1_presence);
-	DRM_DEBUG_KMS("dev_priv->int_fp1_di_port: 0x%08x\n",
+	DRM_DEBUG_KMS("int_fp1_di_port: 0x%08x\n",
 			dev_priv->int_fp1_di_port);
-	DRM_DEBUG_KMS("dev_priv->int_fp2_presence: %x\n",
+	DRM_DEBUG_KMS("int_fp1_i2c_bus: 0x%08x\n",
+			dev_priv->int_fp1_i2c_bus);
+	DRM_DEBUG_KMS("int_fp2_presence: %x\n",
 			dev_priv->int_fp2_presence);
-	DRM_DEBUG_KMS("dev_priv->int_fp2_di_port: 0x%08x\n",
+	DRM_DEBUG_KMS("int_fp2_di_port: 0x%08x\n",
 			dev_priv->int_fp2_di_port);
+	DRM_DEBUG_KMS("int_fp2_i2c_bus: 0x%08x\n",
+			dev_priv->int_fp2_i2c_bus);
+	DRM_DEBUG_KMS("mapped_i2c_bus: 0x%08x\n",
+			dev_priv->mapped_i2c_bus);
 
 	DRM_DEBUG_KMS("Exiting %s.\n", __func__);
 }
 
-void
-via_lvds_init(struct drm_device *dev)
+void via_lvds_init(struct drm_device *dev)
 {
 	struct via_device *dev_priv = dev->dev_private;
 	bool dual_channel = false, is_msb = false;
@@ -1385,6 +1448,11 @@ via_lvds_init(struct drm_device *dev)
 	struct edid *edid;
 	u8 reg_value;
 
+	if ((!(dev_priv->int_fp1_presence)) &&
+		(!(dev_priv->int_fp2_presence))) {
+		goto exit;
+	}
+
 	enc = kzalloc(sizeof(*enc) + sizeof(*con), GFP_KERNEL);
 	if (!enc) {
 		DRM_INFO("Failed to allocate LVDS output\n");
@@ -1398,59 +1466,14 @@ via_lvds_init(struct drm_device *dev)
 	drm_connector_helper_add(&con->base, &via_lcd_connector_helper_funcs);
 	drm_connector_register(&con->base);
 
-	switch (dev->pdev->device) {
-	case PCI_DEVICE_ID_VIA_VX875:
-	case PCI_DEVICE_ID_VIA_VX900_VGA:
-		con->ddc_bus = via_find_ddc_bus(0x2C);
-		break;
-	default:
-		con->ddc_bus = via_find_ddc_bus(0x31);
-		break;
-	}
-
-	edid = drm_get_edid(&con->base, con->ddc_bus);
-	if (!edid) {
-		if (!machine_is_olpc()) {
-			u8 mask = BIT(1);
-
-			if (dev->pdev->device == PCI_DEVICE_ID_VIA_CLE266)
-				mask = BIT(3);
-
-			/* First we have to make sure a LVDS is present */
-			reg_value = (vga_rcrt(VGABASE, 0x3B) & mask);
-			if (!reg_value)
-				goto no_device;
-
-			/* If no edid then we detect the mode using
-			 * the scratch pad registers. */
-			reg_value = (vga_rcrt(VGABASE, 0x3F) & 0x0F);
-
-			switch (reg_value) {
-			case 0x04:
-			case 0x05:
-			case 0x06:
-			case 0x09:
-			case 0x0B:
-			case 0x0D:
-			case 0x0E:
-			case 0x0F:
-				dual_channel = true;
-				break;
-
-			default:
-				break;
-			}
-
-			DRM_DEBUG("panel index %x detected\n", reg_value);
-
-		}
+	if (dev_priv->int_fp1_presence) {
+		con->i2c_bus = dev_priv->int_fp1_i2c_bus;
+	} else if (dev_priv->int_fp2_presence) {
+		con->i2c_bus = dev_priv->int_fp2_i2c_bus;
 	} else {
-		/* 00 LVDS1 + LVDS2  10 = Dual channel. Other are reserved */
-		if ((vga_rseq(VGABASE, 0x13) >> 6) == 2)
-			dual_channel = true;
-
-		kfree(edid);
+		con->i2c_bus = VIA_I2C_NONE;
 	}
+
 	con->base.doublescan_allowed = false;
 	con->base.interlace_allowed = false;
 
@@ -1479,10 +1502,6 @@ via_lvds_init(struct drm_device *dev)
 
 	/* Put it all together */
 	drm_mode_connector_attach_encoder(&con->base, &enc->base);
+exit:
 	return;
-
-no_device:
-	drm_connector_unregister(&con->base);
-	drm_connector_cleanup(&con->base);
-	kfree(enc);
 }
diff --git a/drivers/gpu/drm/openchrome/via_tmds.c b/drivers/gpu/drm/openchrome/via_tmds.c
index 06f8a2effade..d9e45d254206 100644
--- a/drivers/gpu/drm/openchrome/via_tmds.c
+++ b/drivers/gpu/drm/openchrome/via_tmds.c
@@ -304,38 +304,82 @@ static const struct drm_encoder_helper_funcs
 };
 
 static enum drm_connector_status
-via_dvi_detect(struct drm_connector *connector, bool force)
+via_tmds_detect(struct drm_connector *connector, bool force)
 {
 	struct via_connector *con = container_of(connector, struct via_connector, base);
 	enum drm_connector_status ret = connector_status_disconnected;
+	struct i2c_adapter *i2c_bus;
 	struct edid *edid = NULL;
 
+	DRM_DEBUG_KMS("Entered %s.\n", __func__);
+
 	drm_mode_connector_update_edid_property(connector, edid);
-	if (con->ddc_bus) {
-		edid = drm_get_edid(connector, con->ddc_bus);
+
+	if (con->i2c_bus & VIA_I2C_BUS2) {
+		i2c_bus = via_find_ddc_bus(0x31);
+	} else if (con->i2c_bus & VIA_I2C_BUS3) {
+		i2c_bus = via_find_ddc_bus(0x2c);
+	} else {
+		i2c_bus = NULL;
+	}
+
+	if (i2c_bus) {
+		edid = drm_get_edid(connector, i2c_bus);
 		if (edid) {
 			if ((connector->connector_type == DRM_MODE_CONNECTOR_DVIA) ^
-			    (edid->input & DRM_EDID_INPUT_DIGITAL)) {
+				(edid->input & DRM_EDID_INPUT_DIGITAL)) {
 				drm_mode_connector_update_edid_property(connector, edid);
 				ret = connector_status_connected;
 			}
+
 			kfree(edid);
 		}
 	}
+
+	DRM_DEBUG_KMS("Exiting %s.\n", __func__);
 	return ret;
 }
 
 static const struct drm_connector_funcs via_dvi_connector_funcs = {
 	.dpms = drm_helper_connector_dpms,
-	.detect = via_dvi_detect,
+	.detect = via_tmds_detect,
 	.fill_modes = drm_helper_probe_single_connector_modes,
 	.set_property = via_connector_set_property,
 	.destroy = via_connector_destroy,
 };
 
+static int via_tmds_get_modes(struct drm_connector *connector)
+{
+	struct via_connector *con = container_of(connector, struct via_connector, base);
+	struct i2c_adapter *i2c_bus;
+	struct edid *edid = NULL;
+	int count = 0;
+
+	DRM_DEBUG_KMS("Entered %s.\n", __func__);
+
+	if (con->i2c_bus & VIA_I2C_BUS2) {
+		i2c_bus = via_find_ddc_bus(0x31);
+	} else if (con->i2c_bus & VIA_I2C_BUS3) {
+		i2c_bus = via_find_ddc_bus(0x2c);
+	} else {
+		i2c_bus = NULL;
+	}
+
+	if (i2c_bus) {
+		edid = drm_get_edid(&con->base, i2c_bus);
+		if (edid) {
+			count = drm_add_edid_modes(connector, edid);
+			kfree(edid);
+		}
+	}
+
+	DRM_DEBUG_KMS("Exiting %s.\n", __func__);
+	return count;
+}
+
 static const struct drm_connector_helper_funcs via_dvi_connector_helper_funcs = {
 	.mode_valid = via_connector_mode_valid,
-	.get_modes = via_get_edid_modes,
+	.get_modes = via_tmds_get_modes,
 	.best_encoder = via_best_encoder,
 };
 
@@ -423,7 +467,6 @@ void via_tmds_init(struct drm_device *dev)
 	struct via_device *dev_priv = dev->dev_private;
 	struct via_connector *con;
 	struct via_encoder *enc;
-	int i2c_port = 0x31;
 
 	DRM_DEBUG_KMS("Entered %s.\n", __func__);
 
@@ -459,7 +502,7 @@ void via_tmds_init(struct drm_device *dev)
 	drm_connector_helper_add(&con->base, &via_dvi_connector_helper_funcs);
 	drm_connector_register(&con->base);
 
-	con->ddc_bus = via_find_ddc_bus(i2c_port);
+	con->i2c_bus = dev_priv->int_tmds_i2c_bus;
 	con->base.doublescan_allowed = false;
 	con->base.interlace_allowed = true;
 	INIT_LIST_HEAD(&con->props);
@@ -473,7 +516,7 @@ void via_tmds_init(struct drm_device *dev)
 	drm_connector_helper_add(&con->base, &via_dvi_connector_helper_funcs);
 	drm_connector_register(&con->base);
 
-	con->ddc_bus = via_find_ddc_bus(i2c_port);
+	con->i2c_bus = dev_priv->int_tmds_i2c_bus;
 	con->base.doublescan_allowed = false;
 	con->base.interlace_allowed = true;
 	INIT_LIST_HEAD(&con->props);


More information about the Openchrome-devel mailing list