On Wed, May 25, 2011 at 4:36 AM, Sascha Hauer <s.ha...@pengutronix.de> wrote: > Hi All, > > I'm currently looking into implementing a SoC graphics core with KMS. > > What I wonder about is the relationship between connectors and encoders. > On my board I have a sii9022 HDMI encoder connected via i2c. This chip > supports reading edid data, tracks the connection status of the display > and needs to be configured when the resolution changes. So my first > guess is that I have to implement an encoder. looking at struct > drm_encoder_funcs there are no callbacks suitable for this. struct > drm_connector_funcs on the other hand has all the callbacks I need. > Now I look at drivers/gpu/drm/i2c. The drivers there implement a > drm_encoder_slave which also has all the callbacks I need. So from > one point of view the functions should be implemented in the connector, > while in the i2c case it's implemented in the (slave-) encoder. > Generally I have the feeling that my sii9022 should be both an encoder > and a connector, but this doesn't fit into the current scheme. > > I'm confused. Could someone clarify this a bit?
The general idea is this: framebuffer -> crtc -> encoder -> connector -> monitor - The framebuffer is just a buffer vram that has an image encoded in it as an array of pixels. - The crtc reads the data out of the framebuffer and generates the video mode timing in conjunction with a PLL. The crtc also determines what part of the framebuffer is read; e.g., when multi-head is enabled, each crtc scans out of a different part of vram; in clone mode, each crtc scans out of the same part of vram. - The encoder takes the digital bitstream from the crtc and converts it to the appropriate analog levels for transmission across the connector to the monitor. - The connector provides the appropriate physical plug (HDMI, DVI-D, VGA, S-video, etc.) for the monitor to connect to. crtcs are usually routeable and can be connected to one or many encoders simultaneously. The encoders can also be connected to one or more connectors (e.g., you might have a single TMDS encoder that is connected to the digital portion of a DVI-I port and also to a HDMI port, or you might have a DAC that is connected to a VGA port and an S-video port). Finally i2c lines are associated with connectors, since generally the i2c pins are wired to the connector and in many cases, each connectors has it's own i2c line. For example, you might have a single TMDS encoder that is wired to a DVI-D port with its own i2c line and an HDMI port with its own i2c line. Each connector may have it's own hotplug (HPD) pin as well. That way you could query the EDID from each connector separately for example. Is the sii9022 being driven by the output of a DVO encoder from your display hw? If so your display path would look like: crtc -> DVO (master encoder) -> sii9022 (slave encoder) -> HDMI plug -> monitor The general GPU driver might register the i2c buses that are used by the various parts (encoder, connector), then it's just a matter of plugging in the right parts for each component (e.g. you'd hook up the sii9022 i2c control bus to the DVO encoder, and the ddc i2c bus to the hdmi connector object, etc.). I hope this helps. > > Thanks > Sascha > > -- > Pengutronix e.K. | | > Industrial Linux Solutions | http://www.pengutronix.de/ | > Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | > Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | > _______________________________________________ > dri-devel mailing list > dri-devel@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/dri-devel > _______________________________________________ dri-devel mailing list dri-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/dri-devel