pinctrl dts学习笔记

简介: pinctrl dts学习笔记

gpio 配置注释,不同的厂商会有细微的区别

gpio0: gpio@fd8a0000 {
compatible = "rockchip,gpio-bank"; # 兼容性信息 ----------------- 相当这一个节点存在于设备树中的key,其它的子项是value,代码中就是通过这个key找到其它子项的
reg = <0x0 0xfd8a0000 0x0 0x100>; # 寄存器地址和大小

        第一个元素(0x0)表示该寄存器在系统中的偏移地址。
        第二个元素(0xfd8a0000)表示该寄存器的物理地址,即该寄存器在CPU外围设备中的实际地址。
        第三个元素(0x0)通常不使用,可以忽略。
        第四个元素(0x100)表示该寄存器所占用的字节数。

interrupts = <GIC_SPI 277 IRQ_TYPE_LEVEL_HIGH>; # 中断类型和编号
clocks = <&cru PCLK_GPIO0>, <&cru DBCLK_GPIO0>; # 时钟配置
gpio-controller; # GPIO控制器声明

gpio-cells = <2>; # GPIO单元格定义

interrupt-controller; # 中断控制器声明

interrupt-cells = <2>; # 中断单元格定义

};

有一组gpio需要处理,一部分需要输入上拉,一部分需要输出16ma

首先需要确保硬件上是支持的,然后可以做如下处理:(高通)

pinctrl部分的定义

    yk_w1_input_active{
        qcom,pins = <&gp 12>, <&gp 13>, <&gp 14>, <&gp 15>, <&gp 18>, <&gp 19>, <&gp 20>, <&gp 21>;
        qcom,num-grp-pins = <8>;
        label = "yk_w1_input_active";
        w1_input_active: w1_input_active {
            drive-strength = <2>;
            bias-pull-up;                     // 输入上拉
        };
    };
    yk_w1_output_active{
        qcom,pins = <&gp 0>, <&gp 1>, <&gp 2>, <&gp 3>, <&gp 8>, <&gp 9>, <&gp 10>, <&gp 11>;
        qcom,num-grp-pins = <8>;
        label = "yk_w1_output_active";
        w1_output_active: w1_output_active {                    
            drive-strength = <16>;                              // 输出16ma
            bias-disable;           /* No PULL */
            output-high;                         
        };
    };

dtsi中配置

test_gpio{

    compatible = "test_gpio";
    gpios = <&msm_gpio 0 0>,
        <&msm_gpio 1 0>,
        <&msm_gpio 2 0>,
        <&msm_gpio 3 0>,
        <&msm_gpio 8 0>,
        <&msm_gpio 9 0>,
        <&msm_gpio 10 0>,
        <&msm_gpio 11 0>,
        <&msm_gpio 12 0>,
        <&msm_gpio 13 0>,
        <&msm_gpio 14 0>,
        <&msm_gpio 15 0>,
        <&msm_gpio 18 0>,
        <&msm_gpio 19 0>,
        <&msm_gpio 20 0>,
        <&msm_gpio 21 0>;
    qcom,num-grp-pins = <16>;
    qcom,pin-func = <0>;
    pintctrl-names = "yk_w1_inout_active";  
    pinctrl-0 = <&w1_input_active &w1_output_active>;      // 同时设置两种不同的状态    
};

内核中的处理

