RK3399Pro高亮屏幕适配替换

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 cmds\n");
	}
#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: %d\n", 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 cmds\n");
	}
	p->prepared = true;
	return 0;
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值