zoukankan      html  css  js  c++  java
  • i2c_set_clientdata函数【转】

    本文转载自‘:http://blog.csdn.net/jk198310/article/details/43738367

    在i2c驱动中有很多函数和数据结构,很多一时难以理解,所以写下本文共同学习。

    一、i2c_set_clientdata函数 

           在probe方式的I2C驱动中的probe函数中经常出现i2c_set_clientdata函数,一直很不解这个函数什么意思,后来查看内核源码,发现了一点大家都知道的秘密。偷笑

    这是某个I2C设备驱动中的probe函数,选取了部分代码:

    struct i2c_mydev         //struct i2c_mydev是自定义的设备结构

    {

         struct i2c_client *client;

         ...

    };

    static int xxx_probe(struct i2c_client *client,const struct i2c_device_id *id)
    {

    struct i2c_mydev *dev;            

    ...

    dev->client=client;                           

    i2c_set_clientdata(client, dev);    

    ...

    }

    /*

    client是在板级信息初始化的时候自动创建的设备,将client赋值给dev中的client

    然后又将设备文件结构dev赋值给client的私有驱动数据指针。i2c_set_clientdata函数到底是什么作用呢?

    在该函数中调用了dev_set_drvdata函数,在dev-set_drvdata函数实现代码中有一行代码:dev->p->driver_data=data

    driver_data是什么呢,内核中一句注释:driver_data - private pointer for driver specific info。driver_data是驱动特殊信息的私有指针,i2c_set_clientdata(client, dev)就是将自定义的设备结构dev赋给设备驱动client的私有指针,目的是什么呢,我猜测是用来区别其他驱动client,不知道这样理解对不对。敬请指正,这也是本文面世的一个原因。

    */

    static inline void i2c_set_clientdata(struct i2c_client *dev, void *data)
    {
    dev_set_drvdata(&dev->dev, data);
    }

    void dev_set_drvdata(struct device *dev, void *data)

    {

    ...

    dev->p->driver_data = data;

    ...

    }

  • 相关阅读:
    简单实用的Asp.net生成静态页方法
    第八章 、数据存储 Stroe
    第七章 、使用表格控件
    第九章 、 TreePanel
    mysql 安装时的第三第四步出错解决方法
    asp.net 水晶报表 VS2008 10.5版本
    关于log4net的使用
    SQL2000时安装挂起的解决方法
    linux下安装Sublime Text3并将它的快捷方式放进启动器中和卸载Sublime
    Linux下安装配置jdk
  • 原文地址:https://www.cnblogs.com/zzb-Dream-90Time/p/8082248.html
Copyright © 2011-2022 走看看