linux设备驱动程序之时钟管理(3)----我的那块儿蛋糕
特 别 声 明 本系列文章bingqingsuimeng著作权所有,转载请注明出处 http://blog.csdn.net/bingqingsuimeng/ 21世纪不缺什么了?不缺程序员了,不缺屌丝程序员了,满山遍野的程序员,各种培训机构,每个月都有n多个程序员横空出世,他们一代代的替换着那些远离这个行业的人。话说程序员有很多境界,比如像我这种,就属于比较浮躁的程序员,以
特 别 声 明 本系列文章bingqingsuimeng著作权所有,转载请注明出处 http://blog.csdn.net/bingqingsuimeng/
21世纪不缺什么了?不缺程序员了,不缺屌丝程序员了,满山遍野的程序员,各种培训机构,每个月都有n多个程序员横空出世,他们一代代的替换着那些远离这个行业的人。话说程序员有很多境界,比如像我这种,就属于比较浮躁的程序员,以为自己会的东西不少,其实什么都不会。
时间长了,发现自己真的什么也没有,哎,难到真的什么也没有嘛?不是,至少屌丝程序员好有一个梦,每天可能还能吃上一块儿蛋糕。
最近祖国三大军区都有演戏,什么远程弹道导弹,巨浪,东风全上了,俨然要有跟小日本火拼的姿态,趁着还是和平的时候,多吃两块蛋糕吧,不知道明天还有没有机会吃到。
那时钟管理这边,怎么去拿到那个蛋糕着?
80行 你看见了,那个dev_id其实就是所属设备的name啦
81行 又套一层,哎,短小又精悍的函数啊。不废话,进入。。
68行 锁住互斥锁,这个互斥锁是全局的,给你好看:
69行根据 那个两个id调用clk_find函数查找我们需要的clk,没什么可说的,直接进入
40行 一个for循环,在clocks这个全局的链表里遍历,所有的锁都链接在上面呢
42-46行,如果dev_id匹配,那么match+=2
47-50行,如果con_id匹配,那么match+=1
如果mach大于零,说明之后有一个匹配上了,如果match=3,两个条件都匹配,这是最完美的情况了,如果不是,那么继续循环吧。
我们从注释上可以看出,匹配的优先程度是:dev+con > dev only > con only
好的,返回到clk_get_sys函数
第70-71 如果没有找到cl设置为NULL
72行 释放锁
73行 返回要找的clk
这个过程也很简单,没有想象的那么复杂。
呵呵。。时钟时获取到了,有没有兴趣看一下他们的使能,禁止,设置频率的那几个函数?其实也非常简单,他们都是平台相关的,还是以三星的s3c2410为例子看一个函数吧,其它的函数都跟它类似,不用多讲了就,咱们看一个常用的,上代码:
这是一个三星平台的通用函数,其它的,诸如2410,6410等等吧,都是可以用的,因为它与具体的板级脱离开 ,都是用一个函数指针实现的具体操作。
90-90行 判断一个clk的有效性,体现出了健壮性函数的一个很好的例子
92行,你看到了又调用了它本身,分明他妈的是个嵌套嘛,不过你看一个参数,呵呵。。明白了吧,使能一个设备的clock,一定要保定它父设备的clock是使能的啊。
94-99行 你看到了啊。。使能的时候是要禁止中断的哦,亲。
97行,直接调用了clk结构中的enable函数,这个是在具体的板级文件中实现的 ,对于咱们这儿就是s3c2410-clock.c,好的,进去看看喽,亲。
你看到了哦,亲,他们的enable函数都指向了同一个函数s3c2410_clkcon_enable,你没有个疑问吗?这个函数好强大哦,什么样的使能它都能处理?进去看看不就知道啦。走你:
呵呵。。有木有恍然大悟?呵呵。。好吧,你成才了。。呵呵。。看到了,就是靠这个控制标志clk->ctrlbit,在写控制器中时钟控制器的相应位来实现的,亲,记得给好评哦,讲的我都累了。
我歇会儿啊,听听歌。。你可以继续学习了。我得休息下了,睡会儿。哭泣,美女走了!
更多推荐
所有评论(0)