0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

I2C注冊/注銷函數(shù)方法

麥辣雞腿堡 ? 來源:嵌入式Linux系統(tǒng)開發(fā) ? 作者:嵌入式Linux系統(tǒng)開 ? 2023-07-22 15:17 ? 次閱讀

/kernel-5.10/drivers/i2c/i2c-core-base.c 是 I2C 的核心部分,I2C 核心提供了一些與具體硬件無關(guān)的 API 函數(shù)

1、i2c_adapter 注冊/注銷函數(shù)

int i2c_add_adapter(struct i2c_adapter *adapter)//自動分配 adapter ID
int i2c_add_numbered_adapter(struct i2c_adapter *adap)//指定 ID
void i2c_del_adapter(struct i2c_adapter * adap)

2、i2c_driver 注冊/注銷函數(shù)

int i2c_register_driver(struct module *owner, struct i2c_driver *driver)
int i2c_add_driver(struct i2c_driver *driver)
void i2c_del_driver(struct i2c_driver *driver)

上述 API 一般需要在 init/exit 或者 probe/remove 函數(shù)中成對使用。

設(shè)備和驅(qū)動的匹配過程也是由 I2C 總線完成的,I2C 總線的數(shù)據(jù)結(jié)構(gòu)為 i2c_bus_type,定義在 /kernel-5.10/drivers/i2c/i2c-core-base.c 文件,i2c_bus_type 內(nèi)容如下:

struct bus_type i2c_bus_type = {
  .name = "i2c",
  .match = i2c_device_match,
  .probe = i2c_device_probe,
  .remove = i2c_device_remove,
  .shutdown = i2c_device_shutdown,
};

.match 就是 I2C 總線的設(shè)備和驅(qū)動匹配函數(shù),在這里就是 i2c_device_match 這個函數(shù),此函數(shù)內(nèi)容如下:

static int i2c_device_match(struct device *dev, struct device_driver *drv)
{
 struct i2c_client *client = i2c_verify_client(dev);
 struct i2c_driver *driver;

 if (!client)
 return 0;

 /* Attempt an OF style match */
 if (of_driver_match_device(dev, drv))
 return 1;

 /* Then ACPI style match */
 if (acpi_driver_match_device(dev, drv))
 return 1;

 driver = to_i2c_driver(drv);
 /* match on an id table if there is one */
 if (driver- >id_table)
 return i2c_match_id(driver- >id_table, client) != NULL;

 return 0;
}

of_driver_match_device 函數(shù)用于完成設(shè)備樹設(shè)備和驅(qū)動匹配。比較 I2C 設(shè)備節(jié)點(diǎn)的 compatible 屬性和 of_device_id 中的 compatible 屬性是否相等,如果相當(dāng)?shù)脑捑捅硎?I2C 設(shè)備和驅(qū)動匹配。

acpi_driver_match_device 函數(shù)用于 ACPI 形式的匹配。

i2c_match_id 函數(shù)用于傳統(tǒng)的、無設(shè)備樹的 I2C 設(shè)備和驅(qū)動匹配過程。比較 I2C 設(shè)備名字和 i2c_device_id 的 name 字段是否相等,相等的話就說明 I2C 設(shè)備和驅(qū)動匹配。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • I2C
    I2C
    +關(guān)注

    關(guān)注

    28

    文章

    1468

    瀏覽量

    122787
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4260

    瀏覽量

    62230
