基于msm8916移植lcd流程--kernel

二、在Kernel中移植lcd
流程大致和在lk中移植lcd差不多
1.首先要写好.dts文件
创建arch/arm/boot/dts/qcom/dsi-panel-xxx-video.dtsi文件
文件就一个节点,&mdss_mdp,这其中有显示屏的节点dsi_xxx,其中很多节点的数值都在上一节有提及

&mdss_mdp {
	dsi_xxx: qcom,mdss_dsi_xxx_video {
		qcom,mdss-dsi-panel-name = "xxx_panel";
		qcom,mdss-dsi-panel-controller = <&mdss_dsi0>;
		qcom,mdss-dsi-panel-type = "dsi_video_mode";
		qcom,mdss-dsi-panel-destination = "display_1";
		qcom,mdss-dsi-panel-framerate = <60>;
		qcom,mdss-dsi-virtual-channel-id = <0>;
		qcom,mdss-dsi-stream = <0>;
		qcom,mdss-dsi-panel-width = <720>;//面板宽度
		qcom,mdss-dsi-panel-height = <1280>;//面板高度
		qcom,mdss-dsi-h-front-porch = <38>;//水平前沿值
		qcom,mdss-dsi-h-back-porch = <30>;//水平后沿值
		qcom,mdss-dsi-h-pulse-width = <30>;//水平脉冲宽度
		qcom,mdss-dsi-h-sync-skew = <0>;
		qcom,mdss-dsi-v-back-porch = <8>;//垂直后沿值
		qcom,mdss-dsi-v-front-porch = <10>;//垂直前沿值
		qcom,mdss-dsi-v-pulse-width = <6>;//垂直脉冲宽度
		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>;
		qcom,mdss-dsi-color-order = "rgb_swap_rgb";
		qcom,mdss-dsi-underflow-color = <0xff>;
		qcom,mdss-dsi-border-color = <0>;
		//厂商初始化改为以下属性,每一行一条命令
		//39--写,格式,04--写的字节,命令
		qcom,mdss-dsi-on-command = [
			39 01 00 00 00 00 04 FF 98 81 03
			39 01 00 00 00 00 02 01 00
			//...
			39 01 00 00 00 00 02 35 00
			05 01 00 00 78 00 02 11 00
			05 01 00 00 00 00 02 29 00];
		qcom,mdss-dsi-off-command = [05 01 00 00 32 00 02 28 00
					05 01 00 00 78 00 02 10 00];
		qcom,mdss-dsi-on-command-state = "dsi_lp_mode";
		qcom,mdss-dsi-off-command-state = "dsi_lp_mode";
		qcom,mdss-dsi-h-sync-pulse = <1>;
		qcom,mdss-dsi-traffic-mode = "burst_mode";
		qcom,mdss-dsi-lane-map = "lane_map_0123";
		qcom,mdss-dsi-bllp-eof-power-mode;
		qcom,mdss-dsi-bllp-power-mode;
		qcom,mdss-dsi-lane-0-state;
		qcom,mdss-dsi-lane-1-state;
		qcom,mdss-dsi-lane-2-state;
		qcom,mdss-dsi-lane-3-state;
		//指定面板 PHY 定时设置的长度为 12 的数组,跟lk一样
		qcom,mdss-dsi-panel-timings = [80 20 11 00 3C 38 1A 20 13 03 04 00];
		//指定模式切换后的字节时钟周期,跟lk一样
		qcom,mdss-dsi-t-clk-post = <0x04>;
		//指定模式切换前的字节时钟周期,跟lk一样
		qcom,mdss-dsi-t-clk-pre = <0x1B>;
		qcom,mdss-dsi-bl-min-level = <1>;
		//背光最大电流,255
		qcom,mdss-dsi-bl-max-level = <255>;
		qcom,mdss-dsi-dma-trigger = "trigger_sw";
		qcom,mdss-dsi-mdp-trigger = "none";
		qcom,mdss-dsi-bl-pmic-control-type = "bl_ctrl_pwm";
		//屏幕的上电时序,1代表拉高,0代表拉低,50代表50时间
		qcom,mdss-dsi-reset-sequence = <1 50>, <0 20>, <1 50>;
	};
};

在msm8916-mdss.dtsi写有#include “xxx-video.dtsi”
在msm8916-mtp.dtsi写有#include “msm8916.dtsi”
这样就把xxx-video.dtsi写进了msm8916-mtp.dtsi

在msm8916-mtp.dtsi中,有以下三个节点跟屏有关:

&dsi_xxx {
	qcom,mdss-dsi-bl-pmic-control-type = "bl_ctrl_pwm";  //pwm启动背光
	qcom,mdss-dsi-bl-pmic-pwm-frequency = <100>;
	qcom,mdss-dsi-bl-pmic-bank-select = <0>;
	qcom,mdss-dsi-pwm-gpio = <&pm8916_mpps 4 0>;

};
&mdss_dsi0 {
	qcom,dsi-pref-prim-pan = <&dsi_xxx>; //跟添加的显示屏的节点名称一样
	...
};
&dsi_xxx {
    qcom,cont-splash-enabled;  //开启内核的持续启动功能
};

2.在kernel中的mdss_dsi.c或者mdss_dsi_panel.c中打开背光引脚和进行reset上电
如:在mdss_dsi_panel_power_on中:

#if 1 //打开背光引脚
	if (gpio_is_valid(bl_gpio)) {
		ret = gpio_request(bl_gpio, "bl_gpio");
		if (ret) {
			pr_err("================rc = %d : could not req gpio BL\n", ret);
		}
		pr_err("set lcd_de_en gpio output high\n");
		gpio_direction_output(bl_gpio, 1);
		mdelay(80);
	}
	gpio_free(bl_gpio);
#endif

在mdss_dsi_panel_reset中:

	//上电时序
			for (i = 0; i < pdata->panel_info.rst_seq_len; ++i) {
				gpio_set_value((ctrl_pdata->rst_gpio),
					pdata->panel_info.rst_seq[i]);
				if (pdata->panel_info.rst_seq[++i])
					usleep(pinfo->rst_seq[i] * 1000);
			}

学习辛苦啦,现在不妨换换思路,瞧点文学东西

如果你喜欢,聊历史,思哲学,品诗集,赏国学。

那就关注公众号:二校五叔

这个是博主的文学公众号啦_

加油💪

  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值