函数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相关推荐

  1. Linux设备驱动---OMAP3630 Linux I2C总线驱动分析(1)

    原文地址:http://blog.csdn.net/kellycan/article/details/6394737 1 Linux I2C驱动架构 Linux下I2C驱动的架构图如下: 图1.1 L ...

  2. linux下I2C驱动发送IO时序,Linux I2C 驱动阅读的碰到的一些网上没有提到的东西

    # re: Linux I2C 驱动阅读的碰到的一些网上没有提到的东西  回复  更多评论 2009-04-11 13:39 by 初学都 楼主,你好.我看了你那篇<Linux I2C核心.总线 ...

  3. linux I2C 驱动

    原文地址: http://hello2mao.github.io/2015/12/02/Linux_I2C_driver.html 目录 一.LinuxI2C驱动--概述 1.1 写在前面 1.2 I ...

  4. 【正点原子MP157连载】第四十章 Linux I2C驱动实验-摘自【正点原子】STM32MP1嵌入式Linux驱动开发指南V1.7

    1)实验平台:正点原子STM32MP157开发板 2)购买链接:https://item.taobao.com/item.htm?&id=629270721801 3)全套实验源码+手册+视频 ...

  5. Linux I2C驱动框架(超详细)

    Linux I2C驱动框架 文章目录 Linux I2C驱动框架 一.几个重要的对象 1.I2C总线 2.I2C驱动 3.I2C设备 4.I2C设配器 小结 二.内核源码分析 1.注册I2C驱动 2. ...

  6. linux i2c 内核初始io,linux I2C驱动移植

    linux I2C驱动移植 I²C总线仅使用SCL,SDA两根信号线实现设备间的数据交互,被广泛应用于微控制领域芯片与芯片之间的通信,如EEPROM,实时时钟,小型LCD等与CPU之间的通信. I2C ...

  7. 《linux设备驱动开发详解》笔记——15 linux i2c驱动

    <linux设备驱动开发详解>笔记--15 linux i2c驱动 15.1 总体结构 如下图,i2c驱动分为如下几个重要模块 核心层core,完成i2c总线.设备.驱动模型,对用户提供s ...

  8. 【正点原子Linux连载】第六十一章 Linux I2C驱动实验 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0

    1)实验平台:正点原子阿尔法Linux开发板 2)平台购买地址:https://item.taobao.com/item.htm?id=603672744434 2)全套实验源码+手册+视频下载地址: ...

  9. STM32MP157驱动开发——Linux I2C驱动

    相关文章:正点原子教程第四十章--Linux I2C驱动实验 0.前言   为了简化笔记的编写以及降低工作量,本节开始相关的基础知识部分通过引入原子哥的教材链接来完成,有兴趣的可以进入学习.   上一 ...

  10. linux I2C驱动架构解析

    I2C 概述 I2C是philips提出的外设总线. I2C只有两条线,一条串行数据线:SDA,一条是时钟线SCL ,使用SCL,SDA这两根信号线就实现了设备之间的数据交互,它方便了工程师的布线. ...

最新文章

  1. 安装hadoop图文
  2. 120种小狗图像傻傻分不清?用fastai训练一个分类器
  3. 《剑指offer》第十八题(在O(1)时间删除链表结点)
  4. Python爬虫入门之四urllib-GET与POST请求
  5. IP地址便捷修改器 V3.5 绿色版
  6. windows应用程序的开发一个键盘记录器
  7. 在Centos中安装mysql
  8. 前端学习(2874):原生js模块化+canvas绘制弹幕
  9. Linux常用命令(掌握完操作Linux基本就够用了)
  10. w7设置双显示器_学习工作效率不高?处理事情慢半拍?教你使用双显示器来改善...
  11. biopython1_序列操作
  12. 解决Putty或CRT软件连接虚拟机上面的linux连接不上的问题:如连接超时或拒绝连接
  13. 移动硬盘安装Linux后无引导,移动固态硬盘安装Ubuntu启动盘后按F12根本就没有该系统启动项...
  14. 初生牛犊不怕虎 golang入坑系列
  15. 一篇不大正经的有关素数的小结
  16. bim oracle,IBMS和BIM的融合之路
  17. 金立android怎么升级包,金立S6升级刷机教程[多图]
  18. 全部资源,都在这里了
  19. Note For Linux By Jes(12)-认识系统服务(daemons)
  20. 从零开始在云服务器上搭建个人博客

热门文章

  1. python学习之井字棋游戏
  2. Python基础-元组字典集合
  3. python反转一个整数、123变成321_python 反转整数
  4. 蜗居台词,蜗居经典台词
  5. Vue 基础第二次再次回顾
  6. epic转移游戏_游戏日报:王者荣耀开放苹果/安卓数据迁移服务;王思聪回应陪玩报价“谁点谁血赚”...
  7. CSGO打开黑屏闪退
  8. 软件安全实验——lab8(SQL注入)(上)(旧虚拟机seedubuntu9版本实验)
  9. JAVA面向对象第一堂课
  10. ios安卓模拟器_重要通知,劍靈:革命开放下载,安卓 iOS 模拟器你都知道怎么下载安装吗?教程奉上...