aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/video/matrox/g450_pll.c
diff options
context:
space:
mode:
authorJean Delvare <khali@linux-fr.org>2009-09-22 19:47:49 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2009-09-23 10:39:57 -0400
commit316b4d644caceb2cf7432d8a27e45b88f57ef2a0 (patch)
tree3c1815b8a4a8e4e5999e657a26e5cea222d02dcd /drivers/video/matrox/g450_pll.c
parentfc2d10ddfc8989e82f74d2a38c7d6bfa45bcaba9 (diff)
matroxfb: get rid of unneeded macros WPMINFO and friends
With multihead support always enabled, these macros are no longer needed and make the code harder to read. Signed-off-by: Jean Delvare <khali@linux-fr.org> Acked-by: Petr Vandrovec <vandrove@vc.cvut.cz> Cc: Krzysztof Helt <krzysztof.h1@poczta.fm> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/video/matrox/g450_pll.c')
-rw-r--r--drivers/video/matrox/g450_pll.c185
1 files changed, 107 insertions, 78 deletions
diff --git a/drivers/video/matrox/g450_pll.c b/drivers/video/matrox/g450_pll.c
index 8c75427ad96f..09f6e045d5be 100644
--- a/drivers/video/matrox/g450_pll.c
+++ b/drivers/video/matrox/g450_pll.c
@@ -25,7 +25,9 @@ static inline unsigned int g450_f2vco(unsigned char p, unsigned int fin) {
25 return (p & 0x40) ? fin : fin << ((p & 3) + 1); 25 return (p & 0x40) ? fin : fin << ((p & 3) + 1);
26} 26}
27 27
28static unsigned int g450_mnp2vco(CPMINFO unsigned int mnp) { 28static unsigned int g450_mnp2vco(const struct matrox_fb_info *minfo,
29 unsigned int mnp)
30{
29 unsigned int m, n; 31 unsigned int m, n;
30 32
31 m = ((mnp >> 16) & 0x0FF) + 1; 33 m = ((mnp >> 16) & 0x0FF) + 1;
@@ -33,8 +35,9 @@ static unsigned int g450_mnp2vco(CPMINFO unsigned int mnp) {
33 return (minfo->features.pll.ref_freq * n + (m >> 1)) / m; 35 return (minfo->features.pll.ref_freq * n + (m >> 1)) / m;
34} 36}
35 37
36unsigned int g450_mnp2f(CPMINFO unsigned int mnp) { 38unsigned int g450_mnp2f(const struct matrox_fb_info *minfo, unsigned int mnp)
37 return g450_vco2f(mnp, g450_mnp2vco(PMINFO mnp)); 39{
40 return g450_vco2f(mnp, g450_mnp2vco(minfo, mnp));
38} 41}
39 42
40static inline unsigned int pll_freq_delta(unsigned int f1, unsigned int f2) { 43static inline unsigned int pll_freq_delta(unsigned int f1, unsigned int f2) {
@@ -49,7 +52,10 @@ static inline unsigned int pll_freq_delta(unsigned int f1, unsigned int f2) {
49#define NO_MORE_MNP 0x01FFFFFF 52#define NO_MORE_MNP 0x01FFFFFF
50#define G450_MNP_FREQBITS (0xFFFFFF43) /* do not mask high byte so we'll catch NO_MORE_MNP */ 53#define G450_MNP_FREQBITS (0xFFFFFF43) /* do not mask high byte so we'll catch NO_MORE_MNP */
51 54
52static unsigned int g450_nextpll(CPMINFO const struct matrox_pll_limits* pi, unsigned int* fvco, unsigned int mnp) { 55static unsigned int g450_nextpll(const struct matrox_fb_info *minfo,
56 const struct matrox_pll_limits *pi,
57 unsigned int *fvco, unsigned int mnp)
58{
53 unsigned int m, n, p; 59 unsigned int m, n, p;
54 unsigned int tvco = *fvco; 60 unsigned int tvco = *fvco;
55 61
@@ -95,7 +101,10 @@ static unsigned int g450_nextpll(CPMINFO const struct matrox_pll_limits* pi, uns
95 return (m << 16) | (n << 8) | p; 101 return (m << 16) | (n << 8) | p;
96} 102}
97 103
98static unsigned int g450_firstpll(CPMINFO const struct matrox_pll_limits* pi, unsigned int* vco, unsigned int fout) { 104static unsigned int g450_firstpll(const struct matrox_fb_info *minfo,
105 const struct matrox_pll_limits *pi,
106 unsigned int *vco, unsigned int fout)
107{
99 unsigned int p; 108 unsigned int p;
100 unsigned int vcomax; 109 unsigned int vcomax;
101 110
@@ -121,88 +130,94 @@ static unsigned int g450_firstpll(CPMINFO const struct matrox_pll_limits* pi, un
121 } 130 }
122 *vco = tvco; 131 *vco = tvco;
123 } 132 }
124 return g450_nextpll(PMINFO pi, vco, 0xFF0000 | p); 133 return g450_nextpll(minfo, pi, vco, 0xFF0000 | p);
125} 134}
126 135
127static inline unsigned int g450_setpll(CPMINFO unsigned int mnp, unsigned int pll) { 136static inline unsigned int g450_setpll(const struct matrox_fb_info *minfo,
137 unsigned int mnp, unsigned int pll)
138{
128 switch (pll) { 139 switch (pll) {
129 case M_PIXEL_PLL_A: 140 case M_PIXEL_PLL_A:
130 matroxfb_DAC_out(PMINFO M1064_XPIXPLLAM, mnp >> 16); 141 matroxfb_DAC_out(minfo, M1064_XPIXPLLAM, mnp >> 16);
131 matroxfb_DAC_out(PMINFO M1064_XPIXPLLAN, mnp >> 8); 142 matroxfb_DAC_out(minfo, M1064_XPIXPLLAN, mnp >> 8);
132 matroxfb_DAC_out(PMINFO M1064_XPIXPLLAP, mnp); 143 matroxfb_DAC_out(minfo, M1064_XPIXPLLAP, mnp);
133 return M1064_XPIXPLLSTAT; 144 return M1064_XPIXPLLSTAT;
134 145
135 case M_PIXEL_PLL_B: 146 case M_PIXEL_PLL_B:
136 matroxfb_DAC_out(PMINFO M1064_XPIXPLLBM, mnp >> 16); 147 matroxfb_DAC_out(minfo, M1064_XPIXPLLBM, mnp >> 16);
137 matroxfb_DAC_out(PMINFO M1064_XPIXPLLBN, mnp >> 8); 148 matroxfb_DAC_out(minfo, M1064_XPIXPLLBN, mnp >> 8);
138 matroxfb_DAC_out(PMINFO M1064_XPIXPLLBP, mnp); 149 matroxfb_DAC_out(minfo, M1064_XPIXPLLBP, mnp);
139 return M1064_XPIXPLLSTAT; 150 return M1064_XPIXPLLSTAT;
140 151
141 case M_PIXEL_PLL_C: 152 case M_PIXEL_PLL_C:
142 matroxfb_DAC_out(PMINFO M1064_XPIXPLLCM, mnp >> 16); 153 matroxfb_DAC_out(minfo, M1064_XPIXPLLCM, mnp >> 16);
143 matroxfb_DAC_out(PMINFO M1064_XPIXPLLCN, mnp >> 8); 154 matroxfb_DAC_out(minfo, M1064_XPIXPLLCN, mnp >> 8);
144 matroxfb_DAC_out(PMINFO M1064_XPIXPLLCP, mnp); 155 matroxfb_DAC_out(minfo, M1064_XPIXPLLCP, mnp);
145 return M1064_XPIXPLLSTAT; 156 return M1064_XPIXPLLSTAT;
146 157
147 case M_SYSTEM_PLL: 158 case M_SYSTEM_PLL:
148 matroxfb_DAC_out(PMINFO DAC1064_XSYSPLLM, mnp >> 16); 159 matroxfb_DAC_out(minfo, DAC1064_XSYSPLLM, mnp >> 16);
149 matroxfb_DAC_out(PMINFO DAC1064_XSYSPLLN, mnp >> 8); 160 matroxfb_DAC_out(minfo, DAC1064_XSYSPLLN, mnp >> 8);
150 matroxfb_DAC_out(PMINFO DAC1064_XSYSPLLP, mnp); 161 matroxfb_DAC_out(minfo, DAC1064_XSYSPLLP, mnp);
151 return DAC1064_XSYSPLLSTAT; 162 return DAC1064_XSYSPLLSTAT;
152 163
153 case M_VIDEO_PLL: 164 case M_VIDEO_PLL:
154 matroxfb_DAC_out(PMINFO M1064_XVIDPLLM, mnp >> 16); 165 matroxfb_DAC_out(minfo, M1064_XVIDPLLM, mnp >> 16);
155 matroxfb_DAC_out(PMINFO M1064_XVIDPLLN, mnp >> 8); 166 matroxfb_DAC_out(minfo, M1064_XVIDPLLN, mnp >> 8);
156 matroxfb_DAC_out(PMINFO M1064_XVIDPLLP, mnp); 167 matroxfb_DAC_out(minfo, M1064_XVIDPLLP, mnp);
157 return M1064_XVIDPLLSTAT; 168 return M1064_XVIDPLLSTAT;
158 } 169 }
159 return 0; 170 return 0;
160} 171}
161 172
162static inline unsigned int g450_cmppll(CPMINFO unsigned int mnp, unsigned int pll) { 173static inline unsigned int g450_cmppll(const struct matrox_fb_info *minfo,
174 unsigned int mnp, unsigned int pll)
175{
163 unsigned char m = mnp >> 16; 176 unsigned char m = mnp >> 16;
164 unsigned char n = mnp >> 8; 177 unsigned char n = mnp >> 8;
165 unsigned char p = mnp; 178 unsigned char p = mnp;
166 179
167 switch (pll) { 180 switch (pll) {
168 case M_PIXEL_PLL_A: 181 case M_PIXEL_PLL_A:
169 return (matroxfb_DAC_in(PMINFO M1064_XPIXPLLAM) != m || 182 return (matroxfb_DAC_in(minfo, M1064_XPIXPLLAM) != m ||
170 matroxfb_DAC_in(PMINFO M1064_XPIXPLLAN) != n || 183 matroxfb_DAC_in(minfo, M1064_XPIXPLLAN) != n ||
171 matroxfb_DAC_in(PMINFO M1064_XPIXPLLAP) != p); 184 matroxfb_DAC_in(minfo, M1064_XPIXPLLAP) != p);
172 185
173 case M_PIXEL_PLL_B: 186 case M_PIXEL_PLL_B:
174 return (matroxfb_DAC_in(PMINFO M1064_XPIXPLLBM) != m || 187 return (matroxfb_DAC_in(minfo, M1064_XPIXPLLBM) != m ||
175 matroxfb_DAC_in(PMINFO M1064_XPIXPLLBN) != n || 188 matroxfb_DAC_in(minfo, M1064_XPIXPLLBN) != n ||
176 matroxfb_DAC_in(PMINFO M1064_XPIXPLLBP) != p); 189 matroxfb_DAC_in(minfo, M1064_XPIXPLLBP) != p);
177 190
178 case M_PIXEL_PLL_C: 191 case M_PIXEL_PLL_C:
179 return (matroxfb_DAC_in(PMINFO M1064_XPIXPLLCM) != m || 192 return (matroxfb_DAC_in(minfo, M1064_XPIXPLLCM) != m ||
180 matroxfb_DAC_in(PMINFO M1064_XPIXPLLCN) != n || 193 matroxfb_DAC_in(minfo, M1064_XPIXPLLCN) != n ||
181 matroxfb_DAC_in(PMINFO M1064_XPIXPLLCP) != p); 194 matroxfb_DAC_in(minfo, M1064_XPIXPLLCP) != p);
182 195
183 case M_SYSTEM_PLL: 196 case M_SYSTEM_PLL:
184 return (matroxfb_DAC_in(PMINFO DAC1064_XSYSPLLM) != m || 197 return (matroxfb_DAC_in(minfo, DAC1064_XSYSPLLM) != m ||
185 matroxfb_DAC_in(PMINFO DAC1064_XSYSPLLN) != n || 198 matroxfb_DAC_in(minfo, DAC1064_XSYSPLLN) != n ||
186 matroxfb_DAC_in(PMINFO DAC1064_XSYSPLLP) != p); 199 matroxfb_DAC_in(minfo, DAC1064_XSYSPLLP) != p);
187 200
188 case M_VIDEO_PLL: 201 case M_VIDEO_PLL:
189 return (matroxfb_DAC_in(PMINFO M1064_XVIDPLLM) != m || 202 return (matroxfb_DAC_in(minfo, M1064_XVIDPLLM) != m ||
190 matroxfb_DAC_in(PMINFO M1064_XVIDPLLN) != n || 203 matroxfb_DAC_in(minfo, M1064_XVIDPLLN) != n ||
191 matroxfb_DAC_in(PMINFO M1064_XVIDPLLP) != p); 204 matroxfb_DAC_in(minfo, M1064_XVIDPLLP) != p);
192 } 205 }
193 return 1; 206 return 1;
194} 207}
195 208
196static inline int g450_isplllocked(CPMINFO unsigned int regidx) { 209static inline int g450_isplllocked(const struct matrox_fb_info *minfo,
210 unsigned int regidx)
211{
197 unsigned int j; 212 unsigned int j;
198 213
199 for (j = 0; j < 1000; j++) { 214 for (j = 0; j < 1000; j++) {
200 if (matroxfb_DAC_in(PMINFO regidx) & 0x40) { 215 if (matroxfb_DAC_in(minfo, regidx) & 0x40) {
201 unsigned int r = 0; 216 unsigned int r = 0;
202 int i; 217 int i;
203 218
204 for (i = 0; i < 100; i++) { 219 for (i = 0; i < 100; i++) {
205 r += matroxfb_DAC_in(PMINFO regidx) & 0x40; 220 r += matroxfb_DAC_in(minfo, regidx) & 0x40;
206 } 221 }
207 return r >= (90 * 0x40); 222 return r >= (90 * 0x40);
208 } 223 }
@@ -211,8 +226,10 @@ static inline int g450_isplllocked(CPMINFO unsigned int regidx) {
211 return 0; 226 return 0;
212} 227}
213 228
214static int g450_testpll(CPMINFO unsigned int mnp, unsigned int pll) { 229static int g450_testpll(const struct matrox_fb_info *minfo, unsigned int mnp,
215 return g450_isplllocked(PMINFO g450_setpll(PMINFO mnp, pll)); 230 unsigned int pll)
231{
232 return g450_isplllocked(minfo, g450_setpll(minfo, mnp, pll));
216} 233}
217 234
218static void updatehwstate_clk(struct matrox_hw_state* hw, unsigned int mnp, unsigned int pll) { 235static void updatehwstate_clk(struct matrox_hw_state* hw, unsigned int mnp, unsigned int pll) {
@@ -225,13 +242,19 @@ static void updatehwstate_clk(struct matrox_hw_state* hw, unsigned int mnp, unsi
225 } 242 }
226} 243}
227 244
228void matroxfb_g450_setpll_cond(WPMINFO unsigned int mnp, unsigned int pll) { 245void matroxfb_g450_setpll_cond(struct matrox_fb_info *minfo, unsigned int mnp,
229 if (g450_cmppll(PMINFO mnp, pll)) { 246 unsigned int pll)
230 g450_setpll(PMINFO mnp, pll); 247{
248 if (g450_cmppll(minfo, mnp, pll)) {
249 g450_setpll(minfo, mnp, pll);
231 } 250 }
232} 251}
233 252
234static inline unsigned int g450_findworkingpll(WPMINFO unsigned int pll, unsigned int* mnparray, unsigned int mnpcount) { 253static inline unsigned int g450_findworkingpll(struct matrox_fb_info *minfo,
254 unsigned int pll,
255 unsigned int *mnparray,
256 unsigned int mnpcount)
257{
235 unsigned int found = 0; 258 unsigned int found = 0;
236 unsigned int idx; 259 unsigned int idx;
237 unsigned int mnpfound = mnparray[0]; 260 unsigned int mnpfound = mnparray[0];
@@ -255,22 +278,22 @@ static inline unsigned int g450_findworkingpll(WPMINFO unsigned int pll, unsigne
255 while (sptr >= sarray) { 278 while (sptr >= sarray) {
256 unsigned int mnp = *sptr--; 279 unsigned int mnp = *sptr--;
257 280
258 if (g450_testpll(PMINFO mnp - 0x0300, pll) && 281 if (g450_testpll(minfo, mnp - 0x0300, pll) &&
259 g450_testpll(PMINFO mnp + 0x0300, pll) && 282 g450_testpll(minfo, mnp + 0x0300, pll) &&
260 g450_testpll(PMINFO mnp - 0x0200, pll) && 283 g450_testpll(minfo, mnp - 0x0200, pll) &&
261 g450_testpll(PMINFO mnp + 0x0200, pll) && 284 g450_testpll(minfo, mnp + 0x0200, pll) &&
262 g450_testpll(PMINFO mnp - 0x0100, pll) && 285 g450_testpll(minfo, mnp - 0x0100, pll) &&
263 g450_testpll(PMINFO mnp + 0x0100, pll)) { 286 g450_testpll(minfo, mnp + 0x0100, pll)) {
264 if (g450_testpll(PMINFO mnp, pll)) { 287 if (g450_testpll(minfo, mnp, pll)) {
265 return mnp; 288 return mnp;
266 } 289 }
267 } else if (!found && g450_testpll(PMINFO mnp, pll)) { 290 } else if (!found && g450_testpll(minfo, mnp, pll)) {
268 mnpfound = mnp; 291 mnpfound = mnp;
269 found = 1; 292 found = 1;
270 } 293 }
271 } 294 }
272 } 295 }
273 g450_setpll(PMINFO mnpfound, pll); 296 g450_setpll(minfo, mnpfound, pll);
274 return mnpfound; 297 return mnpfound;
275} 298}
276 299
@@ -283,7 +306,9 @@ static void g450_addcache(struct matrox_pll_cache* ci, unsigned int mnp_key, uns
283 ci->data[0].mnp_value = mnp_value; 306 ci->data[0].mnp_value = mnp_value;
284} 307}
285 308
286static int g450_checkcache(WPMINFO struct matrox_pll_cache* ci, unsigned int mnp_key) { 309static int g450_checkcache(struct matrox_fb_info *minfo,
310 struct matrox_pll_cache *ci, unsigned int mnp_key)
311{
287 unsigned int i; 312 unsigned int i;
288 313
289 mnp_key &= G450_MNP_FREQBITS; 314 mnp_key &= G450_MNP_FREQBITS;
@@ -303,8 +328,10 @@ static int g450_checkcache(WPMINFO struct matrox_pll_cache* ci, unsigned int mnp
303 return NO_MORE_MNP; 328 return NO_MORE_MNP;
304} 329}
305 330
306static int __g450_setclk(WPMINFO unsigned int fout, unsigned int pll, 331static int __g450_setclk(struct matrox_fb_info *minfo, unsigned int fout,
307 unsigned int* mnparray, unsigned int* deltaarray) { 332 unsigned int pll, unsigned int *mnparray,
333 unsigned int *deltaarray)
334{
308 unsigned int mnpcount; 335 unsigned int mnpcount;
309 unsigned int pixel_vco; 336 unsigned int pixel_vco;
310 const struct matrox_pll_limits* pi; 337 const struct matrox_pll_limits* pi;
@@ -321,16 +348,16 @@ static int __g450_setclk(WPMINFO unsigned int fout, unsigned int pll,
321 348
322 matroxfb_DAC_lock_irqsave(flags); 349 matroxfb_DAC_lock_irqsave(flags);
323 350
324 xpwrctrl = matroxfb_DAC_in(PMINFO M1064_XPWRCTRL); 351 xpwrctrl = matroxfb_DAC_in(minfo, M1064_XPWRCTRL);
325 matroxfb_DAC_out(PMINFO M1064_XPWRCTRL, xpwrctrl & ~M1064_XPWRCTRL_PANELPDN); 352 matroxfb_DAC_out(minfo, M1064_XPWRCTRL, xpwrctrl & ~M1064_XPWRCTRL_PANELPDN);
326 mga_outb(M_SEQ_INDEX, M_SEQ1); 353 mga_outb(M_SEQ_INDEX, M_SEQ1);
327 mga_outb(M_SEQ_DATA, mga_inb(M_SEQ_DATA) | M_SEQ1_SCROFF); 354 mga_outb(M_SEQ_DATA, mga_inb(M_SEQ_DATA) | M_SEQ1_SCROFF);
328 tmp = matroxfb_DAC_in(PMINFO M1064_XPIXCLKCTRL); 355 tmp = matroxfb_DAC_in(minfo, M1064_XPIXCLKCTRL);
329 tmp |= M1064_XPIXCLKCTRL_DIS; 356 tmp |= M1064_XPIXCLKCTRL_DIS;
330 if (!(tmp & M1064_XPIXCLKCTRL_PLL_UP)) { 357 if (!(tmp & M1064_XPIXCLKCTRL_PLL_UP)) {
331 tmp |= M1064_XPIXCLKCTRL_PLL_UP; 358 tmp |= M1064_XPIXCLKCTRL_PLL_UP;
332 } 359 }
333 matroxfb_DAC_out(PMINFO M1064_XPIXCLKCTRL, tmp); 360 matroxfb_DAC_out(minfo, M1064_XPIXCLKCTRL, tmp);
334 /* DVI PLL preferred for frequencies up to 361 /* DVI PLL preferred for frequencies up to
335 panel link max, standard PLL otherwise */ 362 panel link max, standard PLL otherwise */
336 if (fout >= minfo->max_pixel_clock_panellink) 363 if (fout >= minfo->max_pixel_clock_panellink)
@@ -341,8 +368,8 @@ static int __g450_setclk(WPMINFO unsigned int fout, unsigned int pll,
341 M1064_XDVICLKCTRL_C1DVICLKEN | 368 M1064_XDVICLKCTRL_C1DVICLKEN |
342 M1064_XDVICLKCTRL_DVILOOPCTL | 369 M1064_XDVICLKCTRL_DVILOOPCTL |
343 M1064_XDVICLKCTRL_P1LOOPBWDTCTL; 370 M1064_XDVICLKCTRL_P1LOOPBWDTCTL;
344 matroxfb_DAC_out(PMINFO M1064_XDVICLKCTRL,tmp); 371 matroxfb_DAC_out(minfo, M1064_XDVICLKCTRL, tmp);
345 matroxfb_DAC_out(PMINFO M1064_XPWRCTRL, 372 matroxfb_DAC_out(minfo, M1064_XPWRCTRL,
346 xpwrctrl); 373 xpwrctrl);
347 374
348 matroxfb_DAC_unlock_irqrestore(flags); 375 matroxfb_DAC_unlock_irqrestore(flags);
@@ -385,14 +412,14 @@ static int __g450_setclk(WPMINFO unsigned int fout, unsigned int pll,
385 unsigned long flags; 412 unsigned long flags;
386 413
387 matroxfb_DAC_lock_irqsave(flags); 414 matroxfb_DAC_lock_irqsave(flags);
388 tmp = matroxfb_DAC_in(PMINFO M1064_XPWRCTRL); 415 tmp = matroxfb_DAC_in(minfo, M1064_XPWRCTRL);
389 if (!(tmp & 2)) { 416 if (!(tmp & 2)) {
390 matroxfb_DAC_out(PMINFO M1064_XPWRCTRL, tmp | 2); 417 matroxfb_DAC_out(minfo, M1064_XPWRCTRL, tmp | 2);
391 } 418 }
392 419
393 mnp = matroxfb_DAC_in(PMINFO M1064_XPIXPLLCM) << 16; 420 mnp = matroxfb_DAC_in(minfo, M1064_XPIXPLLCM) << 16;
394 mnp |= matroxfb_DAC_in(PMINFO M1064_XPIXPLLCN) << 8; 421 mnp |= matroxfb_DAC_in(minfo, M1064_XPIXPLLCN) << 8;
395 pixel_vco = g450_mnp2vco(PMINFO mnp); 422 pixel_vco = g450_mnp2vco(minfo, mnp);
396 matroxfb_DAC_unlock_irqrestore(flags); 423 matroxfb_DAC_unlock_irqrestore(flags);
397 } 424 }
398 pi = &minfo->limits.video; 425 pi = &minfo->limits.video;
@@ -407,12 +434,12 @@ static int __g450_setclk(WPMINFO unsigned int fout, unsigned int pll,
407 unsigned int mnp; 434 unsigned int mnp;
408 unsigned int xvco; 435 unsigned int xvco;
409 436
410 for(mnp = g450_firstpll(PMINFO pi, &xvco, fout); mnp != NO_MORE_MNP; mnp = g450_nextpll(PMINFO pi, &xvco, mnp)) { 437 for (mnp = g450_firstpll(minfo, pi, &xvco, fout); mnp != NO_MORE_MNP; mnp = g450_nextpll(minfo, pi, &xvco, mnp)) {
411 unsigned int idx; 438 unsigned int idx;
412 unsigned int vco; 439 unsigned int vco;
413 unsigned int delta; 440 unsigned int delta;
414 441
415 vco = g450_mnp2vco(PMINFO mnp); 442 vco = g450_mnp2vco(minfo, mnp);
416#if 0 443#if 0
417 if (pll == M_VIDEO_PLL) { 444 if (pll == M_VIDEO_PLL) {
418 unsigned int big, small; 445 unsigned int big, small;
@@ -444,7 +471,7 @@ static int __g450_setclk(WPMINFO unsigned int fout, unsigned int pll,
444 * (freqs near VCOmin aren't as stable) 471 * (freqs near VCOmin aren't as stable)
445 */ 472 */
446 if (delta == deltaarray[idx-1] 473 if (delta == deltaarray[idx-1]
447 && vco != g450_mnp2vco(PMINFO mnparray[idx-1]) 474 && vco != g450_mnp2vco(minfo, mnparray[idx-1])
448 && vco < (pi->vcomin * 17 / 16)) { 475 && vco < (pi->vcomin * 17 / 16)) {
449 break; 476 break;
450 } 477 }
@@ -468,11 +495,11 @@ static int __g450_setclk(WPMINFO unsigned int fout, unsigned int pll,
468 unsigned int mnp; 495 unsigned int mnp;
469 496
470 matroxfb_DAC_lock_irqsave(flags); 497 matroxfb_DAC_lock_irqsave(flags);
471 mnp = g450_checkcache(PMINFO ci, mnparray[0]); 498 mnp = g450_checkcache(minfo, ci, mnparray[0]);
472 if (mnp != NO_MORE_MNP) { 499 if (mnp != NO_MORE_MNP) {
473 matroxfb_g450_setpll_cond(PMINFO mnp, pll); 500 matroxfb_g450_setpll_cond(minfo, mnp, pll);
474 } else { 501 } else {
475 mnp = g450_findworkingpll(PMINFO pll, mnparray, mnpcount); 502 mnp = g450_findworkingpll(minfo, pll, mnparray, mnpcount);
476 g450_addcache(ci, mnparray[0], mnp); 503 g450_addcache(ci, mnparray[0], mnp);
477 } 504 }
478 updatehwstate_clk(&minfo->hw, mnp, pll); 505 updatehwstate_clk(&minfo->hw, mnp, pll);
@@ -485,14 +512,16 @@ static int __g450_setclk(WPMINFO unsigned int fout, unsigned int pll,
485 * Currently there is 5(p) * 10(m) = 50 possible values. */ 512 * Currently there is 5(p) * 10(m) = 50 possible values. */
486#define MNP_TABLE_SIZE 64 513#define MNP_TABLE_SIZE 64
487 514
488int matroxfb_g450_setclk(WPMINFO unsigned int fout, unsigned int pll) { 515int matroxfb_g450_setclk(struct matrox_fb_info *minfo, unsigned int fout,
516 unsigned int pll)
517{
489 unsigned int* arr; 518 unsigned int* arr;
490 519
491 arr = kmalloc(sizeof(*arr) * MNP_TABLE_SIZE * 2, GFP_KERNEL); 520 arr = kmalloc(sizeof(*arr) * MNP_TABLE_SIZE * 2, GFP_KERNEL);
492 if (arr) { 521 if (arr) {
493 int r; 522 int r;
494 523
495 r = __g450_setclk(PMINFO fout, pll, arr, arr + MNP_TABLE_SIZE); 524 r = __g450_setclk(minfo, fout, pll, arr, arr + MNP_TABLE_SIZE);
496 kfree(arr); 525 kfree(arr);
497 return r; 526 return r;
498 } 527 }