备注:部分内容来源于高通文档以及内核文档
1、mipi dcs 命令格式
来源vendor/qcom/proprietary/devicetree-4.19/bindings/display/msm/mdss-dsi-panel.txt
- qcom,mdss-dsi-on-command:
A byte stream formed by multiple dcs packets base on qcom dsi controller protocol.
byte 0: dcs data type 命令类型
byte 1: set to indicate this is an individual packet 是否是一个独立的包,一般为01,表示是独立的包
(no chain)
byte 2: virtual channel number 虚拟通道好
byte 3: expect ack from client (dcs read command) 是否希望收到ack,读写命令区分
byte 4: wait number of specified ms after dcs command transmitted //dcs命令发送后指定的毫秒等待数
byte 5, 6: 16 bits length in network byte order // 数据长度,两个字节
byte 7 and beyond: number byte of payload // 第7字节开始就是实际的数据
- qcom,mdss-dsi-off-command:
A byte stream formed by multiple dcs packets base on qcom dsi controller protocol.
byte 0: dcs data type
byte 1: set to indicate this is an individual packet
(no chain)
byte 2: virtual channel number
byte 3: expect ack from client (dcs read command)
byte 4: wait number of specified ms after dcs command
transmitted
byte 5, 6: 16 bits length in network byte order
byte 7 and beyond: number byte of payload
2、传输模式和操作模式是不同的概念
• Video Mode操作模式下必须使用High-Speed的传输模式
• Command Mode操作模式并没有规定使用High-Speed或Low Power的传输模式,或者说
• 即使外部LCD模组为Video Mode,但通常在LCD模组初始化时还是使用Command Mode模式来读写寄存器,因为在低速下数据不容易出错并且容易测量。
• Video Mode当然也可以用High-Speed的方式来发送指令,Command Mode操作模式也可以使用High-Speed,只是没有必要这么做。
3、dsc参数设置一般屏幕手册会给出相应的推荐值,直接填到对应的属性里面就行
qcom,mdss-dsc-encoders = <1>;
qcom,mdss-dsc-slice-height = <16>;
qcom,mdss-dsc-slice-width = <360>;
qcom,mdss-dsc-slice-per-pkt = <2>;
qcom,mdss-dsc-bit-per-component = <8>;
qcom,mdss-dsc-bit-per-pixel = <8>;
qcom,mdss-dsc-block-prediction-enable;
qcom,mdss-dsc-config-by-manufacture-cmd;
4、设备树研究
4.1 qcom,display-topology:
Array of u32 values which specifies the list of topologies available
for the display. A display topology is defined by a
set of 3 values in the order:
- number of mixers
- number of compression encoders
- number of interfaces
Therefore, the array should always contain a tuple of 3 elements
以下为带一个双层混音器、两个 DSC 编码器和两个 DSI 接口的 4K 面板示例。
&dsi_sharp_4k_dsc_cmd
{ .. qcom,display-topology = <2 2 2>;
qcom,default-topology-index = <0>; .. };
- qcom,default-topology-index: // 如果 qcom,display-topology有多个定义,这个是选择默认使用第几个定义
An u32 value which indexes the topology set
specified by the node "qcom,display-topology"
to identify the default topology for the
display. The first set is indexed by the
value 0.
4.2 根据面板规格和项目设计,在 qcom,panel-supply-entry 中定义面板电源的数量和
电压。在以下示例中,该面板需要两个电源,其中 vddio 为 1.8 v,vdd 为 3.3 v:
dsi_panel_pwr_supply: dsi_panel_pwr_supply {
#address-cells = <1>;
#size-cells = <0>;
qcom,panel-supply-entry@0 {
reg = <0>;
qcom,supply-name = "vddio"; // supplier
qcom,supply-min-voltage = <1800000>;
qcom,supply-max-voltage = <1800000>;
qcom,supply-enable-load = <62000>;
qcom,supply-disable-load = <80>;
qcom,supply-post-on-sleep = <20>;
};
};
qcom,panel-supply-entry@1 {
reg = <1>;
qcom,supply-name = "vdd";
qcom,supply-min-voltage = <3300000>;
qcom,supply-max-voltage = <3300000>;
qcom,supply-enable-load = <857000>;
qcom,supply-disable-load = <0>;
qcom,supply-post-on-sleep = <0>;
};
使 用 xxx-supply 在 sde_dsi 中 将 供 应 商 映 射 到 调 压 器 以 进 行 主 显 示 , 或 者 在
sde_dsi1 中将供应商映射到调压器进行辅显示。在以下示例中,vddio 由 PM8150 L14
供电,而 vdd 由 PM8150a_L11 供电:
sde_dsi: qcom,dsi-display-primary {
...
vddio-supply = <&pm8150_l14>;
vdd-supply = <&pm8150a_l11>;
avdd-supply = <&display_panel_avdd>;
}
4.3 硬件恢复功能用于在驱动程序中检测到挂起时复位显示管道。在项目开发期间调试显示稳
定性问题时,应禁用此功能。将以下内容添加到 build.prop 即可禁用硬件恢复功能:
vendor.display.disable_hw_recovery=0
4.4 命令模式下的显示 ON 命令时序
一些面板要求先发送一个数据帧,然后再发送 ON 命令,以免出现碎片画面。
根据需要在高速 (HS) 数据传输开始之前还是之后发送 ON 命令,将 DTSI 文件中的
qcom,mdss-dsi-on-command-state 属性设置为 dsi_lp_mode 或 dsi_hs_mode 。
dsi_lp_mode – 在传输像素数据之前发送 DCS 命令。
dsi_hs_mode – 在传输像素数据之后发送 DCS ON 命令。
4.5 命令模式下的显示 OFF 命令时序
一些面板要求先发送 OFF 命令,然后再关闭 HS 数据传输,以免出现淡出效果。
根据需要在 HS 数据传输停止之前还是之后发送 OFF 命令,将 DTSI 文件中的
qcom,mdss-dsi-off-command-state 属性设置为 dsi_lp_mode 或 dsi_hs_mode 。
dsi_lp_mode – 先停止像素数据传输,然后再发送 DCS OFF 命令。
dsi_hs_mode – 先发送 DCS OFF 命令,然后再停止像素数据传输
4.6 使时钟通道保持在 HS 模式的配置
如需将面板保持在 HS 模式,可在面板 DTSI 文件中定义 qcom,mdss-dsi-force-clk-
lane-hs 属性。
在 UEFI 中,将 DSIClockHSForceRequest 标志设为 1
4.7 许多面板对 BLLP 中的功耗模式状态有严格要求,需按下图中所示进行配置。
qcom,mdss-dsi-h-sync-pulse – 指定面板的脉冲模式
0 – 不在 vs/ve 数据包之后发送 hsa/he(默认设置)。
1 – 在 vs/ve 数据包之后发送 hsa/he。
qcom,mdss-dsi-hfp-power-mode – 用于确定水平前沿 (HFP) 消隐周期内 DSI 通道状
态的布尔值
qcom,mdss-dsi-hbp-power-mode – 用于确定水平后沿 (HBP) 消隐周期内 DSI 通道状
态的布尔值
qcom,mdss-dsi-hsa-power-mode – 用于确定水平同步活动 (HSA) 模式下 DSI 通道状
态的布尔值
4.8 一些面板要求在 BLLP 期间仅进入一次 LP11 状态。此要求出现在非连续时钟模式下,可
以使用布尔值 qcom,mdss-dsi-bllp-eof-power-mode 来满足这一要求,该值用于确定
BLLP EOF 模式期间的 DSI 通道状态。
1. 将 qcom,mdss-dsi-bllp-eof-power-mode 设 为 1 并 使 面 板 dtsi 文 件 中 的 所 有 其 他
*-power-mode 属性保持为 0。
2. 如果必须在消隐周期内发送其他 DCS 命令,可设置布尔值 qcom,mdss-dsi-last-
line-interleave ,该值用于确定是否需要启用最后一个行交错标志。
4.9 面板方向校正
要校正面板方向,应使用面板 DTSI 文件的 qcom,mdss-dsi-panel-orientation 属性。
支持以下方向:
180 – 在水平和垂直两个方向上翻转面板
hflip – 在水平方向上翻转面板
vflip – 在垂直方向上翻转面板
五、调试
5.1 启用内核日志记录
内核日志记录包含两种方法。
启用 DSI 驱动程序日志记录
# echo 8 > /proc/sys/kernel/printk
# echo ‘file dsi* +p’ > /sys/kernel/debug/dynamic_debug/control
显示事件日志(之前为 xlog)
cat /sys/kernel/debug/dri/0/debug/dump