1、替换屏幕dts文件
替换arch/arm64/boot/dts/rockchip/rk3399pro-evb-v11.dts
此文件由屏幕厂商提供
2、修改driver文件
由于替换后出现一个问题:第一次上电后,屏幕正常显示无异常;当进入休眠后再唤醒起来,屏幕有背光无显示;故需要修改driver下屏幕reset相关(验证的出来的结论,屏幕reset会导致此问题)
修改kernel/drivers/gpu/drm/panel/panel-simple.c
修改内容如下:
static int panel_simple_unprepare(struct drm_panel *panel)
{
struct panel_simple *p = to_panel_simple(panel);
int err = 0;
if (!p->prepared)
return 0;
if (p->off_cmds) {
if (p->dsi)
err = panel_simple_dsi_send_cmds(p, p->off_cmds);
else if (p->cmd_type == CMD_TYPE_SPI)
err = panel_simple_spi_send_cmds(p, p->off_cmds);
if (err)
dev_err(p->dev, "failed to send off cmdsn");
}
#if 0
if (p->reset_gpio)
gpiod_direction_output(p->reset_gpio, 1);
if (p->enable_gpio)
gpiod_direction_output(p->enable_gpio, 0);
#endif
panel_simple_regulator_disable(panel);
if (p->desc && p->desc->delay.unprepare)
panel_simple_sleep(p->desc->delay.unprepare);
p->prepared = false;
return 0;
}
static int panel_simple_prepare(struct drm_panel *panel)
{
struct panel_simple *p = to_panel_simple(panel);
int err;
if (p->prepared)
return 0;
err = panel_simple_regulator_enable(panel);
if (err < 0) {
dev_err(panel->dev, "failed to enable supply: %dn", err);
return err;
}
if (p->enable_gpio)
{
gpiod_direction_output(p->enable_gpio, 1);
}
if (p->desc && p->desc->delay.prepare)
{
panel_simple_sleep(p->desc->delay.prepare);
}
if (p->reset_gpio)
{
gpiod_direction_output(p->reset_gpio, 1);
}
if (p->desc && p->desc->delay.reset)
{
panel_simple_sleep(p->desc->delay.reset);
}
#if 0
if (p->reset_gpio)
{
gpiod_direction_output(p->reset_gpio, 0);
}
panel_simple_sleep(20);
if (p->reset_gpio)
{
gpiod_direction_output(p->reset_gpio, 1);
}
#endif
if (p->desc && p->desc->delay.init)
{
panel_simple_sleep(p->desc->delay.init);
}
if (p->on_cmds) {
if (p->dsi)
err = panel_simple_dsi_send_cmds(p, p->on_cmds);
else if (p->cmd_type == CMD_TYPE_SPI)
err = panel_simple_spi_send_cmds(p, p->on_cmds);
if (err)
dev_err(p->dev, "failed to send on cmdsn");
}
p->prepared = true;
return 0;
}