Hi list, with the attached patch and xorg.conf I successfully use interlaced modes like 720x576i on a 915G chipset. For an i830M this unfortunately does not yet work completely. First of all thanks to Keith Packard and Krzysztof Halasa for their basic PIPEACONF investigations posted here:
http://lists.freedesktop.org/archives/xorg/2007-January/021271.html I dug deeper into this: Video mode setup is done by the same function i830_crtc_mode_set() for both i830M and 915G. To PIPEACONF register of both chipsets the same value is written to by: OUTREG(PIPEACONF, PIPEACONF_ENABLE | PIPECONF_INTERLACE_W_FIELD_INDICATION); It reads back the same value on a 915G where the interlaced mode works fine. But it reads back only as PIPEACONF_ENABLE on an i830M chipset. The other bits of this register probably are reserved there and thus are cleared. This makes me believe that PIPECONF_INTERLACE_W_FIELD_INDICATION is not implemented on i830M hardware. All the other register initialization needed for i830M interlaced mode setup appears to work already. I exactly get the correct timings there but they are progressive. So I think there is just a tiny little thing missing which keeps my i830M from operating in interlaced mode. My question: Does anybody have information what register to program to put an i830M into interlaced mode? It must to be something equivalent to /* for i810 chipset */ #define INTERLACE_ENABLE 0x80 i810Reg->InterlaceControl = INTERLACE_ENABLE; or /* for 9xx-class chipsets */ #define PIPECONF_INTERLACE_W_FIELD_INDICATION (6 << 21) OUTREG(PIPEACONF, PIPEACONF_ENABLE | PIPECONF_INTERLACE_W_FIELD_INDICATION); Thanks in advance Thomas
diff -ur xserver-xorg-video-intel-2.4.2.org/src/i810_driver.c xserver-xorg-video-intel-2.4.2/src/i810_driver.c --- xserver-xorg-video-intel-2.4.2.org/src/i810_driver.c 2008-10-02 18:56:10.000000000 +0200 +++ xserver-xorg-video-intel-2.4.2/src/i810_driver.c 2008-10-02 20:31:37.000000000 +0200 @@ -2857,7 +2857,9 @@ xf86DrvMsg(scrnIndex, X_PROBED, "Removing interlaced mode \"%s\"\n", mode->name); } +#if 0 /* allow interlaced mode */ return MODE_BAD; +#endif } return MODE_OK; } diff -ur xserver-xorg-video-intel-2.4.2.org/src/i830_crt.c xserver-xorg-video-intel-2.4.2/src/i830_crt.c --- xserver-xorg-video-intel-2.4.2.org/src/i830_crt.c 2008-03-26 03:15:53.000000000 +0100 +++ xserver-xorg-video-intel-2.4.2/src/i830_crt.c 2008-10-02 20:31:37.000000000 +0200 @@ -87,7 +87,7 @@ if (pMode->Flags & V_DBLSCAN) return MODE_NO_DBLESCAN; - if (pMode->Clock > 400000 || pMode->Clock < 25000) + if (pMode->Clock > 400000 || pMode->Clock < 12000) return MODE_CLOCK_RANGE; return MODE_OK; @@ -446,7 +446,7 @@ (1 << I830_OUTPUT_DVO_TMDS)); output->driver_private = i830_output; - output->interlaceAllowed = FALSE; + output->interlaceAllowed = TRUE; output->doubleScanAllowed = FALSE; /* Set up the DDC bus. */ diff -ur xserver-xorg-video-intel-2.4.2.org/src/i830_display.c xserver-xorg-video-intel-2.4.2/src/i830_display.c --- xserver-xorg-video-intel-2.4.2.org/src/i830_display.c 2008-10-02 18:56:10.000000000 +0200 +++ xserver-xorg-video-intel-2.4.2/src/i830_display.c 2008-10-02 20:31:37.000000000 +0200 @@ -71,7 +71,7 @@ intel_p2_t p2; } intel_limit_t; -#define I8XX_DOT_MIN 25000 +#define I8XX_DOT_MIN 12000 #define I8XX_DOT_MAX 350000 #define I8XX_VCO_MIN 930000 #define I8XX_VCO_MAX 1400000 @@ -95,9 +95,9 @@ #define I8XX_P2_LVDS_FAST 7 #define I8XX_P2_SLOW_LIMIT 165000 -#define I9XX_DOT_MIN 20000 +#define I9XX_DOT_MIN 12000 #define I9XX_DOT_MAX 400000 -#define I9XX_VCO_MIN 1400000 +#define I9XX_VCO_MIN 1000000 #define I9XX_VCO_MAX 2800000 /* Haven't found any reason to go this fast, but newer chips support it */ @@ -495,7 +495,7 @@ return FALSE; if (crtc->enabled) return FALSE; - xf86SetModeCrtc (&mode, INTERLACE_HALVE_V); + xf86SetModeCrtc (&mode, 0); crtc->funcs->mode_set (crtc, &mode, &mode, 0, 0); crtc->funcs->dpms (crtc, DPMSModeOn); return TRUE; @@ -962,8 +962,16 @@ static Bool i830_crtc_mode_fixup(xf86CrtcPtr crtc, DisplayModePtr mode, - DisplayModePtr adjusted_mode) + DisplayModePtr ajd_mode) { + if (mode->Flags & V_INTERLACE) { + mode->CrtcVDisplay = ajd_mode->CrtcVDisplay = mode->VDisplay; + mode->CrtcVSyncStart = ajd_mode->CrtcVSyncStart = mode->VSyncStart; + mode->CrtcVSyncEnd = ajd_mode->CrtcVSyncEnd = mode->VSyncEnd; + mode->CrtcVBlankStart = ajd_mode->CrtcVBlankStart = mode->CrtcVDisplay; + mode->CrtcVBlankEnd = ajd_mode->CrtcVBlankEnd = mode->VTotal; + mode->CrtcVTotal = ajd_mode->CrtcVTotal = mode->VTotal; + } return TRUE; } @@ -1355,6 +1363,12 @@ /* Wait for the clocks to stabilize. */ usleep(150); + if (adjusted_mode->Flags & V_INTERLACE) { + pipeconf |= PIPECONF_INTERLACE_W_FIELD_INDICATION; + xf86DrvMsg(pScrn->scrnIndex, X_WARNING, "khc PIPECONF_INTERLACE\n"); + } else + pipeconf &= ~PIPECONF_INTERLACE_W_FIELD_INDICATION; + OUTREG(htot_reg, (adjusted_mode->CrtcHDisplay - 1) | ((adjusted_mode->CrtcHTotal - 1) << 16)); OUTREG(hblank_reg, (adjusted_mode->CrtcHBlankStart - 1) |
Section "ServerLayout" Identifier "X.org Configured" Screen 0 "Screen0" 0 0 InputDevice "Mouse0" "CorePointer" InputDevice "Keyboard0" "CoreKeyboard" EndSection Section "Files" ModulePath "/usr/lib/xorg/modules" FontPath "/usr/share/fonts/X11/misc" FontPath "/usr/share/fonts/X11/cyrillic" FontPath "/usr/share/fonts/X11/100dpi/:unscaled" FontPath "/usr/share/fonts/X11/75dpi/:unscaled" FontPath "/usr/share/fonts/X11/Type1" FontPath "/usr/share/fonts/X11/100dpi" FontPath "/usr/share/fonts/X11/75dpi" FontPath "/var/lib/defoma/x-ttcidfont-conf.d/dirs/TrueType" EndSection Section "Module" Load "dbe" Load "dri" Load "extmod" Load "glx" Load "xtrap" EndSection Section "InputDevice" Identifier "Keyboard0" Driver "kbd" EndSection Section "InputDevice" Identifier "Mouse0" Driver "mouse" Option "Protocol" "auto" Option "Device" "/dev/input/mice" Option "ZAxisMapping" "4 5 6 7" EndSection Section "Monitor" Identifier "Monitor0" VendorName "Monitor Vendor" ModelName "Monitor Model" HorizSync 15-16 VertRefresh 50 Modeline "720x576i" 13.875 720 744 808 888 576 580 585 625 -hsync -vsync interlace EndSection Section "Device" ### Available Driver options are:- ### Values: <i>: integer, <f>: float, <bool>: "True"/"False", ### <string>: "String", <freq>: "<f> Hz/kHz/MHz" ### [arg]: arg optional #Option "NoAccel" # [<bool>] #Option "SWcursor" # [<bool>] #Option "ColorKey" # <i> #Option "CacheLines" # <i> #Option "Dac6Bit" # [<bool>] #Option "DRI" # [<bool>] #Option "NoDDC" # [<bool>] #Option "ShowCache" # [<bool>] #Option "XvMCSurfaces" # <i> #Option "PageFlip" # [<bool>] Identifier "Card0" Driver "intel" VendorName "Intel Corporation" BoardName "915G Integrated Graphics Controller" EndSection Section "Screen" Identifier "Screen0" Device "Card0" Monitor "Monitor0" DefaultDepth 24 SubSection "Display" Depth 24 Modes "720x576i" EndSubSection EndSection
_______________________________________________ xorg mailing list xorg@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/xorg