精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

I2C設備驅動的兩個數據結構

麥辣雞腿堡 ? 來源:嵌入式Linux系統開發 ? 作者:嵌入式Linux系統開 ? 2023-07-22 15:49 ? 次閱讀

設備驅動

I2C 設備驅動重點關注兩個數據結構:i2c_client 和 i2c_driver。i2c_client 就是描述設備信息的,i2c_driver 描述驅動內容。

一個設備對應一個 i2c_client,每檢測到一個 I2C 設備就會給這個 I2C 設備分配一個 i2c_client。

i2c_driver 中包含 probe 函數和 device_driver 結構體。如果使用設備樹的話,需要設置 device_driver 的 of_match_table 成員變量,也就是驅動的兼容(compatible)屬性。

當 I2C 設備和驅動匹配以后,probe 函數就會執行。

因此,對于 Linux 來講,不區分 I2C 控制器和 I2C 從機設備,用的都是同一套東西,即【總線、設備、驅動】框架,都有 probe 函數。

設備樹

圖片

注意,I2C 設備在設備樹中必須掛到對應的總線下,如圖是在 &i2c0 下。

驅動

圖片

圖片

當驅動和設備匹配時,probe 函數開始執行,重要的地方博主都寫了注釋

static int goodix_i2c_probe(struct i2c_client *client,
 const struct i2c_device_id *dev_id)
{
 struct goodix_ts_device *ts_device = NULL;
 struct goodix_ts_board_data *ts_bdata = NULL;
 int r = 0;

  //檢查 I2C 控制器支持是否支持標準 I2C 協議
 r = i2c_check_functionality(client- >adapter,I2C_FUNC_I2C);

 /* 板級信息分配內存 */
 ts_bdata = devm_kzalloc(&client- >dev,sizeof(struct goodix_ts_board_data), GFP_KERNEL);
 ts_device = devm_kzalloc(&client- >dev,sizeof(struct goodix_ts_device), GFP_KERNEL);

  //填充結構體元素
 /* use pinctrl in core.c */
 ts_bdata- >pinctrl_dev = client- >adapter- >dev.parent;

 ts_device- >name = "GT9886 TouchDevcie";
 ts_device- >dev = &client- >dev;
 ts_device- >board_data = ts_bdata;
 ts_device- >hw_ops = &hw_i2c_ops;
 touch_filter_bdata = ts_bdata;

 /* ts core device */
 goodix_pdev = kzalloc(sizeof(struct platform_device), GFP_KERNEL); 
  
  //填充結構體元素
 goodix_pdev- >name = GOODIX_CORE_DRIVER_NAME;
 goodix_pdev- >id = 0;
 goodix_pdev- >num_resources = 0;
 goodix_pdev- >dev.platform_data = ts_device;
 goodix_pdev- >dev.release = goodix_pdev_release;

 r = platform_device_register(goodix_pdev);

 /* register platform driver*/
 r = goodix_ts_core_init();

  ......
}

I2C 從機設備驅動中的 probe 函數和器件強相關,各家撰寫方式不一樣。

在 I2C 設備驅動中,除了 init、exit、probe、remove 函數外,還要實現 read、write 函數才行。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 驅動
    +關注

    關注

    12

    文章

    1827

    瀏覽量

    85185
  • I2C
    I2C
    +關注

    關注

    28

    文章

    1482

    瀏覽量

    123335
  • 數據結構
    +關注

    關注

    3

    文章

    573

    瀏覽量

    40094
