Linux I2C驱动(OMAP3630 ) omap_i2c_probe
函数omap_i2c_probe的执行流程如下图:
图3.2 omap_i2c_probe的执行流程
函数omap_i2c_probe的简要代码如下:
static int __init
omap_i2c_probe(struct platform_device *pdev)
{
struct omap_i2c_dev *dev;
struct i2c_adapter *adap;
struct resource *mem, *irq, *ioarea;
irq_handler_t isr;
……
/* NOTE: driver uses the static register mapping */
mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
……
irq = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
……
dev = kzalloc(sizeof(struct omap_i2c_dev), GFP_KERNEL);
……
dev->dev = &pdev->dev;
dev->irq = irq->start;
dev->base = ioremap(mem->start, mem->end - mem->start + 1);
……
/* reset ASAP, clearing any IRQs */
omap_i2c_init(dev);
isr = (dev->rev < OMAP_I2C_REV_2) ? omap_i2c_rev1_isr : omap_i2c_isr;
r = request_irq(dev->irq, isr, 0, pdev->name, dev);
……
adap = &dev->adapter;
i2c_set_adapdata(adap, dev);
adap->owner = THIS_MODULE;
adap->class = I2C_CLASS_HWMON;
strncpy(adap->name, "OMAP I2C adapter", sizeof(adap->name));
adap->algo = &omap_i2c_algo;
adap->dev.parent = &pdev->dev;
/* i2c device drivers may be active on return from add_adapter() */
adap->nr = pdev->id;
r = i2c_add_numbered_adapter(adap);
……
return 0;
……
}
这里定义了I2C adapter的中断处理函数omap_i2c_isr(),该函数对I2C控制器的中断事件进行响应,主要实现了对I2C数据收发中断事件的处理。
这边还涉及到了一个i2c_algorithm结构的变量omap_i2c_algo,该变量的定义如下:
static const struct i2c_algorithm omap_i2c_algo = {
.master_xfer = omap_i2c_xfer,
.functionality = omap_i2c_func,
};
omap_i2c_xfer接口函数实现了底层I2C数据传输的方法。
omap_i2c_probe函数最后使用了 i2c_add_numbered_adapter()将adapter注册到i2c-core层,adapter的总线号保存在平台设备数组 omap_i2c_devices中,见3.1.1节,由于该数组中有三个成员,即三条I2C总线,所以这里会建立三个I2C adapter,总线号分别为1,2,3。
Linux I2C驱动(OMAP3630 ) omap_i2c_probe相关推荐
- Linux设备驱动---OMAP3630 Linux I2C总线驱动分析(1)
原文地址:http://blog.csdn.net/kellycan/article/details/6394737 1 Linux I2C驱动架构 Linux下I2C驱动的架构图如下: 图1.1 L ...
- linux下I2C驱动发送IO时序,Linux I2C 驱动阅读的碰到的一些网上没有提到的东西
# re: Linux I2C 驱动阅读的碰到的一些网上没有提到的东西 回复 更多评论 2009-04-11 13:39 by 初学都 楼主,你好.我看了你那篇<Linux I2C核心.总线 ...
- linux I2C 驱动
原文地址: http://hello2mao.github.io/2015/12/02/Linux_I2C_driver.html 目录 一.LinuxI2C驱动--概述 1.1 写在前面 1.2 I ...
- 【正点原子MP157连载】第四十章 Linux I2C驱动实验-摘自【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7
1)实验平台:正点原子STM32MP157开发板 2)购买链接:https://item.taobao.com/item.htm?&id=629270721801 3)全套实验源码+手册+视频 ...
- Linux I2C驱动框架(超详细)
Linux I2C驱动框架 文章目录 Linux I2C驱动框架 一.几个重要的对象 1.I2C总线 2.I2C驱动 3.I2C设备 4.I2C设配器 小结 二.内核源码分析 1.注册I2C驱动 2. ...
- linux i2c 内核初始io,linux I2C驱动移植
linux I2C驱动移植 I²C总线仅使用SCL,SDA两根信号线实现设备间的数据交互,被广泛应用于微控制领域芯片与芯片之间的通信,如EEPROM,实时时钟,小型LCD等与CPU之间的通信. I2C ...
- 《linux设备驱动开发详解》笔记——15 linux i2c驱动
<linux设备驱动开发详解>笔记--15 linux i2c驱动 15.1 总体结构 如下图,i2c驱动分为如下几个重要模块 核心层core,完成i2c总线.设备.驱动模型,对用户提供s ...
- 【正点原子Linux连载】第六十一章 Linux I2C驱动实验 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0
1)实验平台:正点原子阿尔法Linux开发板 2)平台购买地址:https://item.taobao.com/item.htm?id=603672744434 2)全套实验源码+手册+视频下载地址: ...
- STM32MP157驱动开发——Linux I2C驱动
相关文章:正点原子教程第四十章--Linux I2C驱动实验 0.前言 为了简化笔记的编写以及降低工作量,本节开始相关的基础知识部分通过引入原子哥的教材链接来完成,有兴趣的可以进入学习. 上一 ...
- linux I2C驱动架构解析
I2C 概述 I2C是philips提出的外设总线. I2C只有两条线,一条串行数据线:SDA,一条是时钟线SCL ,使用SCL,SDA这两根信号线就实现了设备之间的数据交互,它方便了工程师的布线. ...
最新文章
- 安装hadoop图文
- 120种小狗图像傻傻分不清?用fastai训练一个分类器
- 《剑指offer》第十八题(在O(1)时间删除链表结点)
- Python爬虫入门之四urllib-GET与POST请求
- IP地址便捷修改器 V3.5 绿色版
- windows应用程序的开发一个键盘记录器
- 在Centos中安装mysql
- 前端学习(2874):原生js模块化+canvas绘制弹幕
- Linux常用命令(掌握完操作Linux基本就够用了)
- w7设置双显示器_学习工作效率不高?处理事情慢半拍?教你使用双显示器来改善...
- biopython1_序列操作
- 解决Putty或CRT软件连接虚拟机上面的linux连接不上的问题:如连接超时或拒绝连接
- 移动硬盘安装Linux后无引导,移动固态硬盘安装Ubuntu启动盘后按F12根本就没有该系统启动项...
- 初生牛犊不怕虎 golang入坑系列
- 一篇不大正经的有关素数的小结
- bim oracle,IBMS和BIM的融合之路
- 金立android怎么升级包,金立S6升级刷机教程[多图]
- 全部资源,都在这里了
- Note For Linux By Jes(12)-认识系统服务(daemons)
- 从零开始在云服务器上搭建个人博客
热门文章
- python学习之井字棋游戏
- Python基础-元组字典集合
- python反转一个整数、123变成321_python 反转整数
- 蜗居台词,蜗居经典台词
- Vue 基础第二次再次回顾
- epic转移游戏_游戏日报:王者荣耀开放苹果/安卓数据迁移服务;王思聪回应陪玩报价“谁点谁血赚”...
- CSGO打开黑屏闪退
- 软件安全实验——lab8(SQL注入)(上)(旧虚拟机seedubuntu9版本实验)
- JAVA面向对象第一堂课
- ios安卓模拟器_重要通知,劍靈:革命开放下载,安卓 iOS 模拟器你都知道怎么下载安装吗?教程奉上...