i2c_dev_class= class_create(THIS_MODULE,"i2c-dev");//创建类i2c-dev,在/sys/class下可看到i2c-dev目录if(IS_ERR(i2c_dev_class)) { res=PTR_ERR(i2c_dev_class);gotoout_unreg_chrdev; } i2c_dev_class->dev_groups =i2c_groups;/*Keep track of adapters which will be added or removed later...
int i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num) { int ret; if (adap->algo->master_xfer) { #ifdef DEBUG for (ret = 0; ret < num; ret++) { dev_dbg(&adap->dev, "master_xfer[%d] %c, addr=0x%02x, " "len=%d%s\n", ret, (msgs[ret].flags & ...
struct i2c_dev *i2c_dev; int res; if (dev->type != &i2c_adapter_type) return 0; adap = to_i2c_adapter(dev); i2c_dev = get_free_i2c_dev(adap); if (IS_ERR(i2c_dev)) return PTR_ERR(i2c_dev); cdev_init(&i2c_dev->cdev, &i2cdev_fops); i2c_dev->cdev.owner = THIS_MODULE...
* private data.*/structbus_type {constchar*name;constchar*dev_name;structdevice *dev_root;conststructattribute_group **bus_groups;conststructattribute_group **dev_groups;conststructattribute_group **drv_groups;int(*match)(structdevice *dev,structdevice_driver *drv);int(*uevent)(structdevice *d...
struct bus_type platform_bus_type = { .name= "platform", .dev_groups= platform_dev_groups, .match= platform_match, .uevent= platform_uevent, .dma_configure= platform_dma_configure, .pm= &platform_dev_pm_ops, }; 我们只关注其中的 match 函数,它是当一个新的设备或者一个新的驱动被添加到...
dev",用于在用户空间创建设备节点 i2c_dev_class = class_create(THIS_MODULE, "i2c-dev"); if (IS_ERR(i2c_dev_class)) { res = PTR_ERR(i2c_dev_class); goto out_unreg_chrdev; } // 将 i2c_groups 数组设置为该 class 的 dev_groups 属性 i2c_dev_class->dev_groups = i2c_groups; // ...
static int i2c_register_adapter(struct i2c_adapter *adap) { /* 初始化链表节点 */ INIT_LIST_HEAD(&adap->userspace_clients);…… adap->dev.bus =&i2c_bus_type;adap->dev.type =&i2c_adapter_type;res = device_register(&adap->dev);…… i2c_scan_static_board_info(adap); ...
struct i2c_client*i2c_new_device(struct i2c_adapter*adap,struct i2c_board_infoconst*info){client->adapter=adap;//i2c_client绑定adapterclient->dev.parent=&client->adapter->dev;client->dev.bus=&i2c_bus_type;client->dev.type=&i2c_client_type;client->dev.of_node=info->of_node;client->dev...
.release = i2c_client_dev_release, @@ -1343,7 +1343,7 @@ static struct attribute *i2c_adapter_attrs[] = { }; ATTRIBUTE_GROUPS(i2c_adapter); struct device_type i2c_adapter_type = { const struct device_type i2c_adapter_type = { .groups = i2c_adapter_groups, .release = i2c_adapter...
(1)烧录后,通过sys-fs系统,切换到如下目录,可以看到设备1-006a,也就是i2c-1的第1个设备,地址为0x6Ax301:/sys# cd bus/i2c/devices/i2c-1/x301:/sys/bus/i2c/devices/i2c-1# ls1-006a delete_device device i2c-dev name new_device of_node power subsystemuevent(2)继续进入1-006a设备的目录下,查...