static adv_error fb_detect(void) { struct fb_var_screeninfo var; /* test bit depth */ log_std(("video:fb: test bits depths\n")); if (fb_test(&var, 25175200, 640, 656, 752, 800, 480, 490, 492, 525, 0, 0, 1, 1, MODE_FLAGS_INDEX_PALETTE8) != 0 || (var.bits_per_pixel != 8)) { log_std(("video:fb: disable palette8 bits modes, not supported\n")); fb_state.flags &= ~VIDEO_DRIVER_FLAGS_MODE_PALETTE8; } if (fb_test(&var, 25175200, 640, 656, 752, 800, 480, 490, 492, 525, 0, 0, 1, 1, MODE_FLAGS_INDEX_BGR15) != 0 || (var.bits_per_pixel != 16 || var.green.length != 5)) { log_std(("video:fb: disable bgr15 bits modes, not supported\n")); fb_state.flags &= ~VIDEO_DRIVER_FLAGS_MODE_BGR15; } if (fb_test(&var, 25175200, 640, 656, 752, 800, 480, 490, 492, 525, 0, 0, 1, 1, MODE_FLAGS_INDEX_BGR16) != 0 || (var.bits_per_pixel != 16 || var.green.length != 6)) { log_std(("video:fb: disable bgr16 bits modes, not supported\n")); fb_state.flags &= ~VIDEO_DRIVER_FLAGS_MODE_BGR16; } if (fb_test(&var, 25175200, 640, 656, 752, 800, 480, 490, 492, 525, 0, 0, 1, 1, MODE_FLAGS_INDEX_BGR24) != 0 || (var.bits_per_pixel != 24 || var.green.length != 8)) { log_std(("video:fb: disable bgr24 bits modes, not supported\n")); fb_state.flags &= ~VIDEO_DRIVER_FLAGS_MODE_BGR24; } if (fb_test(&var, 25175200, 640, 656, 752, 800, 480, 490, 492, 525, 0, 0, 1, 1, MODE_FLAGS_INDEX_BGR32) != 0 || (var.bits_per_pixel != 32 || var.green.length != 8)) { log_std(("video:fb: disable bgr32 bits modes, not supported\n")); fb_state.flags &= ~VIDEO_DRIVER_FLAGS_MODE_BGR32; } /* test interlace modes */ log_std(("video:fb: test interlace modes\n")); if (fb_test_auto(&var, 40280300, 1024, 1048, 1200, 1280, 768, 784, 787, 840, 0, 1, 1, 1) != 0 || (var.vmode & FB_VMODE_INTERLACED) == 0) { log_std(("video:fb: disable interlaced modes, not supported\n")); fb_state.flags &= ~VIDEO_DRIVER_FLAGS_PROGRAMMABLE_INTERLACE; } if (strstr(fb_state.fixinfo.id, "GeForce")!=0) { log_std(("video:fb: disable interlaced modes, not supported by the GeForce hardware\n")); /* the GeForce hardware doesn't support interlace */ fb_state.flags &= ~VIDEO_DRIVER_FLAGS_PROGRAMMABLE_INTERLACE; } /* test doublescan modes */ log_std(("video:fb: test doublescan modes\n")); if (fb_test_auto(&var, 12676000, 320, 328, 376, 400, 240, 245, 246, 262, 1, 0, 1, 1) != 0 || (var.vmode & FB_VMODE_DOUBLE) == 0) { log_std(("video:fb: disable doublescan modes, not supported\n")); fb_state.flags &= ~VIDEO_DRIVER_FLAGS_PROGRAMMABLE_DOUBLESCAN; } if (strstr(fb_state.fixinfo.id, "nVidia")!=0) { log_std(("video:fb: disable doublescan modes, not supported by the nVidia driver\n")); /* the Linux 2.4.20/2.4.21/2.4.22/2.4.23/2.4.24/2.4.25 driver doesn't support doublescan */ fb_state.flags &= ~VIDEO_DRIVER_FLAGS_PROGRAMMABLE_DOUBLESCAN; } return 0; }
int main(int argc, const char *argv[]) { fb_test(); return 0; }