RK3568-适配rgb接口屏幕

RK3568适配rgb接口屏幕

RK3568-适配rgb接口屏幕_第1张图片

从芯片手册中我们可以看出RGB显示最大支持1920x1080@60Hz

硬件连接

RK3568-适配rgb接口屏幕_第2张图片

R[7:0] 8根红色数据线。
G[7:0] 8根绿色数据线。
B[7:0] 8根蓝色数据线。
DE 数据使能线。
VSYNC 垂直同步信号线。
HSYNC 水平同步信号线。
PCLK 像素时钟信号线。

DE模式和HV模式

RGB LCD 一般有两种驱动模式:DE 模式和 HV 模式,这两个模式的区别是 DE 模式需要用到 DE 信号线,而 HV 模式不需要用到 DE 信号线,在 DE模式下是可以不需要 HSYNC 信号线的,即使不接 HSYNC 信号线 LCD 也可以正常工作。

驱动程序

原厂已经为我们写好驱动,我们只需在设备树中添加rgb节点并进行屏幕参数信息描述即可。
/kernel/drivers/gpu/drm/rockchip/rockchip_rgb.c
/kernel/drivers/gpu/drm/panel/panel-simple.c

SOC级设备树文件rk3568.dtsi

VOP(Video Output Processor)指的是LCD Controller。
芯片中一般集成1~2个VOP。只有支持两个VOP的芯片,才能支持双屏异显。
在RK3568芯片内有3个vop,分别是vop0,vop1,vop2。从rk3568.dtsi文件中可以看出rgb显示仅支持从vop2输出。

rgb: rgb {
	compatible = "rockchip,rk3568-rgb";
	pinctrl-names = "default";
	pinctrl-0 = <&lcdc_ctl>;
	status = "disabled";

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

		port@0 {
			reg = <0>;
			#address-cells = <1>;
			#size-cells = <0>;

			rgb_in_vp2: endpoint@2 {
				reg = <2>;
				remote-endpoint = <&vp2_out_rgb>;
				status = "disabled";
			};
		};
	};
};

屏幕时序参数

RK3568-适配rgb接口屏幕_第3张图片

相关参数介绍:
HSYNC:行同步信号
HOZVAL(thd):水平分辨率
HSPW(thp thpw):HSYNC信号宽度
HBP(thb):行同步信号后肩
HFP(thf thfp):行同步信号前肩

VSYNC:帧同步信号
LINE(tvd):垂直分辨率
VSPW(tvp tvpw):VSYNC信号宽度
VBP(tvb):帧同步信号后肩
VFP(tvf tvfp):帧同步信号后肩

th=thb+thd+thfp=160+1024+160=1344
tv=tvb+tvd+tvfp=23+600+12=635

板级设备树文件

注意:设备树中屏幕参数要根据实际屏体手册进行调整

panel {
	compatible = "simple-panel";
	backlight = <&rgb_backlight>;
	power-supply = <&vcc3v3_lcd2_n>;
	enable-delay-ms = <20>;
	prepare-delay-ms = <20>;
	unprepare-delay-ms = <20>;
	disable-delay-ms = <20>;
	bus-format = ;
	width-mm = <152>;
	height-mm = <91>;

	display-timings {
		native-mode = <&timing0>;
		timing0: timing0 {
		       	clock-frequency = <51200000>;	//时钟频率,单位Hz。参考上图DCLK Frequency可得。
		       	//像素时钟频率 = (hactive+hbp+hfp+hsync-len)x (vactive+vbp+vfp+vsync-len)xfps
				hactive = <1024>;		//thd
				vactive = <600>;		//tvd
				hfront-porch = <160>;	//thfp
				hback-porch = <160>;	//thb
				hsync-len = <1>;		//thpw
				vback-porch = <23>;		//tvb
				vfront-porch = <12>;	//tvfp
				vsync-len = <1>;		//tvpw
				hsync-active = <0>;		//水平同步信号极性,0表示低电平有效,1表示高电平有效。
				vsync-active = <0>;		//垂直同步信号极性,0表示低电平有效,1表示高电平有效。
				de-active = <1>;		//数据使能信号极性,0表示低电平有效,1表示高电平有效。
				pixelclk-active = <0>;	//像素时钟使能信号极性,0表示低电平有效,1表示高电平有效。
		};
	};
	
	ports {
		#address-cells = <1>;
		#size-cells = <0>;

		port@0 {
			reg = <0>;
			panel_in_rgb: endpoint {
				remote-endpoint = <&rgb_out_panel>;
			};
		};
	};
};

rgb_backlight: rgb-backlight {
	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>;
};

&rgb {
	status = "okay";
	ports {
		port@1 {
			reg = <1>;
			rgb_out_panel: endpoint {
				remote-endpoint = <&panel_in_rgb>;
			};
		};
	};
};

&rgb_in_vp2 {
	status = "okay";
};

&route_rgb {
	status = "okay";
	connect = <&vp2_out_rgb>;
};

你可能感兴趣的:(RK3568,linux)