Learn much! See below. By the way, any good document to describe CRTC? > [skip] > If the panel only supports 1024x...@60hz, just add that mode in the > probe() function for your LVDS output and reject the other modes in > the mode_valid() function unless your panel hw has a scaler in which > case you should be able to support the additional modes. See > RADEONProbeOutputModes() in radeon_modes.c for how we add modes for > different output types. Ok. RADEONProbeOutputModes() is called by radeon_get_modes(). It is *_get_mode() function and similar like lx_output_get_modes(). Seems radeon_add_common_modes() function will use xf86CVTMode() to calculate the modes driver adds.
> [skip] > When I say panel, I'm generally talking about integrated flat panels > (e.g., the panels on laptops). LCD monitors connected via DVI or VGA > have an EDID and generally support other non-native modes due to > having a built in scaler in the monitor. As for the LVDS panel > timing, on radeon, we have potentially two places where that > information is stored: 1. there is an LVDS info table in the vbios > that includes the panel size and timing, and 2. some laptops have a > panel EDID. There should be some method to get that information on > geode. Ok. LVDS panel is the panel that generally need a fixed mode to support without a scaler while VGA&&DVI is vice versa. Geode has some VG_FT_nnnn registers to keep the panel's size. But it is not panel EDID. I will ask Marshall for more on TSDB. [skip] > PLL is the clock generator for the crtc; it takes a reference > frequency and through a set of dividers, generates the requested pixel > clock for the mode. The encoder is the part of the display pipeline > that takes the bit stream from the crtc and encodes it in the proper > format for the selected connector (LVDS, TMDS, etc.). See this blog > post I wrote for more information in the display pipeline on radeon: > http://www.botchco.com/agd5f/?p=51 Ok. I have read the summary on the link above and know what the CRTC is. For geode, it is in display controller while my work before are main in graphics processor. I think much crtc_xxx functions in struct xf86CrtcFuncsRec are for this part. > Yes. LCD panels generally have a fixed size and timing; this timing > is considered the native mode of the panel. In order to support > non-native modes, you need a scaler which will scale up (or down in > some cases) the in coming data to the native panel size. The panel > always gets native timing. For LVDS, the GPU usually has a scaler to > handle non-native modes. For VGA/DVI LCD monitors, the monitor > generally has a scaler that scales the incoming mode to the native > mode. Very Clear now on scaler use now! I found that geode has an scaler too. I think it is used for convert the non-native modes to native modes for LVDS panel. > > RMX (RadioMetric eXpansion) is the name of the scaler on older radeon > hw. The LVDS panel's native mode is pulled from either the vbios LVDS > info table or from the panel's EDID if it has one. In the > mode_valid() function, we reject modes that are larger than the panel > (MODE_PANEL), but we allow modes smaller than the panel since the RMX > unit can scale those modes up to the native mode size. When setting > the mode, we always program the native mode. If requested mode is > smaller than the native mode, we also set up the RMX unit. You give > the RMX unit the requested size and the native size and a few other > parameters and it scales the image up. IF RMX is off, there is no scaler. So reject other non-native modes. Got it. > > Alex > _______________________________________________ xorg-devel@lists.x.org: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel