当前位置:  技术问答>linux和unix

clk_get(NULL,"spi") 失败

    来源: 互联网  发布时间:2017-01-02

    本文导语:  在spi驱动中调用clk_get(NULL,"spi")失败 return -2,用示波器查看有时钟信号波形, 有什么方法可以解决此问题?内核中那个文件说明spi时钟是否使能?或者spi时钟存在哪个文件内? 请指教,谢谢! | 你的cpu...

在spi驱动中调用clk_get(NULL,"spi")失败 return -2,用示波器查看有时钟信号波形,
有什么方法可以解决此问题?内核中那个文件说明spi时钟是否使能?或者spi时钟存在哪个文件内?
请指教,谢谢!

|
你的cpu类型?

这种是Soc管理时钟的方式,
注册的地方各不要相同
例如s3c24xx_register_clock

-2 说明没有用平台专用注册api注册该时钟
用示波器查看有时钟信号波形,可能是有不守规矩的驱动没有使用这套api,自己操作了时钟

|
看看smdk6410文件夹下面的clock.c ,里面应该定义了所有模块的clk变量。如果没有,get_clk必然失败。

|
那个cpu没用过

不过既然有的时钟可用,那就可以搜到它们的注册的地方
用source insight,搜
clk_get(NULL,"i2c")
name    = "i2c",
static struct clk

这些,总能找到的,然后把你的时钟一起也注册进去

|
根据源码来说,对于SPI时钟,第一个参数必须不能为NULL。
plat-s3c里面的clcok.c :
struct clk *clk_get(struct device *dev, const char *id)
{
struct clk *p;
struct clk *clk = ERR_PTR(-ENOENT);
int idno;

if (dev == NULL || dev->bus != &platform_bus_type)
idno = -1;
else
idno = to_platform_device(dev)->id;

mutex_lock(&clocks_mutex);

list_for_each_entry(p, &clocks, list) {
if (p->id == idno &&
    strcmp(id, p->name) == 0 &&
    try_module_get(p->owner)) {
clk = p;
break;
}
}

/* check for the case where a device was supplied, but the
 * clock that was being searched for is not device specific */

if (IS_ERR(clk)) {
list_for_each_entry(p, &clocks, list) {
if (p->id == -1 && strcmp(id, p->name) == 0 &&
    try_module_get(p->owner)) {
clk = p;
break;
}
}
}

mutex_unlock(&clocks_mutex);
return clk;
}


而在mach-s3c6410 下的clock.c 定义:
{
.name = "spi",
.id = 0,
.parent = &clk_p,
.enable = s3c_clkcon_enable,
.ctrlbit = S3C_CLKCON_PCLK_SPI0,
}, {
.name = "spi",
.id = 1,
.parent = &clk_p,
.enable = s3c_clkcon_enable,
.ctrlbit = S3C_CLKCON_PCLK_SPI1,
}

对比一下,如果clk_get()第一个参数为NULL的话,其idno=-1,而两个spi时钟clk初始化时id分别为0和1. 因此,这里调用参数必须不能为NULL.

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3