Linux 内核clk 添加clk provider
来源:互联网 发布:邓云天觉知视频 编辑:程序博客网 时间:2024/05/20 12:47
内核把所有的clk provider管理维护起来,这些存放在of_clk_providers链表当中,
这个provider定义如下:
struct of_clk_provider { struct list_head link;
struct device_node *node; struct clk *(*get)(struct of_phandle_args *clkspec, void *data); struct clk_hw *(*get_hw)(struct of_phandle_args *clkspec, void *data); void *data;};
static LIST_HEAD(of_clk_providers);static DEFINE_MUTEX(of_clk_lock);
添加函数:
/** * of_clk_add_provider() - Register a clock provider for a node * @np: Device node pointer associated with clock provider * @clk_src_get: callback for decoding clock * @data: context pointer for @clk_src_get callback. */int of_clk_add_provider(struct device_node *np, struct clk *(*clk_src_get)(struct of_phandle_args *clkspec, void *data), void *data){ struct of_clk_provider *cp;
cp = kzalloc(sizeof(struct of_clk_provider), GFP_KERNEL); if (!cp) return -ENOMEM;
cp->node = of_node_get(np); cp->data = data; cp->get = clk_src_get;
mutex_lock(&of_clk_lock); list_add(&cp->link, &of_clk_providers); mutex_unlock(&of_clk_lock); pr_debug("Added clock from %s\n", np->full_name);
return 0;}
删除操作/** * of_clk_del_provider() - Remove a previously registered clock provider * @np: Device node pointer associated with clock provider */void of_clk_del_provider(struct device_node *np){ struct of_clk_provider *cp;
mutex_lock(&of_clk_lock); list_for_each_entry(cp, &of_clk_providers, link) { if (cp->node == np) { list_del(&cp->link); of_node_put(cp->node); kfree(cp); break; } } mutex_unlock(&of_clk_lock);}
获取clk:
struct clk *of_clk_get_from_provider(struct of_phandle_args *clkspec){ struct of_clk_provider *provider; struct clk *clk = ERR_PTR(-ENOENT);
/* Check if we have such a provider in our array */ mutex_lock(&of_clk_lock); list_for_each_entry(provider, &of_clk_providers, link) { if (provider->node == clkspec->np) clk = provider->get(clkspec, provider->data); if (!IS_ERR(clk)) break; } mutex_unlock(&of_clk_lock);
return clk;}
- Linux 内核clk 添加clk provider
- Linux 内核clk ops
- Linux 内核clk框架描述
- linux clk
- linux clk
- Linux 内核clk相关数据结构描述
- Linux 内核clk 硬件相关层
- Linux clk 模型
- Linux clk 模型
- linux clk的使用
- linux clk模型
- linux clk模型
- linux clk驱动框架
- Linux clk 模型
- linux CLK时钟驱动
- Linux时钟管理clk
- linux clk驱动框架
- Linux clk 模型
- exists与in的区别以及exists在oracle与mysql中的语句写法
- Windows 2008R2 IIS7.5 下访问ASP网页报错的解决办法
- hdu 1530 Maximum Clique——最大团
- FJ的字符串
- angular中的$http服务及promiseA+规范总结
- Linux 内核clk 添加clk provider
- AS混淆打包和多渠道打包总结
- java中的消息转换器--HttpMessageConverter 分类:学习日记
- 利用navicat创建存储过程、触发器和使用游标的简单实例
- 浅谈原生JS和jQuery操作DOM
- 实现下拉框和搜索框一体功能
- caffe 01 win10 运行环境配置(不需要开发环境)
- 【Mysql】Mysql 各个版本区别
- 深入研究Servlet线程安全性问题