diff options
| author | Linus Torvalds <torvalds@linux-foundation.org> | 2010-08-08 13:04:17 -0400 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2010-08-08 13:04:17 -0400 | 
| commit | c5f347579a661c9506e794315f0798b75ef71d35 (patch) | |
| tree | eb900af7a9f758fe775ded478645fcc1ce75328f | |
| parent | 537d84787659b355b3331813dc134c7497ddafa5 (diff) | |
| parent | f27098379b1dbfedae99e5b86e10529f799d4071 (diff) | |
Merge branch 'for-linus' of git://github.com/schandinat/linux-2.6
* 'for-linus' of git://github.com/schandinat/linux-2.6:
  drivers/video/via/via-gpio.c: fix warning
  viafb: Depends on X86
  fbdev: section cleanup in viafb driver
  viafb: fix accel_flags check_var bug
  viafb: probe cleanups
  viafb: remove ioctls which break the framebuffer interface
  viafb: update fix before calculating depth
  viafb: PLL value cleanup
  viafb: simplify lcd size "detection"
  viafb: fix PCI table
  viafb: add lcd scaling support for some IGPs
  viafb: improve lcd code readability
  viafb: remove duplicated scaling code
  MAINTAINERS: update viafb entry
| -rw-r--r-- | MAINTAINERS | 5 | ||||
| -rw-r--r-- | drivers/video/Kconfig | 2 | ||||
| -rw-r--r-- | drivers/video/via/chip.h | 1 | ||||
| -rw-r--r-- | drivers/video/via/hw.c | 587 | ||||
| -rw-r--r-- | drivers/video/via/hw.h | 14 | ||||
| -rw-r--r-- | drivers/video/via/ioctl.h | 3 | ||||
| -rw-r--r-- | drivers/video/via/lcd.c | 117 | ||||
| -rw-r--r-- | drivers/video/via/lcd.h | 5 | ||||
| -rw-r--r-- | drivers/video/via/share.h | 309 | ||||
| -rw-r--r-- | drivers/video/via/via-core.c | 22 | ||||
| -rw-r--r-- | drivers/video/via/via-gpio.c | 2 | ||||
| -rw-r--r-- | drivers/video/via/viafbdev.c | 284 | 
12 files changed, 449 insertions, 902 deletions
| diff --git a/MAINTAINERS b/MAINTAINERS index 3f49df2d977e..d4242846e7af 100644 --- a/MAINTAINERS +++ b/MAINTAINERS | |||
| @@ -6178,9 +6178,12 @@ F: drivers/mmc/host/via-sdmmc.c | |||
| 6178 | 6178 | ||
| 6179 | VIA UNICHROME(PRO)/CHROME9 FRAMEBUFFER DRIVER | 6179 | VIA UNICHROME(PRO)/CHROME9 FRAMEBUFFER DRIVER | 
| 6180 | M: Joseph Chan <JosephChan@via.com.tw> | 6180 | M: Joseph Chan <JosephChan@via.com.tw> | 
| 6181 | M: Scott Fang <ScottFang@viatech.com.cn> | 6181 | M: Florian Tobias Schandinat <FlorianSchandinat@gmx.de> | 
| 6182 | L: linux-fbdev@vger.kernel.org | 6182 | L: linux-fbdev@vger.kernel.org | 
| 6183 | S: Maintained | 6183 | S: Maintained | 
| 6184 | F: include/linux/via-core.h | ||
| 6185 | F: include/linux/via-gpio.h | ||
| 6186 | F: include/linux/via_i2c.h | ||
| 6184 | F: drivers/video/via/ | 6187 | F: drivers/video/via/ | 
| 6185 | 6188 | ||
| 6186 | VIA VELOCITY NETWORK DRIVER | 6189 | VIA VELOCITY NETWORK DRIVER | 
| diff --git a/drivers/video/Kconfig b/drivers/video/Kconfig index 7b11ea68c80e..a9ca72f301bf 100644 --- a/drivers/video/Kconfig +++ b/drivers/video/Kconfig | |||
| @@ -1505,7 +1505,7 @@ config FB_SIS_315 | |||
| 1505 | 1505 | ||
| 1506 | config FB_VIA | 1506 | config FB_VIA | 
| 1507 | tristate "VIA UniChrome (Pro) and Chrome9 display support" | 1507 | tristate "VIA UniChrome (Pro) and Chrome9 display support" | 
| 1508 | depends on FB && PCI | 1508 | depends on FB && PCI && X86 | 
| 1509 | select FB_CFB_FILLRECT | 1509 | select FB_CFB_FILLRECT | 
| 1510 | select FB_CFB_COPYAREA | 1510 | select FB_CFB_COPYAREA | 
| 1511 | select FB_CFB_IMAGEBLIT | 1511 | select FB_CFB_IMAGEBLIT | 
| diff --git a/drivers/video/via/chip.h b/drivers/video/via/chip.h index d9b6e06e0700..ef1f3de2e052 100644 --- a/drivers/video/via/chip.h +++ b/drivers/video/via/chip.h | |||
| @@ -160,7 +160,6 @@ struct lvds_setting_information { | |||
| 160 | int v_active; | 160 | int v_active; | 
| 161 | int bpp; | 161 | int bpp; | 
| 162 | int refresh_rate; | 162 | int refresh_rate; | 
| 163 | int get_lcd_size_method; | ||
| 164 | int lcd_panel_id; | 163 | int lcd_panel_id; | 
| 165 | int lcd_panel_hres; | 164 | int lcd_panel_hres; | 
| 166 | int lcd_panel_vres; | 165 | int lcd_panel_vres; | 
| diff --git a/drivers/video/via/hw.c b/drivers/video/via/hw.c index b996803ae2c1..7dcb4d5bb9c3 100644 --- a/drivers/video/via/hw.c +++ b/drivers/video/via/hw.c | |||
| @@ -23,143 +23,341 @@ | |||
| 23 | #include "global.h" | 23 | #include "global.h" | 
| 24 | 24 | ||
| 25 | static struct pll_map pll_value[] = { | 25 | static struct pll_map pll_value[] = { | 
| 26 | {CLK_25_175M, CLE266_PLL_25_175M, K800_PLL_25_175M, | 26 | {25175000, | 
| 27 | CX700_25_175M, VX855_25_175M}, | 27 | {99, 7, 3}, | 
| 28 | {CLK_29_581M, CLE266_PLL_29_581M, K800_PLL_29_581M, | 28 | {85, 3, 4}, /* ignoring bit difference: 0x00008000 */ | 
| 29 | CX700_29_581M, VX855_29_581M}, | 29 | {141, 5, 4}, | 
| 30 | {CLK_26_880M, CLE266_PLL_26_880M, K800_PLL_26_880M, | 30 | {141, 5, 4} }, | 
| 31 | CX700_26_880M, VX855_26_880M}, | 31 | {29581000, | 
| 32 | {CLK_31_490M, CLE266_PLL_31_490M, K800_PLL_31_490M, | 32 | {33, 4, 2}, | 
| 33 | CX700_31_490M, VX855_31_490M}, | 33 | {66, 2, 4}, /* ignoring bit difference: 0x00808000 */ | 
| 34 | {CLK_31_500M, CLE266_PLL_31_500M, K800_PLL_31_500M, | 34 | {166, 5, 4}, /* ignoring bit difference: 0x00008000 */ | 
| 35 | CX700_31_500M, VX855_31_500M}, | 35 | {165, 5, 4} }, | 
| 36 | {CLK_31_728M, CLE266_PLL_31_728M, K800_PLL_31_728M, | 36 | {26880000, | 
| 37 | CX700_31_728M, VX855_31_728M}, | 37 | {15, 4, 1}, | 
| 38 | {CLK_32_668M, CLE266_PLL_32_668M, K800_PLL_32_668M, | 38 | {30, 2, 3}, /* ignoring bit difference: 0x00808000 */ | 
| 39 | CX700_32_668M, VX855_32_668M}, | 39 | {150, 5, 4}, | 
| 40 | {CLK_36_000M, CLE266_PLL_36_000M, K800_PLL_36_000M, | 40 | {150, 5, 4} }, | 
| 41 | CX700_36_000M, VX855_36_000M}, | 41 | {31500000, | 
| 42 | {CLK_40_000M, CLE266_PLL_40_000M, K800_PLL_40_000M, | 42 | {53, 3, 3}, /* ignoring bit difference: 0x00008000 */ | 
| 43 | CX700_40_000M, VX855_40_000M}, | 43 | {141, 4, 4}, /* ignoring bit difference: 0x00008000 */ | 
| 44 | {CLK_41_291M, CLE266_PLL_41_291M, K800_PLL_41_291M, | 44 | {176, 5, 4}, | 
| 45 | CX700_41_291M, VX855_41_291M}, | 45 | {176, 5, 4} }, | 
| 46 | {CLK_43_163M, CLE266_PLL_43_163M, K800_PLL_43_163M, | 46 | {31728000, | 
| 47 | CX700_43_163M, VX855_43_163M}, | 47 | {31, 7, 1}, | 
| 48 | {CLK_45_250M, CLE266_PLL_45_250M, K800_PLL_45_250M, | 48 | {177, 5, 4}, /* ignoring bit difference: 0x00008000 */ | 
| 49 | CX700_45_250M, VX855_45_250M}, | 49 | {177, 5, 4}, | 
| 50 | {CLK_46_000M, CLE266_PLL_46_000M, K800_PLL_46_000M, | 50 | {142, 4, 4} }, | 
| 51 | CX700_46_000M, VX855_46_000M}, | 51 | {32688000, | 
| 52 | {CLK_46_996M, CLE266_PLL_46_996M, K800_PLL_46_996M, | 52 | {73, 4, 3}, | 
| 53 | CX700_46_996M, VX855_46_996M}, | 53 | {146, 4, 4}, /* ignoring bit difference: 0x00008000 */ | 
| 54 | {CLK_48_000M, CLE266_PLL_48_000M, K800_PLL_48_000M, | 54 | {183, 5, 4}, | 
| 55 | CX700_48_000M, VX855_48_000M}, | 55 | {146, 4, 4} }, | 
| 56 | {CLK_48_875M, CLE266_PLL_48_875M, K800_PLL_48_875M, | 56 | {36000000, | 
| 57 | CX700_48_875M, VX855_48_875M}, | 57 | {101, 5, 3}, /* ignoring bit difference: 0x00008000 */ | 
| 58 | {CLK_49_500M, CLE266_PLL_49_500M, K800_PLL_49_500M, | 58 | {161, 4, 4}, /* ignoring bit difference: 0x00008000 */ | 
| 59 | CX700_49_500M, VX855_49_500M}, | 59 | {202, 5, 4}, | 
| 60 | {CLK_52_406M, CLE266_PLL_52_406M, K800_PLL_52_406M, | 60 | {161, 4, 4} }, | 
| 61 | CX700_52_406M, VX855_52_406M}, | 61 | {40000000, | 
| 62 | {CLK_52_977M, CLE266_PLL_52_977M, K800_PLL_52_977M, | 62 | {89, 4, 3}, | 
| 63 | CX700_52_977M, VX855_52_977M}, | 63 | {89, 4, 3}, /* ignoring bit difference: 0x00008000 */ | 
| 64 | {CLK_56_250M, CLE266_PLL_56_250M, K800_PLL_56_250M, | 64 | {112, 5, 3}, | 
| 65 | CX700_56_250M, VX855_56_250M}, | 65 | {112, 5, 3} }, | 
| 66 | {CLK_57_275M, 0, 0, 0, VX855_57_275M}, | 66 | {41291000, | 
| 67 | {CLK_60_466M, CLE266_PLL_60_466M, K800_PLL_60_466M, | 67 | {23, 4, 1}, | 
| 68 | CX700_60_466M, VX855_60_466M}, | 68 | {69, 3, 3}, /* ignoring bit difference: 0x00008000 */ | 
| 69 | {CLK_61_500M, CLE266_PLL_61_500M, K800_PLL_61_500M, | 69 | {115, 5, 3}, | 
| 70 | CX700_61_500M, VX855_61_500M}, | 70 | {115, 5, 3} }, | 
| 71 | {CLK_65_000M, CLE266_PLL_65_000M, K800_PLL_65_000M, | 71 | {43163000, | 
| 72 | CX700_65_000M, VX855_65_000M}, | 72 | {121, 5, 3}, | 
| 73 | {CLK_65_178M, CLE266_PLL_65_178M, K800_PLL_65_178M, | 73 | {121, 5, 3}, /* ignoring bit difference: 0x00008000 */ | 
| 74 | CX700_65_178M, VX855_65_178M}, | 74 | {121, 5, 3}, | 
| 75 | {CLK_66_750M, CLE266_PLL_66_750M, K800_PLL_66_750M, | 75 | {121, 5, 3} }, | 
| 76 | CX700_66_750M, VX855_66_750M}, | 76 | {45250000, | 
| 77 | {CLK_68_179M, CLE266_PLL_68_179M, K800_PLL_68_179M, | 77 | {127, 5, 3}, | 
| 78 | CX700_68_179M, VX855_68_179M}, | 78 | {127, 5, 3}, /* ignoring bit difference: 0x00808000 */ | 
| 79 | {CLK_69_924M, CLE266_PLL_69_924M, K800_PLL_69_924M, | 79 | {127, 5, 3}, | 
| 80 | CX700_69_924M, VX855_69_924M}, | 80 | {127, 5, 3} }, | 
| 81 | {CLK_70_159M, CLE266_PLL_70_159M, K800_PLL_70_159M, | 81 | {46000000, | 
| 82 | CX700_70_159M, VX855_70_159M}, | 82 | {90, 7, 2}, | 
| 83 | {CLK_72_000M, CLE266_PLL_72_000M, K800_PLL_72_000M, | 83 | {103, 4, 3}, /* ignoring bit difference: 0x00008000 */ | 
| 84 | CX700_72_000M, VX855_72_000M}, | 84 | {129, 5, 3}, | 
| 85 | {CLK_78_750M, CLE266_PLL_78_750M, K800_PLL_78_750M, | 85 | {103, 4, 3} }, | 
| 86 | CX700_78_750M, VX855_78_750M}, | 86 | {46996000, | 
| 87 | {CLK_80_136M, CLE266_PLL_80_136M, K800_PLL_80_136M, | 87 | {105, 4, 3}, /* ignoring bit difference: 0x00008000 */ | 
| 88 | CX700_80_136M, VX855_80_136M}, | 88 | {131, 5, 3}, /* ignoring bit difference: 0x00808000 */ | 
| 89 | {CLK_83_375M, CLE266_PLL_83_375M, K800_PLL_83_375M, | 89 | {131, 5, 3}, /* ignoring bit difference: 0x00808000 */ | 
| 90 | CX700_83_375M, VX855_83_375M}, | 90 | {105, 4, 3} }, | 
| 91 | {CLK_83_950M, CLE266_PLL_83_950M, K800_PLL_83_950M, | 91 | {48000000, | 
| 92 | CX700_83_950M, VX855_83_950M}, | 92 | {67, 20, 0}, | 
| 93 | {CLK_84_750M, CLE266_PLL_84_750M, K800_PLL_84_750M, | 93 | {134, 5, 3}, /* ignoring bit difference: 0x00808000 */ | 
| 94 | CX700_84_750M, VX855_84_750M}, | 94 | {134, 5, 3}, | 
| 95 | {CLK_85_860M, CLE266_PLL_85_860M, K800_PLL_85_860M, | 95 | {134, 5, 3} }, | 
| 96 | CX700_85_860M, VX855_85_860M}, | 96 | {48875000, | 
| 97 | {CLK_88_750M, CLE266_PLL_88_750M, K800_PLL_88_750M, | 97 | {99, 29, 0}, | 
| 98 | CX700_88_750M, VX855_88_750M}, | 98 | {82, 3, 3}, /* ignoring bit difference: 0x00808000 */ | 
| 99 | {CLK_94_500M, CLE266_PLL_94_500M, K800_PLL_94_500M, | 99 | {82, 3, 3}, /* ignoring bit difference: 0x00808000 */ | 
| 100 | CX700_94_500M, VX855_94_500M}, | 100 | {137, 5, 3} }, | 
| 101 | {CLK_97_750M, CLE266_PLL_97_750M, K800_PLL_97_750M, | 101 | {49500000, | 
| 102 | CX700_97_750M, VX855_97_750M}, | 102 | {83, 6, 2}, | 
| 103 | {CLK_101_000M, CLE266_PLL_101_000M, K800_PLL_101_000M, | 103 | {83, 3, 3}, /* ignoring bit difference: 0x00008000 */ | 
| 104 | CX700_101_000M, VX855_101_000M}, | 104 | {138, 5, 3}, | 
| 105 | {CLK_106_500M, CLE266_PLL_106_500M, K800_PLL_106_500M, | 105 | {83, 3, 3} }, | 
| 106 | CX700_106_500M, VX855_106_500M}, | 106 | {52406000, | 
| 107 | {CLK_108_000M, CLE266_PLL_108_000M, K800_PLL_108_000M, | 107 | {117, 4, 3}, | 
| 108 | CX700_108_000M, VX855_108_000M}, | 108 | {117, 4, 3}, /* ignoring bit difference: 0x00008000 */ | 
| 109 | {CLK_113_309M, CLE266_PLL_113_309M, K800_PLL_113_309M, | 109 | {117, 4, 3}, | 
| 110 | CX700_113_309M, VX855_113_309M}, | 110 | {88, 3, 3} }, | 
| 111 | {CLK_118_840M, CLE266_PLL_118_840M, K800_PLL_118_840M, | 111 | {52977000, | 
| 112 | CX700_118_840M, VX855_118_840M}, | 112 | {37, 5, 1}, | 
| 113 | {CLK_119_000M, CLE266_PLL_119_000M, K800_PLL_119_000M, | 113 | {148, 5, 3}, /* ignoring bit difference: 0x00808000 */ | 
| 114 | CX700_119_000M, VX855_119_000M}, | 114 | {148, 5, 3}, | 
| 115 | {CLK_121_750M, CLE266_PLL_121_750M, K800_PLL_121_750M, | 115 | {148, 5, 3} }, | 
| 116 | CX700_121_750M, 0}, | 116 | {56250000, | 
| 117 | {CLK_125_104M, CLE266_PLL_125_104M, K800_PLL_125_104M, | 117 | {55, 7, 1}, /* ignoring bit difference: 0x00008000 */ | 
| 118 | CX700_125_104M, 0}, | 118 | {126, 4, 3}, /* ignoring bit difference: 0x00008000 */ | 
| 119 | {CLK_133_308M, CLE266_PLL_133_308M, K800_PLL_133_308M, | 119 | {157, 5, 3}, | 
| 120 | CX700_133_308M, 0}, | 120 | {157, 5, 3} }, | 
| 121 | {CLK_135_000M, CLE266_PLL_135_000M, K800_PLL_135_000M, | 121 | {57275000, | 
| 122 | CX700_135_000M, VX855_135_000M}, | 122 | {0, 0, 0}, | 
| 123 | {CLK_136_700M, CLE266_PLL_136_700M, K800_PLL_136_700M, | 123 | {2, 2, 0}, | 
| 124 | CX700_136_700M, VX855_136_700M}, | 124 | {2, 2, 0}, | 
| 125 | {CLK_138_400M, CLE266_PLL_138_400M, K800_PLL_138_400M, | 125 | {157, 5, 3} }, /* ignoring bit difference: 0x00808000 */ | 
| 126 | CX700_138_400M, VX855_138_400M}, | 126 | {60466000, | 
| 127 | {CLK_146_760M, CLE266_PLL_146_760M, K800_PLL_146_760M, | 127 | {76, 9, 1}, | 
| 128 | CX700_146_760M, VX855_146_760M}, | 128 | {169, 5, 3}, /* ignoring bit difference: 0x00808000 */ | 
| 129 | {CLK_153_920M, CLE266_PLL_153_920M, K800_PLL_153_920M, | 129 | {169, 5, 3}, /* FIXED: old = {72, 2, 3} */ | 
| 130 | CX700_153_920M, VX855_153_920M}, | 130 | {169, 5, 3} }, | 
| 131 | {CLK_156_000M, CLE266_PLL_156_000M, K800_PLL_156_000M, | 131 | {61500000, | 
| 132 | CX700_156_000M, VX855_156_000M}, | 132 | {86, 20, 0}, | 
| 133 | {CLK_157_500M, CLE266_PLL_157_500M, K800_PLL_157_500M, | 133 | {172, 5, 3}, /* ignoring bit difference: 0x00808000 */ | 
| 134 | CX700_157_500M, VX855_157_500M}, | 134 | {172, 5, 3}, | 
| 135 | {CLK_162_000M, CLE266_PLL_162_000M, K800_PLL_162_000M, | 135 | {172, 5, 3} }, | 
| 136 | CX700_162_000M, VX855_162_000M}, | 136 | {65000000, | 
| 137 | {CLK_187_000M, CLE266_PLL_187_000M, K800_PLL_187_000M, | 137 | {109, 6, 2}, /* ignoring bit difference: 0x00008000 */ | 
| 138 | CX700_187_000M, VX855_187_000M}, | 138 | {109, 3, 3}, /* ignoring bit difference: 0x00008000 */ | 
| 139 | {CLK_193_295M, CLE266_PLL_193_295M, K800_PLL_193_295M, | 139 | {109, 3, 3}, | 
| 140 | CX700_193_295M, VX855_193_295M}, | 140 | {109, 3, 3} }, | 
| 141 | {CLK_202_500M, CLE266_PLL_202_500M, K800_PLL_202_500M, | 141 | {65178000, | 
| 142 | CX700_202_500M, VX855_202_500M}, | 142 | {91, 5, 2}, | 
| 143 | {CLK_204_000M, CLE266_PLL_204_000M, K800_PLL_204_000M, | 143 | {182, 5, 3}, /* ignoring bit difference: 0x00808000 */ | 
| 144 | CX700_204_000M, VX855_204_000M}, | 144 | {109, 3, 3}, | 
| 145 | {CLK_218_500M, CLE266_PLL_218_500M, K800_PLL_218_500M, | 145 | {182, 5, 3} }, | 
| 146 | CX700_218_500M, VX855_218_500M}, | 146 | {66750000, | 
| 147 | {CLK_234_000M, CLE266_PLL_234_000M, K800_PLL_234_000M, | 147 | {75, 4, 2}, | 
| 148 | CX700_234_000M, VX855_234_000M}, | 148 | {150, 4, 3}, /* ignoring bit difference: 0x00808000 */ | 
| 149 | {CLK_267_250M, CLE266_PLL_267_250M, K800_PLL_267_250M, | 149 | {150, 4, 3}, | 
| 150 | CX700_267_250M, VX855_267_250M}, | 150 | {112, 3, 3} }, | 
| 151 | {CLK_297_500M, CLE266_PLL_297_500M, K800_PLL_297_500M, | 151 | {68179000, | 
| 152 | CX700_297_500M, VX855_297_500M}, | 152 | {19, 4, 0}, | 
| 153 | {CLK_74_481M, CLE266_PLL_74_481M, K800_PLL_74_481M, | 153 | {114, 3, 3}, /* ignoring bit difference: 0x00008000 */ | 
| 154 | CX700_74_481M, VX855_74_481M}, | 154 | {190, 5, 3}, | 
| 155 | {CLK_172_798M, CLE266_PLL_172_798M, K800_PLL_172_798M, | 155 | {191, 5, 3} }, | 
| 156 | CX700_172_798M, VX855_172_798M}, | 156 | {69924000, | 
| 157 | {CLK_122_614M, CLE266_PLL_122_614M, K800_PLL_122_614M, | 157 | {83, 17, 0}, | 
| 158 | CX700_122_614M, VX855_122_614M}, | 158 | {195, 5, 3}, /* ignoring bit difference: 0x00808000 */ | 
| 159 | {CLK_74_270M, CLE266_PLL_74_270M, K800_PLL_74_270M, | 159 | {195, 5, 3}, | 
| 160 | CX700_74_270M, 0}, | 160 | {195, 5, 3} }, | 
| 161 | {CLK_148_500M, CLE266_PLL_148_500M, K800_PLL_148_500M, | 161 | {70159000, | 
| 162 | CX700_148_500M, VX855_148_500M} | 162 | {98, 20, 0}, | 
| 163 | {196, 5, 3}, /* ignoring bit difference: 0x00808000 */ | ||
| 164 | {196, 5, 3}, | ||
| 165 | {195, 5, 3} }, | ||
| 166 | {72000000, | ||
| 167 | {121, 24, 0}, | ||
| 168 | {161, 4, 3}, /* ignoring bit difference: 0x00808000 */ | ||
| 169 | {161, 4, 3}, | ||
| 170 | {161, 4, 3} }, | ||
| 171 | {78750000, | ||
| 172 | {33, 3, 1}, | ||
| 173 | {66, 3, 2}, /* ignoring bit difference: 0x00008000 */ | ||
| 174 | {110, 5, 2}, | ||
| 175 | {110, 5, 2} }, | ||
| 176 | {80136000, | ||
| 177 | {28, 5, 0}, | ||
| 178 | {68, 3, 2}, /* ignoring bit difference: 0x00008000 */ | ||
| 179 | {112, 5, 2}, | ||
| 180 | {112, 5, 2} }, | ||
| 181 | {83375000, | ||
| 182 | {93, 2, 3}, | ||
| 183 | {93, 4, 2}, /* ignoring bit difference: 0x00800000 */ | ||
| 184 | {93, 4, 2}, /* ignoring bit difference: 0x00800000 */ | ||
| 185 | {117, 5, 2} }, | ||
| 186 | {83950000, | ||
| 187 | {41, 7, 0}, | ||
| 188 | {117, 5, 2}, /* ignoring bit difference: 0x00008000 */ | ||
| 189 | {117, 5, 2}, | ||
| 190 | {117, 5, 2} }, | ||
| 191 | {84750000, | ||
| 192 | {118, 5, 2}, | ||
| 193 | {118, 5, 2}, /* ignoring bit difference: 0x00808000 */ | ||
| 194 | {118, 5, 2}, | ||
| 195 | {118, 5, 2} }, | ||
| 196 | {85860000, | ||
| 197 | {84, 7, 1}, | ||
| 198 | {120, 5, 2}, /* ignoring bit difference: 0x00808000 */ | ||
| 199 | {120, 5, 2}, | ||
| 200 | {118, 5, 2} }, | ||
| 201 | {88750000, | ||
| 202 | {31, 5, 0}, | ||
| 203 | {124, 5, 2}, /* ignoring bit difference: 0x00808000 */ | ||
| 204 | {174, 7, 2}, /* ignoring bit difference: 0x00808000 */ | ||
| 205 | {124, 5, 2} }, | ||
| 206 | {94500000, | ||
| 207 | {33, 5, 0}, | ||
| 208 | {132, 5, 2}, /* ignoring bit difference: 0x00008000 */ | ||
| 209 | {132, 5, 2}, | ||
| 210 | {132, 5, 2} }, | ||
| 211 | {97750000, | ||
| 212 | {82, 6, 1}, | ||
| 213 | {137, 5, 2}, /* ignoring bit difference: 0x00808000 */ | ||
| 214 | {137, 5, 2}, | ||
| 215 | {137, 5, 2} }, | ||
| 216 | {101000000, | ||
| 217 | {127, 9, 1}, | ||
| 218 | {141, 5, 2}, /* ignoring bit difference: 0x00808000 */ | ||
| 219 | {141, 5, 2}, | ||
| 220 | {141, 5, 2} }, | ||
| 221 | {106500000, | ||
| 222 | {119, 4, 2}, | ||
| 223 | {119, 4, 2}, /* ignoring bit difference: 0x00808000 */ | ||
| 224 | {119, 4, 2}, | ||
| 225 | {149, 5, 2} }, | ||
| 226 | {108000000, | ||
| 227 | {121, 4, 2}, | ||
| 228 | {121, 4, 2}, /* ignoring bit difference: 0x00808000 */ | ||
| 229 | {151, 5, 2}, | ||
| 230 | {151, 5, 2} }, | ||
| 231 | {113309000, | ||
| 232 | {95, 12, 0}, | ||
| 233 | {95, 3, 2}, /* ignoring bit difference: 0x00808000 */ | ||
| 234 | {95, 3, 2}, | ||
| 235 | {159, 5, 2} }, | ||
| 236 | {118840000, | ||
| 237 | {83, 5, 1}, | ||
| 238 | {166, 5, 2}, /* ignoring bit difference: 0x00808000 */ | ||
| 239 | {166, 5, 2}, | ||
| 240 | {166, 5, 2} }, | ||
| 241 | {119000000, | ||
| 242 | {108, 13, 0}, | ||
| 243 | {133, 4, 2}, /* ignoring bit difference: 0x00808000 */ | ||
| 244 | {133, 4, 2}, | ||
| 245 | {167, 5, 2} }, | ||
| 246 | {121750000, | ||
| 247 | {85, 5, 1}, | ||
| 248 | {170, 5, 2}, /* ignoring bit difference: 0x00808000 */ | ||
| 249 | {68, 2, 2}, | ||
| 250 | {0, 0, 0} }, | ||
| 251 | {125104000, | ||
| 252 | {53, 6, 0}, /* ignoring bit difference: 0x00008000 */ | ||
| 253 | {106, 3, 2}, /* ignoring bit difference: 0x00008000 */ | ||
| 254 | {175, 5, 2}, | ||
| 255 | {0, 0, 0} }, | ||
| 256 | {135000000, | ||
| 257 | {94, 5, 1}, | ||
| 258 | {28, 3, 0}, /* ignoring bit difference: 0x00804000 */ | ||
| 259 | {151, 4, 2}, | ||
| 260 | {189, 5, 2} }, | ||
| 261 | {136700000, | ||
| 262 | {115, 12, 0}, | ||
| 263 | {191, 5, 2}, /* ignoring bit difference: 0x00808000 */ | ||
| 264 | {191, 5, 2}, | ||
| 265 | {191, 5, 2} }, | ||
| 266 | {138400000, | ||
| 267 | {87, 9, 0}, | ||
| 268 | {116, 3, 2}, /* ignoring bit difference: 0x00808000 */ | ||
| 269 | {116, 3, 2}, | ||
| 270 | {194, 5, 2} }, | ||
| 271 | {146760000, | ||
| 272 | {103, 5, 1}, | ||
| 273 | {206, 5, 2}, /* ignoring bit difference: 0x00808000 */ | ||
| 274 | {206, 5, 2}, | ||
| 275 | {206, 5, 2} }, | ||
| 276 | {153920000, | ||
| 277 | {86, 8, 0}, | ||
| 278 | {86, 4, 1}, /* ignoring bit difference: 0x00808000 */ | ||
| 279 | {86, 4, 1}, | ||
| 280 | {86, 4, 1} }, /* FIXED: old = {84, 2, 1} */ | ||
| 281 | {156000000, | ||
| 282 | {109, 5, 1}, | ||
| 283 | {109, 5, 1}, /* ignoring bit difference: 0x00808000 */ | ||
| 284 | {109, 5, 1}, | ||
| 285 | {108, 5, 1} }, | ||
| 286 | {157500000, | ||
| 287 | {55, 5, 0}, /* ignoring bit difference: 0x00008000 */ | ||
| 288 | {22, 2, 0}, /* ignoring bit difference: 0x00802000 */ | ||
| 289 | {110, 5, 1}, | ||
| 290 | {110, 5, 1} }, | ||
| 291 | {162000000, | ||
| 292 | {113, 5, 1}, | ||
| 293 | {113, 5, 1}, /* ignoring bit difference: 0x00808000 */ | ||
| 294 | {113, 5, 1}, | ||
| 295 | {113, 5, 1} }, | ||
| 296 | {187000000, | ||
| 297 | {118, 9, 0}, | ||
| 298 | {131, 5, 1}, /* ignoring bit difference: 0x00808000 */ | ||
| 299 | {131, 5, 1}, | ||
| 300 | {131, 5, 1} }, | ||
| 301 | {193295000, | ||
| 302 | {108, 8, 0}, | ||
| 303 | {81, 3, 1}, /* ignoring bit difference: 0x00808000 */ | ||
| 304 | {135, 5, 1}, | ||
| 305 | {135, 5, 1} }, | ||
| 306 | {202500000, | ||
| 307 | {99, 7, 0}, | ||
| 308 | {85, 3, 1}, /* ignoring bit difference: 0x00808000 */ | ||
| 309 | {142, 5, 1}, | ||
| 310 | {142, 5, 1} }, | ||
| 311 | {204000000, | ||
| 312 | {100, 7, 0}, | ||
| 313 | {143, 5, 1}, /* ignoring bit difference: 0x00808000 */ | ||
| 314 | {143, 5, 1}, | ||
| 315 | {143, 5, 1} }, | ||
| 316 | {218500000, | ||
| 317 | {92, 6, 0}, | ||
| 318 | {153, 5, 1}, /* ignoring bit difference: 0x00808000 */ | ||
| 319 | {153, 5, 1}, | ||
| 320 | {153, 5, 1} }, | ||
| 321 | {234000000, | ||
| 322 | {98, 6, 0}, | ||
| 323 | {98, 3, 1}, /* ignoring bit difference: 0x00008000 */ | ||
| 324 | {98, 3, 1}, | ||
| 325 | {164, 5, 1} }, | ||
| 326 | {267250000, | ||
| 327 | {112, 6, 0}, | ||
| 328 | {112, 3, 1}, /* ignoring bit difference: 0x00808000 */ | ||
| 329 | {187, 5, 1}, | ||
| 330 | {187, 5, 1} }, | ||
| 331 | {297500000, | ||
| 332 | {102, 5, 0}, /* ignoring bit difference: 0x00008000 */ | ||
| 333 | {166, 4, 1}, /* ignoring bit difference: 0x00008000 */ | ||
| 334 | {208, 5, 1}, | ||
| 335 | {208, 5, 1} }, | ||
| 336 | {74481000, | ||
| 337 | {26, 5, 0}, | ||
| 338 | {125, 3, 3}, /* ignoring bit difference: 0x00808000 */ | ||
| 339 | {208, 5, 3}, | ||
| 340 | {209, 5, 3} }, | ||
| 341 | {172798000, | ||
| 342 | {121, 5, 1}, | ||
| 343 | {121, 5, 1}, /* ignoring bit difference: 0x00808000 */ | ||
| 344 | {121, 5, 1}, | ||
| 345 | {121, 5, 1} }, | ||
| 346 | {122614000, | ||
| 347 | {60, 7, 0}, | ||
| 348 | {137, 4, 2}, /* ignoring bit difference: 0x00808000 */ | ||
| 349 | {137, 4, 2}, | ||
| 350 | {172, 5, 2} }, | ||
| 351 | {74270000, | ||
| 352 | {83, 8, 1}, | ||
| 353 | {208, 5, 3}, | ||
| 354 | {208, 5, 3}, | ||
| 355 | {0, 0, 0} }, | ||
| 356 | {148500000, | ||
| 357 | {83, 8, 0}, | ||
| 358 | {208, 5, 2}, | ||
| 359 | {166, 4, 2}, | ||
| 360 | {208, 5, 2} } | ||
| 163 | }; | 361 | }; | 
| 164 | 362 | ||
| 165 | static struct fifo_depth_select display_fifo_depth_reg = { | 363 | static struct fifo_depth_select display_fifo_depth_reg = { | 
| @@ -1360,40 +1558,70 @@ void viafb_load_FIFO_reg(int set_iga, int hor_active, int ver_active) | |||
| 1360 | 1558 | ||
| 1361 | } | 1559 | } | 
| 1362 | 1560 | ||
| 1561 | static u32 cle266_encode_pll(struct pll_config pll) | ||
| 1562 | { | ||
| 1563 | return (pll.multiplier << 8) | ||
| 1564 | | (pll.rshift << 6) | ||
| 1565 | | pll.divisor; | ||
| 1566 | } | ||
| 1567 | |||
| 1568 | static u32 k800_encode_pll(struct pll_config pll) | ||
| 1569 | { | ||
| 1570 | return ((pll.divisor - 2) << 16) | ||
| 1571 | | (pll.rshift << 10) | ||
| 1572 | | (pll.multiplier - 2); | ||
| 1573 | } | ||
| 1574 | |||
| 1575 | static u32 vx855_encode_pll(struct pll_config pll) | ||
| 1576 | { | ||
| 1577 | return (pll.divisor << 16) | ||
| 1578 | | (pll.rshift << 10) | ||
| 1579 | | pll.multiplier; | ||
| 1580 | } | ||
| 1581 | |||
| 1363 | u32 viafb_get_clk_value(int clk) | 1582 | u32 viafb_get_clk_value(int clk) | 
| 1364 | { | 1583 | { | 
| 1365 | int i; | 1584 | u32 value = 0; | 
| 1585 | int i = 0; | ||
| 1366 | 1586 | ||
| 1367 | for (i = 0; i < NUM_TOTAL_PLL_TABLE; i++) { | 1587 | while (i < NUM_TOTAL_PLL_TABLE && clk != pll_value[i].clk) | 
| 1368 | if (clk == pll_value[i].clk) { | 1588 | i++; | 
| 1369 | switch (viaparinfo->chip_info->gfx_chip_name) { | 1589 | |
| 1370 | case UNICHROME_CLE266: | 1590 | if (i == NUM_TOTAL_PLL_TABLE) { | 
| 1371 | case UNICHROME_K400: | 1591 | printk(KERN_WARNING "viafb_get_clk_value: PLL lookup failed!"); | 
| 1372 | return pll_value[i].cle266_pll; | 1592 | } else { | 
| 1373 | 1593 | switch (viaparinfo->chip_info->gfx_chip_name) { | |
| 1374 | case UNICHROME_K800: | 1594 | case UNICHROME_CLE266: | 
| 1375 | case UNICHROME_PM800: | 1595 | case UNICHROME_K400: | 
| 1376 | case UNICHROME_CN700: | 1596 | value = cle266_encode_pll(pll_value[i].cle266_pll); | 
| 1377 | return pll_value[i].k800_pll; | 1597 | break; | 
| 1378 | 1598 | ||
| 1379 | case UNICHROME_CX700: | 1599 | case UNICHROME_K800: | 
| 1380 | case UNICHROME_K8M890: | 1600 | case UNICHROME_PM800: | 
| 1381 | case UNICHROME_P4M890: | 1601 | case UNICHROME_CN700: | 
| 1382 | case UNICHROME_P4M900: | 1602 | value = k800_encode_pll(pll_value[i].k800_pll); | 
| 1383 | case UNICHROME_VX800: | 1603 | break; | 
| 1384 | return pll_value[i].cx700_pll; | 1604 | |
| 1385 | case UNICHROME_VX855: | 1605 | case UNICHROME_CX700: | 
| 1386 | return pll_value[i].vx855_pll; | 1606 | case UNICHROME_CN750: | 
| 1387 | } | 1607 | case UNICHROME_K8M890: | 
| 1608 | case UNICHROME_P4M890: | ||
| 1609 | case UNICHROME_P4M900: | ||
| 1610 | case UNICHROME_VX800: | ||
| 1611 | value = k800_encode_pll(pll_value[i].cx700_pll); | ||
| 1612 | break; | ||
| 1613 | |||
| 1614 | case UNICHROME_VX855: | ||
| 1615 | value = vx855_encode_pll(pll_value[i].vx855_pll); | ||
| 1616 | break; | ||
| 1388 | } | 1617 | } | 
| 1389 | } | 1618 | } | 
| 1390 | 1619 | ||
| 1391 | DEBUG_MSG(KERN_INFO "Can't find match PLL value\n\n"); | 1620 | return value; | 
| 1392 | return 0; | ||
| 1393 | } | 1621 | } | 
| 1394 | 1622 | ||
| 1395 | /* Set VCLK*/ | 1623 | /* Set VCLK*/ | 
| 1396 | void viafb_set_vclock(u32 CLK, int set_iga) | 1624 | void viafb_set_vclock(u32 clk, int set_iga) | 
| 1397 | { | 1625 | { | 
| 1398 | /* H.W. Reset : ON */ | 1626 | /* H.W. Reset : ON */ | 
| 1399 | viafb_write_reg_mask(CR17, VIACR, 0x00, BIT7); | 1627 | viafb_write_reg_mask(CR17, VIACR, 0x00, BIT7); | 
| @@ -1403,26 +1631,23 @@ void viafb_set_vclock(u32 CLK, int set_iga) | |||
| 1403 | switch (viaparinfo->chip_info->gfx_chip_name) { | 1631 | switch (viaparinfo->chip_info->gfx_chip_name) { | 
| 1404 | case UNICHROME_CLE266: | 1632 | case UNICHROME_CLE266: | 
| 1405 | case UNICHROME_K400: | 1633 | case UNICHROME_K400: | 
| 1406 | viafb_write_reg(SR46, VIASR, CLK / 0x100); | 1634 | via_write_reg(VIASR, SR46, (clk & 0x00FF)); | 
| 1407 | viafb_write_reg(SR47, VIASR, CLK % 0x100); | 1635 | via_write_reg(VIASR, SR47, (clk & 0xFF00) >> 8); | 
| 1408 | break; | 1636 | break; | 
| 1409 | 1637 | ||
| 1410 | case UNICHROME_K800: | 1638 | case UNICHROME_K800: | 
| 1411 | case UNICHROME_PM800: | 1639 | case UNICHROME_PM800: | 
| 1412 | case UNICHROME_CN700: | 1640 | case UNICHROME_CN700: | 
| 1413 | case UNICHROME_CX700: | 1641 | case UNICHROME_CX700: | 
| 1642 | case UNICHROME_CN750: | ||
| 1414 | case UNICHROME_K8M890: | 1643 | case UNICHROME_K8M890: | 
| 1415 | case UNICHROME_P4M890: | 1644 | case UNICHROME_P4M890: | 
| 1416 | case UNICHROME_P4M900: | 1645 | case UNICHROME_P4M900: | 
| 1417 | case UNICHROME_VX800: | 1646 | case UNICHROME_VX800: | 
| 1418 | case UNICHROME_VX855: | 1647 | case UNICHROME_VX855: | 
| 1419 | viafb_write_reg(SR44, VIASR, CLK / 0x10000); | 1648 | via_write_reg(VIASR, SR44, (clk & 0x0000FF)); | 
| 1420 | DEBUG_MSG(KERN_INFO "\nSR44=%x", CLK / 0x10000); | 1649 | via_write_reg(VIASR, SR45, (clk & 0x00FF00) >> 8); | 
| 1421 | viafb_write_reg(SR45, VIASR, (CLK & 0xFFFF) / 0x100); | 1650 | via_write_reg(VIASR, SR46, (clk & 0xFF0000) >> 16); | 
| 1422 | DEBUG_MSG(KERN_INFO "\nSR45=%x", | ||
| 1423 | (CLK & 0xFFFF) / 0x100); | ||
| 1424 | viafb_write_reg(SR46, VIASR, CLK % 0x100); | ||
| 1425 | DEBUG_MSG(KERN_INFO "\nSR46=%x", CLK % 0x100); | ||
| 1426 | break; | 1651 | break; | 
| 1427 | } | 1652 | } | 
| 1428 | } | 1653 | } | 
| @@ -1432,22 +1657,23 @@ void viafb_set_vclock(u32 CLK, int set_iga) | |||
| 1432 | switch (viaparinfo->chip_info->gfx_chip_name) { | 1657 | switch (viaparinfo->chip_info->gfx_chip_name) { | 
| 1433 | case UNICHROME_CLE266: | 1658 | case UNICHROME_CLE266: | 
| 1434 | case UNICHROME_K400: | 1659 | case UNICHROME_K400: | 
| 1435 | viafb_write_reg(SR44, VIASR, CLK / 0x100); | 1660 | via_write_reg(VIASR, SR44, (clk & 0x00FF)); | 
| 1436 | viafb_write_reg(SR45, VIASR, CLK % 0x100); | 1661 | via_write_reg(VIASR, SR45, (clk & 0xFF00) >> 8); | 
| 1437 | break; | 1662 | break; | 
| 1438 | 1663 | ||
| 1439 | case UNICHROME_K800: | 1664 | case UNICHROME_K800: | 
| 1440 | case UNICHROME_PM800: | 1665 | case UNICHROME_PM800: | 
| 1441 | case UNICHROME_CN700: | 1666 | case UNICHROME_CN700: | 
| 1442 | case UNICHROME_CX700: | 1667 | case UNICHROME_CX700: | 
| 1668 | case UNICHROME_CN750: | ||
| 1443 | case UNICHROME_K8M890: | 1669 | case UNICHROME_K8M890: | 
| 1444 | case UNICHROME_P4M890: | 1670 | case UNICHROME_P4M890: | 
| 1445 | case UNICHROME_P4M900: | 1671 | case UNICHROME_P4M900: | 
| 1446 | case UNICHROME_VX800: | 1672 | case UNICHROME_VX800: | 
| 1447 | case UNICHROME_VX855: | 1673 | case UNICHROME_VX855: | 
| 1448 | viafb_write_reg(SR4A, VIASR, CLK / 0x10000); | 1674 | via_write_reg(VIASR, SR4A, (clk & 0x0000FF)); | 
| 1449 | viafb_write_reg(SR4B, VIASR, (CLK & 0xFFFF) / 0x100); | 1675 | via_write_reg(VIASR, SR4B, (clk & 0x00FF00) >> 8); | 
| 1450 | viafb_write_reg(SR4C, VIASR, CLK % 0x100); | 1676 | via_write_reg(VIASR, SR4C, (clk & 0xFF0000) >> 16); | 
| 1451 | break; | 1677 | break; | 
| 1452 | } | 1678 | } | 
| 1453 | } | 1679 | } | 
| @@ -1791,8 +2017,6 @@ void viafb_init_chip_info(int chip_type) | |||
| 1791 | viafb_set_iga_path(); | 2017 | viafb_set_iga_path(); | 
| 1792 | 2018 | ||
| 1793 | viaparinfo->lvds_setting_info->display_method = viafb_lcd_dsp_method; | 2019 | viaparinfo->lvds_setting_info->display_method = viafb_lcd_dsp_method; | 
| 1794 | viaparinfo->lvds_setting_info->get_lcd_size_method = | ||
| 1795 | GET_LCD_SIZE_BY_USER_SETTING; | ||
| 1796 | viaparinfo->lvds_setting_info->lcd_mode = viafb_lcd_mode; | 2020 | viaparinfo->lvds_setting_info->lcd_mode = viafb_lcd_mode; | 
| 1797 | viaparinfo->lvds_setting_info2->display_method = | 2021 | viaparinfo->lvds_setting_info2->display_method = | 
| 1798 | viaparinfo->lvds_setting_info->display_method; | 2022 | viaparinfo->lvds_setting_info->display_method; | 
| @@ -1946,13 +2170,6 @@ static void init_tmds_chip_info(void) | |||
| 1946 | 2170 | ||
| 1947 | static void init_lvds_chip_info(void) | 2171 | static void init_lvds_chip_info(void) | 
| 1948 | { | 2172 | { | 
| 1949 | if (viafb_lcd_panel_id > LCD_PANEL_ID_MAXIMUM) | ||
| 1950 | viaparinfo->lvds_setting_info->get_lcd_size_method = | ||
| 1951 | GET_LCD_SIZE_BY_VGA_BIOS; | ||
| 1952 | else | ||
| 1953 | viaparinfo->lvds_setting_info->get_lcd_size_method = | ||
| 1954 | GET_LCD_SIZE_BY_USER_SETTING; | ||
| 1955 | |||
| 1956 | viafb_lvds_trasmitter_identify(); | 2173 | viafb_lvds_trasmitter_identify(); | 
| 1957 | viafb_init_lcd_size(); | 2174 | viafb_init_lcd_size(); | 
| 1958 | viafb_init_lvds_output_interface(&viaparinfo->chip_info->lvds_chip_info, | 2175 | viafb_init_lvds_output_interface(&viaparinfo->chip_info->lvds_chip_info, | 
| diff --git a/drivers/video/via/hw.h b/drivers/video/via/hw.h index a109de379816..c44399895294 100644 --- a/drivers/video/via/hw.h +++ b/drivers/video/via/hw.h | |||
| @@ -700,12 +700,18 @@ struct _lcd_scaling_factor { | |||
| 700 | struct _lcd_ver_scaling_factor lcd_ver_scaling_factor; | 700 | struct _lcd_ver_scaling_factor lcd_ver_scaling_factor; | 
| 701 | }; | 701 | }; | 
| 702 | 702 | ||
| 703 | struct pll_config { | ||
| 704 | u16 multiplier; | ||
| 705 | u8 divisor; | ||
| 706 | u8 rshift; | ||
| 707 | }; | ||
| 708 | |||
| 703 | struct pll_map { | 709 | struct pll_map { | 
| 704 | u32 clk; | 710 | u32 clk; | 
| 705 | u32 cle266_pll; | 711 | struct pll_config cle266_pll; | 
| 706 | u32 k800_pll; | 712 | struct pll_config k800_pll; | 
| 707 | u32 cx700_pll; | 713 | struct pll_config cx700_pll; | 
| 708 | u32 vx855_pll; | 714 | struct pll_config vx855_pll; | 
| 709 | }; | 715 | }; | 
| 710 | 716 | ||
| 711 | struct rgbLUT { | 717 | struct rgbLUT { | 
| diff --git a/drivers/video/via/ioctl.h b/drivers/video/via/ioctl.h index c430fa23008a..6010d10b59e8 100644 --- a/drivers/video/via/ioctl.h +++ b/drivers/video/via/ioctl.h | |||
| @@ -35,11 +35,9 @@ | |||
| 35 | #define VIAFB_GET_SAMM_INFO 0x56494107 /* 'VIA\07' */ | 35 | #define VIAFB_GET_SAMM_INFO 0x56494107 /* 'VIA\07' */ | 
| 36 | #define VIAFB_TURN_ON_OUTPUT_DEVICE 0x56494108 /* 'VIA\08' */ | 36 | #define VIAFB_TURN_ON_OUTPUT_DEVICE 0x56494108 /* 'VIA\08' */ | 
| 37 | #define VIAFB_TURN_OFF_OUTPUT_DEVICE 0x56494109 /* 'VIA\09' */ | 37 | #define VIAFB_TURN_OFF_OUTPUT_DEVICE 0x56494109 /* 'VIA\09' */ | 
| 38 | #define VIAFB_SET_DEVICE 0x5649410A | ||
| 39 | #define VIAFB_GET_DEVICE 0x5649410B | 38 | #define VIAFB_GET_DEVICE 0x5649410B | 
| 40 | #define VIAFB_GET_DRIVER_VERSION 0x56494112 /* 'VIA\12' */ | 39 | #define VIAFB_GET_DRIVER_VERSION 0x56494112 /* 'VIA\12' */ | 
| 41 | #define VIAFB_GET_CHIP_INFO 0x56494113 /* 'VIA\13' */ | 40 | #define VIAFB_GET_CHIP_INFO 0x56494113 /* 'VIA\13' */ | 
| 42 | #define VIAFB_SET_DEVICE_INFO 0x56494114 | ||
| 43 | #define VIAFB_GET_DEVICE_INFO 0x56494115 | 41 | #define VIAFB_GET_DEVICE_INFO 0x56494115 | 
| 44 | 42 | ||
| 45 | #define VIAFB_GET_DEVICE_SUPPORT 0x56494118 | 43 | #define VIAFB_GET_DEVICE_SUPPORT 0x56494118 | 
| @@ -50,7 +48,6 @@ | |||
| 50 | #define VIAFB_GET_GAMMA_LUT 0x56494124 | 48 | #define VIAFB_GET_GAMMA_LUT 0x56494124 | 
| 51 | #define VIAFB_SET_GAMMA_LUT 0x56494125 | 49 | #define VIAFB_SET_GAMMA_LUT 0x56494125 | 
| 52 | #define VIAFB_GET_GAMMA_SUPPORT_STATE 0x56494126 | 50 | #define VIAFB_GET_GAMMA_SUPPORT_STATE 0x56494126 | 
| 53 | #define VIAFB_SET_SECOND_MODE 0x56494129 | ||
| 54 | #define VIAFB_SYNC_SURFACE 0x56494130 | 51 | #define VIAFB_SYNC_SURFACE 0x56494130 | 
| 55 | #define VIAFB_GET_DRIVER_CAPS 0x56494131 | 52 | #define VIAFB_GET_DRIVER_CAPS 0x56494131 | 
| 56 | #define VIAFB_GET_IGA_SCALING_INFO 0x56494132 | 53 | #define VIAFB_GET_IGA_SCALING_INFO 0x56494132 | 
| diff --git a/drivers/video/via/lcd.c b/drivers/video/via/lcd.c index 2ab0f156439a..fc25ae30c5f6 100644 --- a/drivers/video/via/lcd.c +++ b/drivers/video/via/lcd.c | |||
| @@ -75,8 +75,6 @@ static void check_diport_of_integrated_lvds( | |||
| 75 | static struct display_timing lcd_centering_timging(struct display_timing | 75 | static struct display_timing lcd_centering_timging(struct display_timing | 
| 76 | mode_crt_reg, | 76 | mode_crt_reg, | 
| 77 | struct display_timing panel_crt_reg); | 77 | struct display_timing panel_crt_reg); | 
| 78 | static void viafb_load_scaling_factor_for_p4m900(int set_hres, | ||
| 79 | int set_vres, int panel_hres, int panel_vres); | ||
| 80 | 78 | ||
| 81 | static int check_lvds_chip(int device_id_subaddr, int device_id) | 79 | static int check_lvds_chip(int device_id_subaddr, int device_id) | 
| 82 | { | 80 | { | 
| @@ -89,33 +87,8 @@ static int check_lvds_chip(int device_id_subaddr, int device_id) | |||
| 89 | void viafb_init_lcd_size(void) | 87 | void viafb_init_lcd_size(void) | 
| 90 | { | 88 | { | 
| 91 | DEBUG_MSG(KERN_INFO "viafb_init_lcd_size()\n"); | 89 | DEBUG_MSG(KERN_INFO "viafb_init_lcd_size()\n"); | 
| 92 | DEBUG_MSG(KERN_INFO | ||
| 93 | "viaparinfo->lvds_setting_info->get_lcd_size_method %d\n", | ||
| 94 | viaparinfo->lvds_setting_info->get_lcd_size_method); | ||
| 95 | 90 | ||
| 96 | switch (viaparinfo->lvds_setting_info->get_lcd_size_method) { | 91 | fp_id_to_vindex(viafb_lcd_panel_id); | 
| 97 | case GET_LCD_SIZE_BY_SYSTEM_BIOS: | ||
| 98 | break; | ||
| 99 | case GET_LCD_SZIE_BY_HW_STRAPPING: | ||
| 100 | break; | ||
| 101 | case GET_LCD_SIZE_BY_VGA_BIOS: | ||
| 102 | DEBUG_MSG(KERN_INFO "Get LCD Size method by VGA BIOS !!\n"); | ||
| 103 | fp_id_to_vindex(viafb_lcd_panel_id); | ||
| 104 | DEBUG_MSG(KERN_INFO "LCD Panel_ID = %d\n", | ||
| 105 | viaparinfo->lvds_setting_info->lcd_panel_id); | ||
| 106 | break; | ||
| 107 | case GET_LCD_SIZE_BY_USER_SETTING: | ||
| 108 | DEBUG_MSG(KERN_INFO "Get LCD Size method by user setting !!\n"); | ||
| 109 | fp_id_to_vindex(viafb_lcd_panel_id); | ||
| 110 | DEBUG_MSG(KERN_INFO "LCD Panel_ID = %d\n", | ||
| 111 | viaparinfo->lvds_setting_info->lcd_panel_id); | ||
| 112 | break; | ||
| 113 | default: | ||
| 114 | DEBUG_MSG(KERN_INFO "viafb_init_lcd_size fail\n"); | ||
| 115 | viaparinfo->lvds_setting_info->lcd_panel_id = | ||
| 116 | LCD_PANEL_ID1_800X600; | ||
| 117 | fp_id_to_vindex(LCD_PANEL_ID1_800X600); | ||
| 118 | } | ||
| 119 | viaparinfo->lvds_setting_info2->lcd_panel_id = | 92 | viaparinfo->lvds_setting_info2->lcd_panel_id = | 
| 120 | viaparinfo->lvds_setting_info->lcd_panel_id; | 93 | viaparinfo->lvds_setting_info->lcd_panel_id; | 
| 121 | viaparinfo->lvds_setting_info2->lcd_panel_hres = | 94 | viaparinfo->lvds_setting_info2->lcd_panel_hres = | 
| @@ -437,14 +410,9 @@ static void load_lcd_scaling(int set_hres, int set_vres, int panel_hres, | |||
| 437 | 410 | ||
| 438 | /* LCD Scaling Enable */ | 411 | /* LCD Scaling Enable */ | 
| 439 | viafb_write_reg_mask(CR79, VIACR, 0x07, BIT0 + BIT1 + BIT2); | 412 | viafb_write_reg_mask(CR79, VIACR, 0x07, BIT0 + BIT1 + BIT2); | 
| 440 | if (UNICHROME_P4M900 == viaparinfo->chip_info->gfx_chip_name) { | ||
| 441 | viafb_load_scaling_factor_for_p4m900(set_hres, set_vres, | ||
| 442 | panel_hres, panel_vres); | ||
| 443 | return; | ||
| 444 | } | ||
| 445 | 413 | ||
| 446 | /* Check if expansion for horizontal */ | 414 | /* Check if expansion for horizontal */ | 
| 447 | if (set_hres != panel_hres) { | 415 | if (set_hres < panel_hres) { | 
| 448 | /* Load Horizontal Scaling Factor */ | 416 | /* Load Horizontal Scaling Factor */ | 
| 449 | switch (viaparinfo->chip_info->gfx_chip_name) { | 417 | switch (viaparinfo->chip_info->gfx_chip_name) { | 
| 450 | case UNICHROME_CLE266: | 418 | case UNICHROME_CLE266: | 
| @@ -464,6 +432,10 @@ static void load_lcd_scaling(int set_hres, int set_vres, int panel_hres, | |||
| 464 | case UNICHROME_CX700: | 432 | case UNICHROME_CX700: | 
| 465 | case UNICHROME_K8M890: | 433 | case UNICHROME_K8M890: | 
| 466 | case UNICHROME_P4M890: | 434 | case UNICHROME_P4M890: | 
| 435 | case UNICHROME_P4M900: | ||
| 436 | case UNICHROME_CN750: | ||
| 437 | case UNICHROME_VX800: | ||
| 438 | case UNICHROME_VX855: | ||
| 467 | reg_value = | 439 | reg_value = | 
| 468 | K800_LCD_HOR_SCF_FORMULA(set_hres, panel_hres); | 440 | K800_LCD_HOR_SCF_FORMULA(set_hres, panel_hres); | 
| 469 | /* Horizontal scaling enabled */ | 441 | /* Horizontal scaling enabled */ | 
| @@ -483,7 +455,7 @@ static void load_lcd_scaling(int set_hres, int set_vres, int panel_hres, | |||
| 483 | } | 455 | } | 
| 484 | 456 | ||
| 485 | /* Check if expansion for vertical */ | 457 | /* Check if expansion for vertical */ | 
| 486 | if (set_vres != panel_vres) { | 458 | if (set_vres < panel_vres) { | 
| 487 | /* Load Vertical Scaling Factor */ | 459 | /* Load Vertical Scaling Factor */ | 
| 488 | switch (viaparinfo->chip_info->gfx_chip_name) { | 460 | switch (viaparinfo->chip_info->gfx_chip_name) { | 
| 489 | case UNICHROME_CLE266: | 461 | case UNICHROME_CLE266: | 
| @@ -503,6 +475,10 @@ static void load_lcd_scaling(int set_hres, int set_vres, int panel_hres, | |||
| 503 | case UNICHROME_CX700: | 475 | case UNICHROME_CX700: | 
| 504 | case UNICHROME_K8M890: | 476 | case UNICHROME_K8M890: | 
| 505 | case UNICHROME_P4M890: | 477 | case UNICHROME_P4M890: | 
| 478 | case UNICHROME_P4M900: | ||
| 479 | case UNICHROME_CN750: | ||
| 480 | case UNICHROME_VX800: | ||
| 481 | case UNICHROME_VX855: | ||
| 506 | reg_value = | 482 | reg_value = | 
| 507 | K800_LCD_VER_SCF_FORMULA(set_vres, panel_vres); | 483 | K800_LCD_VER_SCF_FORMULA(set_vres, panel_vres); | 
| 508 | /* Vertical scaling enabled */ | 484 | /* Vertical scaling enabled */ | 
| @@ -648,9 +624,8 @@ void viafb_lcd_set_mode(struct crt_mode_table *mode_crt_table, | |||
| 648 | (mode_crt_reg, panel_crt_reg), IGA1); | 624 | (mode_crt_reg, panel_crt_reg), IGA1); | 
| 649 | } else { | 625 | } else { | 
| 650 | /* Expansion */ | 626 | /* Expansion */ | 
| 651 | if ((plvds_setting_info->display_method == | 627 | if (plvds_setting_info->display_method == LCD_EXPANDSION | 
| 652 | LCD_EXPANDSION) & ((set_hres != panel_hres) | 628 | && (set_hres < panel_hres || set_vres < panel_vres)) { | 
| 653 | || (set_vres != panel_vres))) { | ||
| 654 | /* expansion timing IGA2 loaded panel set timing*/ | 629 | /* expansion timing IGA2 loaded panel set timing*/ | 
| 655 | viafb_load_crtc_timing(panel_crt_reg, IGA2); | 630 | viafb_load_crtc_timing(panel_crt_reg, IGA2); | 
| 656 | DEBUG_MSG(KERN_INFO "viafb_load_crtc_timing!!\n"); | 631 | DEBUG_MSG(KERN_INFO "viafb_load_crtc_timing!!\n"); | 
| @@ -1139,69 +1114,3 @@ bool viafb_lcd_get_mobile_state(bool *mobile) | |||
| 1139 | return false; | 1114 | return false; | 
| 1140 | } | 1115 | } | 
| 1141 | } | 1116 | } | 
| 1142 | |||
| 1143 | static void viafb_load_scaling_factor_for_p4m900(int set_hres, | ||
| 1144 | int set_vres, int panel_hres, int panel_vres) | ||
| 1145 | { | ||
| 1146 | int h_scaling_factor; | ||
| 1147 | int v_scaling_factor; | ||
| 1148 | u8 cra2 = 0; | ||
| 1149 | u8 cr77 = 0; | ||
| 1150 | u8 cr78 = 0; | ||
| 1151 | u8 cr79 = 0; | ||
| 1152 | u8 cr9f = 0; | ||
| 1153 | /* Check if expansion for horizontal */ | ||
| 1154 | if (set_hres < panel_hres) { | ||
| 1155 | /* Load Horizontal Scaling Factor */ | ||
| 1156 | |||
| 1157 | /* For VIA_K8M800 or later chipsets. */ | ||
| 1158 | h_scaling_factor = | ||
| 1159 | K800_LCD_HOR_SCF_FORMULA(set_hres, panel_hres); | ||
| 1160 | /* HSCaleFactor[1:0] at CR9F[1:0] */ | ||
| 1161 | cr9f = h_scaling_factor & 0x0003; | ||
| 1162 | /* HSCaleFactor[9:2] at CR77[7:0] */ | ||
| 1163 | cr77 = (h_scaling_factor & 0x03FC) >> 2; | ||
| 1164 | /* HSCaleFactor[11:10] at CR79[5:4] */ | ||
| 1165 | cr79 = (h_scaling_factor & 0x0C00) >> 10; | ||
| 1166 | cr79 <<= 4; | ||
| 1167 | |||
| 1168 | /* Horizontal scaling enabled */ | ||
| 1169 | cra2 = 0xC0; | ||
| 1170 | |||
| 1171 | DEBUG_MSG(KERN_INFO "Horizontal Scaling value = %d\n", | ||
| 1172 | h_scaling_factor); | ||
| 1173 | } else { | ||
| 1174 | /* Horizontal scaling disabled */ | ||
| 1175 | cra2 = 0x00; | ||
| 1176 | } | ||
| 1177 | |||
| 1178 | /* Check if expansion for vertical */ | ||
| 1179 | if (set_vres < panel_vres) { | ||
| 1180 | /* Load Vertical Scaling Factor */ | ||
| 1181 | |||
| 1182 | /* For VIA_K8M800 or later chipsets. */ | ||
| 1183 | v_scaling_factor = | ||
| 1184 | K800_LCD_VER_SCF_FORMULA(set_vres, panel_vres); | ||
| 1185 | |||
| 1186 | /* Vertical scaling enabled */ | ||
| 1187 | cra2 |= 0x08; | ||
| 1188 | /* VSCaleFactor[0] at CR79[3] */ | ||
| 1189 | cr79 |= ((v_scaling_factor & 0x0001) << 3); | ||
| 1190 | /* VSCaleFactor[8:1] at CR78[7:0] */ | ||
| 1191 | cr78 |= (v_scaling_factor & 0x01FE) >> 1; | ||
| 1192 | /* VSCaleFactor[10:9] at CR79[7:6] */ | ||
| 1193 | cr79 |= ((v_scaling_factor & 0x0600) >> 9) << 6; | ||
| 1194 | |||
| 1195 | DEBUG_MSG(KERN_INFO "Vertical Scaling value = %d\n", | ||
| 1196 | v_scaling_factor); | ||
| 1197 | } else { | ||
| 1198 | /* Vertical scaling disabled */ | ||
| 1199 | cra2 |= 0x00; | ||
| 1200 | } | ||
| 1201 | |||
| 1202 | viafb_write_reg_mask(CRA2, VIACR, cra2, BIT3 + BIT6 + BIT7); | ||
| 1203 | viafb_write_reg_mask(CR77, VIACR, cr77, 0xFF); | ||
| 1204 | viafb_write_reg_mask(CR78, VIACR, cr78, 0xFF); | ||
| 1205 | viafb_write_reg_mask(CR79, VIACR, cr79, 0xF8); | ||
| 1206 | viafb_write_reg_mask(CR9F, VIACR, cr9f, BIT0 + BIT1); | ||
| 1207 | } | ||
| diff --git a/drivers/video/via/lcd.h b/drivers/video/via/lcd.h index 9762ec62b495..b348efc360b8 100644 --- a/drivers/video/via/lcd.h +++ b/drivers/video/via/lcd.h | |||
| @@ -28,11 +28,6 @@ | |||
| 28 | #define VT3271_DEVICE_ID_REG 0x02 | 28 | #define VT3271_DEVICE_ID_REG 0x02 | 
| 29 | #define VT3271_DEVICE_ID 0x71 | 29 | #define VT3271_DEVICE_ID 0x71 | 
| 30 | 30 | ||
| 31 | #define GET_LCD_SIZE_BY_SYSTEM_BIOS 0x01 | ||
| 32 | #define GET_LCD_SIZE_BY_VGA_BIOS 0x02 | ||
| 33 | #define GET_LCD_SZIE_BY_HW_STRAPPING 0x03 | ||
| 34 | #define GET_LCD_SIZE_BY_USER_SETTING 0x04 | ||
| 35 | |||
| 36 | /* Definition DVI Panel ID*/ | 31 | /* Definition DVI Panel ID*/ | 
| 37 | /* Resolution: 640x480, Channel: single, Dithering: Enable */ | 32 | /* Resolution: 640x480, Channel: single, Dithering: Enable */ | 
| 38 | #define LCD_PANEL_ID0_640X480 0x00 | 33 | #define LCD_PANEL_ID0_640X480 0x00 | 
| diff --git a/drivers/video/via/share.h b/drivers/video/via/share.h index 7f0de7f006ad..2cbe1031b421 100644 --- a/drivers/video/via/share.h +++ b/drivers/video/via/share.h | |||
| @@ -631,7 +631,6 @@ | |||
| 631 | #define CLK_25_175M 25175000 | 631 | #define CLK_25_175M 25175000 | 
| 632 | #define CLK_26_880M 26880000 | 632 | #define CLK_26_880M 26880000 | 
| 633 | #define CLK_29_581M 29581000 | 633 | #define CLK_29_581M 29581000 | 
| 634 | #define CLK_31_490M 31490000 | ||
| 635 | #define CLK_31_500M 31500000 | 634 | #define CLK_31_500M 31500000 | 
| 636 | #define CLK_31_728M 31728000 | 635 | #define CLK_31_728M 31728000 | 
| 637 | #define CLK_32_668M 32688000 | 636 | #define CLK_32_668M 32688000 | 
| @@ -676,7 +675,6 @@ | |||
| 676 | #define CLK_119_000M 119000000 | 675 | #define CLK_119_000M 119000000 | 
| 677 | #define CLK_121_750M 121750000 /* 121.704MHz */ | 676 | #define CLK_121_750M 121750000 /* 121.704MHz */ | 
| 678 | #define CLK_125_104M 125104000 | 677 | #define CLK_125_104M 125104000 | 
| 679 | #define CLK_133_308M 133308000 | ||
| 680 | #define CLK_135_000M 135000000 | 678 | #define CLK_135_000M 135000000 | 
| 681 | #define CLK_136_700M 136700000 | 679 | #define CLK_136_700M 136700000 | 
| 682 | #define CLK_138_400M 138400000 | 680 | #define CLK_138_400M 138400000 | 
| @@ -699,313 +697,6 @@ | |||
| 699 | #define CLK_172_798M 172798000 | 697 | #define CLK_172_798M 172798000 | 
| 700 | #define CLK_122_614M 122614000 | 698 | #define CLK_122_614M 122614000 | 
| 701 | 699 | ||
| 702 | /* CLE266 PLL value | ||
| 703 | */ | ||
| 704 | #define CLE266_PLL_25_175M 0x0000C763 | ||
| 705 | #define CLE266_PLL_26_880M 0x0000440F | ||
| 706 | #define CLE266_PLL_29_581M 0x00008421 | ||
| 707 | #define CLE266_PLL_31_490M 0x00004721 | ||
| 708 | #define CLE266_PLL_31_500M 0x0000C3B5 | ||
| 709 | #define CLE266_PLL_31_728M 0x0000471F | ||
| 710 | #define CLE266_PLL_32_668M 0x0000C449 | ||
| 711 | #define CLE266_PLL_36_000M 0x0000C5E5 | ||
| 712 | #define CLE266_PLL_40_000M 0x0000C459 | ||
| 713 | #define CLE266_PLL_41_291M 0x00004417 | ||
| 714 | #define CLE266_PLL_43_163M 0x0000C579 | ||
| 715 | #define CLE266_PLL_45_250M 0x0000C57F /* 45.46MHz */ | ||
| 716 | #define CLE266_PLL_46_000M 0x0000875A | ||
| 717 | #define CLE266_PLL_46_996M 0x0000C4E9 | ||
| 718 | #define CLE266_PLL_48_000M 0x00001443 | ||
| 719 | #define CLE266_PLL_48_875M 0x00001D63 | ||
| 720 | #define CLE266_PLL_49_500M 0x00008653 | ||
| 721 | #define CLE266_PLL_52_406M 0x0000C475 | ||
| 722 | #define CLE266_PLL_52_977M 0x00004525 | ||
| 723 | #define CLE266_PLL_56_250M 0x000047B7 | ||
| 724 | #define CLE266_PLL_60_466M 0x0000494C | ||
| 725 | #define CLE266_PLL_61_500M 0x00001456 | ||
| 726 | #define CLE266_PLL_65_000M 0x000086ED | ||
| 727 | #define CLE266_PLL_65_178M 0x0000855B | ||
| 728 | #define CLE266_PLL_66_750M 0x0000844B /* 67.116MHz */ | ||
| 729 | #define CLE266_PLL_68_179M 0x00000413 | ||
| 730 | #define CLE266_PLL_69_924M 0x00001153 | ||
| 731 | #define CLE266_PLL_70_159M 0x00001462 | ||
| 732 | #define CLE266_PLL_72_000M 0x00001879 | ||
| 733 | #define CLE266_PLL_74_270M 0x00004853 | ||
| 734 | #define CLE266_PLL_78_750M 0x00004321 | ||
| 735 | #define CLE266_PLL_80_136M 0x0000051C | ||
| 736 | #define CLE266_PLL_83_375M 0x0000C25D | ||
| 737 | #define CLE266_PLL_83_950M 0x00000729 | ||
| 738 | #define CLE266_PLL_84_750M 0x00008576 /* 84.537MHz */ | ||
| 739 | #define CLE266_PLL_85_860M 0x00004754 | ||
| 740 | #define CLE266_PLL_88_750M 0x0000051F | ||
| 741 | #define CLE266_PLL_94_500M 0x00000521 | ||
| 742 | #define CLE266_PLL_97_750M 0x00004652 | ||
| 743 | #define CLE266_PLL_101_000M 0x0000497F | ||
| 744 | #define CLE266_PLL_106_500M 0x00008477 /* 106.491463 MHz */ | ||
| 745 | #define CLE266_PLL_108_000M 0x00008479 | ||
| 746 | #define CLE266_PLL_113_309M 0x00000C5F | ||
| 747 | #define CLE266_PLL_118_840M 0x00004553 | ||
| 748 | #define CLE266_PLL_119_000M 0x00000D6C | ||
| 749 | #define CLE266_PLL_121_750M 0x00004555 /* 121.704MHz */ | ||
| 750 | #define CLE266_PLL_125_104M 0x000006B5 | ||
| 751 | #define CLE266_PLL_133_308M 0x0000465F | ||
| 752 | #define CLE266_PLL_135_000M 0x0000455E | ||
| 753 | #define CLE266_PLL_136_700M 0x00000C73 | ||
| 754 | #define CLE266_PLL_138_400M 0x00000957 | ||
| 755 | #define CLE266_PLL_146_760M 0x00004567 | ||
| 756 | #define CLE266_PLL_148_500M 0x00000853 | ||
| 757 | #define CLE266_PLL_153_920M 0x00000856 | ||
| 758 | #define CLE266_PLL_156_000M 0x0000456D | ||
| 759 | #define CLE266_PLL_157_500M 0x000005B7 | ||
| 760 | #define CLE266_PLL_162_000M 0x00004571 | ||
| 761 | #define CLE266_PLL_187_000M 0x00000976 | ||
| 762 | #define CLE266_PLL_193_295M 0x0000086C | ||
| 763 | #define CLE266_PLL_202_500M 0x00000763 | ||
| 764 | #define CLE266_PLL_204_000M 0x00000764 | ||
| 765 | #define CLE266_PLL_218_500M 0x0000065C | ||
| 766 | #define CLE266_PLL_234_000M 0x00000662 | ||
| 767 | #define CLE266_PLL_267_250M 0x00000670 | ||
| 768 | #define CLE266_PLL_297_500M 0x000005E6 | ||
| 769 | #define CLE266_PLL_74_481M 0x0000051A | ||
| 770 | #define CLE266_PLL_172_798M 0x00004579 | ||
| 771 | #define CLE266_PLL_122_614M 0x0000073C | ||
| 772 | |||
| 773 | /* K800 PLL value | ||
| 774 | */ | ||
| 775 | #define K800_PLL_25_175M 0x00539001 | ||
| 776 | #define K800_PLL_26_880M 0x001C8C80 | ||
| 777 | #define K800_PLL_29_581M 0x00409080 | ||
| 778 | #define K800_PLL_31_490M 0x006F9001 | ||
| 779 | #define K800_PLL_31_500M 0x008B9002 | ||
| 780 | #define K800_PLL_31_728M 0x00AF9003 | ||
| 781 | #define K800_PLL_32_668M 0x00909002 | ||
| 782 | #define K800_PLL_36_000M 0x009F9002 | ||
| 783 | #define K800_PLL_40_000M 0x00578C02 | ||
| 784 | #define K800_PLL_41_291M 0x00438C01 | ||
| 785 | #define K800_PLL_43_163M 0x00778C03 | ||
| 786 | #define K800_PLL_45_250M 0x007D8C83 /* 45.46MHz */ | ||
| 787 | #define K800_PLL_46_000M 0x00658C02 | ||
| 788 | #define K800_PLL_46_996M 0x00818C83 | ||
| 789 | #define K800_PLL_48_000M 0x00848C83 | ||
| 790 | #define K800_PLL_48_875M 0x00508C81 | ||
| 791 | #define K800_PLL_49_500M 0x00518C01 | ||
| 792 | #define K800_PLL_52_406M 0x00738C02 | ||
| 793 | #define K800_PLL_52_977M 0x00928C83 | ||
| 794 | #define K800_PLL_56_250M 0x007C8C02 | ||
| 795 | #define K800_PLL_60_466M 0x00A78C83 | ||
| 796 | #define K800_PLL_61_500M 0x00AA8C83 | ||
| 797 | #define K800_PLL_65_000M 0x006B8C01 | ||
| 798 | #define K800_PLL_65_178M 0x00B48C83 | ||
| 799 | #define K800_PLL_66_750M 0x00948C82 /* 67.116MHz */ | ||
| 800 | #define K800_PLL_68_179M 0x00708C01 | ||
| 801 | #define K800_PLL_69_924M 0x00C18C83 | ||
| 802 | #define K800_PLL_70_159M 0x00C28C83 | ||
| 803 | #define K800_PLL_72_000M 0x009F8C82 | ||
| 804 | #define K800_PLL_74_270M 0x00ce0c03 | ||
| 805 | #define K800_PLL_78_750M 0x00408801 | ||
| 806 | #define K800_PLL_80_136M 0x00428801 | ||
| 807 | #define K800_PLL_83_375M 0x005B0882 | ||
| 808 | #define K800_PLL_83_950M 0x00738803 | ||
| 809 | #define K800_PLL_84_750M 0x00748883 /* 84.477MHz */ | ||
| 810 | #define K800_PLL_85_860M 0x00768883 | ||
| 811 | #define K800_PLL_88_750M 0x007A8883 | ||
| 812 | #define K800_PLL_94_500M 0x00828803 | ||
| 813 | #define K800_PLL_97_750M 0x00878883 | ||
| 814 | #define K800_PLL_101_000M 0x008B8883 | ||
| 815 | #define K800_PLL_106_500M 0x00758882 /* 106.491463 MHz */ | ||
| 816 | #define K800_PLL_108_000M 0x00778882 | ||
| 817 | #define K800_PLL_113_309M 0x005D8881 | ||
| 818 | #define K800_PLL_118_840M 0x00A48883 | ||
| 819 | #define K800_PLL_119_000M 0x00838882 | ||
| 820 | #define K800_PLL_121_750M 0x00A88883 /* 121.704MHz */ | ||
| 821 | #define K800_PLL_125_104M 0x00688801 | ||
| 822 | #define K800_PLL_133_308M 0x005D8801 | ||
| 823 | #define K800_PLL_135_000M 0x001A4081 | ||
| 824 | #define K800_PLL_136_700M 0x00BD8883 | ||
| 825 | #define K800_PLL_138_400M 0x00728881 | ||
| 826 | #define K800_PLL_146_760M 0x00CC8883 | ||
| 827 | #define K800_PLL_148_500M 0x00ce0803 | ||
| 828 | #define K800_PLL_153_920M 0x00548482 | ||
| 829 | #define K800_PLL_156_000M 0x006B8483 | ||
| 830 | #define K800_PLL_157_500M 0x00142080 | ||
| 831 | #define K800_PLL_162_000M 0x006F8483 | ||
| 832 | #define K800_PLL_187_000M 0x00818483 | ||
| 833 | #define K800_PLL_193_295M 0x004F8481 | ||
| 834 | #define K800_PLL_202_500M 0x00538481 | ||
| 835 | #define K800_PLL_204_000M 0x008D8483 | ||
| 836 | #define K800_PLL_218_500M 0x00978483 | ||
| 837 | #define K800_PLL_234_000M 0x00608401 | ||
| 838 | #define K800_PLL_267_250M 0x006E8481 | ||
| 839 | #define K800_PLL_297_500M 0x00A48402 | ||
| 840 | #define K800_PLL_74_481M 0x007B8C81 | ||
| 841 | #define K800_PLL_172_798M 0x00778483 | ||
| 842 | #define K800_PLL_122_614M 0x00878882 | ||
| 843 | |||
| 844 | /* PLL for VT3324 */ | ||
| 845 | #define CX700_25_175M 0x008B1003 | ||
| 846 | #define CX700_26_719M 0x00931003 | ||
| 847 | #define CX700_26_880M 0x00941003 | ||
| 848 | #define CX700_29_581M 0x00A49003 | ||
| 849 | #define CX700_31_490M 0x00AE1003 | ||
| 850 | #define CX700_31_500M 0x00AE1003 | ||
| 851 | #define CX700_31_728M 0x00AF1003 | ||
| 852 | #define CX700_32_668M 0x00B51003 | ||
| 853 | #define CX700_36_000M 0x00C81003 | ||
| 854 | #define CX700_40_000M 0x006E0C03 | ||
| 855 | #define CX700_41_291M 0x00710C03 | ||
| 856 | #define CX700_43_163M 0x00770C03 | ||
| 857 | #define CX700_45_250M 0x007D0C03 /* 45.46MHz */ | ||
| 858 | #define CX700_46_000M 0x007F0C03 | ||
| 859 | #define CX700_46_996M 0x00818C83 | ||
| 860 | #define CX700_48_000M 0x00840C03 | ||
| 861 | #define CX700_48_875M 0x00508C81 | ||
| 862 | #define CX700_49_500M 0x00880C03 | ||
| 863 | #define CX700_52_406M 0x00730C02 | ||
| 864 | #define CX700_52_977M 0x00920C03 | ||
| 865 | #define CX700_56_250M 0x009B0C03 | ||
| 866 | #define CX700_60_466M 0x00460C00 | ||
| 867 | #define CX700_61_500M 0x00AA0C03 | ||
| 868 | #define CX700_65_000M 0x006B0C01 | ||
| 869 | #define CX700_65_178M 0x006B0C01 | ||
| 870 | #define CX700_66_750M 0x00940C02 /*67.116MHz */ | ||
| 871 | #define CX700_68_179M 0x00BC0C03 | ||
| 872 | #define CX700_69_924M 0x00C10C03 | ||
| 873 | #define CX700_70_159M 0x00C20C03 | ||
| 874 | #define CX700_72_000M 0x009F0C02 | ||
| 875 | #define CX700_74_270M 0x00CE0C03 | ||
| 876 | #define CX700_74_481M 0x00CE0C03 | ||
| 877 | #define CX700_78_750M 0x006C0803 | ||
| 878 | #define CX700_80_136M 0x006E0803 | ||
| 879 | #define CX700_83_375M 0x005B0882 | ||
| 880 | #define CX700_83_950M 0x00730803 | ||
| 881 | #define CX700_84_750M 0x00740803 /* 84.537Mhz */ | ||
| 882 | #define CX700_85_860M 0x00760803 | ||
| 883 | #define CX700_88_750M 0x00AC8885 | ||
| 884 | #define CX700_94_500M 0x00820803 | ||
| 885 | #define CX700_97_750M 0x00870803 | ||
| 886 | #define CX700_101_000M 0x008B0803 | ||
| 887 | #define CX700_106_500M 0x00750802 | ||
| 888 | #define CX700_108_000M 0x00950803 | ||
| 889 | #define CX700_113_309M 0x005D0801 | ||
| 890 | #define CX700_118_840M 0x00A40803 | ||
| 891 | #define CX700_119_000M 0x00830802 | ||
| 892 | #define CX700_121_750M 0x00420800 /* 121.704MHz */ | ||
| 893 | #define CX700_125_104M 0x00AD0803 | ||
| 894 | #define CX700_133_308M 0x00930802 | ||
| 895 | #define CX700_135_000M 0x00950802 | ||
| 896 | #define CX700_136_700M 0x00BD0803 | ||
| 897 | #define CX700_138_400M 0x00720801 | ||
| 898 | #define CX700_146_760M 0x00CC0803 | ||
| 899 | #define CX700_148_500M 0x00a40802 | ||
| 900 | #define CX700_153_920M 0x00540402 | ||
| 901 | #define CX700_156_000M 0x006B0403 | ||
| 902 | #define CX700_157_500M 0x006C0403 | ||
| 903 | #define CX700_162_000M 0x006F0403 | ||
| 904 | #define CX700_172_798M 0x00770403 | ||
| 905 | #define CX700_187_000M 0x00810403 | ||
| 906 | #define CX700_193_295M 0x00850403 | ||
| 907 | #define CX700_202_500M 0x008C0403 | ||
| 908 | #define CX700_204_000M 0x008D0403 | ||
| 909 | #define CX700_218_500M 0x00970403 | ||
| 910 | #define CX700_234_000M 0x00600401 | ||
| 911 | #define CX700_267_250M 0x00B90403 | ||
| 912 | #define CX700_297_500M 0x00CE0403 | ||
| 913 | #define CX700_122_614M 0x00870802 | ||
| 914 | |||
| 915 | /* PLL for VX855 */ | ||
| 916 | #define VX855_22_000M 0x007B1005 | ||
| 917 | #define VX855_25_175M 0x008D1005 | ||
| 918 | #define VX855_26_719M 0x00961005 | ||
| 919 | #define VX855_26_880M 0x00961005 | ||
| 920 | #define VX855_27_000M 0x00971005 | ||
| 921 | #define VX855_29_581M 0x00A51005 | ||
| 922 | #define VX855_29_829M 0x00641003 | ||
| 923 | #define VX855_31_490M 0x00B01005 | ||
| 924 | #define VX855_31_500M 0x00B01005 | ||
| 925 | #define VX855_31_728M 0x008E1004 | ||
| 926 | #define VX855_32_668M 0x00921004 | ||
| 927 | #define VX855_36_000M 0x00A11004 | ||
| 928 | #define VX855_40_000M 0x00700C05 | ||
| 929 | #define VX855_41_291M 0x00730C05 | ||
| 930 | #define VX855_43_163M 0x00790C05 | ||
| 931 | #define VX855_45_250M 0x007F0C05 /* 45.46MHz */ | ||
| 932 | #define VX855_46_000M 0x00670C04 | ||
| 933 | #define VX855_46_996M 0x00690C04 | ||
| 934 | #define VX855_48_000M 0x00860C05 | ||
| 935 | #define VX855_48_875M 0x00890C05 | ||
| 936 | #define VX855_49_500M 0x00530C03 | ||
| 937 | #define VX855_52_406M 0x00580C03 | ||
| 938 | #define VX855_52_977M 0x00940C05 | ||
| 939 | #define VX855_56_250M 0x009D0C05 | ||
| 940 | #define VX855_57_275M 0x009D8C85 /* Used by XO panel */ | ||
| 941 | #define VX855_60_466M 0x00A90C05 | ||
| 942 | #define VX855_61_500M 0x00AC0C05 | ||
| 943 | #define VX855_65_000M 0x006D0C03 | ||
| 944 | #define VX855_65_178M 0x00B60C05 | ||
| 945 | #define VX855_66_750M 0x00700C03 /*67.116MHz */ | ||
| 946 | #define VX855_67_295M 0x00BC0C05 | ||
| 947 | #define VX855_68_179M 0x00BF0C05 | ||
| 948 | #define VX855_68_369M 0x00BF0C05 | ||
| 949 | #define VX855_69_924M 0x00C30C05 | ||
| 950 | #define VX855_70_159M 0x00C30C05 | ||
| 951 | #define VX855_72_000M 0x00A10C04 | ||
| 952 | #define VX855_73_023M 0x00CC0C05 | ||
| 953 | #define VX855_74_481M 0x00D10C05 | ||
| 954 | #define VX855_78_750M 0x006E0805 | ||
| 955 | #define VX855_79_466M 0x006F0805 | ||
| 956 | #define VX855_80_136M 0x00700805 | ||
| 957 | #define VX855_81_627M 0x00720805 | ||
| 958 | #define VX855_83_375M 0x00750805 | ||
| 959 | #define VX855_83_527M 0x00750805 | ||
| 960 | #define VX855_83_950M 0x00750805 | ||
| 961 | #define VX855_84_537M 0x00760805 | ||
| 962 | #define VX855_84_750M 0x00760805 /* 84.537Mhz */ | ||
| 963 | #define VX855_85_500M 0x00760805 /* 85.909080 MHz*/ | ||
| 964 | #define VX855_85_860M 0x00760805 | ||
| 965 | #define VX855_85_909M 0x00760805 | ||
| 966 | #define VX855_88_750M 0x007C0805 | ||
| 967 | #define VX855_89_489M 0x007D0805 | ||
| 968 | #define VX855_94_500M 0x00840805 | ||
| 969 | #define VX855_96_648M 0x00870805 | ||
| 970 | #define VX855_97_750M 0x00890805 | ||
| 971 | #define VX855_101_000M 0x008D0805 | ||
| 972 | #define VX855_106_500M 0x00950805 | ||
| 973 | #define VX855_108_000M 0x00970805 | ||
| 974 | #define VX855_110_125M 0x00990805 | ||
| 975 | #define VX855_112_000M 0x009D0805 | ||
| 976 | #define VX855_113_309M 0x009F0805 | ||
| 977 | #define VX855_115_000M 0x00A10805 | ||
| 978 | #define VX855_118_840M 0x00A60805 | ||
| 979 | #define VX855_119_000M 0x00A70805 | ||
| 980 | #define VX855_121_750M 0x00AA0805 /* 121.704MHz */ | ||
| 981 | #define VX855_122_614M 0x00AC0805 | ||
| 982 | #define VX855_126_266M 0x00B10805 | ||
| 983 | #define VX855_130_250M 0x00B60805 /* 130.250 */ | ||
| 984 | #define VX855_135_000M 0x00BD0805 | ||
| 985 | #define VX855_136_700M 0x00BF0805 | ||
| 986 | #define VX855_137_750M 0x00C10805 | ||
| 987 | #define VX855_138_400M 0x00C20805 | ||
| 988 | #define VX855_144_300M 0x00CA0805 | ||
| 989 | #define VX855_146_760M 0x00CE0805 | ||
| 990 | #define VX855_148_500M 0x00D00805 | ||
| 991 | #define VX855_153_920M 0x00540402 | ||
| 992 | #define VX855_156_000M 0x006C0405 | ||
| 993 | #define VX855_156_867M 0x006E0405 | ||
| 994 | #define VX855_157_500M 0x006E0405 | ||
| 995 | #define VX855_162_000M 0x00710405 | ||
| 996 | #define VX855_172_798M 0x00790405 | ||
| 997 | #define VX855_187_000M 0x00830405 | ||
| 998 | #define VX855_193_295M 0x00870405 | ||
| 999 | #define VX855_202_500M 0x008E0405 | ||
| 1000 | #define VX855_204_000M 0x008F0405 | ||
| 1001 | #define VX855_218_500M 0x00990405 | ||
| 1002 | #define VX855_229_500M 0x00A10405 | ||
| 1003 | #define VX855_234_000M 0x00A40405 | ||
| 1004 | #define VX855_267_250M 0x00BB0405 | ||
| 1005 | #define VX855_297_500M 0x00D00405 | ||
| 1006 | #define VX855_339_500M 0x00770005 | ||
| 1007 | #define VX855_340_772M 0x00770005 | ||
| 1008 | |||
| 1009 | 700 | ||
| 1010 | /* Definition CRTC Timing Index */ | 701 | /* Definition CRTC Timing Index */ | 
| 1011 | #define H_TOTAL_INDEX 0 | 702 | #define H_TOTAL_INDEX 0 | 
| diff --git a/drivers/video/via/via-core.c b/drivers/video/via/via-core.c index e8cfe8392110..66f403033111 100644 --- a/drivers/video/via/via-core.c +++ b/drivers/video/via/via-core.c | |||
| @@ -64,7 +64,7 @@ static inline int viafb_mmio_read(int reg) | |||
| 64 | */ | 64 | */ | 
| 65 | static u32 viafb_enabled_ints; | 65 | static u32 viafb_enabled_ints; | 
| 66 | 66 | ||
| 67 | static void viafb_int_init(void) | 67 | static void __devinit viafb_int_init(void) | 
| 68 | { | 68 | { | 
| 69 | viafb_enabled_ints = 0; | 69 | viafb_enabled_ints = 0; | 
| 70 | 70 | ||
| @@ -489,7 +489,7 @@ out_unmap: | |||
| 489 | return ret; | 489 | return ret; | 
| 490 | } | 490 | } | 
| 491 | 491 | ||
| 492 | static void __devexit via_pci_teardown_mmio(struct viafb_dev *vdev) | 492 | static void via_pci_teardown_mmio(struct viafb_dev *vdev) | 
| 493 | { | 493 | { | 
| 494 | iounmap(vdev->fbmem); | 494 | iounmap(vdev->fbmem); | 
| 495 | iounmap(vdev->engine_mmio); | 495 | iounmap(vdev->engine_mmio); | 
| @@ -548,7 +548,7 @@ static int __devinit via_setup_subdevs(struct viafb_dev *vdev) | |||
| 548 | return 0; | 548 | return 0; | 
| 549 | } | 549 | } | 
| 550 | 550 | ||
| 551 | static void __devexit via_teardown_subdevs(void) | 551 | static void via_teardown_subdevs(void) | 
| 552 | { | 552 | { | 
| 553 | int i; | 553 | int i; | 
| 554 | 554 | ||
| @@ -613,22 +613,24 @@ static void __devexit via_pci_remove(struct pci_dev *pdev) | |||
| 613 | static struct pci_device_id via_pci_table[] __devinitdata = { | 613 | static struct pci_device_id via_pci_table[] __devinitdata = { | 
| 614 | { PCI_DEVICE(PCI_VENDOR_ID_VIA, UNICHROME_CLE266_DID), | 614 | { PCI_DEVICE(PCI_VENDOR_ID_VIA, UNICHROME_CLE266_DID), | 
| 615 | .driver_data = UNICHROME_CLE266 }, | 615 | .driver_data = UNICHROME_CLE266 }, | 
| 616 | { PCI_DEVICE(PCI_VENDOR_ID_VIA, UNICHROME_PM800_DID), | ||
| 617 | .driver_data = UNICHROME_PM800 }, | ||
| 618 | { PCI_DEVICE(PCI_VENDOR_ID_VIA, UNICHROME_K400_DID), | 616 | { PCI_DEVICE(PCI_VENDOR_ID_VIA, UNICHROME_K400_DID), | 
| 619 | .driver_data = UNICHROME_K400 }, | 617 | .driver_data = UNICHROME_K400 }, | 
| 620 | { PCI_DEVICE(PCI_VENDOR_ID_VIA, UNICHROME_K800_DID), | 618 | { PCI_DEVICE(PCI_VENDOR_ID_VIA, UNICHROME_K800_DID), | 
| 621 | .driver_data = UNICHROME_K800 }, | 619 | .driver_data = UNICHROME_K800 }, | 
| 622 | { PCI_DEVICE(PCI_VENDOR_ID_VIA, UNICHROME_P4M890_DID), | 620 | { PCI_DEVICE(PCI_VENDOR_ID_VIA, UNICHROME_PM800_DID), | 
| 621 | .driver_data = UNICHROME_PM800 }, | ||
| 622 | { PCI_DEVICE(PCI_VENDOR_ID_VIA, UNICHROME_CN700_DID), | ||
| 623 | .driver_data = UNICHROME_CN700 }, | 623 | .driver_data = UNICHROME_CN700 }, | 
| 624 | { PCI_DEVICE(PCI_VENDOR_ID_VIA, UNICHROME_K8M890_DID), | ||
| 625 | .driver_data = UNICHROME_K8M890 }, | ||
| 626 | { PCI_DEVICE(PCI_VENDOR_ID_VIA, UNICHROME_CX700_DID), | 624 | { PCI_DEVICE(PCI_VENDOR_ID_VIA, UNICHROME_CX700_DID), | 
| 627 | .driver_data = UNICHROME_CX700 }, | 625 | .driver_data = UNICHROME_CX700 }, | 
| 628 | { PCI_DEVICE(PCI_VENDOR_ID_VIA, UNICHROME_P4M900_DID), | ||
| 629 | .driver_data = UNICHROME_P4M900 }, | ||
| 630 | { PCI_DEVICE(PCI_VENDOR_ID_VIA, UNICHROME_CN750_DID), | 626 | { PCI_DEVICE(PCI_VENDOR_ID_VIA, UNICHROME_CN750_DID), | 
| 631 | .driver_data = UNICHROME_CN750 }, | 627 | .driver_data = UNICHROME_CN750 }, | 
| 628 | { PCI_DEVICE(PCI_VENDOR_ID_VIA, UNICHROME_K8M890_DID), | ||
| 629 | .driver_data = UNICHROME_K8M890 }, | ||
| 630 | { PCI_DEVICE(PCI_VENDOR_ID_VIA, UNICHROME_P4M890_DID), | ||
| 631 | .driver_data = UNICHROME_P4M890 }, | ||
| 632 | { PCI_DEVICE(PCI_VENDOR_ID_VIA, UNICHROME_P4M900_DID), | ||
| 633 | .driver_data = UNICHROME_P4M900 }, | ||
| 632 | { PCI_DEVICE(PCI_VENDOR_ID_VIA, UNICHROME_VX800_DID), | 634 | { PCI_DEVICE(PCI_VENDOR_ID_VIA, UNICHROME_VX800_DID), | 
| 633 | .driver_data = UNICHROME_VX800 }, | 635 | .driver_data = UNICHROME_VX800 }, | 
| 634 | { PCI_DEVICE(PCI_VENDOR_ID_VIA, UNICHROME_VX855_DID), | 636 | { PCI_DEVICE(PCI_VENDOR_ID_VIA, UNICHROME_VX855_DID), | 
| diff --git a/drivers/video/via/via-gpio.c b/drivers/video/via/via-gpio.c index 595516aea691..39acb37e7a1d 100644 --- a/drivers/video/via/via-gpio.c +++ b/drivers/video/via/via-gpio.c | |||
| @@ -73,7 +73,7 @@ struct viafb_gpio_cfg { | |||
| 73 | struct gpio_chip gpio_chip; | 73 | struct gpio_chip gpio_chip; | 
| 74 | struct viafb_dev *vdev; | 74 | struct viafb_dev *vdev; | 
| 75 | struct viafb_gpio *active_gpios[VIAFB_NUM_GPIOS]; | 75 | struct viafb_gpio *active_gpios[VIAFB_NUM_GPIOS]; | 
| 76 | char *gpio_names[VIAFB_NUM_GPIOS]; | 76 | const char *gpio_names[VIAFB_NUM_GPIOS]; | 
| 77 | }; | 77 | }; | 
| 78 | 78 | ||
| 79 | /* | 79 | /* | 
| diff --git a/drivers/video/via/viafbdev.c b/drivers/video/via/viafbdev.c index 1082541358f0..bdd0e4130f4e 100644 --- a/drivers/video/via/viafbdev.c +++ b/drivers/video/via/viafbdev.c | |||
| @@ -49,11 +49,6 @@ char *viafb_active_dev; | |||
| 49 | char *viafb_lcd_port = ""; | 49 | char *viafb_lcd_port = ""; | 
| 50 | char *viafb_dvi_port = ""; | 50 | char *viafb_dvi_port = ""; | 
| 51 | 51 | ||
| 52 | static void viafb_set_device(struct device_t active_dev); | ||
| 53 | static int apply_device_setting(struct viafb_ioctl_setting setting_info, | ||
| 54 | struct fb_info *info); | ||
| 55 | static void apply_second_mode_setting(struct fb_var_screeninfo | ||
| 56 | *sec_var); | ||
| 57 | static void retrieve_device_setting(struct viafb_ioctl_setting | 52 | static void retrieve_device_setting(struct viafb_ioctl_setting | 
| 58 | *setting_info); | 53 | *setting_info); | 
| 59 | static int viafb_pan_display(struct fb_var_screeninfo *var, | 54 | static int viafb_pan_display(struct fb_var_screeninfo *var, | 
| @@ -221,9 +216,9 @@ static int viafb_check_var(struct fb_var_screeninfo *var, | |||
| 221 | 216 | ||
| 222 | /* Adjust var according to our driver's own table */ | 217 | /* Adjust var according to our driver's own table */ | 
| 223 | viafb_fill_var_timing_info(var, viafb_refresh, vmode_entry); | 218 | viafb_fill_var_timing_info(var, viafb_refresh, vmode_entry); | 
| 224 | if (info->var.accel_flags & FB_ACCELF_TEXT && | 219 | if (var->accel_flags & FB_ACCELF_TEXT && | 
| 225 | !ppar->shared->vdev->engine_mmio) | 220 | !ppar->shared->vdev->engine_mmio) | 
| 226 | info->var.accel_flags = 0; | 221 | var->accel_flags = 0; | 
| 227 | 222 | ||
| 228 | return 0; | 223 | return 0; | 
| 229 | } | 224 | } | 
| @@ -234,6 +229,7 @@ static int viafb_set_par(struct fb_info *info) | |||
| 234 | struct VideoModeTable *vmode_entry, *vmode_entry1 = NULL; | 229 | struct VideoModeTable *vmode_entry, *vmode_entry1 = NULL; | 
| 235 | DEBUG_MSG(KERN_INFO "viafb_set_par!\n"); | 230 | DEBUG_MSG(KERN_INFO "viafb_set_par!\n"); | 
| 236 | 231 | ||
| 232 | viafb_update_fix(info); | ||
| 237 | viapar->depth = fb_get_color_depth(&info->var, &info->fix); | 233 | viapar->depth = fb_get_color_depth(&info->var, &info->fix); | 
| 238 | viafb_update_device_setting(viafbinfo->var.xres, viafbinfo->var.yres, | 234 | viafb_update_device_setting(viafbinfo->var.xres, viafbinfo->var.yres, | 
| 239 | viafbinfo->var.bits_per_pixel, viafb_refresh, 0); | 235 | viafbinfo->var.bits_per_pixel, viafb_refresh, 0); | 
| @@ -257,7 +253,6 @@ static int viafb_set_par(struct fb_info *info) | |||
| 257 | } | 253 | } | 
| 258 | 254 | ||
| 259 | if (vmode_entry) { | 255 | if (vmode_entry) { | 
| 260 | viafb_update_fix(info); | ||
| 261 | if (viafb_dual_fb && viapar->iga_path == IGA2) | 256 | if (viafb_dual_fb && viapar->iga_path == IGA2) | 
| 262 | viafb_bpp1 = info->var.bits_per_pixel; | 257 | viafb_bpp1 = info->var.bits_per_pixel; | 
| 263 | else | 258 | else | 
| @@ -478,13 +473,6 @@ static int viafb_ioctl(struct fb_info *info, u_int cmd, u_long arg) | |||
| 478 | if (gpu32 & LCD_Device) | 473 | if (gpu32 & LCD_Device) | 
| 479 | viafb_lcd_disable(); | 474 | viafb_lcd_disable(); | 
| 480 | break; | 475 | break; | 
| 481 | case VIAFB_SET_DEVICE: | ||
| 482 | if (copy_from_user(&u.active_dev, (void *)argp, | ||
| 483 | sizeof(u.active_dev))) | ||
| 484 | return -EFAULT; | ||
| 485 | viafb_set_device(u.active_dev); | ||
| 486 | viafb_set_par(info); | ||
| 487 | break; | ||
| 488 | case VIAFB_GET_DEVICE: | 476 | case VIAFB_GET_DEVICE: | 
| 489 | u.active_dev.crt = viafb_CRT_ON; | 477 | u.active_dev.crt = viafb_CRT_ON; | 
| 490 | u.active_dev.dvi = viafb_DVI_ON; | 478 | u.active_dev.dvi = viafb_DVI_ON; | 
| @@ -527,21 +515,6 @@ static int viafb_ioctl(struct fb_info *info, u_int cmd, u_long arg) | |||
| 527 | 515 | ||
| 528 | break; | 516 | break; | 
| 529 | 517 | ||
| 530 | case VIAFB_SET_DEVICE_INFO: | ||
| 531 | if (copy_from_user(&u.viafb_setting, | ||
| 532 | argp, sizeof(u.viafb_setting))) | ||
| 533 | return -EFAULT; | ||
| 534 | if (apply_device_setting(u.viafb_setting, info) < 0) | ||
| 535 | return -EINVAL; | ||
| 536 | |||
| 537 | break; | ||
| 538 | |||
| 539 | case VIAFB_SET_SECOND_MODE: | ||
| 540 | if (copy_from_user(&u.sec_var, argp, sizeof(u.sec_var))) | ||
| 541 | return -EFAULT; | ||
| 542 | apply_second_mode_setting(&u.sec_var); | ||
| 543 | break; | ||
| 544 | |||
| 545 | case VIAFB_GET_DEVICE_INFO: | 518 | case VIAFB_GET_DEVICE_INFO: | 
| 546 | 519 | ||
| 547 | retrieve_device_setting(&u.viafb_setting); | 520 | retrieve_device_setting(&u.viafb_setting); | 
| @@ -913,112 +886,6 @@ static int viafb_sync(struct fb_info *info) | |||
| 913 | return 0; | 886 | return 0; | 
| 914 | } | 887 | } | 
| 915 | 888 | ||
| 916 | static void check_available_device_to_enable(int device_id) | ||
| 917 | { | ||
| 918 | int device_num = 0; | ||
| 919 | |||
| 920 | /* Initialize: */ | ||
| 921 | viafb_CRT_ON = STATE_OFF; | ||
| 922 | viafb_DVI_ON = STATE_OFF; | ||
| 923 | viafb_LCD_ON = STATE_OFF; | ||
| 924 | viafb_LCD2_ON = STATE_OFF; | ||
| 925 | viafb_DeviceStatus = None_Device; | ||
| 926 | |||
| 927 | if ((device_id & CRT_Device) && (device_num < MAX_ACTIVE_DEV_NUM)) { | ||
| 928 | viafb_CRT_ON = STATE_ON; | ||
| 929 | device_num++; | ||
| 930 | viafb_DeviceStatus |= CRT_Device; | ||
| 931 | } | ||
| 932 | |||
| 933 | if ((device_id & DVI_Device) && (device_num < MAX_ACTIVE_DEV_NUM)) { | ||
| 934 | viafb_DVI_ON = STATE_ON; | ||
| 935 | device_num++; | ||
| 936 | viafb_DeviceStatus |= DVI_Device; | ||
| 937 | } | ||
| 938 | |||
| 939 | if ((device_id & LCD_Device) && (device_num < MAX_ACTIVE_DEV_NUM)) { | ||
| 940 | viafb_LCD_ON = STATE_ON; | ||
| 941 | device_num++; | ||
| 942 | viafb_DeviceStatus |= LCD_Device; | ||
| 943 | } | ||
| 944 | |||
| 945 | if ((device_id & LCD2_Device) && (device_num < MAX_ACTIVE_DEV_NUM)) { | ||
| 946 | viafb_LCD2_ON = STATE_ON; | ||
| 947 | device_num++; | ||
| 948 | viafb_DeviceStatus |= LCD2_Device; | ||
| 949 | } | ||
| 950 | |||
| 951 | if (viafb_DeviceStatus == None_Device) { | ||
| 952 | /* Use CRT as default active device: */ | ||
| 953 | viafb_CRT_ON = STATE_ON; | ||
| 954 | viafb_DeviceStatus = CRT_Device; | ||
| 955 | } | ||
| 956 | DEBUG_MSG(KERN_INFO "Device Status:%x", viafb_DeviceStatus); | ||
| 957 | } | ||
| 958 | |||
| 959 | static void viafb_set_device(struct device_t active_dev) | ||
| 960 | { | ||
| 961 | /* Check available device to enable: */ | ||
| 962 | int device_id = None_Device; | ||
| 963 | if (active_dev.crt) | ||
| 964 | device_id |= CRT_Device; | ||
| 965 | if (active_dev.dvi) | ||
| 966 | device_id |= DVI_Device; | ||
| 967 | if (active_dev.lcd) | ||
| 968 | device_id |= LCD_Device; | ||
| 969 | |||
| 970 | check_available_device_to_enable(device_id); | ||
| 971 | |||
| 972 | /* Check property of LCD: */ | ||
| 973 | if (viafb_LCD_ON) { | ||
| 974 | if (active_dev.lcd_dsp_cent) { | ||
| 975 | viaparinfo->lvds_setting_info->display_method = | ||
| 976 | viafb_lcd_dsp_method = LCD_CENTERING; | ||
| 977 | } else { | ||
| 978 | viaparinfo->lvds_setting_info->display_method = | ||
| 979 | viafb_lcd_dsp_method = LCD_EXPANDSION; | ||
| 980 | } | ||
| 981 | |||
| 982 | if (active_dev.lcd_mode == LCD_SPWG) { | ||
| 983 | viaparinfo->lvds_setting_info->lcd_mode = | ||
| 984 | viafb_lcd_mode = LCD_SPWG; | ||
| 985 | } else { | ||
| 986 | viaparinfo->lvds_setting_info->lcd_mode = | ||
| 987 | viafb_lcd_mode = LCD_OPENLDI; | ||
| 988 | } | ||
| 989 | |||
| 990 | if (active_dev.lcd_panel_id <= LCD_PANEL_ID_MAXIMUM) { | ||
| 991 | viafb_lcd_panel_id = active_dev.lcd_panel_id; | ||
| 992 | viafb_init_lcd_size(); | ||
| 993 | } | ||
| 994 | } | ||
| 995 | |||
| 996 | /* Check property of mode: */ | ||
| 997 | if (!active_dev.xres1) | ||
| 998 | viafb_second_xres = 640; | ||
| 999 | else | ||
| 1000 | viafb_second_xres = active_dev.xres1; | ||
| 1001 | if (!active_dev.yres1) | ||
| 1002 | viafb_second_yres = 480; | ||
| 1003 | else | ||
| 1004 | viafb_second_yres = active_dev.yres1; | ||
| 1005 | if (active_dev.bpp != 0) | ||
| 1006 | viafb_bpp = active_dev.bpp; | ||
| 1007 | if (active_dev.bpp1 != 0) | ||
| 1008 | viafb_bpp1 = active_dev.bpp1; | ||
| 1009 | if (active_dev.refresh != 0) | ||
| 1010 | viafb_refresh = active_dev.refresh; | ||
| 1011 | if (active_dev.refresh1 != 0) | ||
| 1012 | viafb_refresh1 = active_dev.refresh1; | ||
| 1013 | if ((active_dev.samm == STATE_OFF) || (active_dev.samm == STATE_ON)) | ||
| 1014 | viafb_SAMM_ON = active_dev.samm; | ||
| 1015 | viafb_primary_dev = active_dev.primary_dev; | ||
| 1016 | |||
| 1017 | via_set_primary_address(0); | ||
| 1018 | via_set_secondary_address(viafb_SAMM_ON ? viafb_second_offset : 0); | ||
| 1019 | viafb_set_iga_path(); | ||
| 1020 | } | ||
| 1021 | |||
| 1022 | static int get_primary_device(void) | 889 | static int get_primary_device(void) | 
| 1023 | { | 890 | { | 
| 1024 | int primary_device = 0; | 891 | int primary_device = 0; | 
| @@ -1060,124 +927,6 @@ static int get_primary_device(void) | |||
| 1060 | return primary_device; | 927 | return primary_device; | 
| 1061 | } | 928 | } | 
| 1062 | 929 | ||
| 1063 | static void apply_second_mode_setting(struct fb_var_screeninfo | ||
| 1064 | *sec_var) | ||
| 1065 | { | ||
| 1066 | u32 htotal, vtotal, long_refresh; | ||
| 1067 | |||
| 1068 | htotal = sec_var->xres + sec_var->left_margin + | ||
| 1069 | sec_var->right_margin + sec_var->hsync_len; | ||
| 1070 | vtotal = sec_var->yres + sec_var->upper_margin + | ||
| 1071 | sec_var->lower_margin + sec_var->vsync_len; | ||
| 1072 | if ((sec_var->xres_virtual * (sec_var->bits_per_pixel >> 3)) & 0x1F) { | ||
| 1073 | /*Is 32 bytes alignment? */ | ||
| 1074 | /*32 pixel alignment */ | ||
| 1075 | sec_var->xres_virtual = (sec_var->xres_virtual + 31) & ~31; | ||
| 1076 | } | ||
| 1077 | |||
| 1078 | htotal = sec_var->xres + sec_var->left_margin + | ||
| 1079 | sec_var->right_margin + sec_var->hsync_len; | ||
| 1080 | vtotal = sec_var->yres + sec_var->upper_margin + | ||
| 1081 | sec_var->lower_margin + sec_var->vsync_len; | ||
| 1082 | long_refresh = 1000000000UL / sec_var->pixclock * 1000; | ||
| 1083 | long_refresh /= (htotal * vtotal); | ||
| 1084 | |||
| 1085 | viafb_second_xres = sec_var->xres; | ||
| 1086 | viafb_second_yres = sec_var->yres; | ||
| 1087 | viafb_second_virtual_xres = sec_var->xres_virtual; | ||
| 1088 | viafb_second_virtual_yres = sec_var->yres_virtual; | ||
| 1089 | viafb_bpp1 = sec_var->bits_per_pixel; | ||
| 1090 | viafb_refresh1 = viafb_get_refresh(sec_var->xres, sec_var->yres, | ||
| 1091 | long_refresh); | ||
| 1092 | } | ||
| 1093 | |||
| 1094 | static int apply_device_setting(struct viafb_ioctl_setting setting_info, | ||
| 1095 | struct fb_info *info) | ||
| 1096 | { | ||
| 1097 | int need_set_mode = 0; | ||
| 1098 | DEBUG_MSG(KERN_INFO "apply_device_setting\n"); | ||
| 1099 | |||
| 1100 | if (setting_info.device_flag) { | ||
| 1101 | need_set_mode = 1; | ||
| 1102 | check_available_device_to_enable(setting_info.device_status); | ||
| 1103 | } | ||
| 1104 | |||
| 1105 | /* Unlock LCD's operation according to LCD flag | ||
| 1106 | and check if the setting value is valid. */ | ||
| 1107 | /* If the value is valid, apply the new setting value to the device. */ | ||
| 1108 | if (viafb_LCD_ON) { | ||
| 1109 | if (setting_info.lcd_operation_flag & OP_LCD_CENTERING) { | ||
| 1110 | need_set_mode = 1; | ||
| 1111 | if (setting_info.lcd_attributes.display_center) { | ||
| 1112 | /* Centering */ | ||
| 1113 | viaparinfo->lvds_setting_info->display_method = | ||
| 1114 | LCD_CENTERING; | ||
| 1115 | viafb_lcd_dsp_method = LCD_CENTERING; | ||
| 1116 | viaparinfo->lvds_setting_info2->display_method = | ||
| 1117 | viafb_lcd_dsp_method = LCD_CENTERING; | ||
| 1118 | } else { | ||
| 1119 | /* expandsion */ | ||
| 1120 | viaparinfo->lvds_setting_info->display_method = | ||
| 1121 | LCD_EXPANDSION; | ||
| 1122 | viafb_lcd_dsp_method = LCD_EXPANDSION; | ||
| 1123 | viaparinfo->lvds_setting_info2->display_method = | ||
| 1124 | LCD_EXPANDSION; | ||
| 1125 | viafb_lcd_dsp_method = LCD_EXPANDSION; | ||
| 1126 | } | ||
| 1127 | } | ||
| 1128 | |||
| 1129 | if (setting_info.lcd_operation_flag & OP_LCD_MODE) { | ||
| 1130 | need_set_mode = 1; | ||
| 1131 | if (setting_info.lcd_attributes.lcd_mode == | ||
| 1132 | LCD_SPWG) { | ||
| 1133 | viaparinfo->lvds_setting_info->lcd_mode = | ||
| 1134 | viafb_lcd_mode = LCD_SPWG; | ||
| 1135 | } else { | ||
| 1136 | viaparinfo->lvds_setting_info->lcd_mode = | ||
| 1137 | viafb_lcd_mode = LCD_OPENLDI; | ||
| 1138 | } | ||
| 1139 | viaparinfo->lvds_setting_info2->lcd_mode = | ||
| 1140 | viaparinfo->lvds_setting_info->lcd_mode; | ||
| 1141 | } | ||
| 1142 | |||
| 1143 | if (setting_info.lcd_operation_flag & OP_LCD_PANEL_ID) { | ||
| 1144 | need_set_mode = 1; | ||
| 1145 | if (setting_info.lcd_attributes.panel_id <= | ||
| 1146 | LCD_PANEL_ID_MAXIMUM) { | ||
| 1147 | viafb_lcd_panel_id = | ||
| 1148 | setting_info.lcd_attributes.panel_id; | ||
| 1149 | viafb_init_lcd_size(); | ||
| 1150 | } | ||
| 1151 | } | ||
| 1152 | } | ||
| 1153 | |||
| 1154 | if (0 != (setting_info.samm_status & OP_SAMM)) { | ||
| 1155 | setting_info.samm_status = | ||
| 1156 | setting_info.samm_status & (~OP_SAMM); | ||
| 1157 | if (setting_info.samm_status == 0 | ||
| 1158 | || setting_info.samm_status == 1) { | ||
| 1159 | viafb_SAMM_ON = setting_info.samm_status; | ||
| 1160 | |||
| 1161 | if (viafb_SAMM_ON) | ||
| 1162 | viafb_primary_dev = setting_info.primary_device; | ||
| 1163 | |||
| 1164 | via_set_primary_address(0); | ||
| 1165 | via_set_secondary_address(viafb_SAMM_ON ? | ||
| 1166 | viafb_second_offset : 0); | ||
| 1167 | viafb_set_iga_path(); | ||
| 1168 | } | ||
| 1169 | need_set_mode = 1; | ||
| 1170 | } | ||
| 1171 | |||
| 1172 | if (!need_set_mode) { | ||
| 1173 | ; | ||
| 1174 | } else { | ||
| 1175 | viafb_set_iga_path(); | ||
| 1176 | viafb_set_par(info); | ||
| 1177 | } | ||
| 1178 | return true; | ||
| 1179 | } | ||
| 1180 | |||
| 1181 | static void retrieve_device_setting(struct viafb_ioctl_setting | 930 | static void retrieve_device_setting(struct viafb_ioctl_setting | 
| 1182 | *setting_info) | 931 | *setting_info) | 
| 1183 | { | 932 | { | 
| @@ -1776,10 +1525,6 @@ int __devinit via_fb_pci_probe(struct viafb_dev *vdev) | |||
| 1776 | parse_lcd_port(); | 1525 | parse_lcd_port(); | 
| 1777 | parse_dvi_port(); | 1526 | parse_dvi_port(); | 
| 1778 | 1527 | ||
| 1779 | /* for dual-fb must viafb_SAMM_ON=1 and viafb_dual_fb=1 */ | ||
| 1780 | if (!viafb_SAMM_ON) | ||
| 1781 | viafb_dual_fb = 0; | ||
| 1782 | |||
| 1783 | viafb_init_chip_info(vdev->chip_type); | 1528 | viafb_init_chip_info(vdev->chip_type); | 
| 1784 | /* | 1529 | /* | 
| 1785 | * The framebuffer will have been successfully mapped by | 1530 | * The framebuffer will have been successfully mapped by | 
| @@ -1823,30 +1568,13 @@ int __devinit via_fb_pci_probe(struct viafb_dev *vdev) | |||
| 1823 | parse_mode(viafb_mode1, &viafb_second_xres, | 1568 | parse_mode(viafb_mode1, &viafb_second_xres, | 
| 1824 | &viafb_second_yres); | 1569 | &viafb_second_yres); | 
| 1825 | 1570 | ||
| 1826 | if (0 == viafb_second_virtual_xres) { | 1571 | viafb_second_virtual_xres = viafb_second_xres; | 
| 1827 | switch (viafb_second_xres) { | 1572 | viafb_second_virtual_yres = viafb_second_yres; | 
| 1828 | case 1400: | ||
| 1829 | viafb_second_virtual_xres = 1408; | ||
| 1830 | break; | ||
| 1831 | default: | ||
| 1832 | viafb_second_virtual_xres = viafb_second_xres; | ||
| 1833 | break; | ||
| 1834 | } | ||
| 1835 | } | ||
| 1836 | if (0 == viafb_second_virtual_yres) | ||
| 1837 | viafb_second_virtual_yres = viafb_second_yres; | ||
| 1838 | } | 1573 | } | 
| 1839 | 1574 | ||
| 1840 | default_var.xres = default_xres; | 1575 | default_var.xres = default_xres; | 
| 1841 | default_var.yres = default_yres; | 1576 | default_var.yres = default_yres; | 
| 1842 | switch (default_xres) { | 1577 | default_var.xres_virtual = default_xres; | 
| 1843 | case 1400: | ||
| 1844 | default_var.xres_virtual = 1408; | ||
| 1845 | break; | ||
| 1846 | default: | ||
| 1847 | default_var.xres_virtual = default_xres; | ||
| 1848 | break; | ||
| 1849 | } | ||
| 1850 | default_var.yres_virtual = default_yres; | 1578 | default_var.yres_virtual = default_yres; | 
| 1851 | default_var.bits_per_pixel = viafb_bpp; | 1579 | default_var.bits_per_pixel = viafb_bpp; | 
| 1852 | default_var.pixclock = | 1580 | default_var.pixclock = | 