收藏 人收藏

    評論

    相關推薦

    Linux內核中描述I2C的四個核心結構

    I2C核心維護了i2c_bus結構體,提供了I2C總線驅動設備
    的頭像 發表于 09-04 09:35 ?1269次閱讀
    Linux內核中描述<b class='flag-5'>I2C</b>的四個核心<b class='flag-5'>結構</b>體

    為什么I2C總線忙于兩個設備

    晚上好,我正試圖通過PS2C作為主機來獲得兩個MPU-9250的工作。連接到總線只有一個MPU-9250一切工作完美!使用兩個設備不能工作,并且I2
    發表于 11-14 11:31

    什么是基于嵌入式Linux的I2C設備驅動程序?

    由于I2C總線的通用性,Linux作為一款優秀的嵌入式操作系統,也必須要對其要有很好的支持。在Linux內核源碼中對I2C總線的驅動是基于總線設備
    發表于 09-02 08:04

    I2C總線驅動設備驅動

    為400kbit/s常見iic設備eeprom觸摸芯片溫濕度傳感器mpu6050(姿態傳感器)…框架圖I2C核心提供I2C總線驅動設備
    發表于 12-13 06:18

    I2C設備驅動的相關資料下載

    文章目錄1、簡介2I2C總線、設備驅動結構體定義2.1 結構體定義--
    發表于 02-10 06:39

    基于嵌入式Linux下的I2C設備驅動的總體思路與框架設計

    由于I2C總線的通用性,Linux作為一款優秀的嵌入式操作系統,也必須要對其要有很好的支持。在Linux內核源碼中對I2C總線的驅動是基于總線設備
    發表于 08-20 09:04 ?3728次閱讀
    基于嵌入式Linux下的<b class='flag-5'>I2C</b><b class='flag-5'>設備</b><b class='flag-5'>驅動</b>的總體思路與框架設計

    Linux的I2C驅動架構

    意義上的讀寫函數一樣,這兩個函數對i2c_client指針指定的設備,讀寫int個char。返回值為讀寫的字節數。對于我們現有的SLIC的驅 動,只要將最后要往總線上進行讀寫的數據引出
    發表于 04-02 14:38 ?666次閱讀

    STM32 I2C硬件的結構

    我們可以看見STM32的硬件I2C兩個數據有關的寄存器“數據寄存器(Data register)”(DR)和“數據移位寄存器(Data
    的頭像 發表于 04-30 15:00 ?7227次閱讀
    STM32 <b class='flag-5'>I2C</b>硬件的<b class='flag-5'>結構</b>

    Linux驅動I2C設備驅動(基于Freescale i.MX6ULL平臺了解I2C驅動框架,順便寫個簡陋的MPU6050驅動

    文章目錄1、簡介2I2C總線、設備驅動結構體定義2.1 結構體定義--
    發表于 12-06 13:51 ?8次下載
    Linux<b class='flag-5'>驅動</b>:<b class='flag-5'>I2C</b><b class='flag-5'>設備</b><b class='flag-5'>驅動</b>(基于Freescale <b class='flag-5'>i</b>.MX6ULL平臺了解<b class='flag-5'>I2C</b>的<b class='flag-5'>驅動</b>框架,順便寫個簡陋的MPU6050<b class='flag-5'>驅動</b>)

    嵌入式內核及驅動開發-09IIC子系統框架使用(I2C協議和時序,I2C驅動框架,I2C設備驅動開發,MPU6050硬件連接

    設備adapter i2c 控制器對象數據包對象讀寫數據設備樹中添加MPU6050信息內核選配添加設備
    發表于 12-06 14:06 ?17次下載
    嵌入式內核及<b class='flag-5'>驅動</b>開發-09IIC子系統框架使用(<b class='flag-5'>I2C</b>協議和時序,<b class='flag-5'>I2C</b><b class='flag-5'>驅動</b>框架,<b class='flag-5'>I2C</b>從<b class='flag-5'>設備</b><b class='flag-5'>驅動</b>開發,MPU6050硬件連接

    兩個PS I2C控制器的回環測試

    I2C 總線的根信號線 SCL 和 SDA 需要上拉才能正常工作,當板卡上沒有合適的硬件設置或者沒有合適的 I2Cslave 設備,我們就無法進行
    的頭像 發表于 04-13 08:35 ?2310次閱讀

    如何在Versal平臺實現兩個PS I2C控制器的回環

    I2C 總線的根信號線 SCL 和 SDA 需要上拉才能正常工作,當板卡上沒有合適的硬件設置或者沒有合適的 I2Cslave 設備,我們就無法進行
    發表于 08-02 09:23 ?559次閱讀
    如何在Versal平臺實現<b class='flag-5'>兩個</b>PS <b class='flag-5'>I2C</b>控制器的回環

    I2C控制器驅動介紹

    控制器驅動 I2C 總線驅動重點是 I2C 適配器驅動,這里要用到兩個重要的
    的頭像 發表于 07-22 15:38 ?1423次閱讀
    <b class='flag-5'>I2C</b>控制器<b class='flag-5'>驅動</b>介紹

    I2C子系統SW Architecture

    適配器(控制器)驅動,這里用到兩個重要的數據結構i2c_adapter 和 i2c_algorithm。其中,Linux 內核將 SOC
    的頭像 發表于 07-22 16:01 ?914次閱讀
    <b class='flag-5'>I2C</b>子系統SW Architecture

    I2C子系統幾個主要的結構

    I2C Data Structure 我們要搞懂一個 Linux 子系統,必須研究它的數據結構,搞懂每個結構體存儲了什么東西,才能梳理清楚該子系統的架構。 I2C 子系統有幾個主要的
    的頭像 發表于 07-22 16:04 ?793次閱讀
    <b class='flag-5'>I2C</b>子系統幾個主要的<b class='flag-5'>結構</b>體