i2c总线及设备相关驱动的probe和remove过程

本文主要探讨了在MT2712平台上,如何实现I2C总线驱动的probe和remove函数,以动态加载ko模块的方式进行设备交互。通过对这两个关键过程的理解,可以更好地掌握设备驱动的加载和卸载机制。
摘要由CSDN通过智能技术生成

由于工作任务需要将i2c总线驱动以ko方式加载,这两天学习了mt2712平台的i2c总线驱动的probe和remove过程

执行rmmod i2c_mt65xx.ko,最终会调用mtk_i2c_adap_exit
module_exit(mtk_i2c_adap_exit);
    platform_driver_unregister(&mtk_i2c_driver);
        bus_remove_driver(drv);
            driver_detach(drv);
                对drv->p->klist_devices.k_list链表中的每一个device调用以下函数(这个device对应着dts中compatible = "mediatek,mt2712-i2c"的i2c总线设备)
                    __device_release_driver(dev);
                        if (dev->bus && dev->bus->remove)//对于platform_bus_type而言,没有dev->bus->remove函数
			                      dev->bus->remove(dev);
		                    else if (drv->remove)
			                      drv->remove(dev);//因此调用驱动本身的remove,对于i2c_mt65xx就是mtk_i2c_remove                    
 mtk_i2c_remove
     i2c_del_adapter(&i2c->adap);
        device_for_each_child(&adap->dev, NULL, __unregister_client);//对这条i2c总线上的每一个i2c设备(或者说adaptor的children链表里的每一个i2c client,i2c控制器节点下的每一个i2c设备设备子节点)
			      i2c_unregister_device(client);//调用__unregister_client函数
			          device_unregister(&client->dev);
			              device_del(dev);
			                  klist_del(&dev->p->knode_parent);
			                  bus_remove_device(dev);
			                      klist_del(&dev->p->knode_bus);//将client从i2c_bus_type的dev链表中删除
			               
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值