Edit online

数据结构设计

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); //指向初始化和注册显示模块时钟的函数指针
    };