linux clk子系统
时间: 2023-11-03 13:02:33 浏览: 95
Linux clk子系统是一个用于提供通用时钟功能的子系统。它通过提供通用的时钟API接口,屏蔽了底层硬件差异,使得使用者可以方便地操作时钟。clk子系统的核心是以struct clk_core结构体表示的,每个注册设备都对应一个struct clk_core。
具体来说,clk子系统提供了一些常用的操作函数,例如clk_get用于获取时钟,clk_enable用于使能时钟,clk_disable用于禁止时钟等。另外,clk子系统还提供了一些其他功能的函数,如获取时钟频率的函数clk_get_rate,设置时钟频率的函数clk_set_rate,设置时钟父源的函数clk_set_parent等。
在使用clk子系统时,首先需要获取时钟,可以使用clk_get函数或devm_clk_get函数来获取时钟对象。然后可以通过相应的操作函数对时钟进行操作,如使能时钟、设置时钟频率等。使用完时钟后,需要使用clk_put函数进行释放。
使用示例:
1. 获取时钟:
struct clk *clk = devm_clk_get(&pdev->dev, NULL);
2. 使能时钟:
int ret = clk_prepare_enable(clk);
需要注意的是,有些操作函数可能会导致系统进入睡眠状态,如clk_prepare_enable函数,而有些操作函数则不会,如clk_enable函数。
相关问题
CCM_DI0_EXT_CLK
根据提供的引用内容,CCM_DI0_EXT_CLK是指在源码中的clk-imx6q.c文件中,通过设置LDB_DI0_SEL的parent为PLL2_PFD0_352M来配置的一个时钟信号。在该文件中的init_ldb_clks函数中,通过对寄存器CCM_CS2CDR的操作,将LDB_DI0_SEL的值设置为PLL2_PFD0_352M的值。而在设备树文件中的dts中,通过设置fsl,ldb-di0-parent为IMX6QDL_CLK_PLL2_PFD0_352M来指定CCM_DI0_EXT_CLK的parent。在arch/arm/mach-imx/clk-gate2.c文件中,定义了一系列与时钟门控相关的函数,其中包括clk_gate2_enable、clk_gate2_disable、clk_gate2_do_shared_clks等函数,这些函数用于控制时钟的使能和禁用。在clk_gate2_do_hardware函数中,通过对寄存器CCM_CCGR_FULL_ENABLE的操作,实现对时钟的使能和禁用。\[1\]\[2\]\[3\]
#### 引用[.reference_title]
- *1* *2* [IMX6DL Lvds pixelclock 深入详解](https://blog.csdn.net/changqing1990/article/details/79354334)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item]
- *3* [Linux clock子系统【3】-i2c控制器打开时钟的流程分析(devm_clk_get)(consumer侧)](https://blog.csdn.net/m0_46535940/article/details/126328569)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down28v1,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
阅读全文