SPI驱动框架-1(DM8127 Linux2.6.37为例)
一、驱动程序结构
1、platform_device
文件:/arch/arm/mach-omap2/device.c
- static struct omap2_mcspi_platform_config omap2_mcspi1_config = {
- .num_cs = ,
- };
- static struct resource omap2_mcspi1_resources[] = {
- {
- .start = OMAP2_MCSPI1_BASE,
- .end = OMAP2_MCSPI1_BASE + 0xff,
- .flags = IORESOURCE_MEM,
- },
- };
- static struct platform_device omap2_mcspi1 = {
- .name = "omap2_mcspi",
- .id = , /* 用于platform_driver probe函数中识别不同的设备 */
- .num_resources = ARRAY_SIZE(omap2_mcspi1_resources),
- .resource = omap2_mcspi1_resources,
- .dev = {
- .platform_data = &omap2_mcspi1_config,
- },
- };
- static inline void ti81xx_mcspi_fixup(void)
- {
- omap2_mcspi1_resources[].start = TI81XX_MCSPI1_BASE;
- omap2_mcspi1_resources[].end = TI81XX_MCSPI1_BASE + 0xff;
- }
- static void omap_init_mcspi(void)
- {
- if (cpu_is_ti81xx())
- ti81xx_mcspi_fixup()
- platform_device_register(&omap2_mcspi1);
- }
2、dev_devices
文件:/arch/arm/mach-omap2/board-ti8148ipnc.c
- static struct spi_board_info dm8127_spi1_board[] = {
- [] = {
- .modalias = "spidev",
- .bus_num = ,
- .chip_select = ,
- .irq = -,
- .max_speed_hz = **,
- .mode = SPI_MODE_0,
- },
- };
- void __init ti8148_spi_init(void)
- {
- spi_register_board_info(dm8127_spi1_board,
- ARRAY_SIZE(dm8127_spi1_board));
- }
- int __init spi_register_board_info(struct spi_board_info const *info, unsigned n)
- {
- struct boardinfo *bi;
- int i;
- bi = kzalloc(n * sizeof(*bi), GFP_KERNEL);
- if (!bi)
- return -ENOMEM;
- for (i = ; i < n; i++, bi++, info++) {
- struct spi_master *master;
- memcpy(&bi->board_info, info, sizeof(*info));
- mutex_lock(&board_lock);
- list_add_tail(&bi->list, &board_list); /*加入board_list全局链表*/
- list_for_each_entry(master, &spi_master_list, list)
- spi_match_master_to_boardinfo(master, &bi->board_info);
- mutex_unlock(&board_lock);
- }
- return ;
- }
1、platform_driver
文件:/driver/spi/omap2_mcspi.c
- static const struct dev_pm_ops omap2_mcspi_pm_ops = {
- .resume = omap2_mcspi_resume,
- };
- static struct platform_driver omap2_mcspi_driver = {
- .driver = {
- .name = "omap2_mcspi",
- .owner = THIS_MODULE,
- .pm = &omap2_mcspi_pm_ops
- },
- .remove = __exit_p(omap2_mcspi_remove),
- };
- static int __init omap2_mcspi_init(void)
- {
- omap2_mcspi_wq = create_singlethread_workqueue( /* 创建工作队列 */
- omap2_mcspi_driver.driver.name);
- if (omap2_mcspi_wq == NULL)
- return -;
- return platform_driver_probe(&omap2_mcspi_driver, omap2_mcspi_probe);
- }
1、dev_driver
文件:/driver/spi/spidev.c
- static struct spi_driver spidev_spi_driver = {
- .driver = {
- .name = "spidev",
- .owner = THIS_MODULE,
- },
- .probe = spidev_probe,
- .remove = __devexit_p(spidev_remove),
- };
SPI驱动框架-1(DM8127 Linux2.6.37为例)的更多相关文章
- linux驱动基础系列--linux spi驱动框架分析
前言 主要是想对Linux 下spi驱动框架有一个整体的把控,因此会忽略某些细节,同时里面涉及到的一些驱动基础,比如平台驱动.设备模型等也不进行详细说明原理.如果有任何错误地方,请指出,谢谢! spi ...
- SPI 驱动框架
SPI 驱动框架 1. 枚举过程 drivers/spi/spi.c: spi_register_board_info /* 对于每一个spi_master,调用spi_match_master_to ...
- linux驱动基础系列--linux spi驱动框架分析(续)
前言 这篇文章是对linux驱动基础系列--linux spi驱动框架分析的补充,主要是添加了最新的linux内核里设备树相关内容. spi设备树相关信息 如之前的文章里所述,控制器的device和s ...
- spi驱动框架全面分析,从master驱动到设备驱动
内核版本:linux2.6.32.2 硬件资源:s3c2440 参考: 韦东山SPI视频教程 内容概括: 1.I2C 驱动框架回顾 2.SPI 框架简单介绍 3.maste ...
- Linux驱动修炼之道-SPI驱动框架源码分析(上)【转】
转自:http://blog.csdn.net/lanmanck/article/details/6895318 SPI驱动架构,以前用过,不过没这个详细,跟各位一起分享: 来自:http://blo ...
- S3C2440 SPI驱动框架
S3C2440 SPI驱动代码详细解读: https://www.linuxidc.com/Linux/2012-08/68402p4.htm 一.platform device and board_ ...
- Linux驱动:SPI驱动编写要点
题外话:面对成功和失败,一个人有没有“冠军之心”,直接影响他的表现. 几周前剖析了Linux SPI 驱动框架,算是明白个所以然,对于这么一个庞大的框架,并不是每一行代码都要自己去敲,因为前人已经把这 ...
- RT Thread的SPI设备驱动框架的使用以及内部机制分析
注释:这是19年初的博客,写得很一般,理解不到位也不全面.19年末得空时又重新看了RTThread的SPI和GPIO,这次理解得比较深刻.有时间时再整理上传. -------------------- ...
- 基于TQ2440的SPI驱动学习(OLED)
平台简介 开发板:TQ2440 (NandFlash:256M 内存:64M) u-boot版本:u-boot-2015.04 内核版本:Linux-3.14 作者:彭东林 邮箱:pengdongl ...
随机推荐
- Redux API之bindActionCreators
bindActionCreators(actionCreators,dispatch) 把 action creators 转成拥有同名 keys 的对象,但使用 dispatch 把每个 actio ...
- iOS_数据存取(一)
目录: 一.沙盒机制 二.用户偏好设置 三.归档 一.沙盒机制 每个iOS应⽤都有⾃己的应用沙盒(应⽤沙盒就是⽂件系统⽬录),与其他文件系统隔离.应⽤必须待在⾃己的沙盒⾥,其他应用不能访问该应用沙盒的 ...
- tree 命令【转】
本文转载自:http://www.jb51.net/LINUXjishu/283874.html linux下怎么用tree命令以树形结构显示文件目录结构?tree命令可以以树形结构显示文件目录结构, ...
- 时间插件之My97DatePickerBeta
My97DatePickerBeta使用很简单 1.在jsp页面中 引入JS 下载地址:链接: https://pan.baidu.com/s/1bp5uzuv 密码: ya9a <script ...
- 如何隐藏tomcat命令窗口
有两种方法: 一.修改tomcat中的文件参数,达到隐藏目的: 引用:TOMCAT_HOME\bin\setclasspath.bat 在文件的底部找到以下内容: set _RUNJAVA=" ...
- setfacl设置特定目录的权限
现有一目录是虚拟机和linux共享的,但是每次程序调用新建的文件都发现没有权限. 于是指定特定目录及其子目录下新建的文件或目录对于用户qhfz都有读写执行的权限 -R表示递归 -m表示设置文件acl规 ...
- 基于canvas与原生JS的H5动画引擎
前一段时间项目组里有一些H5动画的需求,由于没有专业的前端人员,便交由我这个做后台的研究相关的H5动画技术. 通过初步调研,H5动画的实现大概有以下几种方式: 1.基于css实现 这种方式比较简单易学 ...
- 经典的MapReduce1解析
MapReduce1任务图解 最顶层包含4个独立的实体客户端,提交MapReduce作业jobtracker,协调作业的运行.Jobtracker是一个Java应用程序,它的主类是JobTracker ...
- WIN7 X64 PASSUAC 源码
// Passuac.cpp : Defines the entry point for the console application. // #include "stdafx.h&quo ...
- hdu 5147 Sequence II 树状数组
Sequence II Time Limit: 5000/2500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Prob ...