aty128fb: fix blanking
I have a problem with blanking. The soundcard uses speakers of the monitor. Sound is muted when the screen blanks due to a bug in aty128fb.c. Here is a fragment of linux/fb.h /* VESA Blanking Levels */ #define VESA_NO_BLANKING 0 #define VESA_VSYNC_SUSPEND 1 #define VESA_HSYNC_SUSPEND 2 #define VESA_POWERDOWN 3 enum { /* screen: unblanked, hsync: on, vsync: on */ FB_BLANK_UNBLANK = VESA_NO_BLANKING, /* screen: blanked, hsync: on, vsync: on */ FB_BLANK_NORMAL = VESA_NO_BLANKING + 1, /* screen: blanked, hsync: on, vsync: off */ FB_BLANK_VSYNC_SUSPEND = VESA_VSYNC_SUSPEND + 1, /* screen: blanked, hsync: off, vsync: on */ FB_BLANK_HSYNC_SUSPEND = VESA_HSYNC_SUSPEND + 1, /* screen: blanked, hsync: off, vsync: off */ FB_BLANK_POWERDOWN = VESA_POWERDOWN + 1 }; So FB_BLANK_NORMAL is 1, FB_BLANK_VSYNC_SUSPEND is 2, FB_BLANK_HSYNC_SUSPEND is 3, FB_BLANK_POWERDOWN is 4. And now: blank = FB_BLANK_NORMAL (1) blank & FB_BLANK_HSYNC_SUSPEND (1 & 3) is true, so normal blank caused hsync suspend and sound is muted. Cc: James Simmons <jsimmons@infradead.org> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
c8e1693a4f
commit
125e1137cd
|
@ -2165,18 +2165,29 @@ static void __devexit aty128_remove(struct pci_dev *pdev)
|
|||
static int aty128fb_blank(int blank, struct fb_info *fb)
|
||||
{
|
||||
struct aty128fb_par *par = fb->par;
|
||||
u8 state = 0;
|
||||
u8 state;
|
||||
|
||||
if (par->lock_blank || par->asleep)
|
||||
return 0;
|
||||
|
||||
if (blank & FB_BLANK_VSYNC_SUSPEND)
|
||||
state |= 2;
|
||||
if (blank & FB_BLANK_HSYNC_SUSPEND)
|
||||
state |= 1;
|
||||
if (blank & FB_BLANK_POWERDOWN)
|
||||
state |= 4;
|
||||
|
||||
switch (blank) {
|
||||
case FB_BLANK_NORMAL:
|
||||
state = 4;
|
||||
break;
|
||||
case FB_BLANK_VSYNC_SUSPEND:
|
||||
state = 6;
|
||||
break;
|
||||
case FB_BLANK_HSYNC_SUSPEND:
|
||||
state = 5;
|
||||
break;
|
||||
case FB_BLANK_POWERDOWN:
|
||||
state = 7;
|
||||
break;
|
||||
case FB_BLANK_UNBLANK:
|
||||
default:
|
||||
state = 0;
|
||||
break;
|
||||
}
|
||||
aty_st_8(CRTC_EXT_CNTL+1, state);
|
||||
|
||||
if (par->chip_gen == rage_M3) {
|
||||
|
@ -2430,7 +2441,7 @@ static int aty128_pci_suspend(struct pci_dev *pdev, pm_message_t state)
|
|||
wait_for_idle(par);
|
||||
|
||||
/* Blank display and LCD */
|
||||
aty128fb_blank(VESA_POWERDOWN, info);
|
||||
aty128fb_blank(FB_BLANK_POWERDOWN, info);
|
||||
|
||||
/* Sleep */
|
||||
par->asleep = 1;
|
||||
|
|
Loading…
Reference in a new issue