本文共 10204 字,大约阅读时间需要 34 分钟。
串口打印:Machine: Qualcomm Technologies, Inc. APQ 8098 SKUK HDK
推测出所用的dts为apq8098-v2-qrd-skuk-hdk.dts 生成的是apq8098-v2-qrd-skuk-hdk.dtb 确定了所用的dts为kernel/msm-4.4/arch/arm/boot/dts/qcom/apq8098-v2-qrd-skuk-hdk.dts#include "apq8098-v2.dtsi"#include "msm8998-mdss-panels.dtsi"#include "msm8998-qrd-skuk-hdk.dtsi"/ { model = "Qualcomm Technologies, Inc. APQ 8098 SKUK HDK bshui"; compatible = "qcom,msm8998-qrd", "qcom,msm8998", "qcom,qrd"; qcom,board-id = <0x06000b 0x10>;};参考:kernel/msm-4.4/Documentation/devicetree/bindings/arm/msm/msm.txtSOC Type(qcom,msm8998-qrd)QRD device:qcom,qrd
所使用的屏
屏:kernel/msm-4.4/arch/arm/boot/dts/qcom/msm8998-mdss-panels.dtsi 显示屏为三星AMOLED屏 基本参数: Resolution:1440x2560 5.5’ 2x4 lane MIPI DSIAMOLED(Active Matrix/Organic Light Emitting Diode)主动矩阵有机发光二极体面板(AMOLED)被称为下一代显示技术,包括三星电子、三星SDI、LG飞利浦都十分重视这项新的显示技术
AMOLED屏幕是单个像素点发光 AMOLED屏幕的构造有三层,AMOLED显示屏幕、触摸感应面板跟外面保护的那层玻璃。Super AMOLED少了中间那层触摸感应面板,而把触摸感应层做在AMOLED显示层上了。Super AMOLED面板比AMOLED屏幕更薄,而且就是原生的触控面板 通过cmdline获取panel型号的dtsi文件节点(qcom,lcd,id) 高通是通过读取panel的id来确定当前使用的panel型号,将panel的型号放在cmdline里面 mdss_mdp.panel=1:dsi:0:qcom,mdss_dsi_s6e3ha3_amoled_wqhd_cmd:config0:1:qcom, mdss_dsi_s6e3ha3_amoled_wqhd_cmd:config0:cfg:split_dsimdss_dsi_s6e3ha3_amoled_wqhd_cmd这个是我们需要找的
在内核里通过cmdline寻找panel的dtsi文件节点获取属性找到所用的文件为arch/arm/boot/dts/qcom/dsi-panel-s6e3ha3-amoled-dualmipi-wqhd-cmd.dtsi
被arch/arm/boot/dts/qcom/msm8998-mdss-panels.dtsi引用&dsi_dual_s6e3ha3_amoled_cmd { qcom,mdss-dsi-panel-timings = [00 1c 06 06 0b 10 06 07 05 03 04 00];//时序设置 qcom,mdss-dsi-t-clk-post = <0x07>; qcom,mdss-dsi-t-clk-pre = <0x2a>;};-----------------------------------------------------------------------------cat dsi-panel-s6e3ha3-amoled-dualmipi-wqhd-cmd.dtsi&mdss_mdp { dsi_dual_s6e3ha3_amoled_cmd: qcom,mdss_dsi_s6e3ha3_amoled_wqhd_cmd{ qcom,mdss-dsi-panel-name = "Dual s6e3ha3 amoled cmd mode dsi panel"; //用作面板描述名称的字符串 qcom,mdss-dsi-panel-type = "dsi_cmd_mode";//启用命令模式dsi_video_mode 启用视频模式 qcom,mdss-dsi-panel-framerate = <60>;//指定面板的帧率每秒60帧 qcom,mdss-dsi-virtual-channel-id = <0>;//指定虚拟频道标识符 qcom,mdss-dsi-stream = <0>;//指定要使用的数据包流 qcom,mdss-dsi-panel-width = <720>;//指定面板宽度单位像素 qcom,mdss-dsi-panel-height = <2560>;//指定面板高度 qcom,mdss-dsi-h-front-porch = <100>;//水平前沿值 qcom,mdss-dsi-h-back-porch = <100>;//水平后沿值 qcom,mdss-dsi-h-pulse-width = <40>;//水平脉冲宽度 qcom,mdss-dsi-h-sync-skew = <0>;//水平同步倾斜值 qcom,mdss-dsi-v-back-porch = <31>;//垂直后沿值 qcom,mdss-dsi-v-front-porch = <30>;//垂直前沿值 qcom,mdss-dsi-v-pulse-width = <8>;//垂直脉冲宽度 qcom,mdss-dsi-h-left-border = <0>;//水平左边框 qcom,mdss-dsi-h-right-border = <0>;//水平右边框 qcom,mdss-dsi-v-top-border = <0>;//垂直上边框 qcom,mdss-dsi-v-bottom-border = <0>;//垂直下边框 qcom,mdss-dsi-bpp = <24>;//指定面板的每像素位数24=rgb888 qcom,mdss-dsi-underflow-color = <0xff>; qcom,mdss-dsi-border-color = <0>;//如有边框,定义边框颜色值 qcom,mdss-dsi-color-order = "rgb_swap_rgb"; qcom,mdss-dsi-on-command = [05 01 00 00 05 00 02 11 00 //mipi dsi 命令 39 01 00 00 00 00 05 2a 00 00 05 9f 39 01 00 00 00 00 05 2b 00 00 09 ff 39 01 00 00 00 00 03 f0 5a 5a 39 01 00 00 00 00 02 b0 10 39 01 00 00 00 00 02 b5 a0 39 01 00 00 00 00 02 c4 03 39 01 00 00 00 00 0a f6 42 57 37 00 aa cc d0 00 00 39 01 00 00 00 00 02 f9 03 39 01 00 00 00 00 14 c2 00 00 d8 d8 00 80 2b 05 08 0e 07 0b 05 0d 0a 15 13 20 1e 39 01 00 00 78 00 03 f0 a5 a5 39 01 00 00 00 00 02 35 00 39 01 00 00 00 00 02 53 20 39 01 00 00 00 00 02 51 60 05 01 00 00 05 00 02 29 00]; qcom,mdss-dsi-off-command = [05 01 00 00 3c 00 02 28 00 05 01 00 00 b4 00 02 10 00];//面板关闭命令 qcom,mdss-dsi-on-command-state = "dsi_lp_mode";//定用于发送 ON 命令的控制状态的dsi_lp_mode:低功率模式 qcom,mdss-dsi-off-command-state = "dsi_hs_mode";//指定用于发送 OFF 命令的控制状态的dsi_hs_mode:高速模式 qcom,mdss-dsi-lp-mode-on = [39 00 00 00 05 00 03 f0 5a 5a 39 00 00 00 05 00 03 f1 5a 5a 39 00 00 00 05 00 03 fc 5a 5a 39 00 00 00 05 00 02 b0 17 39 00 00 00 05 00 02 cb 10 39 00 00 00 05 00 02 b0 2d 39 00 00 00 05 00 02 cb cd 39 00 00 00 05 00 02 b0 0e 39 00 00 00 05 00 02 cb 02 39 00 00 00 05 00 02 b0 0f 39 00 00 00 05 00 02 cb 09 39 00 00 00 05 00 02 b0 02 39 00 00 00 05 00 02 f2 c9 39 00 00 00 05 00 02 b0 03 39 00 00 00 05 00 02 f2 c0 39 00 00 00 05 00 02 b0 03 39 00 00 00 05 00 02 f4 aa 39 00 00 00 05 00 02 b0 08 39 00 00 00 05 00 02 b1 30 39 00 00 00 05 00 02 b0 09 39 00 00 00 05 00 02 b1 0a 39 00 00 00 05 00 02 b0 0d 39 00 00 00 05 00 02 b1 10 39 00 00 00 05 00 02 b0 00 39 00 00 00 05 00 02 f7 03 39 00 00 00 05 00 02 fe 30 39 01 00 00 05 00 02 fe b0]; qcom,mdss-dsi-lp-mode-off = [39 00 00 00 05 00 03 f0 5a 5a 39 00 00 00 05 00 03 f1 5a 5a 39 00 00 00 05 00 03 fc 5a 5a 39 00 00 00 05 00 02 b0 2d 39 00 00 00 05 00 02 cb 4d 39 00 00 00 05 00 02 b0 17 39 00 00 00 05 00 02 cb 04 39 00 00 00 05 00 02 b0 0e 39 00 00 00 05 00 02 cb 06 39 00 00 00 05 00 02 b0 0f 39 00 00 00 05 00 02 cb 05 39 00 00 00 05 00 02 b0 02 39 00 00 00 05 00 02 f2 b8 39 00 00 00 05 00 02 b0 03 39 00 00 00 05 00 02 f2 80 39 00 00 00 05 00 02 b0 03 39 00 00 00 05 00 02 f4 8a 39 00 00 00 05 00 02 b0 08 39 00 00 00 05 00 02 b1 10 39 00 00 00 05 00 02 b0 09 39 00 00 00 05 00 02 b1 0a 39 00 00 00 05 00 02 b0 0d 39 00 00 00 05 00 02 b1 80 39 00 00 00 05 00 02 b0 00 39 00 00 00 05 00 02 f7 03 39 00 00 00 05 00 02 fe 30 39 01 00 00 05 00 02 fe b0]; qcom,mdss-dsi-h-sync-pulse = <0>;//指定面板的脉冲模式选项0 = 不在 vs/ve 数据包之后发送 qcom,mdss-dsi-traffic-mode = "non_burst_sync_event";//指定面板流量模式non_burst_sync_event使用同步 qcom,mdss-dsi-lane-map = "lane_map_0123"; qcom,mdss-dsi-bllp-eof-power-mode;//用于确定低功率空白期bllp-eof模式 qcom,mdss-dsi-bllp-power-mode;//bllp power模式 qcom,mdss-dsi-tx-eot-append; qcom,dcs-cmd-by-left; qcom,mdss-dsi-lane-0-state; //指定是否启用数据通道 0 的布尔值 qcom,mdss-dsi-lane-1-state; qcom,mdss-dsi-lane-2-state; qcom,mdss-dsi-lane-3-state; qcom,mdss-dsi-wr-mem-start = <0x2c>; qcom,mdss-dsi-wr-mem-continue = <0x3c>; qcom,mdss-dsi-te-pin-select = <1>; qcom,mdss-dsi-te-dcs-command = <1>; qcom,mdss-tear-check-sync-cfg-height = <2650>; qcom,mdss-dsi-te-using-te-pin; qcom,mdss-dsi-panel-timings = [eb 38 26 00 6a 66 32 3c 2f 03 04 00];//长度为 12 的数组,用于指定面板的PHY 定时设置 qcom,mdss-dsi-t-clk-post = <0x2c>;//指定模式切换后的字节时钟周期 qcom,mdss-dsi-t-clk-pre = <0x1c>;//指定模式切换前的字节时钟周期 qcom,mdss-dsi-dma-trigger = "trigger_sw";//指定用于 DMA 路径的触发机制trigger_sw由软件触发 qcom,mdss-dsi-mdp-trigger = "none";//指定用于 MDP 路径的触发机制,none=无触发 qcom,mdss-dsi-lp11-init; qcom,mdss-dsi-bl-pmic-control-type = "bl_ctrl_dcs"; qcom,mdss-dsi-bl-min-level = <1>; qcom,mdss-dsi-bl-max-level = <255>; qcom,mdss-pan-physical-width-dimension = <68>; qcom,mdss-pan-physical-height-dimension = <122>; qcom,mdss-dsi-reset-sequence = <1 10>, <0 10>, <1 10>; };};
# ls out/target/product/msm8998/obj/kernel/msm-4.4/drivers/video/fbdev/msm/built-in.o mdss-dsi.o mdss_mdp_cdm.o mdss_mdp_pp_stub.odsi_status_6g.o mdss_dsi_panel.o mdss_mdp_ctl.o mdss_mdp_pp_v1_7.omdss_cec_core.o mdss_dsi_phy.o mdss_mdp_debug.o mdss_mdp_pp_v3.omdss_compat_utils.o mdss_dsi_phy_v3.o mdss_mdp_intf_cmd.o mdss_mdp_splash_logo.omdss_dba_utils.o mdss_dsi_status.o mdss_mdp_intf_video.o mdss_mdp_util.omdss_debug.o mdss_fb.o mdss_mdp_intf_writeback.o mdss_mdp_wfd.omdss_debug_xlog.o mdss_hdcp_1x.o mdss_mdp_layer.o mdss_panel.omdss_dp_aux.o mdss_hdmi_audio.o mdss_mdp.o mdss_rotator.omdss_dp_hdcp2p2.o mdss_hdmi_cec.o mdss-mdp.o mdss_smmu.omdss_dp.o mdss_hdmi_edid.o mdss_mdp_overlay.o mdss_util.omdss_dp_util.o mdss_hdmi_hdcp2p2.o mdss_mdp_pipe.o mdss_wb.omdss_dsi_clk.o mdss_hdmi_panel.o mdss_mdp_pp_cache_config.o modules.builtinmdss_dsi_cmd.o mdss_hdmi_tx.o mdss_mdp_pp_common.o modules.ordermdss_dsi_host.o mdss_hdmi_util.o mdss_mdp_pp_debug.o msm_mdss_io_8974.omdss_dsi.o mdss_io_util.o mdss_mdp_pp.oMDSS软件驱动 mdss_fb.c 顶层IOCTL/native framebuffer接口 mdss_mdp.c --MDP(Mobile Development Platforms)资源,包括时钟/中断/bus-bw/power mdss_mdp_overlay.c--Overlay/DMA 顶层API mdss_mdp_ctl.c--将(LM,DSPP,Ping-pong,interface)硬件集群 mdss_mdp_pipe.c--SRC pipe相关处理 mdss_mdp_intf_cmd.c/mdss_mdp_intf_video.c/mdss_mdp_intf_writeback.c--MDP面板接口处理 mdss_mdp_pp.c--后处理相关实现 mdss_mdp_rotator.c--旋转API(overlay_set, overlay_playinterface)Linux标准的fb架构没有MDP这个东西,高通提供了MDSS(multimedia display subsystem)进行管理高通使用MDP作为显示处理器,提高了显示效果,并提供了图像旋转,overlay等功能
转载地址:http://fakni.baihongyu.com/