Skip to content

Commit

Permalink
[PATCH] i810fb: Fix suspend and resume hooks
Browse files Browse the repository at this point in the history
The i810fb suspend and resume hooks have suffered bitrot over time.  Update to
current framework, but functionality still not guaranteed to work.

Signed-off-by: Antonino Daplas <adaplas@pol.net>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
  • Loading branch information
Antonino A. Daplas authored and Linus Torvalds committed Jan 10, 2006
1 parent 740f14b commit c5eec03
Showing 1 changed file with 28 additions and 28 deletions.
56 changes: 28 additions & 28 deletions drivers/video/i810/i810_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@
#include <linux/pci_ids.h>
#include <linux/resource.h>
#include <linux/unistd.h>
#include <linux/console.h>

#include <asm/io.h>
#include <asm/div64.h>
Expand Down Expand Up @@ -1517,35 +1518,28 @@ static int i810fb_suspend(struct pci_dev *dev, pm_message_t state)
{
struct fb_info *info = pci_get_drvdata(dev);
struct i810fb_par *par = info->par;
int blank = 0, prev_state = par->cur_state;

if (state.event == prev_state)
return 0;

par->cur_state = state.event;

switch (state.event) {
case 1:
blank = VESA_VSYNC_SUSPEND;
break;
case 2:
blank = VESA_HSYNC_SUSPEND;
break;
case 3:
blank = VESA_POWERDOWN;
break;
default:
return -EINVAL;
if (state.event == PM_EVENT_FREEZE) {
dev->dev.power.power_state = state;
return 0;
}
info->fbops->fb_blank(blank, info);

if (!prev_state) {
agp_unbind_memory(par->i810_gtt.i810_fb_memory);
agp_unbind_memory(par->i810_gtt.i810_cursor_memory);
pci_disable_device(dev);
}
acquire_console_sem();
fb_set_suspend(info, 1);

if (info->fbops->fb_sync)
info->fbops->fb_sync(info);

i810fb_blank(FB_BLANK_POWERDOWN, info);
agp_unbind_memory(par->i810_gtt.i810_fb_memory);
agp_unbind_memory(par->i810_gtt.i810_cursor_memory);

pci_save_state(dev);
pci_disable_device(dev);
pci_set_power_state(dev, pci_choose_state(dev, state));
release_console_sem();

return 0;
}
Expand All @@ -1554,22 +1548,28 @@ static int i810fb_resume(struct pci_dev *dev)
{
struct fb_info *info = pci_get_drvdata(dev);
struct i810fb_par *par = info->par;
int cur_state = par->cur_state;

par->cur_state = PM_EVENT_ON;

if (par->cur_state == 0)
if (cur_state == PM_EVENT_FREEZE) {
pci_set_power_state(dev, PCI_D0);
return 0;
}

pci_restore_state(dev);
acquire_console_sem();
pci_set_power_state(dev, PCI_D0);
pci_restore_state(dev);
pci_enable_device(dev);
pci_set_master(dev);
agp_bind_memory(par->i810_gtt.i810_fb_memory,
par->fb.offset);
agp_bind_memory(par->i810_gtt.i810_cursor_memory,
par->cursor_heap.offset);

i810fb_set_par(info);
fb_set_suspend (info, 0);
info->fbops->fb_blank(VESA_NO_BLANKING, info);

par->cur_state = 0;

release_console_sem();
return 0;
}
/***********************************************************************
Expand Down

0 comments on commit c5eec03

Please sign in to comment.