完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
linux clk使用
在linux的clk的设备模型中,clk分为生产者和消费者,生产者是soc的厂商编写的clk驱动,注册到clk管理框架中。消费者就是具体的设备驱动,设备驱动根据标准的函数获取到clk的句柄,然后设置和配置产生clk。为何这么设计?其实也很简单,芯片产商最清楚clk的锁相环怎么设置,所以这部分驱动由芯片产商去编写,我们设备驱动只要使用标准的api就可以使用时钟了,所以这个框架将很底层的芯片clk的管理抽象出来做了一套通用的架构,好处就是将耦合性降到最低比如芯片厂商有MTK,ROCKCHIP,我们的设备驱动调用统一的API就可以跑在MTK,ROCKCHIP各个芯片上,所以这么做写出的设备驱动的代码通用性就更强了。 驱动中使用clk函数 设备驱动作为消费者,调用标准的API对clk进行配置。 es7243->mclk = devm_clk_get(codec->dev, "mclk"); //获取clk资源 ret = clk_prepare_enable(es7243->mclk); //使能输出clk 驱动中使用clk dts配置 //clock的使用者es7243_10,即设备驱动,在我们这里是一个ADC芯片,需要SOC输出MCLK。 es7243_10: es7243@10 { status = "okay"; compatible = "everest,es7243"; reg = <0x10>; #sound-dai-cells = <0>; clocks = <&cru SCLK_I2S_8CH_OUT>; //调用clock的生产者cru,传入参数SCLK_I2S_8CH_OUT,表示你要使用SCLK_I2S_8CH_OUT这个clk /*clock-names = "mclk"; 用于设置别名方便用于统一使用,例如es7243->mclk = devm_clk_get(codec->dev, "mclk"); 获取mclk进行使用。如果设备节点没有 clocks = <&cru SCLK_I2S_8CH_OUT>;和clock-names = "mclk"; 驱动中获取devm_clk_get(codec->dev, "mclk"); 将会失败*/ clock-names = "mclk"; pinctrl-names = "default"; pinctrl-0 = <&i2s_8ch_mclk>; }; //clock的生产者 cru cru: clock-controller@ff760000 { compatible = "rockchip,rk3399-cru"; //搜索这个可以找到clk生产者的驱动 reg = <0x0 0xff760000 0x0 0x1000>; #clock-cells = <1>; #reset-cells = <1>; assigned-clocks = <&cru ACLK_VOP0>, <&cru HCLK_VOP0>, <&cru ACLK_VOP1>, <&cru HCLK_VOP1>, <&cru ARMCLKL>, <&cru ARMCLKB>, <&cru PLL_GPLL>, <&cru PLL_CPLL>, <&cru ACLK_GPU>, <&cru PLL_NPLL>, <&cru ACLK_PERIHP>, <&cru HCLK_PERIHP>, <&cru PCLK_PERIHP>, <&cru ACLK_PERILP0>, <&cru HCLK_PERILP0>, <&cru PCLK_PERILP0>, <&cru ACLK_CCI>, <&cru HCLK_PERILP1>, <&cru PCLK_PERILP1>, <&cru ACLK_VIO>, <&cru ACLK_HDCP>, <&cru ACLK_GIC_PRE>, <&cru PCLK_DDR>; assigned-clock-rates = <400000000>, <200000000>, <400000000>, <200000000>, <816000000>, <816000000>, <594000000>, <800000000>, <200000000>, <1000000000>, <150000000>, <75000000>, <37500000>, <100000000>, <100000000>, <50000000>, <600000000>, <100000000>, <50000000>, <400000000>, <400000000>, <200000000>, <200000000>; }; |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
基于米尔瑞芯微RK3576核心板/开发板的人脸疲劳检测应用方案
569 浏览 0 评论
839 浏览 1 评论
737 浏览 1 评论
1957 浏览 1 评论
3204 浏览 1 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-23 03:10 , Processed in 1.009853 second(s), Total 71, Slave 55 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号