时钟、复位与电源
设备树引用将 S31 外设连接到 Linux 的时钟、复位和电源域提供者。时钟树说明已注册的时钟关系,电源域说明各域的控制策略。
获取和释放驱动资源
通过提供者 API 获取设备绑定声明的资源。保留资源获取操作返回的错误,包括 -EPROBE_DEFER,使内核能在所需提供者就绪后重新尝试探测。
API |
作用 |
|---|---|
|
获取时钟引用,不会启用时钟 |
|
准备并启用已获取的时钟 |
|
读取用于计算外设时序的时钟频率 |
|
与成功的准备、启用操作配对 |
|
获取可选复位控制;未提供可选控制时可能返回 |
|
通过该控制请求一次复位脉冲 |
S31 I2C 的探测流程可作为具体示例:映射寄存器,获取并启用时钟,通过 devm_add_action_or_reset() 注册 clk_disable_unprepare() 清理操作,获取并触发可选复位,然后配置控制器并申请 IRQ。错误路径保留提供者的错误码。这是该控制器的顺序;其他设备应遵循自身绑定与硬件要求。参见 I2C 探测与清理。
释放时钟或缓冲区前,应停止设备传输与中断活动。DMA 清理还要求同步完成,见 DMA 与缓存一致性。客户端驱动不应绕过提供者,直接写入时钟或 PMU 寄存器。
查看提供者状态
for file in /sys/bus/platform/devices/*/clocks; do
[ -r "$file" ] && cat "$file"
done
for file in /sys/bus/platform/devices/*/domains; do
[ -r "$file" ] && cat "$file"
done
clocks 的每一行包含以下字段:
字段 |
含义 |
|---|---|
开头的整数 |
S31 时钟绑定中的时钟 ID |
名称 |
注册到 CCF 的时钟名称 |
|
|
|
CCF 是否将该时钟标记为关键时钟 |
|
提供者报告的频率,单位为 Hz |
state=on 不是对实际电气时钟信号的独立回读,也不能证明外设已正常工作。应结合频率、探测日志和设备状态解释该字段。具体输出格式见 clocks_show()。