CCF

通用时钟框架

API位置: include/linux/clk.h

API

macro

  • PRE_RATE_CHANGE:频率即将改变的通知标志

  • POST_RATE_CHANGE:频率改变完成的通知标志

  • ABORT_RATE_CHANGE:频率改变被中止的通知标志

type

  • struct clk:抽象时钟结构体(不透明类型)

  • struct clk_notifier:时钟通知器,关联 clk 与通知链

  • struct clk_notifier_data:通知回调数据,包含新旧频率

  • struct clk_bulk_data:批量时钟操作数据,包含 id 和 clk 指针

function

获取/释放

  • clk_get:获取时钟

  • clk_put:释放时钟

  • devm_clk_get:设备托管的获取时钟

  • devm_clk_put:设备托管的释放时钟

  • devm_clk_get_prepared:获取时钟并 prepare

  • devm_clk_get_enabled:获取时钟并 prepare + enable

  • devm_clk_get_optional:获取可选时钟,不存在返回 NULL

  • devm_clk_get_optional_prepared:获取可选时钟并 prepare

  • devm_clk_get_optional_enabled:获取可选时钟并 prepare + enable

  • devm_clk_get_optional_enabled_with_rate:获取可选时钟,设置频率并 enable

  • clk_get_sys:按设备名获取时钟

  • clk_get_optional:获取可选时钟,不存在返回 NULL

  • devm_get_clk_from_child:从子设备树节点获取托管时钟

批量操作

  • clk_bulk_get:批量获取时钟

  • clk_bulk_get_optional:批量获取可选时钟

  • clk_bulk_get_all:获取所有时钟

  • clk_bulk_put:批量释放时钟

  • clk_bulk_put_all:释放所有时钟

  • devm_clk_bulk_get:设备托管批量获取

  • devm_clk_bulk_get_optional:设备托管批量获取可选时钟

  • devm_clk_bulk_get_optional_enable:设备托管批量获取可选时钟并 enable

  • devm_clk_bulk_get_all:设备托管获取所有时钟

  • devm_clk_bulk_get_all_enabled:设备托管获取所有时钟并 enable

使能控制

  • clk_prepare:准备时钟(可睡眠)

  • clk_unprepare:取消准备时钟

  • clk_enable:使能时钟(原子上下文可用)

  • clk_disable:关闭时钟

  • clk_prepare_enable:prepare + enable

  • clk_disable_unprepare:disable + unprepare

  • clk_bulk_prepare:批量准备时钟

  • clk_bulk_unprepare:批量取消准备

  • clk_bulk_enable:批量使能

  • clk_bulk_disable:批量关闭

  • clk_bulk_prepare_enable:批量 prepare + enable

  • clk_bulk_disable_unprepare:批量 disable + unprepare

  • clk_is_enabled_when_prepared:检查 prepare 时是否自动 enable

频率操作

  • clk_get_rate:获取当前频率

  • clk_set_rate:设置频率

  • clk_round_rate:查询可设置的最接近频率

  • clk_set_rate_range:设置频率范围

  • clk_set_min_rate:设置最小频率

  • clk_set_max_rate:设置最大频率

  • clk_drop_range:清除频率范围限制

  • clk_set_rate_exclusive:设置频率并独占

父子关系

  • clk_get_parent:获取父时钟

  • clk_set_parent:设置父时钟

  • clk_has_parent:检查是否为可能的父时钟

  • clk_is_match:比较两个 clk 是否指向同一硬件时钟

高级功能

  • clk_get_accuracy:获取精度(ppb)

  • clk_set_phase:设置相位

  • clk_get_phase:获取相位

  • clk_set_duty_cycle:设置占空比

  • clk_get_scaled_duty_cycle:获取缩放后的占空比

  • clk_rate_exclusive_get:获取频率独占控制权

  • clk_rate_exclusive_put:释放频率独占控制权

  • devm_clk_rate_exclusive_get:设备托管获取频率独占控制权

  • clk_save_context:保存时钟上下文(电源管理)

  • clk_restore_context:恢复时钟上下文(电源管理)

通知机制

  • clk_notifier_register:注册频率变化通知

  • clk_notifier_unregister:注销频率变化通知

  • devm_clk_notifier_register:设备托管注册通知

OF(设备树)

  • of_clk_get:从设备树节点获取时钟

  • of_clk_get_by_name:按名称从设备树获取时钟

  • of_clk_get_from_provider:从 phandle 获取时钟