connector - encoder relationship

Alex Deucher alexdeucher at gmail.com
Wed May 25 09:07:33 PDT 2011


On Wed, May 25, 2011 at 4:36 AM, Sascha Hauer <s.hauer at 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 at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel
>


More information about the dri-devel mailing list