21 使用裝置樹的i2c裝置驅動
在核心裡表示i2c裝置驅動的結構體有點小變化:
struct i2c_driver {
int (*probe)(struct i2c_client *, const struct i2c_device_id *);
//當使用id_table進行匹配時, 會把匹配上的i2c_device_id變數地址傳過來.
int (*remove)(struct i2c_client *);
int (*probe_new)(struct i2c_client *); //新的probe函式
//當使用driver的of_match_table進行匹配時, probe函式的i2c_device_id引數就是多餘的了, 可以改成使用probe_new函式.
...
struct device_driver driver; //driver裡的of_match_table用於指定與裝置樹裡i2c裝置的匹配
const struct i2c_device_id *id_table; //id_table也可用於與裝置樹裡i2c裝置名(也就是compatible屬性值)進行匹配.
...
};
如dht12連線到第0個i2c控制器, 在裝置樹裡的描述:
i2c0: [email protected] { /* 控制器的裝置節點 */
...
mydht12 { /* 增加的裝置子節點 */
compatible = "mydht12" ;
reg = <0x5c>; /* 裝置地址 */
};
};
//通過i2c_driver的id_table與裝置樹裡的i2c裝置進行匹配.
/* mydrv.c */
#include <linux/init.h>
#include <linux/module.h>
#include <linux/i2c.h>
int myprobe(struct i2c_client *cli)
{
//讀出dht12的溫溼度資料
u8 reg = 0, datas[5];
int i;
struct i2c_msg msgs[2] = {
{cli->addr, 0, 1, ®},
{cli->addr, I2C_M_RD, sizeof(datas), datas},
};
if (i2c_transfer(cli->adapter, msgs, 2) < 0)
{
printk("i2c transfer failed\n");
return -ENODEV;
}
printk("in probe ...\n");
for (i = 0; i < sizeof(datas); i++)
printk("%02d\n", datas[i]);
return 0;
}
int myremove(struct i2c_client *cli)
{
printk("remove ...\n");
return 0;
}
struct of_device_id ids[] = {
{.compatible = "mydht12"},
{},
};
struct i2c_device_id ids2[] = {
{"mydht12"},
{},
};
struct i2c_driver mydrv = {
.probe_new = myprobe, //使用新的probe函式
.remove = myremove,
.driver = {
.owner = THIS_MODULE,
.name = "mydrv",
// .of_match_table = ids,
},
.id_table = ids2,
};
module_i2c_driver(mydrv);
MODULE_LICENSE("GPL");
相關推薦
Linux驅動開發08:【裝置樹】MPU6050驅動和i2c驅動
介紹 上一節在nanopi裝置樹的I2C節點下增加了一個MPU6050的子節點,並在sysfs中檢視到了該節點已經被正確解析,這一節我們來修改之前的MPU6050驅動,使之能夠匹配到我們的裝置樹節點,然後再分析裝置樹節點是如何載入到i2c總線上的。 MP
i2c 與 spi 裝置在新版核心中不採用DTS裝置樹形式 在驅動新增裝置資訊(board_info)的方法
本文唯一地址:http://blog.csdn.net/dearsq/article/details/51953610 歡迎轉載,轉載請著名,謝謝~ /* 廢話:在展訊平臺移植 spi 裝置的時候發現完成 dts 和 driver中的 of_match_
04-Linux裝置樹系列-GPIO驅動實踐
1. 前言 GPIO驅動開發可能算是Linux核心裝置驅動開發中最為簡單、最常見的一個方向,對於開發板的按鍵、LED、蜂鳴器、電源控制等模組,可能都是使用GPIO實現的。Linux核心的GPIO子系統在核心不斷的演進過程中進行了多次的重構,本文的第二
x4412 基於裝置樹的 hello_world驅動
首先在exynos4412-x4412.dts檔案中新增HelloWorld節點,如下: HelloWorld { compatible = "x4412, hello_world"; status = "okay"; }; 然後新建一
基於裝置樹的GPIO驅動(通過系統節點控制)
#include <linux/types.h> #include <linux/pm.h> #include <linux/gpio.h> #include <linux/slab.h> #include <linux/init.h> #inclu
3.X核心下裝置樹–platform裝置驅動
1。歷史的車輪總是向前,技術更替。在linus 同學發出那句 WFK 後核心進入了裝置樹時代(站在驅動工程師角度)。 前幾天我已經被mach-imx 中的檔案折磨的夜不能眠。我終於在一個清晨,喝完一杯咖啡後決定放棄蹩腳的傳統device描述方式。 這裡我先不
【TINY4412】LINUX移植筆記:(23)裝置樹LCD觸控式螢幕驅動
【TINY4412】LINUX移植筆記:(23)裝置樹 LCD觸控式螢幕驅動 宿主機 : 虛擬機器 Ubuntu 16.04 LTS / X64 目標板[底板]: Tiny4412SDK - 1506 目標板[核心板]
【TINY4412】LINUX移植筆記:(22)裝置樹LCD按鍵驅動
【TINY4412】LINUX移植筆記:(22)裝置樹 LCD按鍵驅動 宿主機 : 虛擬機器 Ubuntu 16.04 LTS / X64 目標板[底板]: Tiny4412SDK - 1506 目標板[核心板]:
linux 根據裝置樹註冊裝置
/platform.c (1) int of_platform_populate(struct device_node *root, const struct of_device_id *matches,const struct of_dev_auxdata *looku
u-boot2013.01 使用裝置樹,裝置樹獲得bootargs過程分析
u-boot 裝置樹形式獲取bootargs 1. 程式呼叫過程do_bootm bootm_start(cmdtp, flag, argc, argv) bootm_load_os(images.os, &load_end, 1)
misc裝置和i2c裝置建立的節點路徑
misc裝置: ./sys/class/misc/sim_i2c_port/sim_i2c_addr ./sys/devices/virtual/misc/sim_i2c_port/sim_i2c_a
迅為-iMX6開發板-裝置樹核心-裝置樹相關檔案簡要分析
本文件主要介紹在iMX6開發板(iMX6Q,iMX6D,iMX6PLUS)的幾個重要的裝置樹檔案,這幾個檔案在後續的裝置驅動分析中,經常會用到。 裝置樹檔案的分析 這裡
21 使用裝置樹的i2c裝置驅動
在核心裡表示i2c裝置驅動的結構體有點小變化: struct i2c_driver { int (*probe)(struct i2c_client *, const struct i2c
基於i2c子系統的驅動分析-裝置樹
基於i2c子系統的驅動分析 和i2c有關的程式碼都在原始碼drivers/i2c目錄下。核心提供了兩種i2c的實現方法: 第一種叫i2c_dev,對應drivers/i2c/i2c-dev.c,這種方法僅僅封裝了soc的i2c控制器操作,並嚮應用層提供操作介面。其本質是為應
android驅動i2c器件的裝置樹配置
做驅動的要經常配置i2c,而配置i2c無非就是確定i2c器件掛在哪一個i2c總線上,以及i2c的具體地址.下面以高通8909平臺為例子說一下 確定i2c機器掛在哪一個i2c總線上 從原理圖得到SDA,SCL對應的gpio,我這個gpio為gpio6,gpio7
rk3399下iic驅動方式二-----裝置樹
方式一 前面說了iic在新核心下的一種方式,下面是第二種方式,這種方式在fireflyWiki教程裡面有說明 程式碼如下 #include <linux/kernel.h> #include <linux/module.h> #include <linux/
裝置樹時對應的驅動程式設計
一、字元裝置驅動程式的三種寫法 驅動程式編寫有3種方法:傳統方法、使用匯流排裝置驅動模型、使用裝置樹 這3種方法也核心都是一樣的: 分配、設定、註冊 file_operations結構體 這個結構體中有.open, .read, .write, .ioctl等成員 驅動程式要實現這些成員,在這些
Linux驅動開發11:【裝置樹】nanopi的PWM驅動
介紹 前兩節利用裝置樹實現了nanopi的LED驅動和按鍵驅動,這一節來實現nonapi的PWM驅動。PWM驅動在核心中也有相應的實現,因此這裡只是按照要求新增裝置樹檔案即可。這一節和之前一樣,首先修改裝置樹檔案進行測試,然後分析核心相應的軟體實現。 新增裝置樹節點 因為在s
Linux驅動開發10:【裝置樹】nanopi的按鍵驅動
介紹 這一節在nanopi上實現按鍵驅動,和LED驅動一樣,通用的按鍵驅動在linux核心中已經實現好,我們只需要按照要求寫好裝置樹即可,不用我們自己實現按鍵驅動。這一節中首先修改裝置樹並測試按鍵驅動,然後分析drivers/input/keyboard/gpio_keys.c檔案,
i2c裝置驅動
跟所有的 bus-dev-drv模型一樣,當我們拿到一個模組我們需要做的就是dev_drv即裝置驅動程式 一、裝置(device) 方法一、自己寫一個i2c_device.c #include <linux/kernel.h> #include &l