I2C子系统之platform(3)

static int platform_drv_probe(struct device *_dev)   {       struct platform_driver *drv = to_platform_driver(_dev->driver);       struct platform_device *dev = to_platform_device(_dev);          return drv->probe(dev);   }  

函数的工作很简单,即通过_dev->driver找到包含它的platform_driver型驱动,然后再

调用此驱动的probe方法,即s3c24xx_i2c_probe函数。

probe函数的功能如下:

1.首先创建struct s3c24xx_i2c  *i2c。

i2c相关数据的初始化来源于s3c2_device_i2c0.dev.platdata。

2.通过i2c->adap.algo    = &s3c24xx_i2c_algorithm;初始化algo方法。

在write系统调用的时候会调用到s3c24xx_i2c_algorithm函数。

3.init_waitqueue_head(&i2c->wait); 初始化一个等待队列

4.s3c24xx_i2c_init (i2c);初始化i2c控制器,主要是对s3c24xx的i2c控制

寄存器进行一些操作,比如配置s3c2440i/o功能,设置从机地址,以及

设置i2c时钟频率等相关操作。时钟频率的设置参见博文。

5.request_irq(i2c->irq, s3c24xx_i2c_irq, IRQF_DISABLED,
              dev_name(&pdev->dev), i2c);
申请中断,内核中的i2c读写是通过中断来实现的,具体稍后分析

6.i2c_add_numbered_adapter(&i2c->adap);最后向系统注册一个i2c adapter

这里需要着重注意第2、5、6点。

下面先分析第6点。第2、5点待到后面读写at24c02的时候再分析。

相关阅读:

I2C子系统之at24c02读写测试
I2C子系统之ioctl() 
I2C子系统之at24c02简介
I2C子系统之总结
I2C子系统之内核中I2C子系统的结构
I2C子系统之I2C bus初始化——I2C_init()
I2C子系统之platfor_device初始化——smdk2440_machine_init()
I2C子系统之platform_driver初始化——I2C_adap_s3c_init()
I2C子系统之I2C总线时钟频率设置
I2C子系统之adapter device和client device注册——I2C_add_number_adapter()
I2C子系统之__I2C_first_dynamic_bus_num变量的相关分析
I2C子系统之 adapter driver注册——I2C_dev_init()
I2C子系统之write()

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/d0552e49df047155f600a0a04bfc62fc.html