- Added support for Radeon Mobility 9600/9700 (0x4e50).

- Corrected wrong ID association (0x4e50 is M11-based, not M10-based).
- Implemented fixed dividers support for laptop panel refresh rate.



git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@19209 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Bruno G. Albuquerque 2006-11-05 01:54:11 +00:00
parent 73d0124dbb
commit 707e075a41
8 changed files with 47 additions and 6 deletions

View File

@ -44,8 +44,10 @@ typedef struct {
uint8 dummy[15];
uint16 panel_pwr_delay; // 44
uint8 dummy2[18];
uint16 ref_div; // 46
uint8 post_div; // 48
uint8 feedback_div; // 49
uint8 dummy2[14];
uint16 fpi_timing_ofs[20]; // 64
} __attribute__ ((packed)) FPI_BLOCK;

View File

@ -114,7 +114,8 @@ typedef enum {
rt_m10, // mobile Radeon 9600
rt_rv360, // Radeon 9600
rt_r350, // Radeon 9800
rt_r360 // Radeon 9800
rt_r360, // Radeon 9800
rt_m11 // Radeon 9700 Mobility
} radeon_type;
@ -166,6 +167,10 @@ typedef struct {
bool is_fp2; // true, if second flat panel
// display_type_e disp_type;
uint16 ref_div;
uint8 post_div;
uint8 feedback_div;
bool fixed_dividers;
uint64 h_ratio; // current stretch ratio, needed for overlays
uint64 v_ratio; // (mode_res/native_res; 32.32)

View File

@ -204,6 +204,13 @@ void Radeon_SetMode(
Radeon_CalcCRTPLLDividers( &si->pll, mode, &dividers );
else
dividers = tv_params->crt_dividers;
if( (disp_devices & dd_lvds) != 0 && si->flatpanels[0].fixed_dividers ) {
SHOW_FLOW0( 0, "Using fixed dividers for laptop panel" );
dividers.feedback = si->flatpanels[0].feedback_div;
dividers.post_code = si->flatpanels[0].post_div;
dividers.ref = si->flatpanels[0].ref_div;
}
Radeon_CalcPLLRegisters( mode, &dividers, &pll_values );

View File

@ -321,6 +321,7 @@ static bool Radeon_DetectTVCRT( accelerator_info *ai )
case rt_rv360:
case rt_r350:
case rt_r360:
case rt_m11:
return Radeon_DetectTVCRT_R300( ai );
case rt_r200:
@ -679,6 +680,7 @@ static display_device_e Radeon_DetectTV( accelerator_info *ai, bool tv_crt_found
case rt_rv350:
case rt_rv360:
case rt_m10:
case rt_m11:
case rt_r350:
case rt_r360:
return Radeon_DetectTV_R300( ai );

View File

@ -61,6 +61,7 @@ void Radeon_ReadMonitorRoutingRegs(
case rt_rv360:
case rt_r350:
case rt_r360:
case rt_m11:
values->gpiopad_a = INREG( regs, RADEON_GPIOPAD_A );
break;
@ -155,6 +156,7 @@ void Radeon_CalcMonitorRouting(
case rt_r300_4p:
case rt_rv350:
case rt_m10:
case rt_m11:
case rt_rv360:
case rt_r350:
case rt_r360:
@ -207,6 +209,7 @@ void Radeon_CalcMonitorRouting(
case rt_r300_4p:
case rt_rv350:
case rt_m10:
case rt_m11:
case rt_rv360:
case rt_r350:
case rt_r360:
@ -243,6 +246,7 @@ void Radeon_CalcMonitorRouting(
case rt_rv350:
case rt_rv360:
case rt_m10:
case rt_m11:
case rt_r350:
case rt_r360:
values->gpiopad_a &= ~1;
@ -353,6 +357,7 @@ void Radeon_CalcMonitorRouting(
case rt_r300_4p:
case rt_rv350:
case rt_m10:
case rt_m11:
case rt_rv360:
case rt_r350:
case rt_r360:
@ -486,6 +491,7 @@ void Radeon_ProgramMonitorRouting(
case rt_r300_4p:
case rt_rv350:
case rt_m10:
case rt_m11:
case rt_rv360:
case rt_r350:
case rt_r360:

View File

@ -326,6 +326,7 @@ static void loadMicroEngineRAMData( device_info *di )
case rt_r300_4p:
case rt_rv350:
case rt_rv360:
case rt_m11:
case rt_r350:
case rt_r360:
microcode = r300_cp_microcode;

View File

@ -278,6 +278,14 @@ static bool Radeon_GetBIOSDFPInfo( device_info *di )
if( di->fp_info.panel_pwr_delay > 2000 || di->fp_info.panel_pwr_delay < 0 )
di->fp_info.panel_pwr_delay = 2000;
di->fp_info.ref_div = fpi.ref_div;
di->fp_info.post_div = fpi.post_div;
di->fp_info.feedback_div = fpi.feedback_div;
di->fp_info.fixed_dividers =
di->fp_info.ref_div != 0 && di->fp_info.feedback_div > 3;
// there might be multiple supported resolutions stored;
// we are looking for native resolution
for( i = 0; i < 20; ++i ) {

View File

@ -79,6 +79,10 @@
#define DEVICE_ID_RADEON_NF 0x4e46
#define DEVICE_ID_RADEON_NG 0x4e47
// m11
#define DEVICE_ID_RADEON_NP 0x4e50 // Mobility 9700
#define DEVICE_ID_RADEON_SE 0x4e52 // Mobility 9700 SE
// r300-4P
#define DEVICE_ID_RADEON_AD 0x4144
#define DEVICE_ID_RADEON_AE 0x4145
@ -91,7 +95,7 @@
#define DEVICE_ID_RADEON_AS 0x4153
// m10
#define DEVICE_ID_RADEON_NP 0x4e50
//#define DEVICE_ID_RADEON_NP 0x4e50
// Mobility Fire GL T2 - any idea about the chip?
#define DEVICE_ID_RADEON_NT 0x4e54
@ -198,7 +202,12 @@ RadeonDevice radeon_device_list[] = {
{ DEVICE_ID_RADEON_AS, rt_rv350, "Radeon 9600 AS" },
// M10 (based on rv350)
{ DEVICE_ID_RADEON_NP, rt_m10, "Radeon Mobility 9600 NP" },
// { DEVICE_ID_RADEON_NP, rt_m10, "Radeon Mobility 9600 NP" },
// M11 (based on rv360)
{ DEVICE_ID_RADEON_NP, rt_m11, "Radeon 9700 Mobility" },
{ DEVICE_ID_RADEON_SE, rt_m11, "Radeon 9700 Mobility SE" },
// not sure about that: ROM signature is "RADEON" which means r100
{ DEVICE_ID_RADEON_NT, rt_m10, "Radeon Mobility FireGL T2" },
@ -308,7 +317,8 @@ static struct {
{ "m10", tc_internal_rt2, true, true, false, true, false },
{ "rv360", tc_internal_rt2, true, false, true, true, false },
{ "r350", tc_internal_rt2, true, false, true, true, false },
{ "r360", tc_internal_rt2, true, false, true, true, false }
{ "r360", tc_internal_rt2, true, false, true, true, false },
{ "m11", tc_internal_rt2, true, true, false, true, false }
};