Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 24366
b: refs/heads/master
c: 7a07cd7
h: refs/heads/master
v: v3
  • Loading branch information
Antonino A. Daplas authored and Linus Torvalds committed Mar 27, 2006
1 parent 9453e34 commit 77aa39f
Show file tree
Hide file tree
Showing 4 changed files with 98 additions and 32 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 15bdab959c9bb909c0317480dd9b35748a8f7887
refs/heads/master: 7a07cd786dbd0111b9dd977e114438220cb4eee5
12 changes: 12 additions & 0 deletions trunk/drivers/video/nvidia/nv_accel.c
Original file line number Diff line number Diff line change
Expand Up @@ -300,6 +300,9 @@ int nvidiafb_sync(struct fb_info *info)
{
struct nvidia_par *par = info->par;

if (info->state != FBINFO_STATE_RUNNING)
return 0;

if (!par->lockup)
NVFlush(par);

Expand All @@ -313,6 +316,9 @@ void nvidiafb_copyarea(struct fb_info *info, const struct fb_copyarea *region)
{
struct nvidia_par *par = info->par;

if (info->state != FBINFO_STATE_RUNNING)
return;

if (par->lockup)
return cfb_copyarea(info, region);

Expand All @@ -329,6 +335,9 @@ void nvidiafb_fillrect(struct fb_info *info, const struct fb_fillrect *rect)
struct nvidia_par *par = info->par;
u32 color;

if (info->state != FBINFO_STATE_RUNNING)
return;

if (par->lockup)
return cfb_fillrect(info, rect);

Expand Down Expand Up @@ -412,6 +421,9 @@ void nvidiafb_imageblit(struct fb_info *info, const struct fb_image *image)
{
struct nvidia_par *par = info->par;

if (info->state != FBINFO_STATE_RUNNING)
return;

if (image->depth == 1 && !par->lockup)
nvidiafb_mono_color_expand(info, image);
else
Expand Down
1 change: 1 addition & 0 deletions trunk/drivers/video/nvidia/nv_type.h
Original file line number Diff line number Diff line change
Expand Up @@ -129,6 +129,7 @@ struct nvidia_par {
int fpHeight;
int PanelTweak;
int paneltweak;
int pm_state;
u32 crtcSync_read;
u32 fpSyncs;
u32 dmaPut;
Expand Down
115 changes: 84 additions & 31 deletions trunk/drivers/video/nvidia/nvidia.c
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
#include <linux/fb.h>
#include <linux/init.h>
#include <linux/pci.h>
#include <linux/console.h>
#ifdef CONFIG_MTRR
#include <asm/mtrr.h>
#endif
Expand Down Expand Up @@ -615,6 +616,30 @@ static int nvidia_panel_tweak(struct nvidia_par *par,
return tweak;
}

static void nvidia_vga_protect(struct nvidia_par *par, int on)
{
unsigned char tmp;

if (on) {
/*
* Turn off screen and disable sequencer.
*/
tmp = NVReadSeq(par, 0x01);

NVWriteSeq(par, 0x00, 0x01); /* Synchronous Reset */
NVWriteSeq(par, 0x01, tmp | 0x20); /* disable the display */
} else {
/*
* Reenable sequencer, then turn on screen.
*/

tmp = NVReadSeq(par, 0x01);

NVWriteSeq(par, 0x01, tmp & ~0x20); /* reenable display */
NVWriteSeq(par, 0x00, 0x03); /* End Reset */
}
}

static void nvidia_save_vga(struct nvidia_par *par,
struct _riva_hw_state *state)
{
Expand Down Expand Up @@ -643,9 +668,9 @@ static void nvidia_save_vga(struct nvidia_par *par,

#undef DUMP_REG

static void nvidia_write_regs(struct nvidia_par *par)
static void nvidia_write_regs(struct nvidia_par *par,
struct _riva_hw_state *state)
{
struct _riva_hw_state *state = &par->ModeReg;
int i;

NVTRACE_ENTER();
Expand Down Expand Up @@ -694,32 +719,6 @@ static void nvidia_write_regs(struct nvidia_par *par)
NVTRACE_LEAVE();
}

static void nvidia_vga_protect(struct nvidia_par *par, int on)
{
unsigned char tmp;

if (on) {
/*
* Turn off screen and disable sequencer.
*/
tmp = NVReadSeq(par, 0x01);

NVWriteSeq(par, 0x00, 0x01); /* Synchronous Reset */
NVWriteSeq(par, 0x01, tmp | 0x20); /* disable the display */
} else {
/*
* Reenable sequencer, then turn on screen.
*/

tmp = NVReadSeq(par, 0x01);

NVWriteSeq(par, 0x01, tmp & ~0x20); /* reenable display */
NVWriteSeq(par, 0x00, 0x03); /* End Reset */
}
}



static int nvidia_calc_regs(struct fb_info *info)
{
struct nvidia_par *par = info->par;
Expand Down Expand Up @@ -1068,7 +1067,8 @@ static int nvidiafb_set_par(struct fb_info *info)

nvidia_vga_protect(par, 1);

nvidia_write_regs(par);
nvidia_write_regs(par, &par->ModeReg);
NVSetStartAddress(par, 0);

#if defined (__BIG_ENDIAN)
/* turn on LFB swapping */
Expand Down Expand Up @@ -1377,6 +1377,57 @@ static struct fb_ops nvidia_fb_ops = {
.fb_sync = nvidiafb_sync,
};

#ifdef CONFIG_PM
static int nvidiafb_suspend(struct pci_dev *dev, pm_message_t state)
{
struct fb_info *info = pci_get_drvdata(dev);
struct nvidia_par *par = info->par;

acquire_console_sem();
par->pm_state = state.event;

if (state.event == PM_EVENT_FREEZE) {
dev->dev.power.power_state = state;
} else {
fb_set_suspend(info, 1);
nvidiafb_blank(FB_BLANK_POWERDOWN, info);
nvidia_write_regs(par, &par->SavedReg);
pci_save_state(dev);
pci_disable_device(dev);
pci_set_power_state(dev, pci_choose_state(dev, state));
}

release_console_sem();
return 0;
}

static int nvidiafb_resume(struct pci_dev *dev)
{
struct fb_info *info = pci_get_drvdata(dev);
struct nvidia_par *par = info->par;

acquire_console_sem();
pci_set_power_state(dev, PCI_D0);

if (par->pm_state != PM_EVENT_FREEZE) {
pci_restore_state(dev);
pci_enable_device(dev);
pci_set_master(dev);
}

par->pm_state = PM_EVENT_ON;
nvidiafb_set_par(info);
fb_set_suspend (info, 0);
nvidiafb_blank(FB_BLANK_UNBLANK, info);

release_console_sem();
return 0;
}
#else
#define nvidiafb_suspend NULL
#define nvidiafb_resume NULL
#endif

static int __devinit nvidia_set_fbinfo(struct fb_info *info)
{
struct fb_monspecs *specs = &info->monspecs;
Expand Down Expand Up @@ -1798,8 +1849,10 @@ static int __devinit nvidiafb_setup(char *options)
static struct pci_driver nvidiafb_driver = {
.name = "nvidiafb",
.id_table = nvidiafb_pci_tbl,
.probe = nvidiafb_probe,
.remove = __exit_p(nvidiafb_remove),
.probe = nvidiafb_probe,
.suspend = nvidiafb_suspend,
.resume = nvidiafb_resume,
.remove = __exit_p(nvidiafb_remove),
};

/* ------------------------------------------------------------------------- *
Expand Down

0 comments on commit 77aa39f

Please sign in to comment.