DRM全解析 —— encoder详解(2)

接前一篇文章:DRM全解析 —— encoder详解(1)

本文继续对DRM中encoder的核心结构struct drm_encoder的成员进行释义。

3. drm_encoder结构释义

(5)int encoder_type

    /**
	 * @encoder_type:
	 *
	 * One of the DRM_MODE_ENCODER_ types in drm_mode.h. The following
	 * encoder types are defined thus far:
	 *
	 * - DRM_MODE_ENCODER_DAC for VGA and analog on DVI-I/DVI-A.
	 *
	 * - DRM_MODE_ENCODER_TMDS for DVI, HDMI and (embedded) DisplayPort.
	 *
	 * - DRM_MODE_ENCODER_LVDS for display panels, or in general any panel
	 *   with a proprietary parallel connector.
	 *
	 * - DRM_MODE_ENCODER_TVDAC for TV output (Composite, S-Video,
	 *   Component, SCART).
	 *
	 * - DRM_MODE_ENCODER_VIRTUAL for virtual machine displays
	 *
	 * - DRM_MODE_ENCODER_DSI for panels connected using the DSI serial bus.
	 *
	 * - DRM_MODE_ENCODER_DPI for panels connected using the DPI parallel
	 *   bus.
	 *
	 * - DRM_MODE_ENCODER_DPMST for special fake encoders used to allow
	 *   mutliple DP MST streams to share one physical encoder.
	 */
	int encoder_type;

drm_mode.h中的DRM_MODE_ENCODER_类型之一。到目前为止,定义了以下编码器类型:

  • 用于VGA和DVI-I/DVI-A上的模拟的DRM_MODE_ENCODER_DAC。
  • 用于DVI、HDMI和(嵌入式)DisplayPort的DRM_MODE_ENCODER_TMDS。
  • 用于显示面板、或通常任何具有专有并行连接器的面板的DRM_MODE_ENCODER_LVDS。
  • 用于电视输出(复合、S-Video、组件、SCART)的DRM_MODE_ENCODER_TVDAC。
  • 用于虚拟机显示器的DRM_MODE_ENCODER_VIRTUAL。
  • 用于使用DSI串行总线连接的面板的DRM_MODE_ENCODER_DSI。
  • 用于使用DPI并行总线连接的面板的DRM_MODE_ENCODER_DPI。
  • DRM_MODE_ENCODER_DPMST,用于允许多个DP MST流共享一个物理编码器的特殊伪编码器。

实际的定义代码在include/uapi/drm/drm_mode.h中,如下:

#define DRM_MODE_ENCODER_NONE	0
#define DRM_MODE_ENCODER_DAC	1
#define DRM_MODE_ENCODER_TMDS	2
#define DRM_MODE_ENCODER_LVDS	3
#define DRM_MODE_ENCODER_TVDAC	4
#define DRM_MODE_ENCODER_VIRTUAL 5
#define DRM_MODE_ENCODER_DSI	6
#define DRM_MODE_ENCODER_DPMST	7
#define DRM_MODE_ENCODER_DPI	8

(6)unsigned index

    /**
	 * @index: Position inside the mode_config.list, can be used as an array
	 * index. It is invariant over the lifetime of the encoder.
	 */
	unsigned index;

mode_config.list中的位置,可以用作数组索引。它在encoder的生命周期内是不变的。

(7)uint32_t possible_crtcs

    /**
	 * @possible_crtcs: Bitmask of potential CRTC bindings, using
	 * drm_crtc_index() as the index into the bitfield. The driver must set
	 * the bits for all &drm_crtc objects this encoder can be connected to
	 * before calling drm_dev_register().
	 *
	 * You will get a WARN if you get this wrong in the driver.
	 *
	 * Note that since CRTC objects can't be hotplugged the assigned indices
	 * are stable and hence known before registering all objects.
	 */
	uint32_t possible_crtcs;

潜在CRTC绑定的位掩码,使用drm_CRTC_index()作为位域的索引。在调用drm_dev_register()之前,驱动程序必须设置此编码器可以连接到的所有&drm_crtc对象的位。

你将得到警告,如果在写驱动时犯了此错误。

注意,由于CRTC对象不能热插拔,因此在注册所有对象之前,分配的索引是稳定的,因此是已知的。

drm_encoder结构中其余成员将在下一篇文章中继续深入释义。

你可能感兴趣的:(DRM,DRM)