gsensor驱动在系统中的层次如下图所示:
图中包含三个部分:hardware, driver, input:
n
n
n
实际使用时,驱动按照一定的时间间隔,通过数据总线,获取gsensor hardware采集到的数据,并按照操作系统的要求,将这些信息通过input core上报给操作系统。
2 Gsensor驱动设计要求
由gsensor驱动在系统中的层次,上有Input core,下有I2C,驱动需要通过I2C采集信息,并准确及时的上报数据至input core。驱动上报的数据,是被input core管理并被上层使用的,应符合input core和上层应用框架的要求;
2.1符合Input输入子系统的设计规范
接口:Gsensor驱动,在设计上,不应自行决定是否上报,上报频率等,应提供接口,供上层应用控制驱动的运行和数据上报:包括使能控制Enable, 上报时延delay等;通常通过sysfs文件系统提供,这部分实现,遵循标准的linux规范;
上报数据的方式:或者提供接口供上层访问(eg: ioctl),或者挂接在系统子系统上,使用系统子系统的接口,供上层使用(eg: input core);
读取数据的支持:应满足读取数据的要求,进行相应的配置;i2c总线为例,简要说明在tiny4412平台上,配置总线传输相关信息;
2.2 I2c总线的配置
要使用i2c总线进行数据传输,需注册i2c driver,创建i2c-client,以便使用i2c-adapter进行数据传输;
要成功注册i2c driver有两种方式:
n
n
需要说明的是,此两种方式可共存,目前2.6就是这样的;在共存时,以i2c_register_board_info信息为更高优先级,在i2c_register_board_info已经占用设备的前提下,内核发现设备被占用,不会执行detect, 因而不会有冲突。
3 gsensor模块硬件说明
n
n
n
3.1 gsensor硬件连接
Gsensor在硬件上,只有i2c连接,这些连接信息,需要事先告知驱动,从而从指定的设备上读取数据;这些连接信息,通过sysconfig1描述,在驱动中使用;
4.2:mma7660平台资源数据(gsensor的配置):
static struct mma7660_platform_data mma7660_pdata = {
.irq = IRQ_EINT(25),
.poll_interval= 100, // * @poll_interval: specifies how often the poll() method should be called.
//*Defaults to 500 msec unless overridden when registering the device.
.input_fuzz= 4,
.input_flat = 4,
};
static struct i2c_board_info smdk4x12_i2c_devs3[] __initdata = {
#ifdef CONFIG_SENSORS_MMA7660
{
I2C_BOARD_INFO("mma7660", 0x4c), //0x4c is in datasheet. is slave address
.platform_data = &mma7660_pdata,
},
#endif
};