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