[RK3288][Android7.1] 修改HDMI默认显示分辨率
Platform: Rockchip
OS: Android 7.1.2
Kernel: 4.4
需求:
在使用RK3288平台时,HDMI使用4K大屏幕做显示时,4K视频播放会受到影响,声音和视频会出现不同步的情况,因些需要屏蔽掉HDMI输出分辨率选择项中4K分辨率选项,默认输出设置到1080P。
实现:
RK平台4.4驱动上,HDMI显示放弃了原来的显示方式,从驱动3.10版本路径下
kernel\drivers\video\rockchip\hdmi\rockchip-hdmiv2部分切换到了4.4版本下的
kernel/drivers/gpu/drm/rockchip/dw_hdmi-rockchip.c文件中。
第一步:首先屏蔽掉4K以上分辨率选项
static enum drm_mode_status
dw_hdmi_rockchip_mode_valid(struct drm_connector *connector,
struct drm_display_mode *mode)
{
struct drm_encoder *encoder = connector->encoder;
enum drm_mode_status status = MODE_OK;
struct drm_device *dev = connector->dev;
struct rockchip_drm_private *priv = dev->dev_private;
struct drm_crtc *crtc;
struct rockchip_hdmi *hdmi;
/*
* Pixel clocks we support are always < 2GHz and so fit in an
* int. We should make sure source rate does too so we don't get
* overflow when we multiply by 1000.
*/
+ if(!strcmp(mode->name, "4096x2160") || !strcmp(mode->name, "3840x2160")){
+ printk(KERN_ERR"bad mode:%s, vrefresh:%d\n",mode->name, mode->vrefresh);
+ return MODE_BAD;
+ }
第二步:修改默认输出分辨率到1920x1080
RK 7.1.2系统在./base/services/core/jni/com_android_server_rkdisplay_RkDisplayModes.cpp文件中会根据persist.sys.resolution.aux属性值来配置输出分辨率,因此在device目录下根据系统找到对应的system.prop文件,新加属性即可。
ro.adb.secure=0
ro.rk.displayd.enable=false
+ persist.sys.resolution.aux=1920x1080p60