日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

i2c_set_clientdata

 dwlinux_gs 2015-03-16

在i2c驅(qū)動(dòng)中有很多函數(shù)和數(shù)據(jù)結(jié)構(gòu),很多一時(shí)難以理解,所以寫下本文共同學(xué)習(xí)。

一、i2c_set_clientdata函數(shù) 

       在probe方式的I2C驅(qū)動(dòng)中的probe函數(shù)中經(jīng)常出現(xiàn)i2c_set_clientdata函數(shù),一直很不解這個(gè)函數(shù)什么意思,后來查看內(nèi)核源碼,發(fā)現(xiàn)了一點(diǎn)大家都知道的秘密。偷笑

這是某個(gè)I2C設(shè)備驅(qū)動(dòng)中的probe函數(shù),選取了部分代碼:

struct i2c_mydev         //struct i2c_mydev是自定義的設(shè)備結(jié)構(gòu)

{

     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是在板級(jí)信息初始化的時(shí)候自動(dòng)創(chuàng)建的設(shè)備,將client賦值給dev中的client

然后又將設(shè)備文件結(jié)構(gòu)dev賦值給client的私有驅(qū)動(dòng)數(shù)據(jù)指針。i2c_set_clientdata函數(shù)到底是什么作用呢?

在該函數(shù)中調(diào)用了dev_set_drvdata函數(shù),在dev-set_drvdata函數(shù)實(shí)現(xiàn)代碼中有一行代碼:dev->p->driver_data=data

driver_data是什么呢,內(nèi)核中一句注釋:driver_data - private pointer for driver specific info。driver_data是驅(qū)動(dòng)特殊信息的私有指針,i2c_set_clientdata(client, dev)就是將自定義的設(shè)備結(jié)構(gòu)dev賦給設(shè)備驅(qū)動(dòng)client的私有指針,目的是什么呢,我猜測(cè)是用來區(qū)別其他驅(qū)動(dòng)client,不知道這樣理解對(duì)不對(duì)。敬請(qǐng)指正,這也是本文面世的一個(gè)原因。

*/

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;

...

}

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多