1、总体架构

全志T3处理器的显示框架是基于标准Linux的帧缓冲架构,其结构如图 1.1所示。显示控制器DE的驱动架构如图 1.2所示,包括屏蔽差异的显示管理抽象层,以及显示图层驱动、显示设备驱动、背光驱动、enhance驱动和capture驱动。

图 1.1帧缓冲设备驱动结构

图 1.2显示控制器驱动架构

2、关键数据结构

显示驱动信息总的结构体disp_drv_info如程序清单 2.1所示,包含显示驱动所有的相关信息。

程序清单 2.1typedef struct

{

struct device           *dev;

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     *mgr[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 interrupt

bool              b_lcd_enabled[DISP_SCREEN_NUM];

bool                    inited;//indicate driver if init

disp_bsp_init_para      para;

#if defined(CONFIG_ION_SUNXI)

struct ion_client *client;

struct ion_handle *handle;

#endif

}disp_drv_info;

struct disp_manager是管理抽象层的数据结构体,可以看到包含设备驱动、smbl驱动、enhance驱动、cptr驱动、图层驱动以及管理层的相关操作接口,并且disp_drv_info中包含有struct disp_manager类型的成员。

程序清单 2.2struct disp_manager {

/* data fields */

char name[32];

u32 disp;

u32 num_chns;

u32 num_layers;

struct disp_device *device;

struct disp_smbl *smbl;

struct disp_enhance *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 (*enable)(struct disp_manager *mgr);

s32 (*sw_enable)(struct disp_manager *mgr);

s32 (*disable)(struct disp_manager *mgr);

s32 (*is_enabled)(struct disp_manager *mgr);

s32 (*blank)(struct disp_manager *mgr, bool blank);

/* init: clock init && reg init && register irq

* exit: clock exit && unregister irq

*/

s32 (*init)(struct disp_manager *mgr);

s32 (*exit)(struct disp_manager *mgr);

s32 (*set_back_color)(struct disp_manager *mgr,struct disp_color *bk_color);

s32 (*get_back_color)(struct disp_manager *mgr,struct disp_color *bk_color);

s32 (*set_color_key)(struct disp_manager *mgr, struct disp_colorkey *ck);

s32 (*get_color_key)(struct disp_manager *mgr, struct disp_colorkey *ck);

s32 (*get_screen_size)(struct disp_manager *mgr, u32 *width, u32 *height);

s32 (*set_screen_size)(struct disp_manager *mgr, u32 width, u32 height);

s32 (*get_clk_rate)(struct disp_manager *mgr);

/* layer mamage */

s32 (*check_layer_zorder)(struct disp_manager *mgr, struct disp_layer_config *config, u32 layer_num);

s32 (*set_layer_config)(struct disp_manager *mgr, struct disp_layer_config *config, unsigned int layer_num);

s32 (*force_set_layer_config)(struct disp_manager *mgr, struct disp_layer_config *config, unsigned int layer_num);

s32 (*force_set_layer_config_exit)(struct disp_manager *mgr);

s32 (*get_layer_config)(struct disp_manager *mgr, struct disp_layer_config *config, unsigned int layer_num);

s32 (*extend_layer_config)(struct disp_manager *mgr, struct disp_layer_config *info, unsigned int layer_num);

s32 (*set_output_color_range)(struct disp_manager *mgr, u32 color_range);

s32 (*get_output_color_range)(struct disp_manager *mgr);

s32 (*update_color_space)(struct disp_manager *mgr);

s32 (*apply)(struct disp_manager *mgr);

s32 (*force_apply)(struct disp_manager *mgr);

s32 (*update_regs)(struct disp_manager *mgr);

s32 (*sync)(struct disp_manager *mgr);

s32 (*tasklet)(struct disp_manager *mgr);

/* debug interface, dump manager info */

s32 (*dump)(struct disp_manager *mgr, char *buf);

};

3、显示驱动初始化流程

显示驱动初始化总体流程如图 3.1所以,驱动注册为Linux的平台设备,初始化入口是disp_probe。在disp_probe中首先从dtb中获取显示驱动相关的一些参数比如寄存器基地址、中断号、时钟等,然后调用disp_init接口。disp_init接口主要进行一些系统相关的参数、接口初始化,显示控制器DE驱动初始化(bsp_disp_init),LCD设备初始化,fb缓存初始化,最后通过start_process启动显示。

图 3.1 显示驱动初始化总体流程

图 3.2 显示控制器驱动初始化

bsp_disp_init完成显示控制器DE的驱动初始化,主要的动作如图 3.2所示:

初始化全局变量gdisp中的init_para参数;

初始化显示控制器DE的默认参数;

挂接中断处理中tasklet处理函数;

设置显示打印等级;

初始化显示控制器DE的抽象图层驱动;

初始化显示控制器DE的lcd设备抽象驱动;

初始化显示控制器DE的管理层驱动;

初始化显示控制器DE的enhance驱动;

初始化显示控制器DE的背光控制驱动;

初始化显示控制器DE的capture驱动;

将管理层驱动与抽象图层、lcd设备驱动、enhance驱动、背光控制驱动、capture驱动关联起来。

全志t3linux驱动_全志T3 Linux显示驱动分析相关推荐

  1. 全志T3 Linux显示驱动分析

    1.总体架构 全志T3处理器的显示框架是基于标准Linux的帧缓冲架构,其结构如图 1.1所示.显示控制器DE的驱动架构如图 1.2所示,包括屏蔽差异的显示管理抽象层,以及显示图层驱动.显示设备驱动. ...

  2. usb接口驱动_乾坤合一~Linux设备驱动之USB主机和设备驱动

    这一章从主机侧角度看到的USB 主机控制器驱动和设备驱动从主机侧的角度而言,需要编写的USB 驱动程序包括主机控制器驱动和设备驱动两类,USB 主机控制器驱动程序控制插入其中的USB 设备,而USB ...

  3. linux中流设备_[快速上手Linux设备驱动]之块设备驱动流程详解一

    [快速上手Linux设备驱动]之块设备驱动流程详解一 walfred已经在[快速上手Linux设备驱动]之我看字符设备驱动一 文中详细讲解了linux下字符设备驱动,并紧接着用四篇文章描述了Linux ...

  4. Linux 驱动 – Frame Buffer (帧缓冲)显示驱动

    Linux 驱动 – Frame Buffer (帧缓冲)显示驱动 一.Frame Buffer Frame Buffer 翻译过来是帧缓冲的意思,帧指的是一帧图像,缓冲是暂时存放的意思,连起来就是暂 ...

  5. intel x520网卡驱动_手工编译linux桌面内核(二)——硬件驱动的配置 下篇

    前言: 前面的方法讲完了,接下来我们来看看实例(我自己电脑的配置). 这里我只打算列出几项重要的驱动配置来,其它的请自行查阅gentoo wiki! 再次强调,这是我自己电脑的硬件驱动配置,不可能完全 ...

  6. linux手动连接网络打印机驱动_怎么在Linux上安装打印机驱动

    怎么在Linux上安装打印机驱动(以Ubuntu为例) 通常来说,你不需要手动在Linux上安装硬件驱动.系统会自动检测计算机硬件,然后自动为你安装驱动.但是,对于打印机,情况就不一样了.事实上,Li ...

  7. linux设备驱动之串口移植,Linux设备驱动之UART驱动结构

    一.对于串口驱动Linux系统中UART驱动属于终端设备驱动,应该说是实现串口驱动和终端驱动来实现串口终端设备的驱动.要了解串口终端的驱动在Linux系统的结构就先要了解终端设备驱动在Linux系统中 ...

  8. linux内核部件分析(十)——设备驱动模型之class,linux内核部件分析(十)——设备驱动模型之class...

    前面看过了设备驱动模型中的bus.device.driver,这三种都是有迹可循的.其中bus代表实际的总线,device代表实际的设备和接口,而driver则对应存在的驱动.但本节要介绍的class ...

  9. linux驱动基础开发0——linux 设备驱动概述-转

    目前,Linux软件工程师大致可分为两个层次: (1)Linux应用软件工程师(Application Software Engineer):       主要利用C库函数和Linux API进行应用 ...

最新文章

  1. 半监督+标签传播算法
  2. Spring Cloud Stream Binder 实现
  3. 汇编语言随笔(16)- 对磁盘进行读写(int 13h 中断例程)和实验 17
  4. 一个简易实用的web权限管理模块的应用与实现
  5. 聚焦点showModalDialog的一些方法
  6. 用户解锁不存在_解锁手机有6种方法,这些常识你知道吗?小白购机指南——解锁篇...
  7. Vue + Element UI——搜索框DEMO
  8. vue each_Vue 应用单元测试的策略与实践 05 - 测试奖杯策略
  9. spring创建webservice项目
  10. 【重识 HTML + CSS】知识点目录
  11. Atitit 互联网2018风口与趋势大盘点 目录 1.1. 短视频 1 1.2. 互联网金融 1 1.3. 区块链 1 1.4. 新零售 1 2. 2018热度榜丨你能抓住的风口有几个?.html
  12. RabbitMQ死信队列应用场景之模拟未支付订单自动取消
  13. 2019Java视频教程-玩转oracle
  14. 【网络安全】SQL注入详细分析
  15. DOS 批处理高级教程精选合编20080331
  16. HIT 软件构造 软件维护 设计原则
  17. 做好里程碑就是项目成功了一半
  18. 手机连Fiddler后,仍然不能上网的解决办法
  19. 简单彩虹动画的效果实现
  20. win10开启热点后电脑无法打开网页

热门文章

  1. 自动驾驶 11-3: 根据 LIDAR 数据进行位姿估计 Pose Estimation from LIDAR Data
  2. 条形码入门指南(八):二维条形码
  3. 抖音seo源码/抖音seo源码代开发源代码搭建
  4. STM32 12864串行驱动
  5. linux--exec命令
  6. hdu 2065 红色病毒问题
  7. JSP cookie详解
  8. git提交规范,规范自己的提交标准
  9. 基于python的比价系统
  10. Spark Release 2.0.0发版概序