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内核中的修改 的相关文章

  • 删除 Git 存储库,但保留所有文件

    在我使用 Linux 的过程中的某个时刻 我决定将我的主目录中的所有内容都放入源代码管理中是个好主意 我不是在问这是否是一个好主意 我是在问如何撤销它 删除存储库的原因是我最近安装了 Oh My Zsh 而且我非常喜欢它 问题是我的主目录有
  • “make install”将库安装在 /usr/lib 而不是 /usr/lib64

    我正在尝试在 64 位 CentOS 7 2 上构建并安装一个库 为了这个目的我正在跑步 cmake DCMAKE BUILD TYPE Release DCMAKE INSTALL PREFIX usr DCMAKE C COMPILER
  • 在两次之间每分钟执行一次 Cronjob

    我需要在 crontab 中每分钟运行一个 bash 脚本8 45am and 9 50am每天的 Code 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 8 home pull sh gt ho
  • 我如何知道 C 程序的可执行文件是在前台还是后台运行?

    在我的 C 程序中 我想知道我的可执行文件是否像这样在前台运行 a out 或者像这样 a out 如果你是前台工作 getpgrp tcgetpgrp STDOUT FILENO or STDIN FILENO or STDERR FIL
  • 使用 Grep 查找两个短语之间的文本块(包括短语)

    是否可以使用 grep 来高亮所有以以下内容开头的文本 mutablePath CGPathCreateMutable 并以以下内容结尾 CGPathAddPath skinMutablePath NULL mutablePath 这两个短
  • 进程退出后 POSIX 名称信号量不会释放

    我正在尝试使用 POSIX 命名信号量进行跨进程同步 我注意到进程死亡或退出后 信号量仍然被系统打开 在进程 打开它 死亡或退出后是否有办法使其关闭 释放 早期的讨论在这里 当将信号量递减至零的进程崩溃时 如何恢复信号量 https sta
  • 如何查询X11显示分辨率?

    这似乎是一个简单的问题 但我找不到答案 如何查询 通过 X11 存在哪些监视器及其分辨率 查看显示宏 http tronche com gui x xlib display display macros html and 屏幕宏 http
  • PyQt5 - 无法使用 QVideoWidget 播放视频

    from PyQt5 QtWidgets import from PyQt5 QtMultimedia import from PyQt5 QtMultimediaWidgets import from PyQt5 QtCore impor
  • Capistrano 3 部署无法连接到 GitHub - 权限被拒绝(公钥)

    我使用 Capistrano v3 和 capistrano symfony gem 设置了以下部署脚本 我正在使用 Ubuntu 14 4 部署到 AWS EC2 实例 我正在连接从 AWS 下载的 pem 文件 我的deploy rb中
  • git 错误:无法处理 https

    当我尝试使用 git clone 时https xxx https xxx我收到以下错误我不处理协议 https 有人可以帮我吗 完整消息 dementrock dementrock A8Se git 克隆https git innosta
  • 在 unix 中编译 dhrystone 时出错

    我是使用基准测试和 makefile 的新手 我已经从下面的链接下载了 Dhrystone 基准测试 我正在尝试编译它 但我遇到了奇怪的错误 我尝试解决它 但没有成功 有人可以帮助我运行 dhrystone 基准测试吗 以下是我尝试编译的两
  • Mcrt1.o和Scrt1.o有什么用?

    我坚持使用以下两个文件 即 Mcrt1 o 和 Scrt1 o 谁能帮我知道这两个文件的用途 如何使用它 我们以 gcrt1 o 为例 在使用 pg 选项编译进行性能测试时非常有用 谢谢 表格的文件 crt o总是 C 运行时启动代码 大部
  • Raspberry 交叉编译 - 执行程序以“分段错误”结束

    我有一个自己编写的程序 我想从我的 x86 机器上为 Raspberry Pi 构建它 我正在使用 eclipse 生成的 makefile 并且无法更改此内容 我已经阅读了 CC for raspi 的教程 Hackaday 链接 htt
  • Web 应用程序的带宽和流量模拟器?

    您能否建议如何创建一个测试环境来模拟 Web 应用程序中的各种类型的带宽和流量 或者也许是一个针对本地主机执行此操作的开源程序 我认为在编写网络应用程序时这是一个非常重要的主题 但这不是一个常见的主题 我能想象创建这种环境的唯一方法是在本地
  • 无法在 64 位 Linux 上从汇编 (yasm) 代码调用 C 标准库函数

    我有一个函数foo以汇编语言编写 并在 Linux Ubuntu 64 位上使用 yasm 和 GCC 编译 它只是使用以下命令将消息打印到标准输出puts 如下所示 bits 64 extern puts global foo secti
  • 使用 inotify 的正确方法是什么?

    我想使用inotifyLinux 上的机制 我希望我的应用程序知道文件何时aaa被改变了 您能给我提供一个如何做到这一点的示例吗 文档 来自监视文件系统活动 inotify https developer ibm com tutorials
  • linux下写入后崩溃

    如果我使用 write 将一些数据写入磁盘上的文件会发生什么 但我的应用程序在刷新之前崩溃了 如果没有系统故障 是否可以保证我的数据最终会刷新到磁盘 如果您正在使用write 并不是fwrite or std ostream write 那
  • 如何访问 mmaped /dev/mem 而不导致 Linux 内核崩溃?

    我有一个简单的程序 尝试访问用户空间中的物理内存 其中内核存储第一个结构页 在 64 位机器上 该地址是 内核虚拟地址 ffffea0000000000 物理地址 0000620000000000 我正在尝试通过用户空间中的 mmap 访问
  • 从c调用汇编函数

    我试图从 c 调用汇编函数 但我不断收到错误 text globl integrate type integrate function integrate push ebp mov esp ebp mov 0 edi start loop
  • Linux“屏幕”的 Windows 等效项还是其他替代方案?

    我正在寻找一种在 Windows 环境中控制程序的方法 我希望它与 Linux 软件有点相似 screen 我搜索的原因是我需要使用标识符启动一个程序 在 Windows 上 这样我以后就能够关闭该特定程序 而无需关闭其他任何程序 即使实际

随机推荐

  • 【华为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