微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 关注自由和开源软件

关注自由和开源软件

时间:03-15 来源: 点击:

)&bfin_ad7879_ts_info,

},

#endif

#ifdefined(CONFIG_KEYBOARD_ADP5588)||defined(CONFIG_KEYBOARD_ADP5588_MODULE)

{

I2C_BOARD_INFO("adp5588-keys",0x34),

.irq=IRQ_PG0,

.platform_data=(void*)&adp5588_kpad_data,

},

#endif

#ifdefined(CONFIG_PMIC_ADP5520)||defined(CONFIG_PMIC_ADP5520_MODULE)

{

I2C_BOARD_INFO("pmic-adp5520",0x32),

.irq=IRQ_PG0,

.platform_data=(void*)&adp5520_pdev_data,

},

#endif

#ifefined(CONFIG_INPUT_ADXL34X_I2C)|| defined(CONFIG_INPUT_ADXL34X_I2C_MODULE)

{

I2C_BOARD_INFO("adxl34x", 0x53),

.irq = IRQ_PG0,

.platform_data = (void *)&adxl34x_info,

},

#endif

};

static void __init blackfin_init(void)

{

(...)

i2c_register_board_info(0,bfin_i2c_board_info, ARRAY_SIZE(bfin_i2c_board_info));

spi_register_board_info(bfin_spi_board_info, ARRAY_SIZE(bfin_spi_board_info));

(...)

}

因此,为了启用这样一个驱动程序,只需要编辑板支持文件,将适当的条目添加至i2c_board_info(spi_board_info)。

还应注意到,需在内核配置期间选择驱动程序。驱动程序按照所属的子系统分类。可在以下位置查找ADXL34x驱动程序:

Device Drivers--->

Input device support --->

[*] Miscellaneous devices --->

<M>Analog Devices AD714x Capacitance Touch Sensor

<M>support I2C bus connection

<M>support SPI bus connection

<*>Analog Devices ADXL34x Three-Axis

Digital Accelerometer

<*>support I2C bus connection

<*>support SPI bus connection

一旦用户开始内核构建过程,就会自动编译所选的驱动程序。上面的代码声明I2C总线0上有四个设备,包括其各自的地址、IRQ以及其驱动程序所需的定制platform_data。注册相关I2C总线时,i2c-core内核子系统会自动实例化这些I2C设备。

static struct i2c_driver adxl34x_driver = {

.driver={

.name="adxl34x",

.owner=THIS_MODULE,

},

.probe=adxl34x_i2c_probe,

.remove=__devexit_p(adxl34x_i2c_remove),

.suspend=adxl34x_suspend,

.resume=adxl34x_resume,

.id_table=adxl34x_id,

};

static int __init adxl34x_i2c_init(void)

{

return i2c_add_driver(&adxl34x_driver);

}

module_init(adxl34x_i2c_init);

在内核启动的某一时间点,或者在其后的任何时候,一个名为adxl34x的设备驱动程序可以利用struct i2c_driver注册自己--通过调用i2c_add_driver()进行注册。struct i2c_driver的成员利用指向ADXL34x驱动程序函数的指针进行设置,将驱动程序与其总线主控内核相连接。(宏module_init()定义模块插入时调用哪个函数(adxl34x_ i2c_init())。)

如果存档的驱动程序名称与宏I2C_BOARD_INFO所提供的名称相符,i2c-core总线模型实现方法将调用驱动程序的probe()函数,将相关的platform_data和irq从板支持文件传递到驱动程序。这仅会在没有追索冲突的情况下发生,例如前一实例化设备使用同一I2C从地址时。

adxl34x_i2c_probe()函数随后开始执行其名称所表示的功能。它通过读取制造商和设备ID,检查ADXL345或ADXL346是否存在以及是否正常工作。如果检查成功,驱动程序的探测函数将分配特定设备数据结构,请求中断,并初始化加速度计。

然后利用input_allocate_device()分配新的输入设备结构,并设置输入位域。这样,设备驱动程序就告知输入系统的其他部分这是何种设备,以及这种新的输入设备能够产生何种事件。最后,ADXL34x驱动程序通过调用input_register_device()注册该输入设备。

这将把新的输入设备结构添加到输入驱动程序的链接列表中,并调用设备处理程序模块的连接函数,告知其已出现一个新的输入设备。从此时起,该设备可以产生中断。一旦执行中断服务例程,就会从加速度计读取状态寄存器和事件FIFO,并利用nput_event()向输入子系统发回适当的事件。

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top