<强> 1,总体架构强>
,,,,,,,,全志T3处理器的显示框架是基于标准Linux的帧缓冲架构,其结构如1.1图所示。显示控制器DE的驱动架构如1.2图所示,包括屏蔽差异的显示管理抽象层,以及显示图层驱动,显示设备驱动,背光驱动,增强驱动和捕获驱动。
1.1图帧缓冲设备驱动结构
,
1.2图显示控制器驱动架构
<强> 2,关键数据结构强>
,,,,显示驱动信息总的结构体disp_drv_info如程序清单2.1所示,包含显示驱动所有的相关信息。
程序清单2.1
typedef 结构 { struct device ,,,,,,,,,, *开发; uintptr_t ,,,,,,,,,,,,,, reg_base [DISP_MOD_NUM]; u32 ,,,,,,,,,,,,,,,,,,,, irq_no [DISP_MOD_NUM]; struct clk ,,,,,,,,,,,,, * mclk [DISP_MOD_NUM]; disp_init_para ,,,,,,,,, disp_init; struct disp_manager ,,,, *经理[DISP_SCREEN_NUM]; struct disp_eink_manager * eink_manager [1]; struct proc_list ,,,,,,, sync_proc_list; struct proc_list ,,,,,,, sync_finish_proc_list; struct ioctl_list ,,,,,, ioctl_extend_list; struct ioctl_list ,,,,,, compat_ioctl_extend_list; struct standby_cb_list , stb_cb_list; struct mutex ,,,,,,,,,,, mlock; struct work_struct ,,,,, resume_work [DISP_SCREEN_NUM]; struct work_struct ,,,,, start_work; u32 ,,,,,,,,,,,,,,,,exit_mode;//0: clean all 1: disable 中断 bool,,,,,,,,,,,,,, b_lcd_enabled [DISP_SCREEN_NUM]; bool ,,,,,,,,,,,,,,,,,,,请来;//indicate driver if init disp_bsp_init_para ,,,,,对位; # if 定义(CONFIG_ION_SUNXI) struct ion_client *客户; struct ion_handle *处理; # endif }disp_drv_info;
,,,,,,,, struct disp_manager是管理抽象层的数据结构体,可以看到包含设备驱动,smbl驱动,增强驱动,cptr驱动,图层驱动以及管理层的相关操作接口,并且disp_drv_info中包含有struct disp_manager类型的成员。
程序清单2.2
struct disp_manager {/*,data fields */char [32]名称; u32 disp; u32 num_chns; u32 num_layers; struct disp_device *装置; struct disp_smbl * smbl; struct disp_enhance *增强; ,,,,,,,struct disp_capture * cptr; struct list_head  lyr_list; # ifdef SUPPORT_WB wait_queue_head_t write_back_queue; u32 write_back_finish; # endif/*,function fields */s32 (使)(struct disp_manager *经理); s32 (* sw_enable) (struct disp_manager *经理); s32 (*禁用)(struct disp_manager *经理); s32 (* is_enabled) (struct disp_manager *经理); s32 空白(*)(struct disp_manager *下,,bool 空白);/*,init: clock init ,,, reg init ,, register irq ,*退出:clock exit ,, unregister irq ,*/s32 (* init) (struct disp_manager *经理); s32 退出(*)(struct disp_manager *经理); s32 (* set_back_color) (struct disp_manager *下,struct disp_color * bk_color); s32 (* get_back_color) (struct disp_manager *下,struct disp_color * bk_color); s32 (* set_color_key) (struct disp_manager *下,,struct disp_colorkey * ck); s32 (* get_color_key) (struct disp_manager *下,,struct disp_colorkey * ck); s32 (* get_screen_size) (struct disp_manager *下,,u32 *宽度,u32 *高); s32 (* set_screen_size) (struct disp_manager *下,,u32 宽度,,u32 高度); s32 (* get_clk_rate) (struct disp_manager *经理);/*,layer mamage */s32 (* check_layer_zorder) (struct disp_manager *下,,struct disp_layer_config *配置,u32 layer_num); null null null null null null null null null null null null null null null null null null全志T3 Linux显示驱动分析