Commit 0a857e23 authored by Antonino Daplas's avatar Antonino Daplas Committed by Linus Torvalds

[PATCH] Video Mode Handling - Reduce memory footprint of fbdev

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: default avatarAntonino Daplas <adaplas@pol.net>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent 7fbf08c2
...@@ -38,6 +38,17 @@ config FB ...@@ -38,6 +38,17 @@ config FB
(e.g. an accelerated X server) and that are not frame buffer (e.g. an accelerated X server) and that are not frame buffer
device-aware may cause unexpected results. If unsure, say N. 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 config FB_CIRRUS
tristate "Cirrus Logic support" tristate "Cirrus Logic support"
depends on FB && (ZORRO || PCI) depends on FB && (ZORRO || PCI)
......
...@@ -51,6 +51,7 @@ ...@@ -51,6 +51,7 @@
#define FBMON_FIX_HEADER 1 #define FBMON_FIX_HEADER 1
#ifdef CONFIG_FB_MODE_HELPERS
struct broken_edid { struct broken_edid {
u8 manufacturer[4]; u8 manufacturer[4];
u32 model; u32 model;
...@@ -1156,6 +1157,36 @@ int fb_get_mode(int flags, u32 val, struct fb_var_screeninfo *var, struct fb_inf ...@@ -1156,6 +1157,36 @@ int fb_get_mode(int flags, u32 val, struct fb_var_screeninfo *var, struct fb_inf
return 0; 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 * fb_validate_mode - validates var against monitor capabilities
......
...@@ -39,7 +39,7 @@ const char *global_mode_option = NULL; ...@@ -39,7 +39,7 @@ const char *global_mode_option = NULL;
#define DEFAULT_MODEDB_INDEX 0 #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 */ /* 640x400 @ 70 Hz, 31.5 kHz hsync */
NULL, 70, 640, 400, 39721, 40, 24, 39, 9, 96, 2, NULL, 70, 640, 400, 39721, 40, 24, 39, 9, 96, 2,
...@@ -251,6 +251,7 @@ static const struct fb_videomode modedb[] = { ...@@ -251,6 +251,7 @@ static const struct fb_videomode modedb[] = {
}, },
}; };
#ifdef CONFIG_FB_MODE_HELPERS
const struct fb_videomode vesa_modes[] = { const struct fb_videomode vesa_modes[] = {
/* 0 640x350-85 VESA */ /* 0 640x350-85 VESA */
{ NULL, 85, 640, 350, 31746, 96, 32, 60, 32, 64, 3, { NULL, 85, 640, 350, 31746, 96, 32, 60, 32, 64, 3,
...@@ -374,6 +375,8 @@ const struct fb_videomode vesa_modes[] = { ...@@ -374,6 +375,8 @@ const struct fb_videomode vesa_modes[] = {
{ NULL, 60, 1920, 1440, 3367, 352, 144, 56, 1, 224, 3, { NULL, 60, 1920, 1440, 3367, 352, 144, 56, 1, 224, 3,
FB_SYNC_VERT_HIGH_ACT, FB_VMODE_NONINTERLACED, FB_MODE_IS_VESA }, 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) static int my_atoi(const char *name)
{ {
...@@ -404,7 +407,7 @@ 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, 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; int err = 0;
...@@ -827,5 +830,4 @@ EXPORT_SYMBOL(fb_destroy_modelist); ...@@ -827,5 +830,4 @@ EXPORT_SYMBOL(fb_destroy_modelist);
EXPORT_SYMBOL(fb_match_mode); EXPORT_SYMBOL(fb_match_mode);
EXPORT_SYMBOL(fb_find_best_mode); EXPORT_SYMBOL(fb_find_best_mode);
EXPORT_SYMBOL(fb_videomode_to_modelist); EXPORT_SYMBOL(fb_videomode_to_modelist);
EXPORT_SYMBOL(vesa_modes);
EXPORT_SYMBOL(fb_find_mode); EXPORT_SYMBOL(fb_find_mode);
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment