Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2675714
  • 博文数量: 877
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 5921
  • 用 户 组: 普通用户
  • 注册时间: 2013-12-05 12:25
个人简介

技术的乐趣在于分享,欢迎多多交流,多多沟通。

文章分类

全部博文(877)

文章存档

2021年(2)

2016年(20)

2015年(471)

2014年(358)

2013年(26)

分类: LINUX

2014-08-15 15:45:17

如果你需要使用spi驱动的接口,不是去修改驱动的实现代码,因为它只负责完成spi的硬件交互功能。
你使用spi功能的代码只需要用到spi.h中定义的方法就可以了,这就是linux driver layers framework的可人之处。
我们通过一个简单的例子来实际理解一下:

#include
#include
#include

#define TEST_REG 0x02

static int test_read_reg ( struct spi_device *spi, int reg )
{
    char buf[2];
    buf[0] = reg << 2;
    buf[1] = 0;
    spi_write_then_read ( spi, buf, 2, buf, 2 );
    return buf[1] << 8 | buf[0];
}

static int spi_test_probe ( struct spi_device *spi )
{
    printk ( "TEST_REG: 0x%02x\n", test_read_reg ( spi, TEST_REG ) );
    return 0;
}

static int spi_test_remove ( struct spi_device *spi )
{
    return 0;
}

static struct spi_driver spi_test_driver =
{
    .probe = spi_test_probe,
    .remove = spi_test_remove,
    .driver = {
        .name = "testHW",
    },
};

static int __init spi_test_init ( void )
{
    return spi_register_driver ( &spi_test_driver );
}

static void __exit spi_test_exit ( void )
{
    spi_unregister_driver ( &spi_test_driver );
}

module_init ( spi_test_init );
module_exit ( spi_test_exit );

MODULE_DESCRIPTION ( "spi device test" );
MODULE_LICENSE ( "GPL" );

在这个驱动中,你只需要用spi_register_driver向系统进行注册,就可以让系统用你指定的与 .name 相匹配的硬件交互代码去执行你的读写请求。

几乎在所有与spi相关的函数中都会用到struct spi_device *spi这个指针,probe函数正好把这个指针传给你,保存好这个指针,你就可以在驱动的任何地方通过他去处理与spi设备相关的操作。

阅读(362) | 评论(0) | 转发(0) |
0

上一篇:SPI设备的驱动

下一篇:linux spi驱动分析

给主人留下些什么吧!~~