[input] Linux 输入子系统(二)

注册一个INPUT设备

	hwm_obj->idev = input_allocate_device(); //申请input_dev结构
	if (!hwm_obj->idev)
	{
		err = -ENOMEM;
		HWM_ERR("unable to allocate input device!\n");
		goto exit_alloc_input_dev_failed;
	}
	
	set_bit(EV_REL, hwm_obj->idev->evbit);
	set_bit(EV_SYN, hwm_obj->idev->evbit);

	input_set_capability(hwm_obj->idev, EV_REL, EVENT_TYPE_SENSOR);  //记录本设备对于哪些事件感兴趣(对其进行处理)
	hwm_obj->idev->name = HWM_INPUTDEV_NAME;
	if((err = input_register_device(hwm_obj->idev)))  //注册输入设备,并和对应的handler处理函数挂钩
	{
		HWM_ERR("unable to register input device!\n");
		goto exit_input_register_device_failed;
	}
	input_set_drvdata(hwm_obj->idev, hwm_obj);

	hwm_obj->mdev.minor = MISC_DYNAMIC_MINOR;
	hwm_obj->mdev.name  = HWM_SENSOR_DEV_NAME;
	hwm_obj->mdev.fops  = &hwmsen_fops;
	if((err = misc_register(&hwm_obj->mdev)))
	{
		HWM_ERR("unable to register sensor device!!\n");
		goto exit_misc_register_failed;
	}
	dev_set_drvdata(hwm_obj->mdev.this_device, hwm_obj);
	
	if(hwmsen_create_attr(hwm_obj->mdev.this_device) != 0)
	{
		HWM_ERR("unable to create attributes!!\n");
		goto exit_hwmsen_create_attr_failed;
	}

这里调用了input_register_device()函数注册输入设备结构体,input_register_device()函数原型:

                 int input_register_device(struct input_dev *dev)  

input_register_device()函数是输入子系统核心(input core)提供的函数。该函数将input_dev结构体注册到输入子系统核心中,input_dev结构体必须由前面讲的input_allocate_device()函数来分配。input_register_device()函数如果注册失败,必须调用input_free_device()函数释放分配的空间。如果该函数注册成功,在卸载函数中应该调用input_unregister_device()函数来注销输入设备结构体。


相关内容:

 [input] linux输入子系统(一)

你可能感兴趣的:([input] Linux 输入子系统(二))