From: "Antonino A. Daplas" This patch is entirely optional. Its only advantage is reduction of kernel size by ~5-6K. a. Mark modedb as __init. b. Add CONFIG_FB_MODE_HELPERS. Unselecting this will uninclude the code for Generalized Timing Formula and the EDID parser on kernel compilation. These are used only by radeonfb, rivafb and i810fb. Signed-off-by: Antonino Daplas Signed-off-by: Andrew Morton --- 25-akpm/drivers/video/Kconfig | 11 +++++++++++ 25-akpm/drivers/video/fbmon.c | 31 +++++++++++++++++++++++++++++++ 25-akpm/drivers/video/modedb.c | 8 +++++--- 3 files changed, 47 insertions(+), 3 deletions(-) diff -puN drivers/video/fbmon.c~video-mode-handling-reduce-memory-footprint-of-fbdev drivers/video/fbmon.c --- 25/drivers/video/fbmon.c~video-mode-handling-reduce-memory-footprint-of-fbdev 2004-08-08 23:31:44.878799528 -0700 +++ 25-akpm/drivers/video/fbmon.c 2004-08-08 23:31:44.885798464 -0700 @@ -51,6 +51,7 @@ #define FBMON_FIX_HEADER 1 +#ifdef CONFIG_FB_MODE_HELPERS struct broken_edid { u8 manufacturer[4]; u32 model; @@ -1156,6 +1157,36 @@ int fb_get_mode(int flags, u32 val, stru return 0; } +#else +int fb_parse_edid(unsigned char *edid, struct fb_var_screeninfo *var) +{ + return 1; +} +void fb_edid_to_monspecs(unsigned char *edid, struct fb_monspecs *specs) +{ + specs = NULL; +} +char *get_EDID_from_firmware(struct device *dev) +{ + return NULL; +} +struct fb_videomode *fb_create_modedb(unsigned char *edid, int *dbsize) +{ + return NULL; +} +void fb_destroy_modedb(struct fb_videomode *modedb) +{ +} +int fb_get_monitor_limits(unsigned char *edid, struct fb_monspecs *specs) +{ + return 1; +} +int fb_get_mode(int flags, u32 val, struct fb_var_screeninfo *var, + struct fb_info *info) +{ + return -EINVAL; +} +#endif /* CONFIG_FB_MODE_HELPERS */ /* * fb_validate_mode - validates var against monitor capabilities diff -puN drivers/video/Kconfig~video-mode-handling-reduce-memory-footprint-of-fbdev drivers/video/Kconfig --- 25/drivers/video/Kconfig~video-mode-handling-reduce-memory-footprint-of-fbdev 2004-08-08 23:31:44.880799224 -0700 +++ 25-akpm/drivers/video/Kconfig 2004-08-08 23:31:44.886798312 -0700 @@ -38,6 +38,17 @@ config FB (e.g. an accelerated X server) and that are not frame buffer device-aware may cause unexpected results. If unsure, say N. +config FB_MODE_HELPERS + bool "Enable Video Mode Handling Helpers" + depends on FB + default y + ---help--- + This enables functions for handling video modes using the + Generalized Timing Formula and the EDID parser. A few drivers rely + on this feature such as the radeonfb, rivafb, and the i810fb. If + your driver does not take advantage of this feature, choosing Y will + just increase the kernel size by about 5K. + config FB_CIRRUS tristate "Cirrus Logic support" depends on FB && (ZORRO || PCI) diff -puN drivers/video/modedb.c~video-mode-handling-reduce-memory-footprint-of-fbdev drivers/video/modedb.c --- 25/drivers/video/modedb.c~video-mode-handling-reduce-memory-footprint-of-fbdev 2004-08-08 23:31:44.881799072 -0700 +++ 25-akpm/drivers/video/modedb.c 2004-08-08 23:31:44.888798008 -0700 @@ -39,7 +39,7 @@ const char *global_mode_option = NULL; #define DEFAULT_MODEDB_INDEX 0 -static const struct fb_videomode modedb[] = { +static const __init struct fb_videomode modedb[] = { { /* 640x400 @ 70 Hz, 31.5 kHz hsync */ NULL, 70, 640, 400, 39721, 40, 24, 39, 9, 96, 2, @@ -251,6 +251,7 @@ static const struct fb_videomode modedb[ }, }; +#ifdef CONFIG_FB_MODE_HELPERS const struct fb_videomode vesa_modes[] = { /* 0 640x350-85 VESA */ { NULL, 85, 640, 350, 31746, 96, 32, 60, 32, 64, 3, @@ -374,6 +375,8 @@ const struct fb_videomode vesa_modes[] = { NULL, 60, 1920, 1440, 3367, 352, 144, 56, 1, 224, 3, FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA }, }; +EXPORT_SYMBOL(vesa_modes); +#endif /* CONFIG_FB_MODE_HELPERS */ static int my_atoi(const char *name) { @@ -404,7 +407,7 @@ static int my_atoi(const char *name) */ int fb_try_mode(struct fb_var_screeninfo *var, struct fb_info *info, - const struct fb_videomode *mode, unsigned int bpp) + const struct fb_videomode *mode, unsigned int bpp) { int err = 0; @@ -827,5 +830,4 @@ EXPORT_SYMBOL(fb_destroy_modelist); EXPORT_SYMBOL(fb_match_mode); EXPORT_SYMBOL(fb_find_best_mode); EXPORT_SYMBOL(fb_videomode_to_modelist); -EXPORT_SYMBOL(vesa_modes); EXPORT_SYMBOL(fb_find_mode); _