Linux内核4.14版本——ccf时钟子系统(7)——如何编写一个clock驱动

目录

1. clock provider dts配置

1.1 CLK_OF_DECLARE

1.2 驱动编写流程

1.2.1 实现struct clk_ops相关成员函数

1.2.2 定义分配 struct clk_onecell_data 结构体,初始化相关数据

1.2.3 定义分配 struct clk_init_data 结构体,初始化相关数据

1.2.4 调用 clk_register 将时钟注册进框架

1.2.5 调用 clk_register_clkdev 注册时钟设备

1.2.6 调用 of_clk_add_provider,将 clk provider 存放到 of_clk_provider 链表中管理

1.2.7 调用 CLK_OF_DECLARE 声明驱动

2. clock consumer

3. 时钟系统总结


1. clock provider dts配置

       在设备数中,需要首先定义clock provider的特性节点,以 rk3399 为例,下面的 cru(clock reset unit) 的配置如下:

cru: clock-controller@ff760000 {
	compatible = "rockchip,rk3399-cru";
	reg = <0x0 0xff760000 0x0 0x1000>;
	rockchip,grf = <&grf>;
	#clock-cells = <1>;
	#reset-cells = <1>;
	assigned-clocks =
		<&cru PLL_GPLL>, <&cru PLL_CPLL>,
		<&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>;
	assigned-clock-rates =
		 <594000000>,  <800000000>,
		<1000000000>,
		 <150000000>,   <75000000>,
		  <37500000>,
		 <100000000>,  <100000000>,
		  <50000000>, <600000000>,
		 <100000000>,   <50000000>;
};

不同属性的的含义如下:

属性 含义
compatible 驱动的匹配名称,内核通过字段匹配到不同的初始化函数
clock-output-names 输出时钟的名字,当consumer 使用此时钟时,使用该属性的值
clock-frequency 输出时钟的频率
clock-cells 输出的时钟的路数,当#clock-cells为0时,代表仅输出1路时钟,若大于等于1,则代表输出多路时钟,Clock consumers通过编号索引使用。
assigned-clocks 表示该设备需要使用时钟信号,这个属性的值是一个整数数组,每一个元素对应一个时钟信号
assigned-clock-rates 和 assigned-clocks 成对使用,表述输入时钟的频率

       在 Linux 内核代码中,还需要声明相匹配的时钟驱动,这样在初始化阶段,内核就可以自动匹配 dts 中的 compatible 字段,向系统注册时钟设备。
       CLK_OF_DECLARE 宏用于声明与设备树(DeviceTree)绑定的时钟控制器驱动

1.1 CLK_OF_DECLARE

       CLK_OF_DECLARE 宏的定义如下:

#define CLK_OF_DECLARE(name, compat, fn) \
        OF_DECLARE_1(clk_of_match, name, compat, fn)

//name:时钟提供者的名称,通常是一个结构体的实例。
//c
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值