当前位置:   article > 正文

RK3399教程:linux clk使用_linux配置mclk输出

linux配置mclk输出

公众号

欢迎扫码关注本人微信公众号:公众号上分享更多嵌入式知识和资料,分享个人学习嵌入式的心得体会。欢迎大家一起来玩呀。
在这里插入图片描述

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
  • 1
  • 2

驱动中使用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>;
	};

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/309273
推荐阅读
相关标签
  

闽ICP备14008679号