drivers/i2c/i2c-core.c
postcore_initcall(i2c_init);
module_exit(i2c_exit);
static int __init i2c_init(void)
#endif
retval = i2c_add_driver(&dummy_driver);//為i2c匯流排新增乙個空驅動
if (retval)
goto class_err;
return 0;
class_err:
#ifdef config_i2c_compat
class_compat_unregister(i2c_adapter_compat_class);
bus_err:
#endif
bus_unregister(&i2c_bus_type);
return retval;
}static void __exit i2c_exit(void)
struct bus_type i2c_bus_type = ;
static struct i2c_driver dummy_driver = ;
i2c_device_match/* match on an id table if there is one */
if (driver->id_table)
return i2c_match_id(driver->id_table, client) != null;
匹配i2c_client的name和i2c_driver中的id_table的namestatic const struct i2c_device_id *i2c_match_id(const struct i2c_device_id *id,
const struct i2c_client *client)
return null;
}
i2c_device_probe將driver資料結構繫結到device中client->driver = driver;
呼叫driver中的probe函式status = driver->probe(client, i2c_match_id(driver->id_table, client));
核心層開放給其他部分的註冊介面(1)i2c_add_adapter/i2c_add_numbered_adapter 註冊adapter的
(2)i2c_add_driver 註冊driver的
(3)i2c_new_device 註冊client的
Linux驅動 I2C匯流排
這裡以rk3288為例子,使用的是linux4.14,根據裝置樹節點i2c 與rk3x i2c driver,match之後,就會呼叫對應的probe rk3x i2c probe 這裡主要就是註冊乙個adapt i2c add adapter 也就是i2c控制器,或者說是i2c主裝置,既然是主裝置...
Linux驅動之I2C裝置驅動
核心 4.20 晶元 hym8563 rtc 下面的 分析主要都在注釋中,會按照驅動中函式的執行順序分析。static const struct i2c device id hym8563 id module device table i2c,hym8563 id static const stru...
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...