static int w1_gpio_pinctrl_configure(struct pinctrl * p, struct device *dev, const char *name)
{
    struct pinctrl_state *set_state;
    int retval;


    set_state =
        pinctrl_lookup_state(p,    name);
    if (IS_ERR(set_state)) {
        dev_err(dev,
            "cannot get w1 pinctrl active state\n");
        return PTR_ERR(set_state);
    }

    retval = pinctrl_select_state(p, set_state);    
    if (retval) {
        dev_err(dev,
                "cannot set w1 pinctrl active state\n");
        return retval;
    }

    return 0;
}
static int test_gpio_probe(struct platform_device *pdev)
{
    int ret = 0;
    int i=0;
    struct device_node *of_node = pdev->dev.of_node;
    struct device *dev = &pdev->dev;

    pr_err("enter test_gpio_probe, begin \n");

    w1_gpio_pinctrl = devm_pinctrl_get(dev);
    if (IS_ERR(w1_gpio_pinctrl)) {
        if (PTR_ERR(w1_gpio_pinctrl) == -EPROBE_DEFER)
            return -EPROBE_DEFER;

        pr_debug("W1 Target does not use pinctrl\n");
        w1_gpio_pinctrl = NULL;
    }
    
    w1_gpio_pinctrl_configure(w1_gpio_pinctrl, dev, "yk_w1_inout_active");

    ... 
相关文章
|
C语言
设备树知识小全(六):设备节点及label的命名
设备树知识小全(六):设备节点及label的命名
575 0
|
自然语言处理 JavaScript 前端开发
一文了解HarmonyOS系统架构
HarmonyOS是一款面向 万物互联时代的、全新分布式操作系统。在传统的单设备系统能力基础上,HarmonyOS提出了基于`同一套系统能力`、`适配多种终端形态`的分布式理念。能够支持手机、平板、智能穿戴、智慧屏、车机等多种终端设备,提供全场景(移动办公、运动健康、社交通信、媒体娱乐等)业务能力。
3285 0
一文了解HarmonyOS系统架构
|
30天前
|
人工智能 API 开发工具
构建AI智能体:一、初识AI大模型与API调用
本文介绍大模型基础知识及API调用方法,涵盖阿里云百炼平台密钥申请、DashScope SDK使用、Python调用示例(如文本情感分析、图像文字识别),助力开发者快速上手大模型应用开发。
901 16
构建AI智能体:一、初识AI大模型与API调用
|
9月前
|
人工智能 Java 程序员
一文彻底拿下HarmonyOS中的@State和@Prop和@Link的区别和联系
本文介绍HarmonyOS中的装饰器、@State、@Prop和@Link。装饰器增强代码功能;@State管理组件状态,触发重新渲染;@Prop单向传递数据;@Link实现双向数据绑定。希望对你有帮助!
485 0
一文彻底拿下HarmonyOS中的@State和@Prop和@Link的区别和联系
|
11月前
|
安全 编译器 C语言
【C语言】typeof 关键字详解
`typeof` 关键字在GCC中用于获取表达式的类型,便于动态类型定义和宏编程。它可以用于简化代码、提高代码的灵活性和可维护性。虽然 `typeof` 是 GCC 扩展,并非标准C的一部分,但它在实际编程中非常有用。
545 1
|
Ubuntu Linux 测试技术
Linux(32)Rockchip RK3568 Ubuntu22.04上部署 Docker: 详细配置与功能测试(下)
Linux(32)Rockchip RK3568 Ubuntu22.04上部署 Docker: 详细配置与功能测试
1088 1
QT项目实战(视频播放器)
QT项目实战(视频播放器)
637 0
|
应用服务中间件 nginx C++
nginx的cgi模块
nginx的cgi模块
204 0
|
Linux
Realtek 网卡 支持RK vendor mac地址写入
Realtek 网卡 支持RK vendor mac地址写入
507 4
|
监控 关系型数据库 MySQL
mysql误删的performance_schema库
`performance_schema`库是MySQL性能监控的重要工具,误删除后可以通过上述方法尝试恢复。在操作过程中,重启MySQL服务器是最简单的尝试方法。如果这不起作用,可以尝试使用MySQL的初始化选项,但请注意备份数据以防数据丢失。检查MySQL配置也是一个好的步骤,以确保 `performance_schema`没有被禁用。最后,如果有备份,通过恢复备份来恢复 `performance_schema`库是最保险的方法。在操作过程中,确保遵循最佳实践和操作前备份重要数据。
627 5

热门文章

最新文章