diff options
-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 = |