aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/video/via/viafbdev.c
diff options
context:
space:
mode:
authorFlorian Tobias Schandinat <FlorianSchandinat@gmx.de>2009-09-22 19:47:14 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2009-09-23 10:39:51 -0400
commit09cf11806e4b4be92af76253ff9834c48b416129 (patch)
treea7a14f280d772f5caebf75af95059be8c2e5649a /drivers/video/via/viafbdev.c
parent81228a36a5d05181fff990c852a9abdf03c75593 (diff)
viafb: split viafb_set_start_addr up
Move individual start address setting to viafb_set_primary_address and viafb_set_secondary_address and make it more flexible to reuse it for panning. Using central functions makes it easier to follow HW manipulations. Remove crt locking as it should be only needed for timing manipulation. Move iga_path manipulation to via_pci_probe. Remove memset for screen cleaning as it is currently done only for the second screen. This is not needed for normal operation but has a little chance of causing unwanted display artifacts. This can be fixed later more consistent and more efficient (using viafb_fillrect) if needed. This is a code clenup, no notable runtime changes expected. Signed-off-by: Florian Tobias Schandinat <FlorianSchandinat@gmx.de> Cc: Scott Fang <ScottFang@viatech.com.cn> Cc: Joseph Chan <JosephChan@via.com.tw> Cc: Harald Welte <laforge@gnumonks.org> Cc: Jonathan Corbet <corbet@lwn.net> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/video/via/viafbdev.c')
-rw-r--r--drivers/video/via/viafbdev.c15
1 files changed, 7 insertions, 8 deletions
diff --git a/drivers/video/via/viafbdev.c b/drivers/video/via/viafbdev.c
index 6612ddc2dcd9..743eed48a5f7 100644
--- a/drivers/video/via/viafbdev.c
+++ b/drivers/video/via/viafbdev.c
@@ -481,12 +481,7 @@ static int viafb_pan_display(struct fb_var_screeninfo *var,
481 var->bits_per_pixel / 16; 481 var->bits_per_pixel / 16;
482 482
483 DEBUG_MSG(KERN_INFO "\nviafb_pan_display,offset =%d ", offset); 483 DEBUG_MSG(KERN_INFO "\nviafb_pan_display,offset =%d ", offset);
484 484 viafb_set_primary_address(offset);
485 viafb_write_reg_mask(0x48, 0x3d4, ((offset >> 24) & 0x3), 0x3);
486 viafb_write_reg_mask(0x34, 0x3d4, ((offset >> 16) & 0xff), 0xff);
487 viafb_write_reg_mask(0x0c, 0x3d4, ((offset >> 8) & 0xff), 0xff);
488 viafb_write_reg_mask(0x0d, 0x3d4, (offset & 0xff), 0xff);
489
490 return 0; 485 return 0;
491} 486}
492 487
@@ -1353,7 +1348,8 @@ static void viafb_set_device(struct device_t active_dev)
1353 viafb_SAMM_ON = active_dev.samm; 1348 viafb_SAMM_ON = active_dev.samm;
1354 viafb_primary_dev = active_dev.primary_dev; 1349 viafb_primary_dev = active_dev.primary_dev;
1355 1350
1356 viafb_set_start_addr(); 1351 viafb_set_primary_address(0);
1352 viafb_set_secondary_address(viafb_SAMM_ON ? viafb_second_offset : 0);
1357 viafb_set_iga_path(); 1353 viafb_set_iga_path();
1358} 1354}
1359 1355
@@ -1537,7 +1533,8 @@ static int apply_device_setting(struct viafb_ioctl_setting setting_info,
1537 if (viafb_SAMM_ON) 1533 if (viafb_SAMM_ON)
1538 viafb_primary_dev = setting_info.primary_device; 1534 viafb_primary_dev = setting_info.primary_device;
1539 1535
1540 viafb_set_start_addr(); 1536 viafb_set_primary_address(0);
1537 viafb_set_secondary_address(viafb_SAMM_ON ? viafb_second_offset : 0);
1541 viafb_set_iga_path(); 1538 viafb_set_iga_path();
1542 } 1539 }
1543 need_set_mode = 1; 1540 need_set_mode = 1;
@@ -2275,6 +2272,8 @@ static int __devinit via_pci_probe(void)
2275 viafb_second_offset; 2272 viafb_second_offset;
2276 } 2273 }
2277 2274
2275 viaparinfo->iga_path = IGA1;
2276 viaparinfo1->iga_path = IGA2;
2278 memcpy(viafbinfo1, viafbinfo, sizeof(struct fb_info)); 2277 memcpy(viafbinfo1, viafbinfo, sizeof(struct fb_info));
2279 viafbinfo1->screen_base = viafbinfo->screen_base + 2278 viafbinfo1->screen_base = viafbinfo->screen_base +
2280 viafb_second_offset; 2279 viafb_second_offset;