收藏 人收藏

    評論

    相關(guān)推薦

    Linux內(nèi)核中描述I2C的四個核心結(jié)構(gòu)體

    I2C核心維護(hù)了i2c_bus結(jié)構(gòu)體,提供了I2C總線驅(qū)動和設(shè)備驅(qū)動的注冊、注銷方法,維護(hù)了
    的頭像 發(fā)表于 09-04 09:35 ?1152次閱讀
    Linux內(nèi)核中描述<b class='flag-5'>I2C</b>的四個核心結(jié)構(gòu)體

    I2C總線驅(qū)動和設(shè)備驅(qū)動

    為400kbit/s常見iic設(shè)備eeprom觸摸芯片溫濕度傳感器mpu6050(姿態(tài)傳感器)…框架圖I2C核心提供I2C總線驅(qū)動和設(shè)備驅(qū)動的注冊方法、
    發(fā)表于 12-13 06:18

    i2c總線ppt(I2C總線器件應(yīng)用)

    I2C總線器件應(yīng)用第一節(jié) I2C總線器件應(yīng)用概述I2C總線工作原理I2C總線系統(tǒng)結(jié)構(gòu)I2C總線系統(tǒng)結(jié)構(gòu)如圖7-1所示。其中,SCL是時鐘線,
    發(fā)表于 08-13 17:34 ?0次下載

    I2C總線規(guī)范與I2C器件C51讀寫程序

    I2C總線規(guī)范與I2C器件C51讀寫程序:本文簡要介紹了I2C總線,并給出了I2C器件的C51讀
    發(fā)表于 08-22 17:51 ?93次下載

    I2C Guid I2C指南

    I2C Guid  I2C指南 The I2C bus is used in a wide rangeof applications because it is simpleand
    發(fā)表于 04-23 13:55 ?36次下載

    什么是i2c總線

    什么是i2c總線  下載請點(diǎn)擊: i2c總線協(xié)議中文版 
    發(fā)表于 11-05 09:26 ?2898次閱讀

    i2c

    單片機(jī)i2c總線操作;單片機(jī)i2c總線操作;單片機(jī)i2c總線操作;
    發(fā)表于 05-17 11:09 ?35次下載

    詳細(xì)講解RT-Thread I2C設(shè)備驅(qū)動框架及相關(guān)函數(shù)

    本應(yīng)用筆記以驅(qū)動I2C接口的6軸傳感器MPU6050為例,說明了如何使用I2C設(shè)備驅(qū)動接口開發(fā)應(yīng)用程序,并詳細(xì)講解了RT-Thread I2C設(shè)備驅(qū)動框架及相關(guān)函數(shù)。
    的頭像 發(fā)表于 03-29 10:52 ?2w次閱讀
    詳細(xì)講解RT-Thread <b class='flag-5'>I2C</b>設(shè)備驅(qū)動框架及相關(guān)<b class='flag-5'>函數(shù)</b>

    Linux的I2C驅(qū)動架構(gòu)

    的讀寫方法。但是總線驅(qū)動本身并不會進(jìn)行任何的通訊,它只是存在在那里,等待設(shè)備驅(qū)動調(diào)用其函數(shù)。設(shè)備驅(qū)動則是與掛在I2C總線上的具體的設(shè)備通訊的驅(qū)動。通過I2C總線驅(qū)動提供的
    發(fā)表于 04-02 14:38 ?647次閱讀

    I2C系列的合集,可以系統(tǒng)學(xué)習(xí)I2C協(xié)議

    這篇文章給大家?guī)砹?b class='flag-5'>I2C系列的合集,可以系統(tǒng)學(xué)習(xí)I2C協(xié)議。大家趕緊看看吧! 1、I2C總線:何時使用I2C緩沖器 本文討論了使用I2C
    的頭像 發(fā)表于 09-23 15:28 ?3082次閱讀

    嵌入式linux應(yīng)用讀寫i2c示例

    這里分享一個嵌入式linux讀寫24c02的i2c程序ioctl函數(shù)的使用:原型:struct ioctl(struct file *file,unsigned int cmd,unsigned
    發(fā)表于 11-01 16:57 ?12次下載
    嵌入式linux應(yīng)用讀寫<b class='flag-5'>i2c</b>示例

    MSP430F5529 DriverLib 庫函數(shù)學(xué)習(xí)筆記(十一)I2C / IIC

    目錄硬知識USCI的I2C模式I2C概述MSP430單片機(jī)I2C模塊特征及結(jié)構(gòu)框圖I2C原理I2C主從操作(1)從模式(
    發(fā)表于 12-04 19:06 ?2次下載
    MSP430F5529 DriverLib 庫<b class='flag-5'>函數(shù)</b>學(xué)習(xí)筆記(十一)<b class='flag-5'>I2C</b> / IIC

    硬件I2C與模擬I2C

    硬件I2C對應(yīng)芯片上的I2C外設(shè),有相應(yīng)I2C驅(qū)動電路,其所使用的I2C管腳也是專用的,因而效率要遠(yuǎn)高于軟件模擬的I2C;一般也較為穩(wěn)定,但
    發(fā)表于 12-28 19:14 ?81次下載
    硬件<b class='flag-5'>I2C</b>與模擬<b class='flag-5'>I2C</b>

    I2C debug出現(xiàn)問題怎么解決

    _transfer 返回值為 -6? 返回值為 -6 表示為 NACK 錯誤,即對方設(shè)備無應(yīng)答響應(yīng),這種情況一般為外設(shè)的問題,常見的有以下幾種情況: I2C 地址錯誤,解決方法是測量 I2C 波形,確認(rèn)是否
    的頭像 發(fā)表于 07-22 15:00 ?3329次閱讀

    I2C控制器驅(qū)動介紹

    適配器與 I2C 設(shè)備進(jìn)行通信的方法。 I2C 總線驅(qū)動,或者說 I2C 適配器驅(qū)動的主要工作就是初始化 i2c_adapter 結(jié)構(gòu)體變
    的頭像 發(fā)表于 07-22 15:38 ?1324次閱讀
    <b class='flag-5'>I2C</b>控制器驅(qū)動介紹