Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

lxfb/gxfb: when blanking with FB_BLANK_POWERDOWN, also turn off the CRT

The Display Control's CRT_EN can be shut off when we enter FB_BLANK_POWERDOWN
in an attempt to save additional power.

Signed-off-by: Andres Salomon <dilinger@debian.org>
Cc: Jordan Crouse <jordan.crouse@amd.com>
Cc: "Antonino A. Daplas" <adaplas@pol.net>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

authored by

Andres Salomon and committed by
Linus Torvalds
4537f93a 564820d4

+20 -15
+10 -7
drivers/video/geode/lxfb_ops.c
··· 524 524 { 525 525 struct lxfb_par *par = info->par; 526 526 u32 dcfg, fp_pm; 527 - int blank, hsync, vsync; 527 + int blank, hsync, vsync, crt; 528 528 529 529 /* CRT power saving modes. */ 530 530 switch (blank_mode) { 531 531 case FB_BLANK_UNBLANK: 532 - blank = 0; hsync = 1; vsync = 1; 532 + blank = 0; hsync = 1; vsync = 1; crt = 1; 533 533 break; 534 534 case FB_BLANK_NORMAL: 535 - blank = 1; hsync = 1; vsync = 1; 535 + blank = 1; hsync = 1; vsync = 1; crt = 1; 536 536 break; 537 537 case FB_BLANK_VSYNC_SUSPEND: 538 - blank = 1; hsync = 1; vsync = 0; 538 + blank = 1; hsync = 1; vsync = 0; crt = 1; 539 539 break; 540 540 case FB_BLANK_HSYNC_SUSPEND: 541 - blank = 1; hsync = 0; vsync = 1; 541 + blank = 1; hsync = 0; vsync = 1; crt = 1; 542 542 break; 543 543 case FB_BLANK_POWERDOWN: 544 - blank = 1; hsync = 0; vsync = 0; 544 + blank = 1; hsync = 0; vsync = 0; crt = 0; 545 545 break; 546 546 default: 547 547 return -EINVAL; 548 548 } 549 549 550 550 dcfg = read_vp(par, VP_DCFG); 551 - dcfg &= ~(VP_DCFG_DAC_BL_EN | VP_DCFG_HSYNC_EN | VP_DCFG_VSYNC_EN); 551 + dcfg &= ~(VP_DCFG_DAC_BL_EN | VP_DCFG_HSYNC_EN | VP_DCFG_VSYNC_EN | 552 + VP_DCFG_CRT_EN); 552 553 if (!blank) 553 554 dcfg |= VP_DCFG_DAC_BL_EN; 554 555 if (hsync) 555 556 dcfg |= VP_DCFG_HSYNC_EN; 556 557 if (vsync) 557 558 dcfg |= VP_DCFG_VSYNC_EN; 559 + if (crt) 560 + dcfg |= VP_DCFG_CRT_EN; 558 561 write_vp(par, VP_DCFG, dcfg); 559 562 560 563 /* Power on/off flat panel */
+10 -8
drivers/video/geode/video_gx.c
··· 299 299 { 300 300 struct gxfb_par *par = info->par; 301 301 u32 dcfg, fp_pm; 302 - int blank, hsync, vsync; 302 + int blank, hsync, vsync, crt; 303 303 304 304 /* CRT power saving modes. */ 305 305 switch (blank_mode) { 306 306 case FB_BLANK_UNBLANK: 307 - blank = 0; hsync = 1; vsync = 1; 307 + blank = 0; hsync = 1; vsync = 1; crt = 1; 308 308 break; 309 309 case FB_BLANK_NORMAL: 310 - blank = 1; hsync = 1; vsync = 1; 310 + blank = 1; hsync = 1; vsync = 1; crt = 1; 311 311 break; 312 312 case FB_BLANK_VSYNC_SUSPEND: 313 - blank = 1; hsync = 1; vsync = 0; 313 + blank = 1; hsync = 1; vsync = 0; crt = 1; 314 314 break; 315 315 case FB_BLANK_HSYNC_SUSPEND: 316 - blank = 1; hsync = 0; vsync = 1; 316 + blank = 1; hsync = 0; vsync = 1; crt = 1; 317 317 break; 318 318 case FB_BLANK_POWERDOWN: 319 - blank = 1; hsync = 0; vsync = 0; 319 + blank = 1; hsync = 0; vsync = 0; crt = 0; 320 320 break; 321 321 default: 322 322 return -EINVAL; 323 323 } 324 324 dcfg = read_vp(par, VP_DCFG); 325 - dcfg &= ~(VP_DCFG_DAC_BL_EN 326 - | VP_DCFG_HSYNC_EN | VP_DCFG_VSYNC_EN); 325 + dcfg &= ~(VP_DCFG_DAC_BL_EN | VP_DCFG_HSYNC_EN | VP_DCFG_VSYNC_EN | 326 + VP_DCFG_CRT_EN); 327 327 if (!blank) 328 328 dcfg |= VP_DCFG_DAC_BL_EN; 329 329 if (hsync) 330 330 dcfg |= VP_DCFG_HSYNC_EN; 331 331 if (vsync) 332 332 dcfg |= VP_DCFG_VSYNC_EN; 333 + if (crt) 334 + dcfg |= VP_DCFG_CRT_EN; 333 335 write_vp(par, VP_DCFG, dcfg); 334 336 335 337 /* Power on/off flat panel. */