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

news2024/11/26 2:28:26

一、前提:

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;
}

 修改完毕,正常可用了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/89057.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

基于C#开发的(WinForm)图书管理系统【100010037】

图书管理系统项目开发说明书 项目简介 项目背景(选择这个项目的原因、前景,面向的用户,优势); * 根据学院需要希望能够充分利用现代科技来提高图书管理的效率,在原有的办公系统基础上进行扩展&#xff0c…

ArkUI框架,更懂程序员的UI信息语法

ArkUI框架,更懂程序员的信息语法ArkUI框架简化代码的“秘密” 在传统的开发过程中,总有个问题在困扰我:如何实现前端view与后端数据的同步更改?例如:在某个视频类app的页面,如果我想要实现视频的点击播放功…

移动端touch拖动事件和click事件冲突问题解决

通过本课程你会学到什么 1.系统掌握 Web 全栈技能树 2.网络、前后端、持久化等核心技术解析 3.全栈开发的技术比较和选型 4.拓宽技术视野,培养全栈思维 今天我们要接触一个和 MVC 密切相关的,能带来思维模式改变的编程范型——面向切面编程(…

OpenCV StudyNote

Open CV学习 图像读取与显示 灰度图像 - 单通道 彩色图像 - 三通道 (B, G, R) 一般步骤 import cv2 as cv # 导入OpenCV支持(cv2是包的名称不是版本号) import numpy as np # 所有图像数据都是以 numpy 数组方式存储 imread(filename[,flags]) # imread 函数&am…

自助服务:怎么提高客服人员效率?

越来越多的企业意识到了客服效率的重要性,大家通过布局全渠道系统、智能客服机器人、人员岗前培训等方式来提升客服效率,为客户提供更迅速、专业、优质的服务。人员效率的提升不仅能提高客户体验,还有助于企业的长期发展,带来更多…

【Vue2+Element ui通用后台】头部

文章目录headerheader 在 components 中新建 CommonHeader.vue 组件来完成头部组件的编写 <template><div class"header-container"><div class"l-content"><el-button icon"el-icon-menu" size"mini"><…

【MySQL】索引基础介绍

一、常见的存储引擎有哪些&#xff1f;区别是什么&#xff1f; Mysql 默认的存储引擎是&#xff1a;InnoDB&#xff0c;具有支持事务、行级锁、高并发访问性能。MyIsAM&#xff1a;访问速度快&#xff0c;实际运用如果是以读和插入操作为主&#xff0c;并对事物完整性和并发性…

面向对象程序设计期末项目总结

面向对象程序设计期末项目总结 开发前准备 MysqlNavicatTomCatIDEA 一&#xff0c;配置项目环境 右键项目名&#xff0c;添加新模块 命名后右键新建的模块 选中Web模块 到此项目创建完毕&#xff0c;接下来是配置环境。 打开IDEA–>File找到Project Structure 添加所…

Pikachu(皮卡丘)靶场中SQL注入

Pikachu靶场中SQL注入1.Pikachu(皮卡丘)靶场中SQL注入1.1.数字型注入1.2.字符型注入1.3.搜索型注入1.4.xx型注入1.5.insert/update注入1.6.delete注入1.7.http头注入1.8.盲注(base on boolian)1.9.盲注(base on time)1.10.宽字节注入1.Pikachu(皮卡丘)靶场中SQL注入 若遇到不链…

基于java+springboot+mybatis+vue+mysql的冬奥会科普平台

项目介绍 基于SpringBoot框架的冬奥会科普平台利用网络沟通、计算机信息存储管理&#xff0c;有着与传统的方式所无法替代的优点&#xff0c;系统采用java语言开发&#xff0c;前端采用vue技术&#xff0c;数据库采用mysql进行数据存储。比如计算检索速度特别快、可靠性特别高…

大数据如何在制造业中进行应用?数据宝董事长汤寒林现身数字化年会讲了这个事

12月8日1670923102263472480日&#xff0c;2022中国数字化年会成功在线上举办&#xff01;本届年会以“向变而生”为主题&#xff0c;历时三天&#xff0c;特别打造了主论坛、高峰论坛与行业数智化论坛三大板块&#xff0c;60余位专家学者与来自各领域各行业数字化领军人物 通过…

前端基础(五)_CSS文本文字属性

CSS文本文字属性 1、文字属性 1.1、字号 font-size&#xff1a;38px; 浏览器默认16px; 1.2、字体 font-family: 如果字体名称包含空格&#xff0c;字体名称上加引号&#xff1b; 中文字体名称加引号&#xff1b; 多个字体名称作为一个回退系统来保存&#xff0c;如果第一个不…

什么才是写博客初心如何坚持

为何写机器人课程博客并一直坚持&#xff1f;&#xff08;2021&#xff09; 创新源自真心&#xff0c;“乱”创新的课程徒有其表&#xff0c;“不”创新的课程逐渐凋零。 个人觉得&#xff0c;课程教学创新宏观上的目标是让学生更好的认识自己并适应社会发展和变化&#xff1b…

停车场管理系统

开发工具(eclipse/idea/vscode等)&#xff1a; 数据库(sqlite/mysql/sqlserver等)&#xff1a; 功能模块(请用文字描述&#xff0c;至少200字)&#xff1a; 主要用jsp,数据库用MySQL 分为前台用户和后台管理员 前台用户 主界面是一个区域内的两到三个停车场&#xff0c;然后 可…

virtualenv系列 (2) · 系统环境与虚拟环境

文章目录1. 怎样算是一套Python环境&#xff1f;2. 系统环境 VS 虚拟环境3. 虚拟环境最佳实践1. 怎样算是一套Python环境&#xff1f; 首先&#xff0c;我们得先弄清楚&#xff1a;怎样算是一个Python环境&#xff1f;然后再去区分系统环境和虚拟环境。简单地说&#xff0c;在…

[附源码]Python计算机毕业设计SSM基于web的家教管理系统(程序+LW)

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

阿里5位高级架构师耗时两年共同研发《Redis入门手册》

在我们日常的开发中&#xff0c;无不都是使用数据库来进行数据的存储&#xff0c;由于一般的系统任务中通常不会存在高并发的情况&#xff0c;所以这样看起来并没有什么问题&#xff0c;可是一旦涉及大数据量的需求&#xff0c;比如一些商品抢购的情景&#xff0c;或者是主页访…

喜报!Coremail两大方案入选“2022年软件行业典型应用案例”

12月5日&#xff0c;由中国软件行业协会联合中软国际有限公司、江苏省软件行业协会主办的2022中国程序员节在江苏南京圆满落幕&#xff0c;本次活动聚焦当前我国对数字技术创新及应用发展的现实需求&#xff0c;以开源创新、软件根技术、平台工具等热点议题&#xff0c;探讨影响…

Spring Boot 配置文件 · properties 基本语法 · yml 基本语法 · yml 配置不同数据以及 null · yml 配置文件读取

一、配置文件作用二、配置文件的格式三、properties 配置文件说明3.1 properties 基本语法3.2 读取配置文件3.3 properties 缺点分析四、yml 配置文件说明4.1 yml 基本语法4.2 yml 与 properties 格式对比4.3 yml 配置不同数据类型以及 null4.4 yml 配置读取4.4.1 读取配置文件…

Win11十二月系统更新了什么内容?

微软今天发布了12月最新的累积更新补丁&#xff0c;根据Microsoft 支持页面&#xff0c;build 22621.963 现在会在用户 OneDrive 上的存储空间不足时在“设置”应用程序中警告用户&#xff0c;将 Windows Spotlight 与主题设置相结合&#xff0c;修复任务管理器应用程序的界面问…