static void dc_mouse_close(struct input_dev *dev) { struct dc_mouse *mse = maple_get_drvdata(to_maple_dev(&dev->dev)); maple_getcond_callback(mse->mdev, dc_mouse_callback, 0, MAPLE_FUNC_MOUSE); }
static int dc_mouse_open(struct input_dev *dev) { struct dc_mouse *mse = maple_get_drvdata(to_maple_dev(&dev->dev)); maple_getcond_callback(mse->mdev, dc_mouse_callback, HZ/50, MAPLE_FUNC_MOUSE); return 0; }
static int __devexit remove_maple_mouse(struct device *dev) { struct maple_device *mdev = to_maple_dev(dev); struct dc_mouse *mse = maple_get_drvdata(mdev); mdev->callback = NULL; input_unregister_device(mse->dev); maple_set_drvdata(mdev, NULL); kfree(mse); return 0; }
static int __devexit remove_maple_controller(struct device *dev) { struct maple_device *mdev = to_maple_dev(dev); struct dc_pad *pad = maple_get_drvdata(mdev); mdev->callback = NULL; input_unregister_device(pad->dev); maple_set_drvdata(mdev, NULL); kfree(pad); return 0; }
static int __devinit probe_maple_mouse(struct device *dev) { struct maple_device *mdev = to_maple_dev(dev); struct maple_driver *mdrv = to_maple_driver(dev->driver); int error; struct input_dev *input_dev; struct dc_mouse *mse; mse = kzalloc(sizeof(struct dc_mouse), GFP_KERNEL); if (!mse) { error = -ENOMEM; goto fail; } input_dev = input_allocate_device(); if (!input_dev) { error = -ENOMEM; goto fail_nomem; } mse->dev = input_dev; mse->mdev = mdev; input_set_drvdata(input_dev, mse); input_dev->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_REL); input_dev->keybit[BIT_WORD(BTN_MOUSE)] = BIT_MASK(BTN_LEFT) | BIT_MASK(BTN_RIGHT) | BIT_MASK(BTN_MIDDLE); input_dev->relbit[0] = BIT_MASK(REL_X) | BIT_MASK(REL_Y) | BIT_MASK(REL_WHEEL); input_dev->open = dc_mouse_open; input_dev->close = dc_mouse_close; input_dev->name = mdev->product_name; input_dev->id.bustype = BUS_HOST; error = input_register_device(input_dev); if (error) goto fail_register; mdev->driver = mdrv; maple_set_drvdata(mdev, mse); return error; fail_register: input_free_device(input_dev); fail_nomem: kfree(mse); fail: return error; }
static int __devinit probe_maple_controller(struct device *dev) { static const short btn_bit[32] = { BTN_C, BTN_B, BTN_A, BTN_START, -1, -1, -1, -1, BTN_Z, BTN_Y, BTN_X, BTN_SELECT, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, }; static const short abs_bit[32] = { -1, -1, -1, -1, ABS_HAT0Y, ABS_HAT0Y, ABS_HAT0X, ABS_HAT0X, -1, -1, -1, -1, ABS_HAT1Y, ABS_HAT1Y, ABS_HAT1X, ABS_HAT1X, ABS_GAS, ABS_BRAKE, ABS_X, ABS_Y, ABS_RX, ABS_RY, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, }; struct maple_device *mdev = to_maple_dev(dev); struct maple_driver *mdrv = to_maple_driver(dev->driver); int i, error; struct dc_pad *pad; struct input_dev *idev; unsigned long data = be32_to_cpu(mdev->devinfo.function_data[0]); pad = kzalloc(sizeof(struct dc_pad), GFP_KERNEL); idev = input_allocate_device(); if (!pad || !idev) { error = -ENOMEM; goto fail; } pad->dev = idev; pad->mdev = mdev; idev->open = dc_pad_open; idev->close = dc_pad_close; for (i = 0; i < 32; i++) { if (data & (1 << i)) { if (btn_bit[i] >= 0) __set_bit(btn_bit[i], idev->keybit); else if (abs_bit[i] >= 0) __set_bit(abs_bit[i], idev->absbit); } } if (idev->keybit[BIT_WORD(BTN_JOYSTICK)]) idev->evbit[0] |= BIT_MASK(EV_KEY); if (idev->absbit[0]) idev->evbit[0] |= BIT_MASK(EV_ABS); for (i = ABS_X; i <= ABS_BRAKE; i++) input_set_abs_params(idev, i, 0, 255, 0, 0); for (i = ABS_HAT0X; i <= ABS_HAT3Y; i++) input_set_abs_params(idev, i, 1, -1, 0, 0); idev->dev.platform_data = pad; idev->dev.parent = &mdev->dev; idev->name = mdev->product_name; idev->id.bustype = BUS_HOST; input_set_drvdata(idev, pad); error = input_register_device(idev); if (error) goto fail; mdev->driver = mdrv; maple_set_drvdata(mdev, pad); return 0; fail: input_free_device(idev); kfree(pad); maple_set_drvdata(mdev, NULL); return error; }