Rudolf Cornelissen 4/2003-6/2004
*/
#define MODULE_BIT 0x00002000
#include "nm_std.h"
static void set_nm2070(void)
{
si->ps.f_ref = 14.31818;
si->ps.max_system_vco = 65;
si->ps.min_system_vco = 11;
si->ps.max_pixel_vco = 65;
si->ps.min_pixel_vco = 11;
si->ps.max_dac1_clock = 65;
si->ps.max_dac1_clock_8 = 65;
si->ps.max_dac1_clock_16 = 65;
si->ps.max_dac1_clock_24 = 0;
si->ps.memory_size = 896;
si->ps.curmem_size = 2048;
si->ps.max_crtc_width = 1024;
si->ps.max_crtc_height = 1000;
si->ps.std_engine_clock = 0;
}
static void set_nm2090_nm2093(void)
{
si->ps.f_ref = 14.31818;
si->ps.max_system_vco = 80;
si->ps.min_system_vco = 11;
si->ps.max_pixel_vco = 80;
si->ps.min_pixel_vco = 11;
si->ps.max_dac1_clock = 80;
si->ps.max_dac1_clock_8 = 80;
si->ps.max_dac1_clock_16 = 80;
si->ps.max_dac1_clock_24 = 65;
si->ps.memory_size = 1152;
si->ps.curmem_size = 2048;
si->ps.max_crtc_width = 1024;
si->ps.max_crtc_height = 1000;
si->ps.std_engine_clock = 0;
}
static void set_nm2097(void)
{
si->ps.f_ref = 14.31818;
si->ps.max_system_vco = 80;
si->ps.min_system_vco = 11;
si->ps.max_pixel_vco = 80;
si->ps.min_pixel_vco = 11;
si->ps.max_dac1_clock = 80;
si->ps.max_dac1_clock_8 = 80;
si->ps.max_dac1_clock_16 = 80;
si->ps.max_dac1_clock_24 = 65;
si->ps.memory_size = 1152;
si->ps.curmem_size = 1024;
si->ps.max_crtc_width = 1024;
si->ps.max_crtc_height = 1000;
si->ps.std_engine_clock = 0;
}
static void set_nm2160(void)
{
si->ps.f_ref = 14.31818;
si->ps.max_system_vco = 90;
si->ps.min_system_vco = 11;
si->ps.max_pixel_vco = 90;
si->ps.min_pixel_vco = 11;
si->ps.max_dac1_clock = 90;
si->ps.max_dac1_clock_8 = 90;
si->ps.max_dac1_clock_16 = 90;
si->ps.max_dac1_clock_24 = 70;
si->ps.memory_size = 2048;
si->ps.curmem_size = 1024;
si->ps.max_crtc_width = 1024;
si->ps.max_crtc_height = 1000;
si->ps.std_engine_clock = 0;
}
static void set_nm2200(void)
{
si->ps.f_ref = 14.31818;
si->ps.max_system_vco = 110;
si->ps.min_system_vco = 11;
si->ps.max_pixel_vco = 110;
si->ps.min_pixel_vco = 11;
si->ps.max_dac1_clock = 110;
si->ps.max_dac1_clock_8 = 110;
si->ps.max_dac1_clock_16 = 110;
si->ps.max_dac1_clock_24 = 90;
si->ps.memory_size = 2560;
si->ps.curmem_size = 1024;
si->ps.max_crtc_width = 1280;
si->ps.max_crtc_height = 1024;
si->ps.std_engine_clock = 0;
}
static void set_nm2230(void)
{
si->ps.f_ref = 14.31818;
si->ps.max_system_vco = 110;
si->ps.min_system_vco = 11;
si->ps.max_pixel_vco = 110;
si->ps.min_pixel_vco = 11;
si->ps.max_dac1_clock = 110;
si->ps.max_dac1_clock_8 = 110;
si->ps.max_dac1_clock_16 = 110;
si->ps.max_dac1_clock_24 = 90;
si->ps.memory_size = 3008;
si->ps.curmem_size = 1024;
si->ps.max_crtc_width = 1280;
si->ps.max_crtc_height = 1024;
si->ps.std_engine_clock = 0;
}
static void set_nm2360(void)
{
si->ps.f_ref = 14.31818;
si->ps.max_system_vco = 110;
si->ps.min_system_vco = 11;
si->ps.max_pixel_vco = 110;
si->ps.min_pixel_vco = 11;
si->ps.max_dac1_clock = 110;
si->ps.max_dac1_clock_8 = 110;
si->ps.max_dac1_clock_16 = 110;
si->ps.max_dac1_clock_24 = 90;
si->ps.memory_size = 4096;
si->ps.curmem_size = 1024;
si->ps.max_crtc_width = 1280;
si->ps.max_crtc_height = 1024;
si->ps.std_engine_clock = 0;
}
static void set_nm2380(void)
{
si->ps.f_ref = 14.31818;
si->ps.max_system_vco = 110;
si->ps.min_system_vco = 11;
si->ps.max_pixel_vco = 110;
si->ps.min_pixel_vco = 11;
si->ps.max_dac1_clock = 110;
si->ps.max_dac1_clock_8 = 110;
si->ps.max_dac1_clock_16 = 110;
si->ps.max_dac1_clock_24 = 90;
si->ps.memory_size = 6144;
si->ps.curmem_size = 1024;
si->ps.max_crtc_width = 1280;
si->ps.max_crtc_height = 1024;
si->ps.std_engine_clock = 0;
}
void set_specs(void)
{
uint8 size_outputs, type;
LOG(8,("INFO: setting cardspecs\n"));
switch (si->ps.card_type)
{
case NM2070:
set_nm2070();
break;
case NM2090:
case NM2093:
set_nm2090_nm2093();
break;
case NM2097:
set_nm2097();
break;
case NM2160:
set_nm2160();
break;
case NM2200:
set_nm2200();
break;
case NM2230:
set_nm2230();
break;
case NM2360:
set_nm2360();
break;
case NM2380:
set_nm2380();
break;
}
size_outputs = ISAGRPHR(PANELCTRL1);
type = ISAGRPHR(PANELTYPE);
switch ((size_outputs & 0x18) >> 3)
{
case 0x00 :
si->ps.panel_width = 640;
si->ps.panel_height = 480;
break;
case 0x01 :
si->ps.panel_width = 800;
si->ps.panel_height = 600;
break;
case 0x02 :
si->ps.panel_width = 1024;
si->ps.panel_height = 768;
break;
case 0x03 :
si->ps.panel_width = 1280;
si->ps.panel_height = 1024;
}
si->ps.panel_type = (type & 0x12);
si->ps.outputs = (size_outputs & 0x03);
if (si->ps.outputs == 0)
{
LOG(4, ("INFO: illegal outputmode detected, assuming internal mode!\n"));
si->ps.outputs = 2;
}
}
void dump_specs(void)
{
LOG(2,("INFO: cardspecs and settings follow:\n"));
LOG(2,("f_ref: %fMhz\n", si->ps.f_ref));
LOG(2,("max_system_vco: %dMhz\n", si->ps.max_system_vco));
LOG(2,("min_system_vco: %dMhz\n", si->ps.min_system_vco));
LOG(2,("max_pixel_vco: %dMhz\n", si->ps.max_pixel_vco));
LOG(2,("min_pixel_vco: %dMhz\n", si->ps.min_pixel_vco));
LOG(2,("std_engine_clock: %dMhz\n", si->ps.std_engine_clock));
LOG(2,("max_dac1_clock: %dMhz\n", si->ps.max_dac1_clock));
LOG(2,("max_dac1_clock_8: %dMhz\n", si->ps.max_dac1_clock_8));
LOG(2,("max_dac1_clock_16: %dMhz\n", si->ps.max_dac1_clock_16));
LOG(2,("max_dac1_clock_24: %dMhz\n", si->ps.max_dac1_clock_24));
LOG(2,("card memory_size: %dKbytes\n", si->ps.memory_size));
LOG(2,("card curmem_size: %dbytes\n", si->ps.curmem_size));
LOG(2,("card max_crtc_width: %d\n", si->ps.max_crtc_width));
LOG(2,("card max_crtc_height: %d\n", si->ps.max_crtc_height));
switch (si->ps.panel_type)
{
case 0x00:
LOG(2, ("B/W dualscan LCD panel detected\n"));
break;
case 0x02:
LOG(2, ("color dualscan LCD panel detected\n"));
break;
case 0x10:
LOG(2, ("B/W TFT LCD panel detected\n"));
break;
case 0x12:
LOG(2, ("color TFT LCD panel detected\n"));
break;
}
LOG(2,("internal panel width: %d\n", si->ps.panel_width));
LOG(2,("internal panel height: %d\n", si->ps.panel_height));
switch (si->ps.outputs)
{
case 0x01:
LOG(2, ("external CRT only mode preset\n"));
break;
case 0x02:
LOG(2, ("internal LCD only mode preset\n"));
break;
case 0x03:
LOG(2, ("simultaneous LCD/CRT mode preset\n"));
break;
}
LOG(2,("INFO: end cardspecs and settings.\n"));
}