Esempio n. 1
0
int ibmasm_init_remote_input_dev(struct service_processor *sp)
{
	/* set up the mouse input device */
	struct input_dev *mouse_dev, *keybd_dev;
	struct pci_dev *pdev = to_pci_dev(sp->dev);
	int error = -ENOMEM;
	int i;

	sp->remote.mouse_dev = mouse_dev = input_allocate_device();
	sp->remote.keybd_dev = keybd_dev = input_allocate_device();

	if (!mouse_dev || !keybd_dev)
		goto err_free_devices;

	mouse_dev->id.bustype = BUS_PCI;
	mouse_dev->id.vendor = pdev->vendor;
	mouse_dev->id.product = pdev->device;
	mouse_dev->id.version = 1;
	mouse_dev->evbit[0]  = BIT(EV_KEY) | BIT(EV_ABS);
	mouse_dev->keybit[LONG(BTN_MOUSE)] = BIT(BTN_LEFT) |
		BIT(BTN_RIGHT) | BIT(BTN_MIDDLE);
	set_bit(BTN_TOUCH, mouse_dev->keybit);
	mouse_dev->name = remote_mouse_name;
	input_set_abs_params(mouse_dev, ABS_X, 0, xmax, 0, 0);
	input_set_abs_params(mouse_dev, ABS_Y, 0, ymax, 0, 0);

	mouse_dev->id.bustype = BUS_PCI;
	keybd_dev->id.vendor = pdev->vendor;
	keybd_dev->id.product = pdev->device;
	mouse_dev->id.version = 2;
	keybd_dev->evbit[0]  = BIT(EV_KEY);
	keybd_dev->name = remote_keybd_name;

	for (i = 0; i < XLATE_SIZE; i++) {
		if (xlate_high[i])
			set_bit(xlate_high[i], keybd_dev->keybit);
		if (xlate[i])
			set_bit(xlate[i], keybd_dev->keybit);
	}

	error = input_register_device(mouse_dev);
	if (error)
		goto err_free_devices;

	error = input_register_device(keybd_dev);
	if (error)
		goto err_unregister_mouse_dev;

	enable_mouse_interrupts(sp);

	printk(KERN_INFO "ibmasm remote responding to events on RSA card %d\n", sp->number);

	return 0;

 err_unregister_mouse_dev:
	input_unregister_device(mouse_dev);
	mouse_dev = NULL; /* so we don't try to free it again below */
 err_free_devices:
	input_free_device(mouse_dev);
	input_free_device(keybd_dev);

	return error;
}
Esempio n. 2
0
int ibmasm_init_remote_input_dev(struct service_processor *sp)
{
	/* set up the mouse input device */
	struct input_dev *mouse_dev, *keybd_dev;
	struct pci_dev *pdev = to_pci_dev(sp->dev);
	int error = -ENOMEM;
	int i;

	sp->remote.mouse_dev = mouse_dev = input_allocate_device();
	sp->remote.keybd_dev = keybd_dev = input_allocate_device();

	if (!mouse_dev || !keybd_dev)
		goto err_free_devices;

	mouse_dev->id.bustype = BUS_PCI;
	mouse_dev->id.vendor = pdev->vendor;
	mouse_dev->id.product = pdev->device;
	mouse_dev->id.version = 1;
	mouse_dev->dev.parent = sp->dev;
	mouse_dev->evbit[0]  = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS);
	mouse_dev->keybit[BIT_WORD(BTN_MOUSE)] = BIT_MASK(BTN_LEFT) |
		BIT_MASK(BTN_RIGHT) | BIT_MASK(BTN_MIDDLE);
	set_bit(BTN_TOUCH, mouse_dev->keybit);
	mouse_dev->name = "ibmasm RSA I remote mouse";
	input_set_abs_params(mouse_dev, ABS_X, 0, MOUSE_X_MAX, 0, 0);
	input_set_abs_params(mouse_dev, ABS_Y, 0, MOUSE_Y_MAX, 0, 0);

	keybd_dev->id.bustype = BUS_PCI;
	keybd_dev->id.vendor = pdev->vendor;
	keybd_dev->id.product = pdev->device;
	keybd_dev->id.version = 2;
	keybd_dev->dev.parent = sp->dev;
	keybd_dev->evbit[0]  = BIT_MASK(EV_KEY);
	keybd_dev->name = "ibmasm RSA I remote keyboard";

	for (i = 0; i < XLATE_SIZE; i++) {
		if (xlate_high[i])
			set_bit(xlate_high[i], keybd_dev->keybit);
		if (xlate[i])
			set_bit(xlate[i], keybd_dev->keybit);
	}

	error = input_register_device(mouse_dev);
	if (error)
		goto err_free_devices;

	error = input_register_device(keybd_dev);
	if (error)
		goto err_unregister_mouse_dev;

	enable_mouse_interrupts(sp);

;

	return 0;

 err_unregister_mouse_dev:
	input_unregister_device(mouse_dev);
	mouse_dev = NULL; /* so we don't try to free it again below */
 err_free_devices:
	input_free_device(mouse_dev);
	input_free_device(keybd_dev);

	return error;
}