現在很多外設都會用到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...