rk平台内核本身默认支持一些常规的分辨率,如1920x1080@30,1280x720@60,但是往往不能满足需求,如有的客户需要你添加1020x700@35的分辨率,这时候就要自己加上去了。
下图是LCD各个参数对应的位置:
显示mode 各个参数含义如下:
hdisplay:有效显示区水平像素数量,对应Active Width
hsync_start:水平同步开始,对应hdispay + HFP
hsync_end:水平同步结束,对应hdisplay + HFP + HSYNC width(HPW)
htotal:水平总像素,对应hdisplay + HFP + HSYNC width + HBP
vdisplay:垂直显示像素,对应Active Height
vsync_start:垂直同步开始,对应vdispay + VFP
vsync_end:垂直像素结束,对应vdisplay + VFP + VSYNC width(VPW)
vtotal:垂直总像素,对应vdisplay + VFP + VSYNC width + VBP
vrefresh:刷新率
如果我们需要往HDMI的驱动添加特殊分辨率(即不在原来支持列表:static const struct drm_display_mode dw_hdmi_default_modes[]结构体中的分辨率),比如要添加700x1020@20,此时需要找到对应特殊分辨率的LCD屏参,根据你的屏参来配置对应的行、场参数。其他的屏接口可以对应找到对应的驱动添加到分辨率列表中即可,如dp,edp等。
rk3588 kernel5.1 HDMI对应添加分辨率的驱动在./drivers/gpu/drm/bridge/synopsys/dw-hdmi.c文件。
如果对屏参无要求,只需要支持对应分辨率和帧率即可,那么除了分辨率和帧率,其他行场参数可以随意设置。例如我这里添加特殊分辨率:1020x700@35,除了1020和700和35是真实的,其他的都是随意取的。其他分辨率和帧率可参考这里设置或者由屏datasheet获取。
1020x700@35
hsync_start = 1020+20[HFP]=1040
hsync_end=1020+20[HFP]+10[HPW]=1050
htotal=