linux pinctrl 驱动初始化时机分析

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)

。。。。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值