RK3288W Android8.1开发日志(三)

一、HDMI强制输出指定分辨率
由于系统默认开启EDID,会先获取显示设备EDID所需的分辨率,然后在设置相对应的分辨率输出,我先默认关闭#CONFIG_DRM_LOAD_EDID_FIRMWARE is not set,然后在驱动修改。
1、kernel\drivers\gpu\drm\drm_edid.c

drm_display_mode_from_vic_index(struct drm_connector *connector,
				const u8 *video_db, u8 video_len,
				u8 video_index)
{
	struct drm_device *dev = connector->dev;
	struct drm_display_mode *newmode;
	u8 vic;

	if (video_db == NULL || video_index >= video_len)
		return NULL;

	/* CEA modes are numbered 1..127 */
	vic = svd_to_vic(video_db[video_index]);
	if (!drm_valid_cea_vic(vic))
		return NULL;

	newmode = drm_mode_duplicate(dev, &edid_cea_modes[vic]);//修改这个VIC值
	if (!newmode)
		return NULL;

	newmode->vrefresh = 0;

	return newmode;
}

2、如果不知道vic值可以查看edid_cea_modes数组

static const struct drm_display_mode edid_cea_modes[] = {
	/* 0 - dummy, VICs start at 1 */
	{ },
	/* 1 - 640x480@60Hz */  //VIC =1
	{ DRM_MODE("640x480", DRM_MODE_TYPE_DRIVER, 25175, 640, 656,
		   752, 800, 0, 480, 490, 492, 525, 0,
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),
	  .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },
	/* 2 - 720x480@60Hz */ //VIC =2
	{ DRM_MODE("720x480", DRM_MODE_TYPE_DRIVER, 27000, 720, 736,
		   798, 858, 0, 480, 489, 495, 525, 0,
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),
	  .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_4_3, },
	/* 3 - 720x480@60Hz */ VIC =3
	{ DRM_MODE("720x480", DRM_MODE_TYPE_DRIVER, 27000, 720, 736,
		   798, 858, 0, 480, 489, 495, 525, 0,
		   DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC),
	  .vrefresh = 60, .picture_aspect_ratio = HDMI_PICTURE_ASPECT_16_9, },
	  …………以此类推…………
	  试想,如果HDMI想加入特殊分辨率,是不是也可以在这加入,还没验证,有特殊分辨率的朋友可以试一试。

二、鼠标右键返回
alps\frameworks\native\services\inputflinger\InputReader.cpp

uint32_t CursorButtonAccumulator::getButtonState() const {
    uint32_t result = 0;
    if (mBtnOk) {
       result |= AMOTION_EVENT_BUTTON_PRIMARY;
    }
    if (mBtnLeft) {
        result |= AMOTION_EVENT_BUTTON_PRIMARY;
    }
    if (mBtnRight) {
        char targetProduct[PROPERTY_VALUE_MAX] = {0};
        property_get("ro.target.product", targetProduct, ""); //他这有个判断,我们的是mid平台,
        if (strcmp(targetProduct, "box") == 0) {
            result |= AMOTION_EVENT_BUTTON_BACK;
        } else {
            result |= AMOTION_EVENT_BUTTON_SECONDARY; //把这个改为AMOTION_EVENT_BUTTON_BACK即可
        }
    }

三、(tc358749x)HDMI IN功能,大上周留下的遗留问题,如果保证芯片工作正常,I2C通信正常,MIPI接口没配错,基本是可以点亮的,黑屏的原因主要还是在硬件部分,我这有三块板子,只有一块是正常的,其中一块显示黑屏,还有一块是显示不流畅,会卡顿,具体原因硬件工程师还在查看,等出结果了,我在把详细的东西发出来。

你可能感兴趣的:(RK3288W)