Re: [PATCH] radeonfb: add support for newer cards

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Il Mon, Jan 01, 2007 at 10:25:51PM +0100, Luca Tettamanti ha scritto: 
> Hi Ben, Andrew,
> I've rebased 'ATOM BIOS patch' from Solomon Peachy to apply to 2.6.20.
> The patch adds support for newer Radeon cards and is mainly based on
> X.Org code.

And - for an easier review - this is the diff between
radeonfb-atom-2.6.19-v6a.diff from Solomon and my patch (whitespace-only
changes not included).

---
 drivers/video/aty/radeon_base.c    |   26 +-
 drivers/video/aty/radeon_i2c.c     |    8 
 drivers/video/aty/radeon_monitor.c |  347 ++++++++++++++++++-----------------
 3 files changed, 198 insertions(+), 183 deletions(-)

diff -wu linux-2.6/drivers/video/aty/radeon_base.c linux-2.6.git/drivers/video/aty/radeon_base.c
--- linux-2.6/drivers/video/aty/radeon_base.c	2007-01-01 22:31:14.000000000 +0100
+++ linux-2.6.git/drivers/video/aty/radeon_base.c	2007-01-01 19:38:54.000000000 +0100
@@ -287,7 +287,6 @@
 /*
  * globals
  */
-        
 static char *mode_option;
 static char *monitor_layout;
 static int noaccel = 0;
