spi驱动中的这两函数实现的是什么功能?
int spi_add_adapter(struct spi_adapter *adap)
{
printk("SPI: adding adapter %s\n", adap->name);
INIT_LIST_HEAD(&adap->clients);
down(&adapter_lock);//什么意思
init_MUTEX(&adap->lock);
list_add(&adap->adapters, &adapter_list);
up(&adapter_lock);//什么意思
return 0;
static struct spi_adapter *__spi_get_adapter(const char *name)
{
struct list_head *l;
list_for_each(l, &adapter_list) {
struct spi_adapter *adap = list_entry(l, struct spi_adapter, adapters);
if (strcmp(adap->name, name) == 0)
return adap;
} //这函数什么功能?
return NULL;
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
本人理解up().down()分别是解锁和上锁··
第2个函数是从spi_adapter结构的list链表中通过adap->name, name获取adapter结构。
请教是否正确呢··
truct spi_adapter *spi_get_adapter(const char *name)
{
struct spi_adapter *adap = NULL;
int try;
for (try = 0; try < 2; try ++) {
down(&adapter_lock);
adap = __spi_get_adapter(name);
if (adap && !try_inc_mod_count(adap->owner))
adap = NULL;
up(&adapter_lock);
if (adap)
break;
if (try == 0)
request_module(n ame);
}
return adap;
}
这个函数有谁知道你干嘛用的吗?麻烦知道的回复下啊···
up() 和down()分别是信号量的PV操作,即增加信号量计数和减少信号量计数。
看看ldd3就知道了