kernel-src/drivers/pinctrl/qcom/pinctrl-sc7280.c 文件中。
其他受支持目标的对应 pinctrl 驱动程序位于以下文件中:
- QCS5430:
kernel-src/drivers/pinctrl/qcom/pinctrl-sc7280.c - IQ-9075:
kernel-src/drivers/pinctrl/qcom/pinctrl-sa8775p.c - IQ-8275:
kernel-src/drivers/pinctrl/qcom/pinctrl-qcs8300.c - IQ-615:
kernel-src/drivers/pinctrl/qcom/pinctrl-qcs615.c
有关其他 Qualcomm SoC pinctrl 驱动程序的更多信息,请参见 Pinctrl Drivers。
有关 QCS6490 相应 SoC pinctrl 绑定文档支持功能的更多信息,请参见 pinctrl binding documentation。 功能选择 对于
sc7280_functions 数据对象,一个或多个 GPIO 引脚用作一个功能,并且必须注册到设备树并传递给正确的设备节点。
系统启动期间,内核 pinctrl 基础架构会注册这些功能。
以下示例显示了内核配置基础架构:
配置 GPIO 用法
GPIO 引脚配置需要以下两个设置。这些设置定义了 GPIO 引脚状态,并使这些引脚可用于任何输入/输出活动。- 复用(Mux):mux 设置需要从 SoC 特定 pinctrl 驱动程序中一组可用功能中选择映射的功能名称。有关 pinctrl 的更多信息,请参见 Pinctrl configuration。
- 配置:配置方面需要设置驱动强度和偏置属性。
- 在设备树中定义引脚配置:
- 在设备树中配置设备节点或知识产权(IP)块:
- 驱动程序代码必须使用通用 API 在 pinctrl 配置中选择并注册其 GPIO 配置。以下是可用 API 的示例:
- 在 DTS 文件中配置 GPIO 引脚:
- 设置 GPIO 引脚的属性和功能。
- 使用以下配置将引脚设置为使用 GPIO 55 用于
qup_se_l3()功能:
- 为您要将 GPIO 设置为 IRQ 的设备节点创建一个与上述配置类似的 DT 条目。在以下示例中,GPIO55 配置为 IRQ,父级为顶层模式多路复用器(TLMM),电平设置为高。
- 驱动程序必须读取该值,并使用
request_irqAPI 将其注册为通用中断控制器(GIC)的中断,同时指定中断服务寄存器(ISR)和 IRQ 标志。
配置 GPIO 以生成时钟或脉冲宽度调制
将任何 GPIO 配置为GP_CLK 作为备用功能,以获取时钟或脉冲宽度调制(PWM)。
以下过程适用于 QCS6490 SoC。
GP_CLK 功能的 GPIO 的更多信息,请参见 Pin descriptions。
- 在
kernel/arch/arm64/boot/dts/qcom/sc7280.dtsi文件中添加 GPIO 配置节点。
- 在
kernel/arch/arm64/boot/dts/qcom/sc7280.dtsi文件中定义设备树节点。 - 在设备驱动程序中添加以下代码:
- 如果您不使用时钟或 PWM,请调用
clk_disable_unprepare()以禁用时钟以节省功耗。注意 确保先调用clk_prepare_enable()然后再调用clk_disable_unprepare()。 - 要生成所需的占空比,请在
clk_prepare_enableAPI 之后调用clk_set_duty_cycle()API。
从用户空间配置 GPIO
使用用户空间的libgpiod 库来控制 GPIO 以获得更好的性能。
- 要从主机计算机编译并推送
libgpiod库,请执行以下操作:- 要安装 Arm®(Arm64)工具链,请运行以下命令:
- 要从 libgpiod 1.6.4.tar.xz 下载并解压 libgpiod 源代码,请运行以下命令:
- 要为静态链接配置源代码,请运行以下命令:
- 要编译库,请运行以下命令:
注意 编译会创建链接二进制文件。
- 要构建静态链接的二进制文件,请运行以下命令:
- 要安装 Arm®(Arm64)工具链,请运行以下命令:
- 编译后要将二进制文件推送到您的设备,请运行
scp命令。例如:
- 使用
gpiodetect和gpioinfo命令列出 GPIO 芯片和线路。以下示例显示 GPIO 芯片信息:以下示例显示 GPIO 线路: - 使用
gpioset命令设置 GPIO 值。例如,要在gpiochip4上设置GPIO line 0,请执行以下操作: - 使用
gpioget命令读取 GPIO 值。例如,要读取gpiochip4上GPIO line 0的值,请执行以下操作:

