接前一篇文章:DRM全解析 —— CRTC详解(2)
本文继续对DRM中CRTC的核心结构struct drm_crtc的成员进行释义。
(13)struct drm_display_mode mode
/**
* @mode:
*
* Current mode timings. Should only be used by legacy drivers, atomic
* drivers should instead consult &drm_crtc_state.mode. Atomic drivers
* can update this by calling
* drm_atomic_helper_update_legacy_modeset_state().
*/
struct drm_display_mode mode;
当前模式时序。应仅由旧有驱动程序使用,原子驱动程序而应咨询&drm_crtc_state.mode。
原子驱动程序可以通过调用drm_Atomic_helper_update_legacy_modeset_state()来更新此项。
(14)struct drm_display_mode hwmode
/**
* @hwmode:
*
* Programmed mode in hw, after adjustments for encoders, crtc, panel
* scaling etc. Should only be used by legacy drivers, for high
* precision vblank timestamps in
* drm_crtc_vblank_helper_get_vblank_timestamp().
*
* Note that atomic drivers should not use this, but instead use
* &drm_crtc_state.adjusted_mode. And for high-precision timestamps
* drm_crtc_vblank_helper_get_vblank_timestamp() used
* &drm_vblank_crtc.hwmode,
* which is filled out by calling drm_calc_timestamping_constants().
*/
struct drm_display_mode hwmode;
对encoders、crtc、panel缩放等进行调整后的硬件编程模式。应仅由旧有驱动程序使用,用于drm_crtc_vblank_helper_get_vblank_timestamp()中的高精度vblank时间戳。
注意,原子驱动程序不应使用此选项,而应使用&drm_crtc_state.adjusted_mode。对于高精度的时间戳,drm_crtc_vblank_helper_get_vblank_timestamp()使用&drm_vblank_crtc.hwmode,其通过调用drm_calc_timestamping_constants()来填充。
(15)int x
/**
* @x:
* x position on screen. Should only be used by legacy drivers, atomic
* drivers should look at &drm_plane_state.crtc_x of the primary plane
* instead. Updated by calling
* drm_atomic_helper_update_legacy_modeset_state().
*/
int x;
屏幕上x的位置。(此项)应只由旧有驱动程序使用,而原子驱动程序应该查看primary plane的&drm_plane_state.crtc_x。
通过调用drm_atomic_helper_update_legacy_modeset_state()进行更新。
(16)int y
/**
* @y:
* y position on screen. Should only be used by legacy drivers, atomic
* drivers should look at &drm_plane_state.crtc_y of the primary plane
* instead. Updated by calling
* drm_atomic_helper_update_legacy_modeset_state().
*/
int y;
屏幕上y的位置。(此项)应只由旧有驱动程序使用,而原子驱动程序应该查看primary plane的&drm_plane_state.crtc_y。
通过调用drm_atomic_helper_update_legacy_modeset_state()进行更新。
(17)const struct drm_crtc_funcs *funcs
/** @funcs: CRTC control functions */
const struct drm_crtc_funcs *funcs;
CRTC控制函数(集)。
(18)uint32_t gamma_size
/**
* @gamma_size: Size of legacy gamma ramp reported to userspace. Set up
* by calling drm_mode_crtc_set_gamma_size().
*
* Note that atomic drivers need to instead use
* &drm_crtc_state.gamma_lut. See drm_crtc_enable_color_mgmt().
*/
uint32_t gamma_size;
报告给用户空间的旧有gamma渐变的大小。通过调用drm_mode_crtc_Set_gamm_size()进行设置。
注意,原子驱动程序需要使用&drm_crtc_state.gamma_lut。请参阅drm_crtc_enable_color_mgmt()。
(19)uint16_t *gamma_store
/**
* @gamma_store: Gamma ramp values used by the legacy SETGAMMA and
* GETGAMMA IOCTls. Set up by calling drm_mode_crtc_set_gamma_size().
*
* Note that atomic drivers need to instead use
* &drm_crtc_state.gamma_lut. See drm_crtc_enable_color_mgmt().
*/
uint16_t *gamma_store;
旧有SETGAMMA和GETGAMA IOCTLs使用的Gamma渐变值。通过调用drm_mode_crtc_Set_gamm_size()进行设置。
注意,原子驱动程序需要使用&drm_crtc_state.gamma_lut。请参阅drm_crtc_enable_color_mgmt()。
(20)const struct drm_crtc_helper_funcs *helper_private
/** @helper_private: mid-layer private data */
const struct drm_crtc_helper_funcs *helper_private;
中间层私有数据。
drm_crtc结构的其余成员将在下一篇文章中继续深入释义。