Panel硬件上对应屏幕本身。

https://elixir.bootlin.com/linux/latest/source/include/drm/drm_panel.h

Makefile

drm-$(CONFIG_DRM_PANEL) += drm_panel.o

drm_kms_helper-y:drm_panel_helper.o               没找到对应函数

drm_kms_helper-$(CONFIG_DRM_PANEL_BRIDGE) += bridge/panel.o

obj-y           += panel/

drm_panel.c + drm_panel.h

void drm_panel_init(struct drm_panel *panel, struct device *dev,const struct drm_panel_funcs *funcs,int connector_type);int drm_panel_add(struct drm_panel *panel);
void drm_panel_remove(struct drm_panel *panel);int drm_panel_attach(struct drm_panel *panel, struct drm_connector *connector);
void drm_panel_detach(struct drm_panel *panel);int drm_panel_prepare(struct drm_panel *panel);
int drm_panel_unprepare(struct drm_panel *panel);int drm_panel_enable(struct drm_panel *panel);
int drm_panel_disable(struct drm_panel *panel);int drm_panel_get_modes(struct drm_panel *panel, struct drm_connector *connector);struct drm_panel *of_drm_find_panel(const struct device_node *np);
主要是对软件函数的最终实现。功能如函数名。static LIST_HEAD(panel_list);//结合这个panel_list,可以知道panel是存在一个list里面,init,add,remove等等都
围绕这个list做操作;剩下的操作则是围绕着panel->funcs

bridge/panel.c

struct panel_bridge {struct drm_bridge bridge;struct drm_connector connector;struct drm_panel *panel;u32 connector_type;
};
这个结构体包含了从主芯片出来的所有硬件抽象

代码包含一些获取结构体的container_of的封装

struct panel_bridge *drm_bridge_to_panel_bridge
struct panel_bridge *drm_connector_to_panel_bridge

获取mode模式

static const struct drm_connector_helper_funcs
panel_bridge_connector_helper_funcs = {.get_modes = panel_bridge_connector_get_modes,
};panel_bridge_connector_get_modes
最终调用drm_panel_get_mode,回调drm_panel_funcs里面的getmodes,描述是:
@get_modes: add modes to the connector that the panel is attached to and return the number of modes added

另外是connector_funs和bridge_funcs的回调函数

static const struct drm_connector_funcs panel_bridge_connector_funcs = {.reset = drm_atomic_helper_connector_reset,.fill_modes = drm_helper_probe_single_connector_modes,.destroy = drm_connector_cleanup,.atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state,.atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
};static const struct drm_bridge_funcs panel_bridge_bridge_funcs = {.attach = panel_bridge_attach,.detach = panel_bridge_detach,.pre_enable = panel_bridge_pre_enable,.enable = panel_bridge_enable,.disable = panel_bridge_disable,.post_disable = panel_bridge_post_disable,
};
Bridge的这些回调。一部分是drm_panel.c里面的实现方法如:
panel_bridge_detach -->drm_panel_detach;panel_bridge_attach完成drm_connector_init+drm_connector_helper_add+drm_mode_connector_attach_encoder
+drm_panel_attact四步操作。
实现connector的完整初始化并将panel与connector,encoder与connector链接起来。

另外提供了

drm_panel_bridge_add
drm_panel_bridge_remove
实现struct panel_bridge结构体的填充与释放。
调用drm_bridge_add;drm_bridge_removedevm_drm_panel_bridge_release
devm_drm_panel_bridge_add
后两者其实是前两者的封装。操作更加严密安全。

panel/

主要的部分:drm结构体以及方法结构体

 * struct drm_panel_funcs - perform operations on a given panel* @disable: disable panel (turn off back light, etc.)* @unprepare: turn off panel* @prepare: turn on panel and perform set up* @enable: enable panel (turn on back light, etc.)* @get_modes: add modes to the connector that the panel is attached to and* return the number of modes added* @get_timings: copy display timings into the provided array and return* the number of display timings availablestruct drm_panel_funcs {int (*disable)(struct drm_panel *panel);int (*unprepare)(struct drm_panel *panel);int (*prepare)(struct drm_panel *panel);int (*enable)(struct drm_panel *panel);int (*get_modes)(struct drm_panel *panel);int (*get_timings)(struct drm_panel *panel, unsigned int num_timings,struct display_timing *timings);
};
/*** struct drm_panel - DRM panel object* @drm: DRM device owning the panel* @connector: DRM connector that the panel is attached to* @dev: parent device of the panel* @link: link from panel device (supplier) to DRM device (consumer)* @funcs: operations that can be performed on the panel* @list: panel entry in registry*/
struct drm_panel {struct drm_device *drm;struct drm_connector *connector;struct device *dev;const struct drm_panel_funcs *funcs;struct list_head list;
};

实现放在drm/panel/panel_simple.c里面。作为外设的移植者如果有用到应该可以改写。

查看drm_panel_funcs可以发现基本是控制背光,屏幕本身外设的一些操作。get_mode和get_timings一般就是从其他地方获取长宽,timing等参数。各家实现大同小异。除此之外还有一些如add.init.detach.attach等方法。具体要查看include/drm/drm_panel.h

