kernel-src/drivers/pinctrl/qcom/pinctrl-sc7280.c 文件中。
有关其他 Qualcomm SoC pinctrl 驱动的更多信息,请参阅 Pinctrl Drivers。
有关 QCS6490 相应 SoC pinctrl 绑定文档中支持功能的更多信息,请参阅 pinctrl 绑定文档。 功能选择 对于
sc7280_functions 数据对象,一个或多个 GPIO 引脚作为一个功能使用,必须注册到设备树并传递给正确的设备节点。
在系统启动期间,内核 pinctrl 基础设施会注册这些功能。
以下示例展示了内核配置基础设施:
配置 GPIO 使用
GPIO 引脚配置需要以下两项设置。这些设置定义了 GPIO 引脚状态,并使这些引脚可用于任何输入/输出活动。- 复用(Mux):复用设置需要从特定于 SoC 的 pinctrl 驱动中可用功能集里选择所映射的功能名称。有关 pinctrl 的更多信息,请参阅 Pinctrl 配置。
- 配置(Configuration):配置方面需要设置驱动强度(drive strength)和偏置(bias)属性。
- 在设备树中定义引脚配置:
- 在设备树中配置设备节点或知识产权(IP)模块:
- 驱动代码必须使用通用 API 在 pinctrl 配置中选择并注册其 GPIO 配置。以下是可用 API 的示例:
- 在 DTS 文件中配置 GPIO 引脚:
- 设置 GPIO 引脚的属性和功能。
- 使用以下配置将引脚设置为使用 GPIO 55 实现
qup_se_l3()功能:
- 为要将 GPIO 设置为 IRQ 的设备节点创建类似于前述配置的 DT 条目。在以下示例中,GPIO55 被配置为 IRQ,其父级为顶层模式多路复用器(TLMM),电平设置为高。
- 驱动必须读取该值,并使用
request_irqAPI(指定中断服务寄存器(ISR)和 IRQ 标志)将其作为中断注册到通用中断控制器(GIC)。
配置 GPIO 以生成时钟或脉宽调制
将任何具有GP_CLK 备用功能的 GPIO 配置为时钟或脉宽调制(PWM)输出。
以下步骤适用于 QCS6490 SoC。
GP_CLK 功能的 GPIO 的更多信息,请参阅引脚描述。
- 在
kernel/arch/arm64/boot/dts/qcom/sc7280.dtsi文件中添加 GPIO 配置节点。
- 在
kernel/arch/arm64/boot/dts/qcom/sc7280.dtsi文件中定义设备树节点。 - 在设备驱动中添加以下代码:
- 如果不使用时钟或 PWM,请调用
clk_disable_unprepare()禁用时钟以节省功耗。注意:请确保在调用clk_disable_unprepare()之前先调用clk_prepare_enable()。 - 要生成所需的占空比,请在
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的值,请执行以下操作:

