3399的-mipi适应多个lcd屏显示-后续2-linux内核中的修改

2023-11-16

一、前提:

1. rk3399核心板

2.linux4.4.19 源码

3. 多个MIPI显示屏的启动序列以及显示时序(重要)

4.rk3399MIPI通道0

5.接上一个uboot中的修改配置

二、内核驱动的修改

0. dts就不再给出了,请参考uboot的修改

1. 主要涉及的源码drivers/gpu/drm/panel/panel-simple.c

1.1 struct panel_simple 结构体中增加一项lcd_type的定义,用于多个函数中使用

lcd_type数据的获取:

//接收uboot的参数 2022-12-02 zz
static char *m_uboot_lcd_type_argument = "-1";    //用于xx屏幕显示
static int __init ubootadd_lcd_type_setup(char *s)
{
	m_uboot_lcd_type_argument = s;
	return 1;
}
__setup("lcd_type=", ubootadd_lcd_type_setup);
/********************************************************/

 解析出屏的类型

 

1.2  mipi屏初始化序列部分的修改

我觉得(个人猜测)初始化序列在内核部分可以省略,因为uboot已经初始化了,好像没有再次初始化的必要了。但是代码我还是留着了。

static int panel_simple_get_cmds(struct panel_simple *panel)
{
    const void *data = NULL;
    int len;
    int err;
    int lcd_type  = panel->lcd_type;

    printk("2022-12-07 debug: lcd_type = %d\n",lcd_type);  //1 表示7inch,0表示5inch
    if(lcd_type >= 0) //jc_7inch
    {
        if(lcd_type == 2)  //2022-12-09  第二块5寸屏
            data = of_get_property(panel->dev->of_node, "panel-init-sequence-5inch-2",
                   &len);
        else
            data = of_get_property(panel->dev->of_node, lcd_type?"panel-init-sequence-7inch":"panel-init-sequence-5inch",
                   &len);
    //    printk("2022-12-05debug: panel-init-sequence-7\n");
    }
//    else  //jc_5inch
//    {
//        data = of_get_property(panel->dev->of_node, "panel-init-sequence-5inch",
//                   &len);
//        printk("2022-12-05debug: panel-init-sequence-5\n");
//    }

    else //其他选择, 112板其实不用读
    {
        data = of_get_property(panel->dev->of_node, "panel-init-sequence",
                   &len);
        printk("2022-12-05debug: panel-init-sequence\n");
    }

                   
    if (data) {
    //    printk("2022-12-05debug: data not NULL\n");
        panel->on_cmds = devm_kzalloc(panel->dev,
                          sizeof(*panel->on_cmds),
                          GFP_KERNEL);
        if (!panel->on_cmds)
            return -ENOMEM;

        err = panel_simple_parse_cmds(panel->dev, data, len,
                          panel->on_cmds);
        if (err) {
            dev_err(panel->dev, "failed to parse panel init sequence\n");
            return err;
        }
    }

    data = of_get_property(panel->dev->of_node, "panel-exit-sequence",
                   &len);
    if (data) {
        panel->off_cmds = devm_kzalloc(panel->dev,
                           sizeof(*panel->off_cmds),
                           GFP_KERNEL);
        if (!panel->off_cmds)
            return -ENOMEM;

        err = panel_simple_parse_cmds(panel->dev, data, len,
                          panel->off_cmds);
        if (err) {
            dev_err(panel->dev, "failed to parse panel exit sequence\n");
            return err;
        }
    }
    return 0;
}

 

1.3 时序配置部分

static int panel_simple_of_get_native_mode(struct panel_simple *panel)
{
	struct drm_connector *connector = panel->base.connector;
	struct drm_device *drm = panel->base.drm;
	struct drm_display_mode *mode;
	struct device_node *timings_np;
	int ret;

	timings_np = of_get_child_by_name(panel->dev->of_node,
					  "display-timings");
	if (!timings_np) {
		dev_dbg(panel->dev, "failed to find display-timings node\n");
		return 0;
	}

	of_node_put(timings_np);
	mode = drm_mode_create(drm);
	if (!mode)
		return 0;

	//timing - 2022-12-08 by dazhi
	//panel->lcd_type 0-->old5inch,1-->7inch,2-->new5inch,-1 表示xx板,选择时序3
	ret = of_get_drm_display_mode(panel->dev->of_node, mode,
				     panel->lcd_type>=0?panel->lcd_type:3);//OF_USE_NATIVE_MODE);
	if (ret) {
		dev_dbg(panel->dev, "failed to find dts display timings\n");
		drm_mode_destroy(drm, mode);
		return 0;
	}

	drm_mode_set_name(mode);
	mode->type |= DRM_MODE_TYPE_PREFERRED;
	drm_mode_probed_add(connector, mode);

	return 1;
}

 修改完毕,正常可用了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

3399的-mipi适应多个lcd屏显示-后续2-linux内核中的修改 的相关文章

  • 在 .gitconfig 中隐藏 GitHub 令牌

    我想将所有点文件存储在 GitHub 上 包括 gitconfig 这需要我将 GitHub 令牌隐藏在 gitconfig 中 为此 我有一个 gitconfig hidden token 文件 这是我打算编辑并放在隐藏令牌的 git 下
  • 使用 \r 并打印一些文本后如何清除控制台中的一行?

    对于我当前的项目 有一些代码很慢并且我无法使其更快 为了获得一些关于已完成 必须完成多少的反馈 我创建了一个进度片段 您可以在下面看到 当你看到最后一行时 sys stdout write r100 80 n I use 80覆盖最终剩余的
  • 在centos中安装sqlite3 dev和其他包

    我正在尝试使用 cpanel 在 centos 机器上安装 sqlite dev 和其他库 以便能够编译应用程序 我对 debian 比 centos 更熟悉 我知道我需要的库是 libsqlite3 dev libkrb5 dev lib
  • 如何在 Ubuntu 中创建公共 HTML 文件夹?

    简单的问题 但由于某种原因我无法在谷歌上找到确切的答案 我在 Slicehost 上安装了全新的 Ubuntu 并且想在我的主目录中为包含一堆静态 HTML 文件的简单网站创建一个公共目录 我该怎么做呢 只是打字的问题吗mkdir publ
  • 从 ttyUSB0 写入和读取,无法得到响应

    我对 Linux tty 不太有经验 我的环境是带有丰富 USB 串行的 Raspbian 什么有效 stty F dev ttyUSB0 38400 cu l dev ttyUSB0 s 38400 cu to dev ttyUSB0作品
  • 从 Xlib 转换为 xcb

    我目前正在将我的一个应用程序从 Xlib 移植到 libxcb 但在查找有关我有时使用的 XInput2 扩展的信息时遇到了一些麻烦 libxcb 中有 XInput2 实现吗 如果是的话 在哪里可以找到文档 目前我在使用此功能时遇到问题
  • 如何查找哪个 Yocto 项目配方填充图像根文件系统上的特定文件

    我经常与 Yocto 项目合作 一个常见的挑战是确定文件为何 或来自什么配方 包含在 rootfs 中 这有望从构建系统的环境 日志和元数据中得出 理想情况下 一组命令将允许将文件链接回源 即配方 我通常的策略是对元数据执行搜索 例如gre
  • 如何使用Android获取Linux内核的版本?

    如何在 Android 应用程序中获取 Linux 内核的版本 不是 100 确定 但我认为调用 uname r 需要 root 访问权限 无论如何 有一种不太肮脏的方法可以做到这一点 那就是 System getProperty os v
  • Apache 访问 Linux 中的 NTFS 链接文件夹

    在 Debian jessie 中使用 Apache2 PHP 当我想在 Apache 的文档文件夹 var www 中创建一个新的小节时 我只需创建一个指向我的 php 文件所在的外部文件夹的链接 然后只需更改该文件夹的所有者和权限文件夹
  • 我什么时候应该编写 Linux 内核模块?

    有些人出于某种原因想要将 Linux 中的代码从用户空间移动到内核空间 很多时候 原因似乎是代码应该具有特别高的优先级 或者只是 内核空间更快 这对我来说似乎很奇怪 我什么时候应该考虑编写内核模块 有一套标准吗 我怎样才能激励将代码保存在
  • 检查已安装的软件包,如果没有找到则安装

    我需要检查已安装的软件包 如果未安装则安装它们 RHEL CentOS Fedora 示例 rpm qa grep glibc static glibc static 2 12 1 80 el6 3 5 i686 如何在 BASH 中进行检
  • 如何让 Node.js 作为后台进程运行并且永不死掉?

    我通过 putty SSH 连接到 linux 服务器 我尝试将其作为后台进程运行 如下所示 node server js 然而 2 5 小时后 终端变得不活动 进程终止 即使终端断开连接 我是否也可以使进程保持活动状态 Edit 1 事实
  • 复制目录内容

    我想将目录 tmp1 的内容复制到另一个目录 tmp2 tmp1 可能包含文件和其他目录 我想使用C C 复制tmp1的内容 包括模式 如果 tmp1 包含目录树 我想递归复制它们 最简单的解决方案是什么 我找到了一个解决方案来打开目录并读
  • 尽管我已在 python ctypes 中设置了信号处理程序,但并未调用它

    我尝试过使用 sigaction 和 ctypes 设置信号处理程序 我知道它可以与python中的信号模块一起使用 但我想尝试学习 当我向该进程发送 SIGTERM 时 但它没有调用我设置的处理程序 只打印 终止 为什么它不调用处理程序
  • 无法显示 Laravel 欢迎页面

    我的服务器位于 DigitalOcean 云上 我正在使用 Ubuntu 和 Apache Web 服务器 我的家用计算机运行的是 Windows 7 我使用 putty 作为终端 遵循所有指示https laracasts com ser
  • express.js api 应用程序中的内存泄漏

    我正在运行一个express js应用程序 它用作REST API 一个端点启动 puppeteer 并使用多个过程测试我的网站 启动应用程序并持续消耗端点后 我的 docker 容器每小时都会耗尽内存 如下所示 首先 我认为我的 pupp
  • 如何wget目录中最新的文件

    我想编写一个 bash 脚本来下载并安装最新的每日构建程序 RStudio 是否有可能使wget仅下载目录中最新的文件http www rstudio org download daily desktop http www rstudio
  • 具有多处理功能的 Python 代码无法在 Windows 上运行

    以下简单的绝对初学者代码在 Ubuntu 14 04 Python 2 7 6 和 Cygwin Python 2 7 8 上运行 100 但在 Windows 64 位 Python 2 7 8 上挂起 我使用另一个片段观察到了同样的情况
  • 如何找到进程启动时使用的原始用户名?

    有一个 perl 脚本需要以 root 身份运行 但我们必须确保运行该脚本的用户最初没有以用户 foo 身份登录 因为它将在脚本运行期间被删除 那么 我如何查明自登录以来可能已多次起诉的用户是否在该链中的任何时间都没有模拟过 foo 我发现
  • 从另一个 python 脚本获取返回信息

    我在 Linux 上 我有一个 python 脚本 我想从另一个 python 脚本调用它 我不想将其作为模块导入 为了一层安全性 现在为了学术练习 因为我想弄清楚这一点 我实际上想让一个脚本使用 os system 或另一个类似的函数 并

