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接口沒配錯,基本是可以點亮的,黑屏的原因主要還是在硬件部分,我這有三塊板子,只有一塊是正常的,其中一塊顯示黑屏,還有一塊是顯示不流暢,會卡頓,具體原因硬件工程師還在查看,等出結果了,我在把詳細的東西發出來。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章