時鐘API的使用
對于一般的驅動開發(非clock驅動),我們只需要在dts中配置時鐘,然后在驅動調用通用的時鐘API接口即可。
1、設備樹中配置時鐘
mmc0:mmc0@0x12345678{
compatible = "xx,xx-mmc0";
......
clocks = < &peri PERI_MCI0 >;//指定mmc0的時鐘來自PERI_MCI0,PERI_MCI0的父時鐘是peri
clocks-names = "mmc0"; //時鐘名,調用devm_clk_get獲取時鐘時,可以傳入該名字
......
};
以mmc的設備節點為例,上述mmc0指定了時鐘來自PERI_MCI0,PERI_MCI0的父時鐘是peri,并將所指定的時鐘給它命名為"mmc0"。
2、驅動中使用API接口
簡單的使用:
/* 1、獲取時鐘 */
host- >clk = devm_clk_get(&pdev- >dev, NULL); //或者devm_clk_get(&pdev- >dev, "mmc0")
if (IS_ERR(host- >clk)) {
dev_err(dev, "failed to find clock sourcen");
ret = PTR_ERR(host- >clk);
goto probe_out_free_dev;
}
/* 2、使能時鐘 */
ret = clk_prepare_enable(host- >clk);
if (ret) {
dev_err(dev, "failed to enable clock source.n");
goto probe_out_free_dev;
}
probe_out_free_dev:
kfree(host);
在驅動中操作時鐘,第一步需要獲取struct clk
指針句柄,后續都通過該指針進行操作,例如:設置頻率:
ret = clk_set_rate(host- >clk, 300000);
獲得頻率:
ret = clk_get_rate(host- >clk);
注意:devm_clk_get()的兩個參數是二選一,可以都傳入,也可以只傳入一個參數。
像i2c、mmc等這些外設驅動,通常只需要使能門控即可,因為這些外設并不是時鐘源,它們只有開關。如果直接調用clk_ser_rate
函數設置頻率,clk_set_rate
會向上傳遞,即設置它的父時鐘頻率。例如在該例子中直接調用clk_set_rate
函數,最終設置的是時鐘源peri
的頻率。
-
Linux
+關注
關注
87文章
11508瀏覽量
213526 -
API
+關注
關注
2文章
1586瀏覽量
63896 -
開發
+關注
關注
0文章
373瀏覽量
41487 -
時鐘
+關注
關注
11文章
1894瀏覽量
133117
發布評論請先 登錄
OpenHarmony 應用開發SDK、API 與基礎工具
分析API都有哪些特點
API+DevOps:華為云API Arts一體化平臺,端到端呵護您的API
基于Java的接口快速開發框架——magic-api

華納云:使用 WireMock 在開發和測試中模擬 API 服務
設計優先方法論實踐:SmartBear API Hub +ReadyAPI組合使用,構建高效的API開發流

評論