@@ -663,21 +662,20 @@
 {
 #ifdef CONFIG_PPC_OF
 	  rinfo->is_atom_bios = 0;
-	  rinfo->get_pll_info = radeon_get_pll_info_openfirmware;
-	  rinfo->get_lvds_info = radeon_get_lvds_info_openfirmware;
+	rinfo->radeon_get_pll_info = radeon_get_pll_info_openfirmware;
+	rinfo->radeon_get_lvds_info = radeon_get_lvds_info_openfirmware;
 	  rinfo->radeon_get_tmds_info = NULL;
-	  rinfo->get_conn_info = radeon_get_conn_info_openfirmware;
+	rinfo->radeon_get_conn_info = radeon_get_conn_info_openfirmware;
 #else
 	  int tmp = rinfo->fp_bios_start + 4;
+	unsigned char sign[4];
+
+	sign[0] = BIOS_IN8(tmp);
+	sign[1] = BIOS_IN8(tmp + 1);
+	sign[2] = BIOS_IN8(tmp + 2);
+	sign[3] = BIOS_IN8(tmp + 3);
 
-	  if ((BIOS_IN8(tmp) == 'A' &&
-	       BIOS_IN8(tmp+1) == 'T' &&
-	       BIOS_IN8(tmp+2) == 'O' &&
-	       BIOS_IN8(tmp+3) == 'M') ||
-	      (BIOS_IN8(tmp) == 'M' &&
-	       BIOS_IN8(tmp+1) == 'O' &&
-	       BIOS_IN8(tmp+2) == 'T' &&
-	       BIOS_IN8(tmp+3) == 'A')) {
+	if (!memcmp(sign, "ATOM", 4) || !memcmp(sign, "MOTA", 4)) {
 		  rinfo->is_atom_bios = 1;
 
 		  rinfo->atom_data_start = BIOS_IN16(rinfo->fp_bios_start + 32);
@@ -1075,7 +1073,8 @@
 	OUTREG(CRTC_EXT_CNTL, val);
 
 	for (i = 0 ; i < RADEON_MAX_CONNECTORS ; i++) {
-		if (i == -1) continue;
+		if (rinfo->heads[i] == -1)
+			continue;
 
 		switch (rinfo->connectors[rinfo->heads[i]].mon_type) {
 		case MT_DFP:
@@ -2571,7 +2570,6 @@
 {
         struct fb_info *info = pci_get_drvdata(pdev);
         struct radeonfb_info *rinfo = info->par;
-
 	int i;
 
         if (!rinfo)
diff -wu linux-2.6/drivers/video/aty/radeon_i2c.c linux-2.6.git/drivers/video/aty/radeon_i2c.c
--- linux-2.6/drivers/video/aty/radeon_i2c.c	2007-01-01 22:31:14.000000000 +0100
+++ linux-2.6.git/drivers/video/aty/radeon_i2c.c	2007-01-01 19:16:03.000000000 +0100
@@ -149,14 +149,18 @@
 	    (INREG(LVDS_GEN_CNTL) & (LVDS_ON|LVDS_EN))) {
 			RTRACE("radeonfb: I2C (port %d) ... found LVDS panel\n", conn->ddc_type);
 			mon_type = MT_LCD;
+			edid = NULL;
 			goto done;
 	}
 
+	if (conn->ddc_type == ddc_none)
+		return 1;
 	edid = fb_ddc_read(&rinfo->i2c[conn->ddc_type].adapter);
 
 	if (!edid) {
-	  // what about the special case where we are a DFP/LVDS, but have a DDC connection..
-	  // but no EDID? We should fall back to MT_LCD...?  XXXX
+		/* what about the special case where we are a DFP/LVDS, but have a DDC connection
+		 * but no EDID? We should fall back to MT_LCD...?  XXXX
+		 */
 		RTRACE("radeonfb: I2C (port %d) ... not found\n", conn->ddc_type);
 		mon_type = MT_NONE;
 		goto done;
diff -wu linux-2.6/drivers/video/aty/radeon_monitor.c linux-2.6.git/drivers/video/aty/radeon_monitor.c
--- linux-2.6/drivers/video/aty/radeon_monitor.c	2007-01-01 22:31:14.000000000 +0100
+++ linux-2.6.git/drivers/video/aty/radeon_monitor.c	2007-01-01 19:36:51.000000000 +0100
@@ -16,7 +16,7 @@
     {{15000, 0xa1b}, {0xffffffff, 0xa3f}, {0, 0}, {0, 0}},	/*CHIP_FAMILY_R200*/
     {{15500, 0x81b}, {0xffffffff, 0x83f}, {0, 0}, {0, 0}},	/*CHIP_FAMILY_RV250*/
     {{0, 0}, {0, 0}, {0, 0}, {0, 0}},				/*CHIP_FAMILY_RS300*/
-    {{13000, 0x400f4}, {15000, 0x400f7}, {0xffffffff, 0x400f7/*0x40111*/}, {0, 0}},	/*CHIP_FAMILY_RV280*/
+	{{13000, 0x400f4}, {15000, 0x400f7}, {0xffffffff, 0x400f7}, {0, 0}},	/*CHIP_FAMILY_RV280*/
     {{0xffffffff, 0xb01cb}, {0, 0}, {0, 0}, {0, 0}},		/*CHIP_FAMILY_R300*/
     {{0xffffffff, 0xb01cb}, {0, 0}, {0, 0}, {0, 0}},		/*CHIP_FAMILY_R350*/
     {{15000, 0xb0155}, {0xffffffff, 0xb01cb}, {0, 0}, {0, 0}},	/*CHIP_FAMILY_RV350*/
@@ -46,132 +46,6 @@
 	.vmode		= FB_VMODE_NONINTERLACED
 };
 
-#ifdef CONFIG_PPC_OF
-/*
- * Try to find monitor informations & EDID data out of the Open Firmware
- * device-tree. This also contains some "hacks" to work around a few machine
- * models with broken OF probing by hard-coding known EDIDs for some Mac
- * laptops internal LVDS panel. (XXX: not done yet)
- */
-static int __devinit radeon_parse_montype_prop(struct device_node *dp,
-					       struct radeon_connector *conn, 
-					       int hdno)
-{
-        static char *propnames[] = { "DFP,EDID", "LCD,EDID", "EDID",
-				     "EDID1", "EDID2",  NULL };
-	const u8 *pedid = NULL;
-	const u8 *pmt = NULL;
-	u8 *tmp;
-        int i;  
-	
-	RTRACE("analyzing OF properties...\n");
-	pmt = get_property(dp, "display-type", NULL);
-	if (!pmt)
-		return 1;
-	RTRACE("display-type: %s\n", pmt);
-	if (!strcmp(pmt, "LCD") || !strcmp(pmt, "DFP")) {
-		/* OF says "LCD" for DFP as well.*/
-		if (rinfo->is_mobility) {
-			conn->mon_type = MT_LCD;
-			/* Maybe check for LVDS_GEN_CNTL here ? I need to check out
-			 * what OF does when booting with lid closed
-			 */
-		} else{
-			conn->mon_type = MT_DFP;
-		}
-	} else if (!strcmp(pmt, "CRT")) {
-		conn->mon_type = MT_CRT;
-	} else {
-		if (strcmp(pmt, "NONE") != 0)
-			printk(KERN_WARNING "radeonfb: Unknown OF display-type: %s\n",
-			       pmt);
-		return 1;
-	}
-
-	for (i = 0; propnames[i] != NULL; ++i) {
-		pedid = get_property(dp, propnames[i], NULL);
-		if (pedid != NULL)
-			break;
-	}
-	/* We didn't find the EDID in the leaf node, some cards will actually
-	 * put EDID1/EDID2 in the parent, look for these (typically M6 tipb).
-	 * single-head cards have hdno == -1 and skip this step
-	 */
-	if (pedid == NULL && dp->parent && (hdno != -1))
-		pedid = get_property(dp->parent, (hdno == 0) ? "EDID1" : "EDID2", NULL);
-	if (pedid == NULL && dp->parent && (hdno == 0))
-		pedid = get_property(dp->parent, "EDID", NULL);
-	if (pedid == NULL)
-		return 1;
-
-	tmp = (u8 *)kmalloc(EDID_LENGTH, GFP_KERNEL);
-	if (tmp) {
-		memcpy(tmp, pedid, EDID_LENGTH);
-	}
-
-	conn->edid = tmp;
-
-	{
-		int found_tmds = 0;
-		int found_crt = 0;
-		int ddc_type = ddc_none;
-		// XXX what about reversed DAC/TMDS??
-		radeon_fill_conn(conn, conn->mon_type, ddc_type, &found_crt, &found_tmds);
-	}
-
-	return 0;
-}
-
-/* return a 1 on error */
-static int __devinit radeon_probe_OF_head(struct radeonfb_info *rinfo, int head_no)
-
-{
-	struct radeon_connector *conn;
-        struct device_node *dp;
-	u8 *out_EDID;
-
-	RTRACE("radeon_probe_OF_head\n");
-
-	conn = rinfo->connectors[head_no];
-
-        dp = rinfo->of_node;
-        if (dp == NULL) 
-		return 1;
-
-	if (rinfo->has_CRTC2) {
-		const char *pname;
-		int len, second = 0;
-
-		dp = dp->child;
-		do {
-			if (!dp) 
-				return 1;
-
-			pname = get_property(dp, "name", NULL);
-			if (!pname) 
-				return 1;
-
-			len = strlen(pname);
-			RTRACE("head: %s (letter: %c, head_no: %d)\n",
-			       pname, pname[len-1], head_no);
-			if (pname[len-1] == 'A' && head_no == 0) {
-				return radeon_parse_montype_prop(dp, conn, 0);
-			} else if (pname[len-1] == 'B' && head_no == 1) {
-				return radeon_parse_montype_prop(dp, conn, 1);
-			}
-			second = 1;
-			dp = dp->sibling;
-		} while(!second);
-	} else {
-		if (head_no > 0) {
-			return 1;
-		}
-		return radeon_parse_montype_prop(dp, conn, -1);
-	}
-	return 1;
-}
-#endif /* CONFIG_PPC_OF */
-
 
 int __devinit radeon_get_lvds_info_atom(struct radeonfb_info *rinfo)
 {
@@ -310,13 +184,12 @@
 void __devinit radeon_get_tmds_info(struct radeonfb_info *rinfo)
 {
 	int i;
+	int family = rinfo->family;
 
 	/* Get default TMDS infos for this chip */
 	for (i=0; i<4; i++) {
-		rinfo->tmds_pll[i].value =
-			default_tmds_pll[rinfo->family][i].value;
-		rinfo->tmds_pll[i].freq =
-			default_tmds_pll[rinfo->family][i].freq;
+		rinfo->tmds_pll[i].value = default_tmds_pll[family][i].value;
+		rinfo->tmds_pll[i].freq = default_tmds_pll[family][i].freq;
 	}
 
 	/* Get whatever the firmware provides */
@@ -431,33 +304,38 @@
 		conn->conn_type = conn_vga;
 		conn->tmds_type = tmds_unknown;
 		conn->dac_type = (*found_crt) ? dac_tvdac: dac_primary;
-		if (ddc_type == ddc_none) conn->ddc_type = (*found_crt) ? ddc_crt2 : ddc_vga;
+		if (ddc_type == ddc_none)
+			conn->ddc_type = (*found_crt) ? ddc_crt2 : ddc_vga;
 		*found_crt = 1;
 		break;
 	case MT_DFP:
 		conn->conn_type = conn_dvi_i;
 		conn->tmds_type = (*found_tmds) ? tmds_external: tmds_internal;
 		conn->dac_type = dac_unknown;
-		if (ddc_type == ddc_none) conn->ddc_type = ddc_dvi;
+		if (ddc_type == ddc_none)
+			conn->ddc_type = ddc_dvi;
 		*found_tmds = 1;
 		break;
 	case MT_LCD:
 		conn->conn_type = conn_lvds;
 		conn->tmds_type = tmds_unknown;
 		conn->dac_type = dac_unknown;
-		if (ddc_type == ddc_none) conn->ddc_type = ddc_none; //heh
+		if (ddc_type == ddc_none)
+			conn->ddc_type = ddc_none; //heh
 		break;
 	case MT_CTV:
 		conn->conn_type = conn_ctv;
 		conn->tmds_type = tmds_unknown;
 		conn->dac_type = dac_tvdac;
-		if (ddc_type == ddc_none) conn->ddc_type = ddc_vga; // XXX ddc_crt2?
+		if (ddc_type == ddc_none)
+			conn->ddc_type = ddc_vga; // XXX ddc_crt2?
 		break;
 	case MT_STV:
 		conn->conn_type = conn_stv;
 		conn->tmds_type = tmds_unknown;
 		conn->dac_type = dac_tvdac;
-		if (ddc_type == ddc_none) conn->ddc_type = ddc_vga; // XXX ddc_crt2?
+		if (ddc_type == ddc_none)
+			conn->ddc_type = ddc_vga; // XXX ddc_crt2?
 		break;
 	case MT_UNKNOWN:
 	case MT_NONE:
@@ -473,6 +351,127 @@
 	// leaves conn_digital, conn_unsupported, conn_propritetary
 }
 
+#ifdef CONFIG_PPC_OF
+/*
+ * Try to find monitor informations & EDID data out of the Open Firmware
+ * device-tree. This also contains some "hacks" to work around a few machine
+ * models with broken OF probing by hard-coding known EDIDs for some Mac
+ * laptops internal LVDS panel. (XXX: not done yet)
+ */
+static int __devinit radeon_parse_montype_prop(struct radeonfb_info *rinfo,
+					       struct device_node *dp,
+					       struct radeon_connector *conn,
+					       int hdno)
+{
+	static char *propnames[] = { "DFP,EDID", "LCD,EDID", "EDID",
+				     "EDID1", "EDID2",  NULL };
+	const u8 *pedid = NULL;
+	const u8 *pmt = NULL;
+	u8 *tmp;
+	int i;
+
+	RTRACE("analyzing OF properties...\n");
+	pmt = get_property(dp, "display-type", NULL);
+	if (!pmt)
+		return -1;
+	RTRACE("display-type: %s\n", pmt);
+	if (!strcmp(pmt, "LCD") || !strcmp(pmt, "DFP")) {
+		/* OF says "LCD" for DFP as well.*/
+		if (rinfo->is_mobility) {
+			conn->mon_type = MT_LCD;
+			/* Maybe check for LVDS_GEN_CNTL here ? I need to check out
+			 * what OF does when booting with lid closed
+			 */
+		} else{
+			conn->mon_type = MT_DFP;
+		}
+	} else if (!strcmp(pmt, "CRT")) {
+		conn->mon_type = MT_CRT;
+	} else {
+		if (strcmp(pmt, "NONE") != 0)
+			printk(KERN_WARNING "radeonfb: Unknown OF display-type: %s\n",
+			       pmt);
+		return -1;
+	}
+
+	for (i = 0; propnames[i] != NULL; ++i) {
+		pedid = get_property(dp, propnames[i], NULL);
+		if (pedid != NULL)
+			break;
+	}
+	/* We didn't find the EDID in the leaf node, some cards will actually
+	 * put EDID1/EDID2 in the parent, look for these (typically M6 tipb).
+	 * single-head cards have hdno == -1 and skip this step
+	 */
+	if (pedid == NULL && dp->parent && (hdno != -1))
+		pedid = get_property(dp->parent, (hdno == 0) ? "EDID1" : "EDID2", NULL);
+	if (pedid == NULL && dp->parent && (hdno == 0))
+		pedid = get_property(dp->parent, "EDID", NULL);
+	if (pedid == NULL)
+		return -1;
+
+	tmp = kmemdup(pedid, EDID_LENGTH, GFP_KERNEL);
+	conn->edid = tmp;
+
+	{
+		int found_tmds = 0;
+		int found_crt = 0;
+		int ddc_type = ddc_none;
+		// XXX what about reversed DAC/TMDS??
+		radeon_fill_conn(conn, conn->mon_type, ddc_type, &found_crt, &found_tmds);
+	}
+
+	return 0;
+}
+
+/* return a -1 on error */
+static int __devinit radeon_probe_OF_head(struct radeonfb_info *rinfo, int head_no)
+
+{
+	struct radeon_connector *conn;
+	struct device_node *dp;
+
+	RTRACE("radeon_probe_OF_head\n");
+
+	conn = &rinfo->connectors[head_no];
+
+	dp = rinfo->of_node;
+	if (dp == NULL)
+		return -1;
+
+	if (rinfo->has_CRTC2) {
+		const char *pname;
+		int len, second = 0;
+
+		dp = dp->child;
+		do {
+			if (!dp)
+				return -1;
+
+			pname = get_property(dp, "name", NULL);
+			if (!pname) 
+				return -1;
+
+			len = strlen(pname);
+			RTRACE("head: %s (letter: %c, head_no: %d)\n",
+			       pname, pname[len-1], head_no);
+			if (pname[len-1] == 'A' && head_no == 0) {
+				return radeon_parse_montype_prop(rinfo, dp, conn, 0);
+			} else if (pname[len-1] == 'B' && head_no == 1) {
+				return radeon_parse_montype_prop(rinfo, dp, conn, 1);
+			}
+			second = 1;
+			dp = dp->sibling;
+		} while(!second);
+	} else {
+		if (head_no > 0)
+			return -1;
+		return radeon_parse_montype_prop(rinfo, dp, conn, -1);
+	}
+	return -1;
+}
+#endif /* CONFIG_PPC_OF */
+
 /*
  * Get informations about the various connectors on this card. This is
  * the most prone to fail function as various firmwares tend to say
@@ -513,8 +512,8 @@
 		for (i = 0; i < 4; i++) {
 			conn.ddc_type = i;
 			if (!radeon_probe_i2c_connector(rinfo, &conn)) {
-
-				radeon_fill_conn(&rinfo->connectors[idx++], conn.mon_type, conn.ddc_type, &found_tmds, &found_crt); 
+				radeon_fill_conn(&rinfo->connectors[idx++], conn.mon_type, conn.ddc_type,
+						 &found_tmds, &found_crt);
 			}
 		}
 
@@ -600,10 +599,12 @@
 int __devinit radeon_get_conn_info_openfirmware(struct radeonfb_info *rinfo)
 {
 	int i;
-	int not_found = 1;
+	int found = 0;
 
-	for(i = 0 ; < 2 ; i++) {  /* Only two heads for OF! */
-		if (!radeon_probe_OF_head(rinfo, i)) found = 0;
+	/* Only two heads for OF! */
+	for(i = 0 ; i < 2 ; i++) {
+		if (!radeon_probe_OF_head(rinfo, i))
+			found = 0;
 	}
 	return found;
 }
@@ -619,6 +620,7 @@
 	int idx = 0;
 	int ddc_type, dac_type, conn_type, tmds_type, port_id;
 	int connector_found = 0;
+	int shared;
 	
 	offset = BIOS_IN16(rinfo->atom_data_start + 22);
 	if (offset == 0)
@@ -635,6 +637,7 @@
 
 	valids = BIOS_IN16(offset + 4);
 	for (i = 0; i < 8; i++) {
+		shared = 0;
 		if (!(valids & (1 << i)))
 			continue;
 		portinfo = BIOS_IN16(offset + 6 + i*2);
@@ -679,15 +682,22 @@
 		for (j = 0; j < RADEON_MAX_CONNECTORS; j++) {
 			if (port_id != ids[j])
 				continue;
-			/* Gotcha, just "update" values */
+
+			/* This port is shared. Update the values (if needed)
+			 * and probe next connector without creating a new
+			 * connector entry.
+			 */
 			if (tmds_type != tmds_unknown)
 				rinfo->connectors[j].tmds_type = tmds_type;
 			if (rinfo->connectors[j].dac_type == dac_unknown)
 				rinfo->connectors[j].dac_type = dac_type;
-			if (rinfo->connectors[j].ddc_type == dac_unknown)
-				rinfo->connectors[j].ddc_type = dac_type;
-			continue;
+			if (rinfo->connectors[j].ddc_type == ddc_none)
+				rinfo->connectors[j].ddc_type = ddc_type;
+
+			shared = 1;
 		}
+		if (shared)
+			continue;
 
 		conn_index = (ddc_type == ddc_dvi || conn_index == 1) ? 0 : 1;
 
@@ -696,7 +706,7 @@
 		 */
 		if (conn_type == conn_ctv || conn_type == conn_stv ||
 		    (rinfo->connectors[0].conn_type != conn_none &&
-		     rinfo->connectors[1].conn_type))
+		     rinfo->connectors[1].conn_type != conn_none))
 			idx = conn_add++;
 		else
 			idx = conn_index;
@@ -705,6 +715,7 @@
 		rinfo->connectors[idx].dac_type = dac_type;
 		rinfo->connectors[idx].ddc_type = ddc_type;
 		rinfo->connectors[idx].conn_type = conn_type;
+		ids[idx] = port_id;
 
 		/* increment connector_found for primary connectors only */
 		if (idx < 2)
@@ -839,10 +850,10 @@
 	    if ((connector_found < 3) &&
 		(rinfo->connectors[idx].conn_type == conn_vga)) {
 		    if (connector_found == 1) {
-			    memcpy(&rinfo->connectors[1],
-				   &rinfo->connectors[0],
+				memcpy(&rinfo->connectors[1], &rinfo->connectors[0],
 				   sizeof(struct radeon_connector));
 		    }
+
 		    /* Fixme: TV DAC is probably elsewhere ... */
 		    rinfo->connectors[0].dac_type = dac_tvdac;
 		    rinfo->connectors[0].tmds_type = tmds_unknown;
@@ -985,7 +996,8 @@
 {
 	int i;
 	
-	if (mon_type <= MT_NONE) return 0;
+	if (mon_type <= MT_NONE)
+		return 0;
 	
 	for (i = 0; i < RADEON_MAX_CONNECTORS ; i++) {
 		if (radeon_conn_monitor_compatible(mon_type, rinfo->connectors[i].conn_type) && 
@@ -1100,12 +1112,11 @@
 			if (SECONDARY_HEAD_PRESENT(rinfo)) {
 				mon_type = SECONDARY_MONITOR(rinfo);
 				if (SECONDARY_MONITOR(rinfo) > MT_NONE) {
-					if (radeon_probe_i2c_connector(rinfo, &SECONDARY_HEAD(rinfo))) {
+					if (radeon_probe_i2c_connector(rinfo, &SECONDARY_HEAD(rinfo)))
 						rinfo->connectors[rinfo->heads[1]].mon_type = mon_type;
 					}
 				}
 			}
-		}
 #endif /* CONFIG_FB_RADEON_I2C */
 		
 		/* If the user specified a bogus monitor layout... */
@@ -1127,7 +1138,9 @@
 #ifdef CONFIG_FB_RADEON_I2C
 			/* Probe each connector */
 			for(i = 0 ; i < RADEON_MAX_CONNECTORS ; i++) {
-				if (PRIMARY_MONITOR(rinfo) > MT_NONE) break;  /* only one head */
+				if (PRIMARY_MONITOR(rinfo) > MT_NONE)
+					/* only one head */
+					break;
 				if (!radeon_probe_i2c_connector(rinfo, &rinfo->connectors[i])) {
 					rinfo->heads[rinfo->num_heads] = i;
 					rinfo->connectors[i].head = rinfo->num_heads++;
@@ -1144,7 +1157,9 @@
 #ifdef CONFIG_FB_RADEON_I2C
 		/* Probe each connector in turn. */
 		for(i = 0 ; i < RADEON_MAX_CONNECTORS ; i++) {
-			if (rinfo->connectors[i].mon_type > MT_NONE) continue; /* Don't probe "detected" stuff again */
+			if (rinfo->connectors[i].mon_type > MT_NONE)
+				/* Don't probe "detected" stuff again */
+				continue;
 			if (!radeon_probe_i2c_connector(rinfo, &rinfo->connectors[i])) {
 				rinfo->heads[rinfo->num_heads] = i;
 				rinfo->connectors[i].head = rinfo->num_heads++;
@@ -1166,17 +1181,17 @@
 		}
 
 		/* Probe for monitors on the primary and secondary crtc heads */
-		if (PRIMARY_MONITOR(rinfo) <= MT_NONE) {
+		if (PRIMARY_MONITOR(rinfo) <= MT_NONE)
 			radeon_find_connector_for_mon(rinfo, radeon_crt_is_connected(rinfo, 1));
-		}
 
 		/* If we still haven't found anything, just force it to be on the CRT.. */
-		if (PRIMARY_MONITOR(rinfo) <= MT_NONE) {
+		if (PRIMARY_MONITOR(rinfo) <= MT_NONE)
 			radeon_find_connector_for_mon(rinfo, MT_CRT);
-		}
 
 		/* Always keep internal TMDS as primary head */
-		if (SECONDARY_HEAD_PRESENT(rinfo) && (SECONDARY_HEAD(rinfo).tmds_type == tmds_internal) && (SECONDARY_MONITOR(rinfo) == MT_DFP)) {
+		if (SECONDARY_HEAD_PRESENT(rinfo) &&
+		    (SECONDARY_HEAD(rinfo).tmds_type == tmds_internal) &&
+		    (SECONDARY_MONITOR(rinfo) == MT_DFP)) {
 			int head = rinfo->heads[0];
 			rinfo->heads[0] = rinfo->heads[1];
 			rinfo->heads[1] = head;
@@ -1186,7 +1201,6 @@
 
 	/* Dump out the heads we've found so far */
 	for (i = 0; i < RADEON_MAX_CONNECTORS; i++) {
-		
 		if (rinfo->connectors[i].conn_type == conn_none)
 			continue;
 		printk(KERN_INFO " * Connector %d is %s. Head %d, Monitor: %s ", i+1,
@@ -1195,11 +1209,12 @@
 		       rinfo->connectors[i].mon_type == MT_UNKNOWN  ?
 		         "Not Probed Yet" : 
 		         mon_type_name[rinfo->connectors[i].mon_type]);
-		if (rinfo->connectors[i].edid) {
+
+		if (rinfo->connectors[i].edid)
 			printk("(EDID probed)\n");
-		} else {
+		else
 			printk("\n");
-		}
+
 		printk(KERN_INFO "   ddc port: %d, dac: %d, tmds: %d\n",
 		       rinfo->connectors[i].ddc_type,
 		       rinfo->connectors[i].dac_type,
@@ -1216,7 +1231,7 @@
 	 * LCD Flat panels should use fixed dividers, we enfore that on
 	 * PPC only for now...
 	 */
-	If (!rinfo->panel_info.use_bios_dividers && (PRIMARY_MONITOR(rinfo) == MT_LCD) &&
+	if (!rinfo->panel_info.use_bios_dividers && (PRIMARY_MONITOR(rinfo) == MT_LCD) &&
 	    rinfo->is_mobility) {
 		int ppll_div_sel;
 		u32 ppll_divn;
@@ -1235,7 +1250,7 @@
 		       ppll_div_sel);
 		return 0;
 	}
-	return 1;
+	return -ENODEV;
 }
 #endif /* CONFIG_PPC_OF */
 
@@ -1316,10 +1331,9 @@
 	if ((PRIMARY_MONITOR(rinfo) <= MT_NONE) &&
 	    rinfo->is_mobility && 
 	    rinfo->radeon_get_lvds_info) {
-		if (! rinfo->radeon_get_lvds_info(rinfo)) {
+		if (!rinfo->radeon_get_lvds_info(rinfo))
 			radeon_find_connector_for_mon(rinfo, MT_LCD);
 		}
-	}
 #endif
 
 	/*
@@ -1383,7 +1397,6 @@
 		PRIMARY_HEAD(rinfo).modedb_size = info->monspecs.modedb_len;
 	}
 
-	
 	/*
 	 * Finally, if we don't have panel infos we need to figure some (or
 	 * we try to read it from card), we try to pick a default mode


Luca
-- 
"L'ottimista pensa che questo sia il migliore dei mondi possibili. 
 Il pessimista sa che e` vero" -- J. Robert Oppenheimer
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux