赞
踩
欢迎扫码关注本人微信公众号:公众号上分享更多嵌入式知识和资料,分享个人学习嵌入式的心得体会。欢迎大家一起来玩呀。
在linux的clk的设备模型中,clk分为生产者和消费者,生产者是soc的厂商编写的clk驱动,注册到clk管理框架中。消费者就是具体的设备驱动,设备驱动根据标准的函数获取到clk的句柄,然后设置和配置产生clk。为何这么设计?其实也很简单,芯片产商最清楚clk的锁相环怎么设置,所以这部分驱动由芯片产商去编写,我们设备驱动只要使用标准的api就可以使用时钟了,所以这个框架将很底层的芯片clk的管理抽象出来做了一套通用的架构,好处就是将耦合性降到最低比如芯片厂商有MTK,ROCKCHIP,我们的设备驱动调用统一的API就可以跑在MTK,ROCKCHIP各个芯片上,所以这么做写出的设备驱动的代码通用性就更强了。
设备驱动作为消费者,调用标准的API对clk进行配置。
es7243->mclk = devm_clk_get(codec->dev, "mclk"); //获取clk资源
ret = clk_prepare_enable(es7243->mclk); //使能输出clk
//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>; };
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。