驅動中的IIC裝置新增

2021-09-23 02:01:38 字數 1419 閱讀 3905

現在很多外設都會用到iic來進行通訊,記錄iic寫驅動的寫法,以g-sensor操作為例

首先需要將iic操作的裝置掛載的iic匯流排上去,有兩種寫法

1.在arch/arm/mach-s5pv210/mach-x210.c中新增裝置到相應的iic匯流排上,示例如下

static struct i2c_board_info  s5k4ba_i2c_info = ; 

/* i2c2 */

static struct i2c_board_info i2c_devs2 __initdata = ,

};

這樣在iic匯流排初始化過程中就會為我們的iic裝置分配相應的client結構體並自動註冊,我們只需要實現我們的驅動程式即可。

2.直接在驅動裡面來新增我們的iic裝置,雖然這不是正規的裝置和驅動分離思想,但是還是應該知道如何去在驅動中新增iic裝置,這樣能看懂其他不是正規做法的**。

在驅動程式中新增iic裝置如下**示例:

static int kxtf9_i2c_register(void)

client = i2c_new_device(adapter, &info); //在iic0 匯流排上新增剛才構造的i2c_board_info 得到乙個client

i2c_put_adapter(adapter);

if (!client)

sensor_i2c_client = client;

return 0;

}

在驅動註冊中匹配到裝置相應的probe函式會被執行

static const struct i2c_device_id sensor_i2c_id = ,

};static struct i2c_driver sensor_i2c_driver = ,

.probe = sensor_i2c_probe,

.remove = sensor_i2c_remove,

//.suspend = sensor_i2c_suspend,

//.resume = sensor_i2c_resume,

.id_table = sensor_i2c_id, //driver name匹配上面的i2c_board_info 裡面的type名稱 執行probe函式

};static int sensor_i2c_probe(struct i2c_client *client, const struct i2c_device_id *id)

chip->client = client;

i2c_set_clientdata(client, chip);

//sensor_i2c_client = client;

return 0;

}

利用linux中iic子系統做IIC驅動

利用linux中iic裝置子系統移植iic裝置驅動 背景描述 iic匯流排在嵌入式系統中應用十分廣泛,常見的有eeprom,rtc。一般的處理器會包含iic的控制器,用來完成iic時序的控制 另外一方面,由於iic的時序簡單,使用gpio口來模擬時序也是常見的做法。面對不同的iic控制器,各種各樣的...

Linux裝置驅動 新增裝置節點

1 環境描述 host ubuntu14.04 64bit target smdk2410 kernel linux 2.6.39.4 2 前言 我們在剛開始寫linux裝置驅動程式的時候,很多時候都是利用mknod命令手動建立裝置節點,實際上linux核心為我們提供了一組函式,可以用來在模組載入的...

03 IIC裝置和驅動的匹配過程分析

2.裝置端 上一節分析了 平台裝置和驅動的匹配過程,即 probe 函式的自動呼叫過程,本節來分析 iic 匯流排上裝置和驅動的匹配過程。struct i2c driver struct i2c device id mpu6050 id struct i2c driver mpu6050 drive...