I2C驅動例項解析

2021-06-21 22:24:44 字數 1571 閱讀 1209

簡單的說,i2c驅動也就三步吧,註冊i2c裝置,註冊i2c裝置驅動,建立sysfs檔案供上層呼叫。

1. 註冊i2c裝置。

先定義乙個i2c_board_info

static struct i2c_board_info __initdata ***x_i2c_info = ,     

};

再註冊,一般會註冊乙個client。

i2c_register_board_info()

強烈建議有興趣的可以看看這個函式的原始碼,可以學到很多。

2. 註冊i2c裝置driver

定義再註冊

static struct i2c_driver ***_i2c_driver = ,

};

註冊函式

i2c_add_driver(&***_i2c_driver);

註冊過程中,主要是呼叫probe函式,如何跑到probe函式裡同樣需要跟**。這裡不詳述。講講probe函式裡主要幹什麼。

static int ***_i2c_probe(struct i2c_client *client,

const struct i2c_device_id *id)

***_sensorw = kzalloc(sizeof(struct ***_work_t), gfp_kernel);

if (!***_sensorw)

i2c_set_clientdata(client, ***_sensorw);

***_init_client(client);

***_client = client;

msleep(50);

printk("%s successed! rc = %d\n", __func__, rc);

return 0;

probe_failure:

printk("%s failed! rc = %d\n", __func__, rc);

return rc;

}

probe函式主要是獲取client,而後便可以通過client中adapter的方法來傳輸資料:

static int ***_i2c_txdata(const uint16_t saddr,

uint8_t *txdata, const uint16_t length)

, };

if (i2c_transfer(***_client->adapter, msg, 1) < 0)

return 0;

}

3. 建立sysfs供上層呼叫

可以通過函式

sysfs_create_group(&(pdev->dev.kobj), &***_attribute_group);

來建立。

以上就是簡要說說,主要還是要看原始碼才能更深的理解這些流程。

i2c裝置驅動

1,i2c 裝置註冊 static struct i2c board info i2c2 devices i2c裝置一般在板級 中註冊 static void msm8916 add i2c deivces void 2,i2c驅動註冊 include static const struct i2c...

I2C協議解析

1 基本概念 主機 初始化傳送,產生時鐘訊號和終止傳送的器件 從機 被主機定址的器件 傳送器 傳送資料到匯流排的器件 接收器 從匯流排接收資料的器件 多主機 同時有多於乙個主機嘗試控制匯流排 但不破壞報文 仲裁 是乙個在有多個主機同時嘗試控制匯流排,但只允許其中乙個控制匯流排並使報文不被破壞的過程 ...

i2c 協議解析

1 基本概念 主機 初始化傳送,產生時鐘訊號和終止傳送的器件 從機 被主機定址的器件 傳送器 傳送資料到匯流排的器件 接收器 從匯流排接收資料的器件 多主機 同時有多於乙個主機嘗試控制匯流排 但不破壞報文 仲裁 是乙個在有多個主機同時嘗試控制匯流排,但只允許其中乙個控制匯流排並使報文不被破壞的過程 ...