Lines Matching refs:minfo
30 static unsigned int g450_mnp2vco(const struct matrox_fb_info *minfo,
37 return (minfo->features.pll.ref_freq * n + (m >> 1)) / m;
40 unsigned int g450_mnp2f(const struct matrox_fb_info *minfo, unsigned int mnp)
42 return g450_vco2f(mnp, g450_mnp2vco(minfo, mnp));
57 static unsigned int g450_nextpll(const struct matrox_fb_info *minfo,
101 n = ((tvco * (m+1) + minfo->features.pll.ref_freq) / (minfo->features.pll.ref_freq * 2)) - 2;
106 static unsigned int g450_firstpll(const struct matrox_fb_info *minfo,
135 return g450_nextpll(minfo, pi, vco, 0xFF0000 | p);
138 static inline unsigned int g450_setpll(const struct matrox_fb_info *minfo,
143 matroxfb_DAC_out(minfo, M1064_XPIXPLLAM, mnp >> 16);
144 matroxfb_DAC_out(minfo, M1064_XPIXPLLAN, mnp >> 8);
145 matroxfb_DAC_out(minfo, M1064_XPIXPLLAP, mnp);
149 matroxfb_DAC_out(minfo, M1064_XPIXPLLBM, mnp >> 16);
150 matroxfb_DAC_out(minfo, M1064_XPIXPLLBN, mnp >> 8);
151 matroxfb_DAC_out(minfo, M1064_XPIXPLLBP, mnp);
155 matroxfb_DAC_out(minfo, M1064_XPIXPLLCM, mnp >> 16);
156 matroxfb_DAC_out(minfo, M1064_XPIXPLLCN, mnp >> 8);
157 matroxfb_DAC_out(minfo, M1064_XPIXPLLCP, mnp);
161 matroxfb_DAC_out(minfo, DAC1064_XSYSPLLM, mnp >> 16);
162 matroxfb_DAC_out(minfo, DAC1064_XSYSPLLN, mnp >> 8);
163 matroxfb_DAC_out(minfo, DAC1064_XSYSPLLP, mnp);
167 matroxfb_DAC_out(minfo, M1064_XVIDPLLM, mnp >> 16);
168 matroxfb_DAC_out(minfo, M1064_XVIDPLLN, mnp >> 8);
169 matroxfb_DAC_out(minfo, M1064_XVIDPLLP, mnp);
175 static inline unsigned int g450_cmppll(const struct matrox_fb_info *minfo,
184 return (matroxfb_DAC_in(minfo, M1064_XPIXPLLAM) != m ||
185 matroxfb_DAC_in(minfo, M1064_XPIXPLLAN) != n ||
186 matroxfb_DAC_in(minfo, M1064_XPIXPLLAP) != p);
189 return (matroxfb_DAC_in(minfo, M1064_XPIXPLLBM) != m ||
190 matroxfb_DAC_in(minfo, M1064_XPIXPLLBN) != n ||
191 matroxfb_DAC_in(minfo, M1064_XPIXPLLBP) != p);
194 return (matroxfb_DAC_in(minfo, M1064_XPIXPLLCM) != m ||
195 matroxfb_DAC_in(minfo, M1064_XPIXPLLCN) != n ||
196 matroxfb_DAC_in(minfo, M1064_XPIXPLLCP) != p);
199 return (matroxfb_DAC_in(minfo, DAC1064_XSYSPLLM) != m ||
200 matroxfb_DAC_in(minfo, DAC1064_XSYSPLLN) != n ||
201 matroxfb_DAC_in(minfo, DAC1064_XSYSPLLP) != p);
204 return (matroxfb_DAC_in(minfo, M1064_XVIDPLLM) != m ||
205 matroxfb_DAC_in(minfo, M1064_XVIDPLLN) != n ||
206 matroxfb_DAC_in(minfo, M1064_XVIDPLLP) != p);
211 static inline int g450_isplllocked(const struct matrox_fb_info *minfo,
217 if (matroxfb_DAC_in(minfo, regidx) & 0x40) {
222 r += matroxfb_DAC_in(minfo, regidx) & 0x40;
231 static int g450_testpll(const struct matrox_fb_info *minfo, unsigned int mnp,
234 return g450_isplllocked(minfo, g450_setpll(minfo, mnp, pll));
247 void matroxfb_g450_setpll_cond(struct matrox_fb_info *minfo, unsigned int mnp,
250 if (g450_cmppll(minfo, mnp, pll)) {
251 g450_setpll(minfo, mnp, pll);
255 static inline unsigned int g450_findworkingpll(struct matrox_fb_info *minfo,
283 if (g450_testpll(minfo, mnp - 0x0300, pll) &&
284 g450_testpll(minfo, mnp + 0x0300, pll) &&
285 g450_testpll(minfo, mnp - 0x0200, pll) &&
286 g450_testpll(minfo, mnp + 0x0200, pll) &&
287 g450_testpll(minfo, mnp - 0x0100, pll) &&
288 g450_testpll(minfo, mnp + 0x0100, pll)) {
289 if (g450_testpll(minfo, mnp, pll)) {
292 } else if (!found && g450_testpll(minfo, mnp, pll)) {
298 g450_setpll(minfo, mnpfound, pll);
311 static int g450_checkcache(struct matrox_fb_info *minfo,
333 static int __g450_setclk(struct matrox_fb_info *minfo, unsigned int fout,
351 xpwrctrl = matroxfb_DAC_in(minfo, M1064_XPWRCTRL);
352 matroxfb_DAC_out(minfo, M1064_XPWRCTRL, xpwrctrl & ~M1064_XPWRCTRL_PANELPDN);
355 tmp = matroxfb_DAC_in(minfo, M1064_XPIXCLKCTRL);
360 matroxfb_DAC_out(minfo, M1064_XPIXCLKCTRL, tmp);
363 if (fout >= minfo->max_pixel_clock_panellink)
372 /* matroxfb_DAC_out(minfo, M1064_XDVICLKCTRL, tmp); */
373 matroxfb_DAC_out(minfo, M1064_XPWRCTRL,
394 pi = &minfo->limits.pixel;
395 ci = &minfo->cache.pixel;
401 pci_read_config_dword(minfo->pcidev, PCI_OPTION_REG, &opt);
403 pci_write_config_dword(minfo->pcidev, PCI_OPTION_REG, opt | 0x20);
406 pi = &minfo->limits.system;
407 ci = &minfo->cache.system;
416 tmp = matroxfb_DAC_in(minfo, M1064_XPWRCTRL);
418 matroxfb_DAC_out(minfo, M1064_XPWRCTRL, tmp | 2);
421 mnp = matroxfb_DAC_in(minfo, M1064_XPIXPLLCM) << 16;
422 mnp |= matroxfb_DAC_in(minfo, M1064_XPIXPLLCN) << 8;
425 pi = &minfo->limits.video;
426 ci = &minfo->cache.video;
437 for (mnp = g450_firstpll(minfo, pi, &xvco, fout); mnp != NO_MORE_MNP; mnp = g450_nextpll(minfo, pi, &xvco, mnp)) {
442 vco = g450_mnp2vco(minfo, mnp);
455 && vco != g450_mnp2vco(minfo, mnparray[idx-1])
479 mnp = g450_checkcache(minfo, ci, mnparray[0]);
481 matroxfb_g450_setpll_cond(minfo, mnp, pll);
483 mnp = g450_findworkingpll(minfo, pll, mnparray, mnpcount);
486 updatehwstate_clk(&minfo->hw, mnp, pll);
496 int matroxfb_g450_setclk(struct matrox_fb_info *minfo, unsigned int fout,
505 r = __g450_setclk(minfo, fout, pll, arr, arr + MNP_TABLE_SIZE);