* Re: [PATCH] radeonfb: add support for newer cards
[not found] <20070101212551.GA19598@dreamland.darkstar.lan>
@ 2007-01-01 21:44 ` Luca Tettamanti
2007-01-02 0:14 ` Benjamin Herrenschmidt
2007-01-02 1:35 ` Stuffed Crust
2007-01-02 0:13 ` Benjamin Herrenschmidt
1 sibling, 2 replies; 8+ messages in thread
From: Luca Tettamanti @ 2007-01-01 21:44 UTC (permalink / raw)
To: Benjamin Herrenschmidt
Cc: Andrew Morton, Solomon Peachy, linux-kernel, linux-fbdev-devel
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
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] radeonfb: add support for newer cards
[not found] <20070101212551.GA19598@dreamland.darkstar.lan>
2007-01-01 21:44 ` [PATCH] radeonfb: add support for newer cards Luca Tettamanti
@ 2007-01-02 0:13 ` Benjamin Herrenschmidt
1 sibling, 0 replies; 8+ messages in thread
From: Benjamin Herrenschmidt @ 2007-01-02 0:13 UTC (permalink / raw)
To: Luca Tettamanti
Cc: Andrew Morton, Solomon Peachy, linux-kernel, linux-fbdev-devel
On Mon, 2007-01-01 at 22:25 +0100, Luca Tettamanti wrote:
> 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.
>
> I've fixed a few things:
> - Port sharing in radeon_get_conn_info_atom; old code didn't actually
> deal with it leading to wrong monitor detection
> - Don't try to use I2C bus if BIOS says that there's no DDC channel,
> otherwise bad things happen:
> http://marc.theaimsgroup.com/?l=linux-fbdev-devel&m=116455601620186&w=2
> - Make it compile on PPC (hopefully...)
> - Cleanup whitespaces and coding style (only in the code alreay affected
> by the patch, I didn't touched all the driver...)
>
> Signed-Off-By: Luca Tettamanti <kronos.it@gmail.com>
> Signed-Off-By: Solomon Peachy <pizza@shaftnet.org> (I guess...)
I've done my own changes here. Can you send me a patch against Solomon's
version of the driver instead of a combined patch ?
Ben.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] radeonfb: add support for newer cards
2007-01-01 21:44 ` [PATCH] radeonfb: add support for newer cards Luca Tettamanti
@ 2007-01-02 0:14 ` Benjamin Herrenschmidt
2007-01-02 0:38 ` Luca
2007-01-02 1:35 ` Stuffed Crust
1 sibling, 1 reply; 8+ messages in thread
From: Benjamin Herrenschmidt @ 2007-01-02 0:14 UTC (permalink / raw)
To: Luca Tettamanti
Cc: Andrew Morton, Solomon Peachy, linux-kernel, linux-fbdev-devel
On Mon, 2007-01-01 at 22:44 +0100, Luca Tettamanti wrote:
> 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).
Ah good, what I was asking for :-) I'll try to get a new patch combining
everything out asap.
Ben.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] radeonfb: add support for newer cards
2007-01-02 0:14 ` Benjamin Herrenschmidt
@ 2007-01-02 0:38 ` Luca
2007-01-03 20:57 ` Gerhard Mack
0 siblings, 1 reply; 8+ messages in thread
From: Luca @ 2007-01-02 0:38 UTC (permalink / raw)
To: Benjamin Herrenschmidt
Cc: Andrew Morton, Solomon Peachy, linux-kernel, linux-fbdev-devel
On 1/2/07, Benjamin Herrenschmidt <benh@kernel.crashing.org> wrote:
> On Mon, 2007-01-01 at 22:44 +0100, Luca Tettamanti wrote:
> > 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).
>
> Ah good, what I was asking for :-) I'll try to get a new patch combining
> everything out asap.
Great, I didn't know you were working on this, I feared that the patch
had been forgotten.
I've a X850 (R480) here, feel free to send me any patch for testing.
Luca
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] radeonfb: add support for newer cards
2007-01-01 21:44 ` [PATCH] radeonfb: add support for newer cards Luca Tettamanti
2007-01-02 0:14 ` Benjamin Herrenschmidt
@ 2007-01-02 1:35 ` Stuffed Crust
1 sibling, 0 replies; 8+ messages in thread
From: Stuffed Crust @ 2007-01-02 1:35 UTC (permalink / raw)
To: Luca Tettamanti
Cc: Benjamin Herrenschmidt, Andrew Morton, linux-kernel,
linux-fbdev-devel
[-- Attachment #1: Type: text/plain, Size: 559 bytes --]
On Mon, Jan 01, 2007 at 10:44:42PM +0100, Luca Tettamanti wrote:
> 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).
It looks good in this quick once-over..
Thanks for the rebase!
Acked-by: Solomon Peachy <pizza@shaftnet.org>
- Solomon
--
Solomon Peachy pizza at shaftnet dot org
Melbourne, FL ^^ (mail/jabber/gtalk) ^^
Quidquid latine dictum sit, altum viditur. ICQ: 1318344
[-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] radeonfb: add support for newer cards
2007-01-02 0:38 ` Luca
@ 2007-01-03 20:57 ` Gerhard Mack
2007-01-03 21:34 ` Luca
2007-01-03 22:08 ` Benjamin Herrenschmidt
0 siblings, 2 replies; 8+ messages in thread
From: Gerhard Mack @ 2007-01-03 20:57 UTC (permalink / raw)
To: Luca
Cc: Benjamin Herrenschmidt, Andrew Morton, Solomon Peachy,
linux-kernel, linux-fbdev-devel
On Tue, 2 Jan 2007, Luca wrote:
> Date: Tue, 2 Jan 2007 01:38:17 +0100
> From: Luca <kronos.it@gmail.com>
> To: Benjamin Herrenschmidt <benh@kernel.crashing.org>
> Cc: Andrew Morton <akpm@osdl.org>, Solomon Peachy <pizza@shaftnet.org>,
> linux-kernel@vger.kernel.org, linux-fbdev-devel@lists.sourceforge.net
> Subject: Re: [PATCH] radeonfb: add support for newer cards
>
> On 1/2/07, Benjamin Herrenschmidt <benh@kernel.crashing.org> wrote:
> > On Mon, 2007-01-01 at 22:44 +0100, Luca Tettamanti wrote:
> > > 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).
> >
> > Ah good, what I was asking for :-) I'll try to get a new patch combining
> > everything out asap.
>
> Great, I didn't know you were working on this, I feared that the patch
> had been forgotten.
> I've a X850 (R480) here, feel free to send me any patch for testing.
>
> Luca
Is there a list of cards this adds support for? I'm waiting on support
for the X1600
Gerhard
--
Gerhard Mack
gmack@innerfire.net
<>< As a computer I find your faith in technology amusing.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] radeonfb: add support for newer cards
2007-01-03 20:57 ` Gerhard Mack
@ 2007-01-03 21:34 ` Luca
2007-01-03 22:08 ` Benjamin Herrenschmidt
1 sibling, 0 replies; 8+ messages in thread
From: Luca @ 2007-01-03 21:34 UTC (permalink / raw)
To: Gerhard Mack
Cc: Benjamin Herrenschmidt, Andrew Morton, Solomon Peachy,
linux-kernel, linux-fbdev-devel
On 1/3/07, Gerhard Mack <gmack@innerfire.net> wrote:
> On Tue, 2 Jan 2007, Luca wrote:
>
> > Date: Tue, 2 Jan 2007 01:38:17 +0100
> > From: Luca <kronos.it@gmail.com>
> > To: Benjamin Herrenschmidt <benh@kernel.crashing.org>
> > Cc: Andrew Morton <akpm@osdl.org>, Solomon Peachy <pizza@shaftnet.org>,
> > linux-kernel@vger.kernel.org, linux-fbdev-devel@lists.sourceforge.net
> > Subject: Re: [PATCH] radeonfb: add support for newer cards
> >
> > On 1/2/07, Benjamin Herrenschmidt <benh@kernel.crashing.org> wrote:
> > > On Mon, 2007-01-01 at 22:44 +0100, Luca Tettamanti wrote:
> > > > 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).
> > >
> > > Ah good, what I was asking for :-) I'll try to get a new patch combining
> > > everything out asap.
> >
> > Great, I didn't know you were working on this, I feared that the patch
> > had been forgotten.
> > I've a X850 (R480) here, feel free to send me any patch for testing.
>
> Is there a list of cards this adds support for? I'm waiting on support
> for the X1600
The patch is for the "old" generation, R400, R480 and their mobile
versions. Unfortunately the new engine used in X1xxx cards is very
different and no docs are available from ATI.
Luca
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] radeonfb: add support for newer cards
2007-01-03 20:57 ` Gerhard Mack
2007-01-03 21:34 ` Luca
@ 2007-01-03 22:08 ` Benjamin Herrenschmidt
1 sibling, 0 replies; 8+ messages in thread
From: Benjamin Herrenschmidt @ 2007-01-03 22:08 UTC (permalink / raw)
To: Gerhard Mack
Cc: Luca, Andrew Morton, Solomon Peachy, linux-kernel,
linux-fbdev-devel
> Is there a list of cards this adds support for? I'm waiting on support
> for the X1600
This is not supported, neither by radeonfb (patches or not) nor by
X.org. X1xxx cards have a new display engine and ATI refuses to provide
any specs for it.
Note: I wonder how much of that is related to M$ new Vista DRM that
basically forbids video or sound card vendors from providing specs or
doing open source or they get "revoked" and never get to see "HD"
content...
Ben.
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2007-01-03 22:09 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20070101212551.GA19598@dreamland.darkstar.lan>
2007-01-01 21:44 ` [PATCH] radeonfb: add support for newer cards Luca Tettamanti
2007-01-02 0:14 ` Benjamin Herrenschmidt
2007-01-02 0:38 ` Luca
2007-01-03 20:57 ` Gerhard Mack
2007-01-03 21:34 ` Luca
2007-01-03 22:08 ` Benjamin Herrenschmidt
2007-01-02 1:35 ` Stuffed Crust
2007-01-02 0:13 ` Benjamin Herrenschmidt
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox