当前位置: 技术问答>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时钟存在哪个文件内?
请指教,谢谢!
有什么方法可以解决此问题?内核中那个文件说明spi时钟是否使能?或者spi时钟存在哪个文件内?
请指教,谢谢!
|
你的cpu类型?
这种是Soc管理时钟的方式,
注册的地方各不要相同
例如s3c24xx_register_clock
-2 说明没有用平台专用注册api注册该时钟
用示波器查看有时钟信号波形,可能是有不守规矩的驱动没有使用这套api,自己操作了时钟
这种是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
这些,总能找到的,然后把你的时钟一起也注册进去
不过既然有的时钟可用,那就可以搜到它们的注册的地方
用source insight,搜
clk_get(NULL,"i2c")
name = "i2c",
static struct clk
这些,总能找到的,然后把你的时钟一起也注册进去
|
根据源码来说,对于SPI时钟,第一个参数必须不能为NULL。
plat-s3c里面的clcok.c :
而在mach-s3c6410 下的clock.c 定义:
对比一下,如果clk_get()第一个参数为NULL的话,其idno=-1,而两个spi时钟clk初始化时id分别为0和1. 因此,这里调用参数必须不能为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.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。