数据结构设计
25 Nov 2024
Read time: 2 minute(s)
CMU 模块关键结构体定义如下:
- fixed_parent_clk_cfg
struct fixed_parent_clk_cfg { //fixed parent clock 的配置结构体 u32 id; //fixed parent clock 的索引值,参考 3.2 节 CLK_xxx u16 type; u8 fact_mult; u8 fact_div; const char *name; //fixed parent clock 的名字 const char * const *parent_names; //父时钟的名字 int num_parents; //父时钟个数 u32 offset_reg; //时钟在 CMU 中的偏移地址 s8 bus_gate_bit; //总线使能位偏移 s8 mod_gate_bit; //模块使能位偏移 u8 div_bit; //分频系数偏移 u8 div_width; //分频系数所占位宽 struct clk_hw *(*func)(void __iomem *base, const struct fixed_parent_clk_cfg *cfg); //指向初始化和注册 parent 时钟的函数指针
- multi_parent_clk_cfg
struct multi_parent_clk_cfg { //multi parent clock 的配置结构体 u32 id; //multi parent clock 的索引值,参考 3.3 节 CLK_xxx const char *name; const char * const *parent_names; int num_parents; u32 offset_reg; s32 gate_bit; u8 mux_bit; //父时钟源选择位的 bit 偏移 u8 mux_width; //父时钟源选择位所占位宽 u8 div0_bit; //分频系数偏移 u8 div0_width; //分频系数所占位宽 struct clk_hw *(*func)(void __iomem *base, const struct multi_parent_clk_cfg *cfg); //指向初始化和注册 parent 时钟的函数指针 };
- pll_clk_cfg
struct pll_clk_cfg { //pll 时钟的配置结构体 u32 id; //pll 时钟的索引值,参考 3.4 节 CLK_xxx enum aic_pll_type type; //pll 时钟的类型,是整数分频还是小数分频 const char *name; const char * const *parent_names; int num_parents; u32 offset_int; //整数分频寄存器的偏移 u32 offset_fra; //小数分频寄存器的偏移 u32 offset_sdm; //展频寄存器的偏移 struct clk_hw *(*func)(void __iomem *base, const struct pll_clk_cfg *cfg); //指向初始化和注册 pll 时钟的函数指针 };
- disp_clk_cfg
struct disp_clk_cfg { //显示模块时钟配置的结构体 u32 id; //显示模块时钟的索引值,参考 3.5 节 CLK_xxx const char *name; const char * const *parent_names; int num_parents; u32 offset_reg; //显示模块时钟使能寄存器 s8 bus_gate_bit; //显示模块总线使能位偏移 s8 mod_gate_bit; //显示模块模块使能位偏移 u32 offset_div_reg; //显示模块分频寄存器偏移 u8 divn_bit; //分频系数 N 偏移 u8 divn_width; //分频系数 N 所占位宽 u8 divm_bit; //分频系数 M 偏移 u8 divm_width; //分频系数 M 所占位宽 u8 flag_bit; //分频系数 M 标志位 struct clk_hw *(*func)(void __iomem *base, const struct disp_clk_cfg *cfg); //指向初始化和注册显示模块时钟的函数指针 };