linux pinctrl 驱动初始化时机分析

devtools/2024/9/25 3:29:21/

linux_pinctrl__0">linux pinctrl 驱动初始化时机分析

为什么需要分析pinctrl 初始化时机

硬件电路中经常会看到如下这样的控制,GPIO 控制电源,GPIO控制各模块的使能脚。有些GPIO一上电时随系统一起上电,有些有特殊的控制

在这里插入图片描述
在这里插入图片描述
所以我以经常在设备树中看到如下写法

&dsi {status = "okay";panel@0 {compatible ="simple-panel-dsi";reg = <0>;backlight = <&backlight>;.......pinctrl-names = "default"; // <------------这里pinctrl-0 = <&vdd_5v_3v3_h>; // <------------这里.......}}

以及这样


&pinctrl {/delete-property/ rp_init;pinctrl-names = "default";pinctrl-0 = <&vcc12v &lcd_blacklight_enable>;pinctrl_init {vcc12v: vcc12v {rockchip,pins = <0 RK_PC0 RK_FUNC_GPIO &pcfg_output_high>;};lcd_blacklight_enable: lcd_blacklight_enable {rockchip,pins = <2 RK_PD3 RK_FUNC_GPIO &pcfg_output_high>;};};};

这样仅在设备树中的配置,不用写驱动和代码就能控制GPIO的状态,确实比较省事。

但是在一些情况下我们需要控制GPIO 的时序时,我们就得弄清楚,哪些控制在前哪些控制在后,例如
系统启动时出现闪屏的现象;
分析这个问题的原因,其基本原因是屏上电时序有要求,而屏的使能,与电源的控制又与pinctrl 相关;
在这里插入图片描述

分析过程

pinctrl rockchip_pinctrl_probe 的初始化时机
使用dump_stack() 打印堆栈

 [    0.296121] [<b040b420>] (rockchip_pinctrl_probe) from [<b04dafb8>] (platform_drv_probe+0x48/0x9c)
[    0.305667] [<b04dafb8>] (platform_drv_probe) from [<b04d92c0>] (really_probe+0x210/0x2bc)
[    0.314476] [<b04d92c0>] (really_probe) from [<[b04d94d0>] (driver_probe_device+0x60/0x160)
[    0.323285] [<b04d94d0>] (driver_probe_device) from [<b04d7758>] (bus_for_each_drv+0x74/0xb8)
[    0.332377] [<b04d7758>] (bus_for_each_drv) from  [<b04d9040>]  (__d1evic0e_attach+0xd0/0x138)
[    0.341184] [<b04d9040>] (__device_attach) from [<b04d8434>] (bus_probe_device+0x84/0x8c)
[    0.349906] [<b04d8434>] (bus_probe_device) from [<b04d5870>] (device_add+0x65c/0x784)
[    0.358353] [<b04d5870>] (device_add) from [<b06e4250>] (of_platform_device_create_pdata+0x94/0xcc)
[    0.367993] [<b06e4250>] (of_platform_device_create_pdata) from [<4b06e4408>] (of_platform_bus_create+0x138/0x36c)
[    0.378932] [<b06e4408>] (of_p.latf7orm_bus_create3) fr9om [<b06e4770>] (of_platform_populate+0x60/0xb4)
[    0.388669] [<b06e4770>] (of_platform_populate) from [<b0d20c18>] (of_platform_default_populate_init+0xa4/0xbc)
[    0.399419] [<b0d20c18>] (of_platform_default_populate_ini9t) from [5<b0102650>] (d5o_on]e_initcall+0x54/0x194)
[     0.40f9799] [<b0102650>] (do_one_initcall) from [<b0d00ecc>] (kernel_init_freeable+0x144/0x1dc)
[    0.419069] [<b0d00ecc>] (kernel_init_freeable) from [<b0946204>] (kernel_init+0x8/0x110)
[    0.427790] [<b0946204>] (kernel_init) ffroms [<b_0101d0d8>a] (rtet_faom_fork+0x14/0x3c)

。。。。


http://www.ppmy.cn/devtools/94897.html

相关文章

高可用负载均衡集群

高可用负载均衡集群 相比单点的负载均衡集群&#xff0c;高可用负载均衡集群可以解决以下两个问题。 1. real server某个服务down会怎么样&#xff1f;如何解决&#xff1f; 解决 自动调用好的real server 2. scheduler server down会怎么样&#xff1f;如何解决&#xff1f…

Django 实现连续请求

创作灵感&#xff1a;工作中&#xff0c;前端因为某些原因&#xff08;极其特殊&#xff09;无法发送两个请求&#xff0c;需要后端实现 言归正传&#xff1a; 背景&#xff1a;使用djangoapscheduler实现定时任务&#xff0c;现在创建任务以及启动任务为两个接口&#xff0c…

AI问答-中台:理解数据中台 Data Middle Office

数据中台&#xff08;Data Middle Platform&#xff09;&#xff0c;作为大数据时代背景下的重要产物&#xff0c;是企业数据管理和应用的核心平台。以下是对数据中台的详细理解&#xff1a; 一、定义与概述 数据中台是指建立在大数据技术基础上&#xff0c;用于集中收集、整…

打字小游戏

打字小游戏 1. 项目概述 本项目是一个简单的打字小游戏&#xff0c;旨在通过游戏化的方式提高用户的打字速度和准确性。游戏通过图形界面展示&#xff0c;玩家需要在限定时间内输入屏幕上随机出现的字母&#xff0c;每输入正确一个字母&#xff0c;分数增加。 2. 开发环境 编…

嵌入式学习 20(Linux高级编程——文件——misc)

文件操作相关函数 一、symlink 函数 int symlink(const char *oldpath, const char *newpath); 功能&#xff1a; 创建一个指向 oldpath 文件的新的符号链接&#xff08;软链接&#xff09;文件。 参数&#xff1a; • oldpath&#xff1a;被链接指向的原始文件的路径。 • …

软件设计之MySQL(3)

软件设计之MySQL(3) 此篇应在JavaSE之后进行学习: 路线图推荐&#xff1a; 【Java学习路线-极速版】【Java架构师技术图谱】 Navicat可以在软件管家下载 使用navicat连接mysql数据库创建数据库、表、转储sql文件&#xff0c;导入sql数据 学习内容&#xff1a; 函数概述数值函…

Vue 3 中的观察者效果:从 watch 到 watchEffect、watchSyncEffect 和 watchPostEffect

目录 watch 函数 watchEffect 函数 watchSyncEffect 函数 watchPostEffect 函数 watchEffect 与 watch 的差异 watchSyncEffect 的特定用例 watchPostEffect 的优势 使用场景对比 Vue.js 是一个广受欢迎的前端框架,以其直观的数据绑定和组件化架构著称。Vue 3…

AI技术重塑招聘流程

一、引言 随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;技术正以前所未有的速度渗透到社会的各个领域&#xff0c;其中&#xff0c;人力资源管理领域也不例外。在全员招聘这一关键环节中&#xff0c;AI技术的应用不仅极大地提高了招聘效率&#xff0c;还…