**
1.在底层源码拿来的时候通常先点亮(让屏幕能亮)才能继续后续其它工作
需要准备:需要调试屏幕的spac以及用户手册,国内目前主要以汇顶的产品
为主.需要向供应商拿到屏幕的一些文档手册.
2.代码路径device/qcom/common/display/tools
在这个路径下存放谷歌默认xml文件以及parser.pl脚本.
新建一个.xml文件,命名格式上模仿默认即可(注意大小写).
xml文件根据拿到的spec文件进行修改,spec文件中主要都是一些寄存器,
以及一些proc值,对应填好即可.最重要是时序上的问题,这里需要用到高通的开发者文档,需要上高通官网进行下载使用.
<GCDB>
33 <Version>"1.0"</Version>
34 <PanelId>nt35596-1080p-video</PanelId>
35 <PanelH>nt35596_1080p_video</PanelH>
36 <PanelEntry>
37
38 <!-- Panel configuration -->
39 <PanelName>"nt35596 1080p video mode dsi panel"</PanelName>
40 <PanelController>"mdss_dsi0"</PanelController>
41 <PanelInterface>10</PanelInterface>
42 <PanelType>0</PanelType>
43 <PanelDestination>"DISPLAY_1"</PanelDestination>
44 <PanelOrientation>0</PanelOrientation>
45 <PanelFrameRate>60</PanelFrameRate>
46 <PanelChannelId>0</PanelChannelId>
47 <DSIVirtualChannelId>0</DSIVirtualChannelId>
48 <PanelBroadcastMode>0</PanelBroadcastMode>
49 <!-- Optional Panel configuration -->
50 <!--BitClockFrequency>0</BitClockFrequency -->
51 <DSIStream>0</DSIStream>
52 <PanelCompatible>"qcom,mdss-dsi-panel"</PanelCompatible>
53 <InterleaveMode>0</InterleaveMode>
54
55 <!-- Panel Resolution -->
56 <PanelWidth>1080</PanelWidth>
57 <PanelHeight>1920</PanelHeight>
58 <HFrontPorch>32</HFrontPorch>
59 <HBackPorch>32</HBackPorch>
60 <HPulseWidth>8</HPulseWidth>
61 <HSyncSkew>0</HSyncSkew>
62 <VBackPorch>18</VBackPorch>
63 <VFrontPorch>2</VFrontPorch>
64 <VPulseWidth>2</VPulseWidth>
65 <HLeftBorder>0</HLeftBorder>
66 <HRightBorder>0</HRightBorder>
67 <VTopBorder>0</VTopBorder>
68 <VBottomBorder>0</VBottomBorder>
69 <!-- Optional Panel resolution configuration -->
70 <!--HActiveRes>0</HActiveRes>
71 <VActiveRes>100</VActiveRes>
72 <InvertDataPolarity>0</InvertDataPolarity>
73 <InvertVsyncPolarity>0</InvertVsyncPolarity>
74 <InvertHsyncPolarity>0</InvertHsyncPolarity -->
75
76 <!-- Panel Color Information -->
77 <ColorFormat>24</ColorFormat>
78 <ColorOrder>0</ColorOrder>
79 <UnderFlowColor>0xff</UnderFlowColor>
80 <BorderColor>0</BorderColor>
81
82 <!-- Panel Command information -->
83 <OnCommand>
//这里需要填入拿到的寄存器列表
</OnCommand>
603 <OffCommand>"0x05, 0x01, 0x00, 0x00, 0x32, 0x00, 0x02, 0x28, 0x00,
604 0x05, 0x01, 0x00, 0x00, 0x78, 0x00, 0x02, 0x10, 0x00"</OffCommand>
605 <OnCommandState>0</OnCommandState>
606 <OffCommandState>1</OffCommandState>
607
608 <!-- Video mode panel information -->
609 <HSyncPulse>1</HSyncPulse>
610 <HFPPowerMode>0</HFPPowerMode>
611 <HBPPowerMode>0</HBPPowerMode>
612 <HSAPowerMode>0</HSAPowerMode>
613 <BLLPEOFPowerMode>1</BLLPEOFPowerMode>
614 <BLLPPowerMode>1</BLLPPowerMode>
615 <TrafficMode>2</TrafficMode>
616 <DMADelayAfterVsync>0</DMADelayAfterVsync>
617 <BLLPEOFPower>0x9</BLLPEOFPower>
618
619 <!-- Lane Configuration -->
620 <DSILanes>4</DSILanes>
621 <DSILaneMap>0</DSILaneMap>
622 <Lane0State>1</Lane0State>
623 <Lane1State>1</Lane1State>
624 <Lane2State>1</Lane2State>
625 <Lane3State>1</Lane3State>
626
627 <!-- Panel Timing -->
628 <PanelTimings>"0xf9, 0x3d, 0x34, 0x00, 0x58, 0x4d, 0x36, 0x3f, 0x53, 0x03, 0x04, 0x00"</PanelTim
629 <DSIMDPTrigger>0</DSIMDPTrigger>
630 <DSIDMATrigger>4</DSIDMATrigger>
631 <TClkPost>0x1e</TClkPost>
632 <TClkPre>0x38</TClkPre>
633
634 <!-- Backlight -->
635 <BLInterfaceType>1</BLInterfaceType>
636 <BLMinLevel>1</BLMinLevel>
637 <BLMaxLevel>4095</BLMaxLevel>
638 <BLStep>100</BLStep>
639 <BLPMICModel>"PMIC_8941"</BLPMICModel>
640 <BLPMICControlType>1</BLPMICControlType>
641
642 <!-- Panel Reset Sequence -->
643 <ResetSequence>
644 <PinState1>1</PinState1>
645 <PulseWidth1>20</PulseWidth1>
646 <PinState2>0</PinState2>
647 <PulseWidth2>2</PulseWidth2>
648 <PinState3>1</PinState3>
649 <PulseWidth3>20</PulseWidth3>
650 <EnableBit>2</EnableBit>
651 </ResetSequence>
652
653 </PanelEntry>
654 </GCDB>
大致代码如上,其中能看到分辨率1920*1080,以及设置屏幕刷新率60hz
最重要的时几个H或W开头的proch(前后沿)值,控制屏幕偏移的功能.通常不会偏移
如果屏幕发生偏移再去一点一点修改.至于值的大小在datesheet中是可以找到最大最小范围的.
调试也会出现不上问题,例如x.y轴方向上的反转,屏幕波纹等待问题.反转的化DT文件中也能找到控制
方向的寄存器,屏幕显示时通过高频率扫描是实现的,既有控制速度的寄存器也有控制方向的寄存器
可以自己去看看文档.
.xml准备好以后使用脚本命令perl parser.pl .xml panel生成.h 和. dtsi文件 用生成的.h文件添加到bootable/bootloader/lk/dev/gcdb/display/include下面
修改bootable/bootloader/lk/target/platform/oem_panel.c
这个里面不详细说,初学进行替换原来的即可.
之后如果需要做兼容也在这里进行兼容.
与lk差不多把生成的dts加入让其解析 在kernel/msm-4xx/arch/arm64/boot/dts/qcom/xx-mdss-panels.dtsi下
注意如下地方
static struct panel_config xxxx_1080p_video_panel_data = {
"qcom,mdss_dsi_xxxx_1080p_video", "dsi:0:", "qcom,mdss-dsi-panel",
10, 0, "DISPLAY_1", 0, 0, 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, NULL
};// 生成的可能会上两个值补上0,NULL可以看下结构体成员
static struct lane_configuration ili9881c_1080p_video_lane_config = {
4, 0, 1, 1, 1, 1, 0
};//与上相同少个值加上去
注意上电部分
找到kernel/msm-3.19/arch/arm/boot/dts/qcom文件夹下类似文件
注意自己设备的平台
sdmxxx-v2.1-4k-panel-qrd-overlay.dts
&dsi_xxx_1080p_video {
qcom,panel-supply-entries = <&dsi_panel_pwr_supply>;
qcom,mdss-dsi-bl-pmic-control-type = "bl_ctrl_dcs";
//qcom,mdss-dsi-bl-pmic-pwm-frequency = <100>;
//pwms = <&pmi8998_pwm_1 0 0>;
//qcom,mdss-dsi-bl-pmic-bank-select = <0>;
//qcom,mdss-dsi-pwm-gpio = <&pmi8998_gpios 2 0>;
qcom,mdss-dsi-bl-min-level = <1>;
qcom,mdss-dsi-bl-max-level = <4095>;
qcom,mdss-dsi-mode-sel-gpio-state = "dual_port";
qcom,panel-mode-gpio = <&tlmm 52 0>;
qcom,platform-te-gpio = <&tlmm 10 0>;
qcom,platform-reset-gpio = <&tlmm 6 0>;
};//copy 后做相应更改
&dsi_sharp_4k_dsc_video_display {
/delete-property/ qcom,dsi-display-active;
};
&dsi_xxxx_1080p_video {
qcom,dsi-display-active;
}; //删除已有的ic加载/delete-property/ qcom,dsi-display-active;
大致就是这样.有许多其它出现过的调试问题,暂时本篇中不提.如果有问题可留言,谢谢