|
|
| |
RTRACE("Starting monitor auto detection...\n"); | RTRACE("Starting monitor auto detection...\n"); |
| |
#if DEBUG && defined(CONFIG_FB_RADEON_I2C) |
|
{ |
|
u8 *EDIDs[4] = { NULL, NULL, NULL, NULL }; |
|
int mon_types[4] = {MT_NONE, MT_NONE, MT_NONE, MT_NONE}; |
|
int i; |
|
|
|
for (i = 0; i < 4; i++) |
|
mon_types[i] = radeon_probe_i2c_connector(rinfo, |
|
i+1, &EDIDs[i]); |
|
} |
|
#endif /* DEBUG */ |
|
/* | /* |
* Old single head cards | * Old single head cards |
*/ | */ |
|
|
if (!BIOS_IN8(tmp + i*2) && i > 1) | if (!BIOS_IN8(tmp + i*2) && i > 1) |
break; | break; |
tmp0 = BIOS_IN16(tmp + i*2); | tmp0 = BIOS_IN16(tmp + i*2); |
if ((!(tmp0 & 0x01)) && (((tmp0 >> 8) & 0x0f) == ddc_dvi)) { |
if ((!(tmp0 & 0x01)) && ((((tmp0 >> 8) & 0x0f) == ddc_dvi) || (((tmp0 >> 8) & 0x0f) == ddc_monid))) { |
rinfo->reversed_DAC = 1; | rinfo->reversed_DAC = 1; |
printk(KERN_INFO "radeonfb: Reversed DACs detected\n"); | printk(KERN_INFO "radeonfb: Reversed DACs detected\n"); |
} | } |
if ((((tmp0 >> 8) & 0x0f) == ddc_dvi) && ((tmp0 >> 4) & 0x01)) { |
if ((((tmp0 >> 8) & 0x0f) == ddc_dvi || (((tmp0 >> 8) & 0x0f) == ddc_monid)) && ((tmp0 >> 4) & 0x01)) { |
rinfo->reversed_TMDS = 1; | rinfo->reversed_TMDS = 1; |
printk(KERN_INFO "radeonfb: Reversed TMDS detected\n"); | printk(KERN_INFO "radeonfb: Reversed TMDS detected\n"); |
} | } |
|
|
/* | /* |
* Probe primary head (DVI or laptop internal panel) | * Probe primary head (DVI or laptop internal panel) |
*/ | */ |
|
printk(KERN_INFO "radeonfb: Probe primary head\n"); |
#ifdef CONFIG_PPC_OF | #ifdef CONFIG_PPC_OF |
if (rinfo->mon1_type == MT_NONE) | if (rinfo->mon1_type == MT_NONE) |
rinfo->mon1_type = radeon_probe_OF_head(rinfo, 0, | rinfo->mon1_type = radeon_probe_OF_head(rinfo, 0, |
|
|
#endif /* CONFIG_PPC_OF */ | #endif /* CONFIG_PPC_OF */ |
#ifdef CONFIG_FB_RADEON_I2C | #ifdef CONFIG_FB_RADEON_I2C |
if (rinfo->mon1_type == MT_NONE) | if (rinfo->mon1_type == MT_NONE) |
|
rinfo->mon1_type = radeon_probe_i2c_connector(rinfo, ddc_monid, |
|
&rinfo->mon1_EDID); |
|
if (rinfo->mon1_type == MT_NONE) |
rinfo->mon1_type = radeon_probe_i2c_connector(rinfo, ddc_dvi, | rinfo->mon1_type = radeon_probe_i2c_connector(rinfo, ddc_dvi, |
&rinfo->mon1_EDID); | &rinfo->mon1_EDID); |
if (rinfo->mon1_type == MT_NONE) { | if (rinfo->mon1_type == MT_NONE) { |
|
|
/* | /* |
* Probe secondary head (mostly VGA, can be DVI) | * Probe secondary head (mostly VGA, can be DVI) |
*/ | */ |
|
printk(KERN_INFO "radeonfb: Probe secondary head\n"); |
#ifdef CONFIG_PPC_OF | #ifdef CONFIG_PPC_OF |
if (rinfo->mon2_type == MT_NONE) | if (rinfo->mon2_type == MT_NONE) |
rinfo->mon2_type = radeon_probe_OF_head(rinfo, 1, | rinfo->mon2_type = radeon_probe_OF_head(rinfo, 1, |
|
|
| |
| |
/* | /* |
* This functions applyes any arch/model/machine specific fixups |
* This functions applies any arch/model/machine specific fixups |
* to the panel info. It may eventually alter EDID block as | * to the panel info. It may eventually alter EDID block as |
* well or whatever is specific to a given model and not probed | * well or whatever is specific to a given model and not probed |
* properly by the default code | * properly by the default code |