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. 从数据库的表导出到Excel表格中【让客户端下载的Excel】

    原文发布时间为:2008-10-11 -- 来源于本人的百度文章 [由搬家工具导入] 这个例子是从gridview中导出到Excel,可以举一反三,可以直接从数据库中取值放在DataSet中,然后再从 ...

  2. jenkins下脚本权限问题

    在jenkins环境下,执行需要root权限的脚本,报错. 修改方法: 1. centos环境下,在/etc/sudoers.d/ 目录下,增加一个 jenkins文件,内容如下: Defaults: ...

  3. linux运维(重点)

    linux 添加系统变量: export log="log-all-$(date +%Y-%m-%d).php" export log="log-all-$(date + ...

  4. Picasso,Glide,Fresco那个好?

    前言:在Android开发中,图片加载OOM一直困扰着很多开发者,在各种不合理的设计之下也容易导致图片加载OOM的问题,目前开源的比较常用的图片加载库也很多,比如老牌的UIL,Volley,AQuer ...

  5. Ubuntu -- 配置Nginx和https及frp

    使用 sudo apt -get nginx安装最方便. 要确认80端口未被占用. 上传域名的证书. 然后要配置nginx配置文件.

  6. 穿透内网防线,USB自动渗透手法总结

    USB(Universal Serial Bus)原意是指通用串行总线,是一个外部总线标准,用于规范电脑与外部设备的连接和通讯,这套标准在1994年底由英特尔.康柏.IBM.Microsoft等多家公 ...

  7. 简单便捷的纯PHP网盘程序 Veno File Manager 2.6.3(VFM2)

    体验过很多国外网盘程序,例如:Owncloud.Bedrive.YetiShare.XFilesharing.uCloud.Cloudshare 等等,诸如此类,VFM2与这些臃肿的商用或非商用来的程 ...

  8. Mysql中delimiter作用

    1. delimiter delimiter是mysql分隔符.在mysqlclient中分隔符默认是分号(:). 假设一次输入的语句较多,而且语句中间有分号,这时须要新指定一个特殊的分隔符. 2. ...

  9. 25. Spring Boot使用自定义的properties【从零开始学Spring Boot】

    转:http://blog.csdn.net/linxingliang/article/details/52069515 spring boot使用application.properties默认了很 ...

  10. Batch update returned unexpected row count from update [0];

    Batch update returned unexpected row count from update [0]; actual row count: 0; expected: 1; nested ...