static ssize_t hdaps_calibrate_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { hdaps_calibrate(); return count; }
static ssize_t hdaps_calibrate_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { mutex_lock(&hdaps_mtx); hdaps_calibrate(); mutex_unlock(&hdaps_mtx); return count; }
static ssize_t hdaps_invert_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t count) { int invert; if (sscanf(buf, "%d", &invert) != 1 || (invert != 1 && invert != 0)) return -EINVAL; hdaps_invert = invert; hdaps_calibrate(); return count; }
static int __init hdaps_init(void) { int ret; if (!dmi_check_system(hdaps_whitelist)) { printk(KERN_WARNING "hdaps: supported laptop not found!\n"); ret = -ENODEV; goto out; } if (!request_region(HDAPS_LOW_PORT, HDAPS_NR_PORTS, "hdaps")) { ret = -ENXIO; goto out; } ret = platform_driver_register(&hdaps_driver); if (ret) goto out_region; pdev = platform_device_register_simple("hdaps", -1, NULL, 0); if (IS_ERR(pdev)) { ret = PTR_ERR(pdev); goto out_driver; } ret = sysfs_create_group(&pdev->dev.kobj, &hdaps_attribute_group); if (ret) goto out_device; hdaps_idev = input_allocate_device(); if (!hdaps_idev) { ret = -ENOMEM; goto out_group; } /* initial calibrate for the input device */ hdaps_calibrate(); /* initialize the input class */ hdaps_idev->name = "hdaps"; hdaps_idev->cdev.dev = &pdev->dev; hdaps_idev->evbit[0] = BIT(EV_ABS); input_set_abs_params(hdaps_idev, ABS_X, -256, 256, HDAPS_INPUT_FUZZ, HDAPS_INPUT_FLAT); input_set_abs_params(hdaps_idev, ABS_Y, -256, 256, HDAPS_INPUT_FUZZ, HDAPS_INPUT_FLAT); input_register_device(hdaps_idev); /* start up our timer for the input device */ init_timer(&hdaps_timer); hdaps_timer.function = hdaps_mousedev_poll; hdaps_timer.expires = jiffies + HDAPS_POLL_PERIOD; add_timer(&hdaps_timer); printk(KERN_INFO "hdaps: driver successfully loaded.\n"); return 0; out_group: sysfs_remove_group(&pdev->dev.kobj, &hdaps_attribute_group); out_device: platform_device_unregister(pdev); out_driver: platform_driver_unregister(&hdaps_driver); out_region: release_region(HDAPS_LOW_PORT, HDAPS_NR_PORTS); out: printk(KERN_WARNING "hdaps: driver init failed (ret=%d)!\n", ret); return ret; }
static int __init hdaps_init(void) { struct input_dev *idev; int ret; if (!dmi_check_system(hdaps_whitelist)) { printk(KERN_WARNING "hdaps: supported laptop not found!\n"); ret = -ENODEV; goto out; } if (!request_region(HDAPS_LOW_PORT, HDAPS_NR_PORTS, "hdaps")) { ret = -ENXIO; goto out; } ret = platform_driver_register(&hdaps_driver); if (ret) goto out_region; pdev = platform_device_register_simple("hdaps", -1, NULL, 0); if (IS_ERR(pdev)) { ret = PTR_ERR(pdev); goto out_driver; } ret = sysfs_create_group(&pdev->dev.kobj, &hdaps_attribute_group); if (ret) goto out_device; hdaps_idev = input_allocate_polled_device(); if (!hdaps_idev) { ret = -ENOMEM; goto out_group; } hdaps_idev->poll = hdaps_mousedev_poll; hdaps_idev->poll_interval = HDAPS_POLL_INTERVAL; hdaps_calibrate(); idev = hdaps_idev->input; idev->name = "hdaps"; idev->phys = "isa1600/input0"; idev->id.bustype = BUS_ISA; idev->dev.parent = &pdev->dev; idev->evbit[0] = BIT_MASK(EV_ABS); input_set_abs_params(idev, ABS_X, -256, 256, HDAPS_INPUT_FUZZ, HDAPS_INPUT_FLAT); input_set_abs_params(idev, ABS_Y, -256, 256, HDAPS_INPUT_FUZZ, HDAPS_INPUT_FLAT); ret = input_register_polled_device(hdaps_idev); if (ret) goto out_idev; printk(KERN_INFO "hdaps: driver successfully loaded.\n"); return 0; out_idev: input_free_polled_device(hdaps_idev); out_group: sysfs_remove_group(&pdev->dev.kobj, &hdaps_attribute_group); out_device: platform_device_unregister(pdev); out_driver: platform_driver_unregister(&hdaps_driver); out_region: release_region(HDAPS_LOW_PORT, HDAPS_NR_PORTS); out: printk(KERN_WARNING "hdaps: driver init failed (ret=%d)!\n", ret); return ret; }