RK3568------Openharmony 3.2-Release LVDS驱动


前言

Openharmony 3.2release中的RK3568默认适配的是MIPI驱动,但是我们公司目前采用的是LVDS屏幕,因此需要适配LVDS驱动

一、设备树配置

前文《RK3568------Openharmony 3.2-Release 板级移植》中提到,我目前使用的是飞凌OK3568-C核心板,因此我是在此设备的设备树文件上进行修改。
OK3568-C-common.dtsi

panel 节点配置:

panel {
		compatible = "simple-panel";//这里是为了适配合适的驱动
		backlight = <&lvds_backlight>;//引用背光的配置
		power-supply = <&vcc3v3_lcd2_n>;//供电
		enable-delay-ms = <20>;//延迟
		prepare-delay-ms = <20>;//延迟
		unprepare-delay-ms = <20>;//延迟
		disable-delay-ms = <20>;//延迟
		bus-format = <MEDIA_BUS_FMT_RGB888_1X7X4_SPWG>;//LVDS 总线的类型,这里的4是4组,8线,其中6条是数据线,2条是时钟线
		width-mm = <246>;//屏幕规格
		height-mm = <184>;//屏幕规格

		display-timings {
			native-mode = <&timing0>;
			timing0: timing0 {
				clock-frequency = <65000000>;//时钟
				hactive = <1024>;//分辨率
				vactive = <768>;//分辨率
				hback-porch = <220>;//屏幕时序
				hfront-porch = <40>;//屏幕时序
				vback-porch = <21>;//屏幕时序
				vfront-porch = <7>;//屏幕时序
				hsync-len = <60>;
				vsync-len = <10>;
				hsync-active = <0>;
				vsync-active = <0>;
				de-active = <0>;
				pixelclk-active = <0>;
			};
		};

		ports {
			#address-cells = <1>;
			#size-cells = <0>;

			port@0 {
				reg = <0>;
				dual-lvds-even-pixels;
				panel_in_lvds: endpoint {
					remote-endpoint = <&lvds_out_panel>;//VOP通路
				};
			};
		};
	};

backlight 节点配置:

	lvds_backlight: backlight {
		status = "okay";
		compatible = "pwm-backlight";//这里是为了适配合适的驱动
		pwms = <&pwm14 0 20000 0>;
		brightness-levels = <
			  0  20  20  21  21  22  22  23
			 23  24  24  25  25  26  26  27
			 27  28  28  29  29  30  30  31
			 31  32  32  33  33  34  34  35
			 35  36  36  37  37  38  38  39
			 40  41  42  43  44  45  46  47
			 48  49  50  51  52  53  54  55
			 56  57  58  59  60  61  62  63
			 64  65  66  67  68  69  70  71
			 72  73  74  75  76  77  78  79
			 80  81  82  83  84  85  86  87
			 88  89  90  91  92  93  94  95
			 96  97  98  99 100 101 102 103
			104 105 106 107 108 109 110 111
			112 113 114 115 116 117 118 119
			120 121 122 123 124 125 126 127
			128 129 130 131 132 133 134 135
			136 137 138 139 140 141 142 143
			144 145 146 147 148 149 150 151
			152 153 154 155 156 157 158 159
			160 161 162 163 164 165 166 167
			168 169 170 171 172 173 174 175
			176 177 178 179 180 181 182 183
			184 185 186 187 188 189 190 191
			192 193 194 195 196 197 198 199
			200 201 202 203 204 205 206 207
			208 209 210 211 212 213 214 215
			216 217 218 219 220 221 222 223
			224 225 226 227 228 229 230 231
			232 233 234 235 236 237 238 239
			240 241 242 243 244 245 246 247
			248 249 250 251 252 253 254 255
		>;
		default-brightness-level = <200>;
	};

VOP 通路节点配置:

&lvds {
	status = "okay";
	phys = <&video_phy0>;
	phy-names = "phy";

	ports {
		port@1 {
			reg = <1>;

			lvds_out_panel: endpoint {
				remote-endpoint = <&panel_in_lvds>;
			};
		};
	};
};

&lvds_in_vp1 {
	status = "okay";//选择的是VP1通路,所以这里开启V1
};

&lvds_in_vp2 {
	status = "disabled";
};

&route_lvds {
	status = "okay";
	connect = <&vp1_out_lvds>;
};

注释部分是我个人对设备参数的理解,有不对的地方请大家评论区指点

二、内核配置

如果要使用LVDS驱动,内核配置需要开启相关宏如下
ok3568_defconfig:

CONFIG_DRM_ROCKCHIP=y
CONFIG_ROCKCHIP_LVDS=y
CONFIG_DRM_PANEL=y
CONFIG_DRM_PANEL_SIMPLE=y

三、LVDS驱动移植

  1. 鸿蒙原有的MIPI屏幕驱动实际上参考了Linux内核的drivers/gpu/drm/panel/panel-simple.c的“simple-panel-dsi”部分,我们只需要将“simple-panel”LVDS驱动移植即可(//drivers/hdf_core/framework/model/display/driver)
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述

  1. LVDS移植
    移植分为两个部分,第一部分是panel,第二部分是drm
    drivers/hdf_core/framework/model/display/driver/panel/panel_simple_common.c
    drivers/hdf_core/framework/model/display/driver/hdf_drm_panel_simple.c

  2. 编译配置
    drivers/hdf_core/adapter/khdf/linux/model/display/Makefile
    在这里插入图片描述

在这里插入图片描述
5. 驱动配置
vendor/hihope/rk3568/hdf_config/khdf/device_info/device_info.hcs
在这里插入图片描述

在这里插入图片描述

四、遇到的问题

  1. 定义多个动态库

现象:
在这里插入图片描述
解决思路:
上图报错可知,panel_simple_loader_protect重复定义。因为我们参考的是panel-simple.c,只需找到定义的位置将其屏蔽即可
在这里插入图片描述

  1. 启动后一段时间系统锁死

现象:
在这里插入图片描述
解决思路:
上图可知,系统进入休眠,通过百度了解实际上是一种电源管理,查看官方文档电源管理关闭自动锁屏即可

  1. 背光控制无效

现象:
RK3568背光功能默认使用原生pwm驱动,并且pwm路径已经写死了,如下:
在这里插入图片描述
解决思路:
找到设备树里面lvds屏幕所使用的 “pwm-backlight” 节点,修改节点名字为backlight
在这里插入图片描述

  1. SElinux权限限制

现象:在这里插入图片描述

解决思路:
权限问题是因为RK3568默认添加SElinux子系统,只需将该子系统关闭或者将SElinux的模式改为宽容模式即可
在这里插入图片描述

五、 效果展示

在这里插入图片描述

video


总结

本人之前一直从事应用开发,借着这次电鸿的契机进行系统级开发的学习,将我在工作中的遇到的问题及解决思路记录并分享,希望可以与诸君共勉
目前网上技术讨论群大都是鸿蒙的应用开发,总结此类文章也是希望将同样进行鸿蒙设备开发的同僚召集到一起,一起讨论学习。如果有同样在进行鸿蒙设备开发的朋友,可以加我的联系方式,期待您的消息

在这里插入图片描述

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