|
From: Petr V. <VAN...@vc...> - 2001-10-26 11:15:46
|
On 26 Oct 01 at 13:04, Carlo E. Prelz wrote:
> Quoting Petr Vandrovec (VAN...@vc...):
>
> > Well, documentation says that it is possible, but I thought that nobody
> > uses interlaced picture now... If you want to do some experiments, you
> > can try:
> >
> > (0) make sure that yres+upper+lower+vslen is odd
> > (1) set bit 25 (0x02000000) in register 0x3C10 (== enable interlace)
> > (2) program register 0x3C28 with start of even field (== leave current value)
> > (3) program register 0x3C2C with start of odd field (== 0x3C28+vxres*bpp/8)
> > (4) program register 0x3C40 with value twice as large as currently
> > (== line offset)
> >
> > and you'll see. I'm not sure whether step (4) is needed or not, documentation
> > is not clear on this.
>
> First of all thanks. I won't be able to experiment on this for at
> least 1 week. But I would like your advice about how best to
> proceed. I mean, can these values be changed at will, or once at the
> loading of the module? Is it wise to just set the second screen to
> interlace at the beginning (possibly with a module parameter) or to
> switch to/from interlace with some sort of ioctl?
All changes should be limited to matroxfb_dh_restore() in
drivers/video/matrox/matroxfb_crtc2.c.
Before line ~133 apply (by hand):
+ if (mt->interlaced) tmp |= 0x02000000;
mga_outl(0x3C10, tmp | 0x10000000);
...
mga_outl(0x3C28, pos);
+ {
+ u_int32_t linelen = p->var.xres_virtual * (p->var.bits_per_pixel >> 3);
+ if (mt->interlaced) {
+ mga_outl(0x3C2C, pos + linelen);
+ linelen *= 2;
+ }
+ mga_outl(0x3C40, linelen);
+ }
- mga_outl(0x3C40, p->var.xres_virtual * (p->var.bits_per_pixel >> 3));
and unless I missed something somewhere, it should work.
Petr Vandrovec
van...@vc...
|