1.定义board设备
1: struct spi_board_info { 2: /* the device name and module name are coupled, like platform_bus; 3: * "modalias" is normally the driver name. 4: * 5: * platform_data goes to spi_device.dev.platform_data, 6: * controller_data goes to spi_device.controller_data, 7: * irq is copied too 8: */ 9: char modalias[SPI_NAME_SIZE]; 10: const void *platform_data; 11: void *controller_data; 12: int irq; 13:   14: /* slower signaling on noisy or low voltage boards */ 15: u32 max_speed_hz; 16:   17:   18: /* bus_num is board specific and matches the bus_num of some 19: * spi_master that will probably be registered later. 20: * 21: * chip_select reflects how this chip is wired to that master; 22: * it's less than num_chipselect. 23: */ 24: u16 bus_num; 25: u16 chip_select; 26:   27: /* mode becomes spi_device.mode, and is essential for chips 28: * where the default of SPI_CS_HIGH = 0 is wrong. 29: */ 30: u8 mode; 31:   32: /* ... may need additional spi_device chip config data here. 33: * avoid stuff protocol drivers can set; but include stuff 34: * needed to behave without being bound to a driver: 35: * - quirks like clock rate mattering when not selected 36: */

1: /* add by xuyonghong for test */ 2: struct spi_board_info jz_spi0_board_info[] = { 3: { 4: .modalias = "spidev", 5: .mode = SPI_MODE_3, 6: .max_speed_hz = 1000000, 7: .controller_data = (void *)GPIO_PB(2), 8: .bus_num = 0, 9: .chip_select = 0, 10: }, 11: }; 12: int jz_spi0_devs_size = ARRAY_SIZE(jz_spi0_board_info);

 
 
1: int __init 2: spi_register_board_info(struct spi_board_info const *info, unsigned n) 3: { 4: struct boardinfo *bi; 5: int i; 6:   7: bi = kzalloc(n * sizeof(*bi), GFP_KERNEL); 8: if (!bi) 9: return -ENOMEM; 10:   11: for (i = 0; i < n; i++, bi++, info++) { 12: struct spi_master *master; 13:   14: memcpy(&bi->board_info, info, sizeof(*info)); 15: mutex_lock(&board_lock); 16: list_add_tail(&bi->list, &board_list); 17: /* 18: 如果master先注册,则执行spi_match_master_to_boardinfo匹配, 19: 否则在master注册的时候匹配device 20: */ 21: list_for_each_entry(master, &spi_master_list, list) 22: spi_match_master_to_boardinfo(master, &bi->board_info); 23: mutex_unlock(&board_lock); 24: } 25:   26: return 0; 27: }

1: spi_register_board_info(jz_spi0_board_info, jz_spi0_devs_size);

总结:

1. list_add_tail(&bi->list, &board_list); 讲board添加在board_list

2.当master已经注册,则通过spi_match_master_to_boardinfo和spi_new_device创建spi device。

linux SPI驱动——spidev之deive(五)的更多相关文章

  1. linux SPI驱动——spidev之driver(六)

    一: spidev_init注册spidev 1: static int __init spidev_init(void) 2: { 3: int status; 4:   5: /* Claim o ...

  2. Linux spi驱动分析(二)----SPI核心(bus、device_driver和device)

    一.spi总线注册 这里所说的SPI核心,就是指/drivers/spi/目录下spi.c文件中提供给其他文件的函数,首先看下spi核心的初始化函数spi_init(void).程序如下: 点击(此处 ...

  3. linux驱动基础系列--linux spi驱动框架分析

    前言 主要是想对Linux 下spi驱动框架有一个整体的把控,因此会忽略某些细节,同时里面涉及到的一些驱动基础,比如平台驱动.设备模型等也不进行详细说明原理.如果有任何错误地方,请指出,谢谢! spi ...

  4. linux设备驱动归纳总结(五):4.写个简单的LED驱动【转】

    本文转载自:http://blog.chinaunix.net/uid-25014876-id-84693.html linux设备驱动归纳总结(五):4.写个简单的LED驱动 xxxxxxxxxxx ...

  5. linux设备驱动归纳总结(五):3.操作硬件——IO静态映射【转】

    本文转载自:http://blog.chinaunix.net/uid-25014876-id-83299.html linux设备驱动归纳总结(五):3.操作硬件——IO静态映射 xxxxxxxxx ...

  6. linux设备驱动归纳总结(五):1.在内核空间分配内存【转】

    本文转载自:http://blog.chinaunix.net/uid-25014876-id-79134.html linux设备驱动归纳总结(五):1.在内核空间分配内存 xxxxxxxxxxxx ...

  7. linux驱动基础系列--linux spi驱动框架分析(续)

    前言 这篇文章是对linux驱动基础系列--linux spi驱动框架分析的补充,主要是添加了最新的linux内核里设备树相关内容. spi设备树相关信息 如之前的文章里所述,控制器的device和s ...

  8. 【Linux开发】linux设备驱动归纳总结(五):1.在内核空间分配内存

    linux设备驱动归纳总结(五):1.在内核空间分配内存 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ...

  9. 【Linux开发】linux设备驱动归纳总结(五):2.操作硬件——IO内存

    linux设备驱动归纳总结(五):2.操作硬件--IO内存 xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ...

随机推荐

  1. 利用GridView控件导出其他文件(导出Excel,导出Word文件)

    原文发布时间为:2008-10-16 -- 来源于本人的百度文章 [由搬家工具导入] // 注意,在Visual Studio2005平台下,如果使用GridView导出文件,      //就必须重 ...

  2. 《手把手教你学C语言》学习笔记(3)---变量

    编程目的是为了解决问题,编程本质是用计算机的思维操作数据,操作就是算法,数据主要是数据类型,也可以说量,其中分为常量和变量,常量主要是指在量的生命周期内无法改变其值:变量主要是指在量的生命周期内可以随 ...

  3. 使用vim修改和查看16进制文件

    使用前的准备工作,如果没有安装,使用命令安装: pacman -S vim 使用vim的十六进制功能查看和编辑文本文件,创建测试文件,使用命令如下: vim test.txt 进入“插入”模式,使用命 ...

  4. [原创] 树莓派个人实测 Q&A(最新修改使用windows连接远程桌面)

    原文出处:http://www.eeboard.com/bbs/thread-5191-1-1.html 这篇帖子我打算用Q&A的方式来编写,这样大家更容易一目了然的看明整个帖子的内容,层次分 ...

  5. C#图解教程学习笔记——接口

    一.接口概念接口是指定一组函数成员而不实现它们的引用类型.所以只能类和结构来实现接口. 二.声明接口1. 接口声明不能包含:数据成员.静态成员,只能包含以下类型的非静态成员函数:方法.属性.事件.索引 ...

  6. C#图解教程学习笔记——类相关的概念

    一.一些基本概念1. 字段:隶属于类的变量,即类的成员变量.2. 方法:隶属于类的函数,即类的成员函数.3. 实例成员:类的每个实例拥有自己的各个类成员的副本,这些成员称为实例成员. 改变一个实例字段 ...

  7. gitlab+gerrit+jenkins

    gitlab-repo 指在 gitlab 上的代码库, gerrit-repo 指在 gerrit 上的代码库: 从 gitlab-repo 上获取代码 本地修改, 提交 push 到 gerrit ...

  8. Atom打开大文件卡死的问题替代方案

    无解,本身是网页的框架,所以直接换回ST或者Notepad++吧.

  9. Java中获取当前时间并格式化

    主要有两种方式,其中使用Date比较好控制,代码如下: //使用Calendar Calendar now = Calendar.getInstance(); System.out.println(& ...

  10. ADO.NET-temple

    ylbtech-ADO.NET:ADO.NET-Oracle|SQLServer|MySql|Access|Excel-dddd 介绍及讲解 1.A,插入数据(Create) 1.B,读取数据(Rea ...