一、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接口没配错,基本是可以点亮的,黑屏的原因主要还是在硬件部分,我这有三块板子,只有一块是正常的,其中一块显示黑屏,还有一块是显示不流畅,会卡顿,具体原因硬件工程师还在查看,等出结果了,我在把详细的东西发出来。