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; }
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; }