drm_panel.c是基础。bridge/panel.c是对bridge,panel,connector,encoder的衔接。

Qcom

Makefile

msm_drm-y := dp/dp_panel.o

msm_drm-$(CONFIG_DRM_MSM_DSI_STAGING) := dsi-staging/dsi_panel.o

DP接口相关名称

dp/dp_panel.c & dp/dp_panel.h

struct dp_panel_info
struct dp_display_mode
enum dp_lane_count
struct dp_panel    //完全的对dp的抽象。下图中的大部分元器件均有抽象结构放在dp_panel里面。也抽象硬件工作方式方法。
struct dp_panel_in
struct dp_dsc_caps
struct dp_audio
struct dp_tu_calc_input
struct dp_vc_tu_mapping_tablestatic inline bool is_link_rate_valid(u32 bw_code)
validates the link rate;Returns true if the requested link rate is supported.static inline bool is_lane_count_valid(u32 lane_count)
struct dp_panel *dp_panel_get(struct dp_panel_in *in);
void dp_panel_put(struct dp_panel *dp_panel);
void dp_panel_calc_tu_test(struct dp_tu_calc_input *in,
struct dp_vc_tu_mapping_table *tu_table);

延伸显示能力识别(Extended display identification data,简称EDID)是指萤幕分辨率的资料,包括厂商名称与序号。一般EDID存在于显示器的PROM或EEPROM内。一般如要读取EDID都是透过I2C,slave address是0x50;在Linux平台上也可以看到raw EDID的十六进制格式,只要你执行 "xrandr --verbose"。

wiki摘录

dp_panel_get 主要init函数,填充大量dp有关数据,以及在dp-panel结构体中定义的大量方法。最终通过结构体指针挂上connectordp_panel_init_panel_info
1. 通过 drm_dp_dpcd_writeb :write a single byte to the DPCD,发送power相关指令。
2. drm_dp_link_probe 通过drm_dp_dpcd_read :read a series of bytes from the DPCD,读取相关寄存器,
设置link的传输速率,确认版本,设置datalane数量。link可以传输视频信号以及音频信号。相关结构体为drm_dp_link

要弄清楚dp_panel里面的函,需要对dp接口内部的结构操作有了解。

DP接口相关名称

上述这篇文章以及参考文章有必要了解。

dsi-staging/dsi_panel.c &dsi-staging/dsi_panel.h

struct dsi_panel对dsipanel硬件的抽象
dsi_panel_/pre_disable/disable/unprepare/post_unprepare :dsi_panel_tx_cmd_set对芯片寄存器操作,随后下电
dsi_panel_/enabel/post_enabel/prepare/pre_prepare :dsi_panel_tx_cmd_set对芯片寄存器操作,随后上电
dsi_panel_/switch/post_switch :dsi_panel_tx_cmd_set对芯片寄存器操作,设置timing
dsi_panel_drv_init:regulator_get+pinctrl+gpio+bl_register 配置dis_panel_get:解析devicetree获取相关参数硬件配置。最后执行drm_panel_init [解析参数+初始化硬件]int dsi_panel_get_mode[参数有dsi-panel,dsi-display-mode]:解析dts

显示屏panel的驱动基本就是:芯片本身,背光,电源管理。

dsi相关名词QCOM

file:lm80-p0598-2_apq8064e_dsi_programing_gd.pdf

720P HD 720p, 720 progressive scan or non-interlaced horizontal lines high definition
APQ Qualcomm ® Application-only Processor
BLLP Banking or Low-Power Interval
DCS Display Command Set
DSI Display Serial Interface
EMI Electromagnetic Interference
ESC Electronic Speed Controller
fps Frames per second
FWVGA Full-width VGA
GPIO General Purpose Input/Output
HFP Horizontal-sync front porch
HSA Horizontal Sync Active
HVGA Half-size Video Graphics Array
IRQ Interupt Request
LCD Liquid Crystal Display
LCDC Liquid Crystal Display Controller
LCM Liquid Cystral Module
LP Low Power
MDP Mobile Display Processor
MIPI Mobile Industry Processor Interface
MMSS Multimedia Subsystem
PLL Phase Lock Loop
PCLK Pixel Clock
PHY Physical Layer
QHD 960x540 resolution
QVGA Quarter Video Graphics Array, 320 x 240 image resolution
RAM Random Access Memory
RGB Red-Green-Blue
SVGA Super Video Graphics Array (1024 x 768)
TCXO Temperature-Compensated Crystal Oscillator
TE Tearing Effect
VCO Voltage-Controlled Oscillator
VE Vertical Sync End
VGA Video Graphics Array (640 x 480 image resolution)
VS Vertical Sync Start
WQVGA Wide Quarter Video Graphics Array, 320 x 240 image resolution
WSVGA Wide Super VGA, 1024 x 576/600
WVGA 800 x 480 resolution
WXGA, WXGA+ Wide Extended Graphics Array, 1280 x 768, 1440 x 900
XGA Extended Graphics Array, 1024 x 768

