diff options
author | Andres Salomon <dilinger@queued.net> | 2008-04-28 05:15:03 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-04-28 11:58:36 -0400 |
commit | b6f448e99ce7955b9707ed36a46cab2c6ddf7ddc (patch) | |
tree | 74ae26692c1fd713a0178faca99dea6761d442e8 /drivers/video/geode | |
parent | 46fb6f110dfc3fc99f44cf701f66ea3e790b6a81 (diff) |
PM/gxfb: add hook to PM console layer that allows disabling of suspend VT switch
Prior to suspend, we allocate and switch to a new VT; after suspend, we switch
back to the original VT. This can be slow, and is completely unnecessary if
the framebuffer we're using can restore video properly.
This adds a hook that allows drivers to select whether or not to do this vt
switch, and changes the gxfb driver to call this hook. It also adds a module
param to gxfb to allow controlling of the vt switch (defaulting to no switch).
(Note: I'm not convinced that console_sem is the best way to protect this, but
we should probably have some form of locking..)
[akpm@linux-foundation.org: build fix]
Signed-off-by: Andres Salomon <dilinger@debian.org>
Cc: Jordan Crouse <jordan.crouse@amd.com>
Cc: "Antonino A. Daplas" <adaplas@pol.net>
Cc: Pavel Machek <pavel@ucw.cz>
Cc: "Rafael J. Wysocki" <rjw@sisk.pl>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/video/geode')
-rw-r--r-- | drivers/video/geode/gxfb_core.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/video/geode/gxfb_core.c b/drivers/video/geode/gxfb_core.c index 151d964c025a..f16c21d5bc21 100644 --- a/drivers/video/geode/gxfb_core.c +++ b/drivers/video/geode/gxfb_core.c | |||
@@ -29,6 +29,7 @@ | |||
29 | #include <linux/delay.h> | 29 | #include <linux/delay.h> |
30 | #include <linux/fb.h> | 30 | #include <linux/fb.h> |
31 | #include <linux/console.h> | 31 | #include <linux/console.h> |
32 | #include <linux/suspend.h> | ||
32 | #include <linux/init.h> | 33 | #include <linux/init.h> |
33 | #include <linux/pci.h> | 34 | #include <linux/pci.h> |
34 | #include <asm/geode.h> | 35 | #include <asm/geode.h> |
@@ -37,6 +38,7 @@ | |||
37 | 38 | ||
38 | static char *mode_option; | 39 | static char *mode_option; |
39 | static int vram; | 40 | static int vram; |
41 | static int vt_switch; | ||
40 | 42 | ||
41 | /* Modes relevant to the GX (taken from modedb.c) */ | 43 | /* Modes relevant to the GX (taken from modedb.c) */ |
42 | static const struct fb_videomode gx_modedb[] __initdata = { | 44 | static const struct fb_videomode gx_modedb[] __initdata = { |
@@ -382,6 +384,8 @@ static int __init gxfb_probe(struct pci_dev *pdev, const struct pci_device_id *i | |||
382 | gxfb_check_var(&info->var, info); | 384 | gxfb_check_var(&info->var, info); |
383 | gxfb_set_par(info); | 385 | gxfb_set_par(info); |
384 | 386 | ||
387 | pm_set_vt_switch(vt_switch); | ||
388 | |||
385 | if (register_framebuffer(info) < 0) { | 389 | if (register_framebuffer(info) < 0) { |
386 | ret = -EINVAL; | 390 | ret = -EINVAL; |
387 | goto err; | 391 | goto err; |
@@ -502,5 +506,8 @@ MODULE_PARM_DESC(mode_option, "video mode (<x>x<y>[-<bpp>][@<refr>])"); | |||
502 | module_param(vram, int, 0); | 506 | module_param(vram, int, 0); |
503 | MODULE_PARM_DESC(vram, "video memory size"); | 507 | MODULE_PARM_DESC(vram, "video memory size"); |
504 | 508 | ||
509 | module_param(vt_switch, int, 0); | ||
510 | MODULE_PARM_DESC(vt_switch, "enable VT switch during suspend/resume"); | ||
511 | |||
505 | MODULE_DESCRIPTION("Framebuffer driver for the AMD Geode GX"); | 512 | MODULE_DESCRIPTION("Framebuffer driver for the AMD Geode GX"); |
506 | MODULE_LICENSE("GPL"); | 513 | MODULE_LICENSE("GPL"); |