随机推荐

  • 【华为OD统一考试A卷

    华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一修改为OD统一考试 A卷 和OD统一考试 B卷 你收到的链接上面会标注A卷还是B卷 请注意 根据反馈 目前大部分收到的都是
  • Java-线程通信

    Java 线程通信 1 线程通信中的三个方法 wait 一旦执行此方式 当前线程就进入阻塞状态 并释放线程锁 notify 一旦执行此方法 就会唤醒被wait的一个线程 如果有多个线程被wait 就唤醒优先级高的那个线程 notifyAll
  • java swing结构,Java Swing的层次结构理解

    一 什么是Java Swing Swing 是一个用于开发Java图形界面应用程序的开发工具包 它是以抽象窗口工具包 AWT Abstract Window Toolkit 为基础 使跨平台应用程序可以使用任何可插拔的外观风格 通常把AWT
  • oracle 的 start with connect by 用法 .

    分类 oracle java 2012 11 27 17 38 489人阅读 评论 0 收藏 举报 目录 ORACLE Connect ByLevelStart With的使用Hierarchical query 层次查询 connect
  • 一张图解释什么是遗传算法_遗传算法总结(#看了就能懂和用系列#)

    Word害我重写 顺便重新整理下思路 背景 写论文时用到遗传算法 花了近一周时间 还算理解了算法以及能够进行基础的编程实现 保持谦虚 说明 具体的实现没敢细讲 主要是原理的方法上的介绍 讲解都算不上 先说说算法学习 个人觉得首先需要了解这个
  • SpringBoot--Eureka

    SpringBoot Eureka 项目一 使用Eureka注册服务 任务一 搭建Maven父工程 任务二 搭建服务端工程 任务三 搭建客户端工程 项目二 实现服务间的调用 任务一 搭建订单服务工程 任务二 编写用户服务功能 任务三 启动服
  • buuctf-loveSQL

    进入界面 没有什么明显的提示 上次有个一样界面的题目 结果直接万能密码1 1出来了 这次再试试 啥 简单的我有点不相信 睿智的我一下子就觉得不对经 去尝试一下MD5 就知道 算了 接着找吧 看题目名字 lovesql 估计还是注入 只能把目
  • lol 那个服务器最稳定,lol哪个区的人多,哪个区的技术最好?

    每日科技网 一直都有 一区的螃蟹能走位单杀打野 郊区王者打不过一区钻石 的搞笑言论 其实这个言论有一定的是事实依据 虽然有一点夸张 说的神乎其神的 电信一区艾欧尼亚在LOL中的地位是大家有目共睹的 而之所以会出现那样的畸形观点 主要呢有以下
  • js获取昨天/明天、本周/上周/下周、本月/上月、本季度/上季度、上一年的开始/结束日期

    一 获取昨天 明天的日期 该方法参数如果为true 则获取昨天日期 反之为明天日期 默认为true function getYestDayOrNextDay flag true 获取当前日期 const today new Date 计算前
  • 代码检视(一)

    一 意义 最大的意义 通过代码检视 发现问题 解决问题 并且能够有效地提升自己 最终达到写出优质代码 提高代码质量 成功做好项目 二 基本要求 一 逻辑一定要正确 逻辑错误非常容易引起BUG 二 避免一些没必要的代码 能用一句解决的就不要用
  • XMLSocket

    XMLSocket 协议是flash的长连接消息协议 XMLSocket协议规则 每个 XML 消息都是一个完整的XML文档 一定要以 0 结束 html5 websocket是长连接传输的是精简的http报文 XMLSocket conn
  • 【UE4】复杂背景人像抠图-飞浆AI-paddlepaddle深度训练模型

    前言 运用到Python3 7 UEC 蓝图 实现复杂背景人物使用PaddleHub深度训练模型进行抠像后在UE中使用 纯色背景人物仅材质就可实现 使用到的训练模型 deeplabv3p xception65 humanseg 1 准备工作
  • 【私有云平台的搭建——vSphere Client 的安装与配置】

    目录 vSphere Client 的基本操作 Step 1 使用 vSphere Client 安装虚拟机 Step 2 使用 vSphere 客户端在 ESXi 创建虚拟机 Step 3 点击 New Virtual Machine S
  • Idea启动报错idea start failed -org.picocontainer.PicoContainer com.intellij.openapi.application.Applicat

    org picocontainer PicoContainer com intellij openapi application Application getPicoContainer ror Please refer to https
  • Android编译详解之lunch命令

    Android的优势就在于其开源 手机和平板生产商可以根据自己的硬件进行个性定制自己的手机产品 如小米 LePhone M9等 因此 在我们在对Android的源码进行定制的时候 很有必要了解下 Android的编译过程 如果你从来没有做过
  • 技术人员的赚钱之道-2:做个现代的“六化”程序员

    六化 像是一面黑夜中的灯塔 在黑暗指明方向 六化 可是现代程序员具备的能力水平 六化 也可以是程序员轻创业的方式 什么是六化 专业化 数字化 自动化 虚拟化 云化 智能化 1 专业化 专业化是程序员的基础 懂得编程或某个专业领域的技术 2
  • Ubuntu20.04 LTS 安装GCC11.2教程,包教包会!

    GCC 11 2 安装 其他版本 如9 5 12 1等都可以用同样方法编译安装 但是依赖包不一样 需要到gcc官网下载对应的依赖包和源码包 前置条件 首先把Ubuntu提供的各种构建工具都给他装上 sudo apt install buil
  • 好分数阅卷3.0_揭秘!自考阅卷的批改套路!

    距离2019年4月自考仅剩 13 天 每当考试之后有小伙伴就有这样的感受 自己感觉这次可以 及格没问题 但是最后却是差了几分 也有人说 我都抄到了标准答案 为什么是56分 56分啊 难道自考真的有所谓的过关率 阅卷老师真的有刻意在压低分数
  • C++顺序表的构建(用数组存储数据)

    这是最简单的顺序表 顺序表中的元素都存储在数组T data中 const int defaultSize 100 template
  • 3399的-mipi适应多个lcd屏显示-后续2-linux内核中的修改

    一 前提 1 rk3399核心板 2 linux4 4 19 源码 3 多个MIPI显示屏的启动序列以及显示时序 重要 4 rk3399MIPI通道0 5 接上一个uboot中的修改配置 二 内核驱动的修改 0 dts就不再给出了 请参考u