display:kms-panel-4.14kernel相关推荐

  1. JavaScript 5/30:Flex Panel Gallery即FLEX布局的图片库

    JavaScript30 为Wes Bos推出的一项为期30天的挑战,旨在帮助人们用纯JavaScript来实现效果,初学者若想在JS方面快速精进,不妨一试.本题为第五题. 实现效果 点击任意一张图片 ...

  2. UI学习笔记---EasyUI panel插件使用---03

    UI学习笔记---EasyUI panel插件使用---03 UI学习笔记---EasyUI panel插件使用---03 1.panel简单小例子 ------------------- 2.可以自 ...

  3. CANoe-第2个仿真工程-XVehicle—2 Panel设计(操作)

    本文是详细的Xvehicle工程Panel设计的详细操作步骤,如果要了解相关思路或原理请查看CANoe-第2个仿真工程-XVehicle-2Panel设计(原理,思路)_lamanchas的博客-CS ...

  4. 最小系统必须安装的组件(仅做参考)

    此是最小系统安装组件,如果做成XPE,可能会出现问题.不推荐最小化组件构建系统. ★最小系统必须安装的组件 Design Templates→Windows-based Terminal Profes ...

  5. Use Excel Pivot Table as a BI tool

    Normally, we have created a table, view in database or cube in SSAS, user can use Excel as a BI tool ...

  6. html制作主体部分,html – 使用CSS制作具有动态面板主体高度的面板填充父容器高度的其余部分...

    我有一个具有页眉,正文和页脚的面板,即使面板主体中的内容溢出,该面板也需要填充屏幕(或其父容器).如果它确实溢出,那么身体将滚动.页眉和页脚高度是动态的,因为它们可能会随着不同的视图端口尺寸而变化,因 ...

  7. Ext JS 4.1 RC2 Released发布

    原文:http://www.sencha.com/blog/ext-js-4-1-rc-2-released/ Today we're making available Ext JS 4.1 RC2, ...

  8. 计算机图形学图形旋转_计算机图形学中的平板显示

    计算机图形学图形旋转 平板显示器 (Flat Panel Display) It is generally known as FPD, the flat-panel display is such a ...

  9. 用java在JPanel中建一个表格_如何使用Java在JPanel中显示JTable?

    导入和表模型作为练习留给此代码的用户.此外,为简单起见,任意选择面板布局. public class JTableDisplay { public JTableDisplay() { JFrame f ...

  10. LCD驱动调试分享——基于Qualcomm MSM8996平台Android7.1

    LCD 分为LK 和kernel 两部分移植 首先要准备以下东西:屏IC 规格书,初始化代码,硬件原理图  屏IC 规格书->获得时序等数据 初始化代码 ->获得初始化屏幕ic的命令,用于 ...

最新文章

  1. python顺序执行多个py文件的方法
  2. python怎么画条形图-如何在Bokeh(Python)中绘制水平条形图
  3. Action访问Servlet API的三种方法
  4. 福建师范大学计算机考研好考吗,福建师范大学考研难吗?一般要什么水平才可以进入?...
  5. 新版征信报告实施之后,信用卡养卡套现真的要凉凉了?
  6. khoury计算机科学学院,2021年美国东北大学计算机研究生专业有哪些?入学要求高吗?...
  7. 随记 elasticsearch
  8. HTML5新表单新功能解析
  9. Ubuntu编译:error: ‘usleep’ was not declared in this scope
  10. Tensorspace一款神奇的神经网络可视化应用
  11. laravel ajax分页实例,Laravel 的分页功能 - Laravel 5.6 中文文档
  12. 加载驱动时提示“驱动服务启动失败”或者“此驱动程序被阻止加载”
  13. 基于QT的mplayer播放器 .
  14. const T 与T const(const T vs.T const的翻译 Dan Saks)
  15. iOS应用崩溃日志揭秘
  16. 打印系统开发(9)——办公打印机使用教程
  17. IC-二进制, 自然数, 有符号数
  18. iNFTnews丨世界首个元宇宙时装周将在Decentraland举办
  19. SAP中ABAP的生产订单调用BAPI进行投料BAPI_GOODSMVT_CREATE(根据生产订单号进行投料,可以修改物料数量)
  20. 51单片机编译没错但proteus数码管仿真出现乱码的情况

热门文章

  1. 学习asp.netcore入门视频
  2. 问题 K: [入门OJ]开会时间(初中生请多多指教)
  3. 传感器:HC-SR04超声波传感器原理(底部附代码)
  4. java常用jar包下载_standard.jar包
  5. php网页读取sql数据库数据模板,discuz模板中直接读取数据库中的插件数据
  6. Cisco(思科)远程登录交换机
  7. 计算机课程 图层关系认识 课件,全国“xx杯”计算机类说课大赛课件一等奖作品:图层蒙版说课课件...
  8. 全网无损音乐免费下载!
  9. 5G核心网中的数据管理
  10. 如何成为高手?嵌入式开发进阶之路...