build_embed_linux_system

系统时钟管理子系统

struct sh_clk_ops {
#ifdef CONFIG_SH_CLK_CPG_LEGACY
    void (*init)(struct clk *clk);                          // 初始化时钟
#endif
    int (*enable)(struct clk *clk);                         // 使能时钟
    void (*disable)(struct clk *clk);                       // 禁用时钟
    unsigned long (*recalc)(struct clk *clk);               // 重新计算时钟频率
    int (*set_rate)(struct clk *clk, unsigned long rate);   // 设置时钟频率
    int (*set_parent)(struct clk *clk, struct clk *parent); // 设置时钟的父时钟
    long (*round_rate)(struct clk *clk, unsigned long rate);// 四舍五入时钟频率
};

struct clk_mapping {
    phys_addr_t         phys;       // 时钟寄存器的物理地址
    void __iomem        *base;      // 时钟寄存器的虚拟地址
    unsigned long       len;        // 时钟寄存器的长度
    struct kref         ref;        // 时钟映射的引用计数
};

struct clk {
    struct list_head    node;           // 用于将时钟源链接到全局时钟列表的链表节点
    struct clk          *parent;        // 指向父时钟源的指针
    struct clk          **parent_table; // 指向父时钟源表的指针,用于选择父时钟源
    unsigned short      parent_num;     // 父时钟源表中的时钟源数量
    unsigned char       src_shift;      // 配置寄存器中源时钟字段的偏移量
    unsigned char       src_width;      // 配置寄存器中源时钟字段的宽度
    struct sh_clk_ops   *ops;           // 指向时钟操作函数表的指针

    struct list_head    children;       // 用于链接子时钟源的链表头
    struct list_head    sibling;        // 用于链接兄弟时钟源的链表节点

    int                 usecount;       // 时钟源的使用计数

    unsigned long       rate;           // 时钟源的当前频率
    unsigned long       flags;          // 时钟源的标志位

    void __iomem        *enable_reg;    // 时钟使能寄存器的地址
    void __iomem        *status_reg;    // 时钟状态寄存器的地址
    unsigned int        enable_bit;     // 时钟使能位的偏移量
    void __iomem        *mapped_reg;    // 映射寄存器的地址

    unsigned int        div_mask;       // 时钟分频掩码
    unsigned long       arch_flags;     // 架构相关的标志位
    void                *priv;          // 私有数据指针
    struct clk_mapping  *mapping;       // 时钟映射结构体指针
    struct cpufreq_frequency_table *freq_table;    // 时钟频率表指针
    unsigned int        nr_freqs;       // 时钟频率表中的频率数量
};

next_chapter

返回目录

直接开始下一节说明: 音频输出和采样模块