Lines Matching +full:input +full:- +full:value

1 // SPDX-License-Identifier: GPL-2.0-only
11 #include <linux/input.h>
19 * @up: GPIO line for up value.
20 * @down: GPIO line for down value.
21 * @left: GPIO line for left value.
22 * @right: GPIO line for right value.
44 * The dev input variable is set to the input_dev pointer.
46 static void gpio_mouse_scan(struct input_dev *input) in gpio_mouse_scan() argument
48 struct gpio_mouse *gpio = input_get_drvdata(input); in gpio_mouse_scan()
51 if (gpio->bleft) in gpio_mouse_scan()
52 input_report_key(input, BTN_LEFT, in gpio_mouse_scan()
53 gpiod_get_value(gpio->bleft)); in gpio_mouse_scan()
54 if (gpio->bmiddle) in gpio_mouse_scan()
55 input_report_key(input, BTN_MIDDLE, in gpio_mouse_scan()
56 gpiod_get_value(gpio->bmiddle)); in gpio_mouse_scan()
57 if (gpio->bright) in gpio_mouse_scan()
58 input_report_key(input, BTN_RIGHT, in gpio_mouse_scan()
59 gpiod_get_value(gpio->bright)); in gpio_mouse_scan()
61 x = gpiod_get_value(gpio->right) - gpiod_get_value(gpio->left); in gpio_mouse_scan()
62 y = gpiod_get_value(gpio->down) - gpiod_get_value(gpio->up); in gpio_mouse_scan()
64 input_report_rel(input, REL_X, x); in gpio_mouse_scan()
65 input_report_rel(input, REL_Y, y); in gpio_mouse_scan()
66 input_sync(input); in gpio_mouse_scan()
71 struct device *dev = &pdev->dev; in gpio_mouse_probe()
73 struct input_dev *input; in gpio_mouse_probe() local
78 return -ENOMEM; in gpio_mouse_probe()
81 error = device_property_read_u32(dev, "scan-interval-ms", in gpio_mouse_probe()
82 &gmouse->scan_ms); in gpio_mouse_probe()
83 if (error || gmouse->scan_ms == 0) { in gpio_mouse_probe()
85 gmouse->scan_ms = 50; in gpio_mouse_probe()
88 gmouse->up = devm_gpiod_get(dev, "up", GPIOD_IN); in gpio_mouse_probe()
89 if (IS_ERR(gmouse->up)) in gpio_mouse_probe()
90 return PTR_ERR(gmouse->up); in gpio_mouse_probe()
91 gmouse->down = devm_gpiod_get(dev, "down", GPIOD_IN); in gpio_mouse_probe()
92 if (IS_ERR(gmouse->down)) in gpio_mouse_probe()
93 return PTR_ERR(gmouse->down); in gpio_mouse_probe()
94 gmouse->left = devm_gpiod_get(dev, "left", GPIOD_IN); in gpio_mouse_probe()
95 if (IS_ERR(gmouse->left)) in gpio_mouse_probe()
96 return PTR_ERR(gmouse->left); in gpio_mouse_probe()
97 gmouse->right = devm_gpiod_get(dev, "right", GPIOD_IN); in gpio_mouse_probe()
98 if (IS_ERR(gmouse->right)) in gpio_mouse_probe()
99 return PTR_ERR(gmouse->right); in gpio_mouse_probe()
101 gmouse->bleft = devm_gpiod_get_optional(dev, "button-left", GPIOD_IN); in gpio_mouse_probe()
102 if (IS_ERR(gmouse->bleft)) in gpio_mouse_probe()
103 return PTR_ERR(gmouse->bleft); in gpio_mouse_probe()
104 gmouse->bmiddle = devm_gpiod_get_optional(dev, "button-middle", in gpio_mouse_probe()
106 if (IS_ERR(gmouse->bmiddle)) in gpio_mouse_probe()
107 return PTR_ERR(gmouse->bmiddle); in gpio_mouse_probe()
108 gmouse->bright = devm_gpiod_get_optional(dev, "button-right", in gpio_mouse_probe()
110 if (IS_ERR(gmouse->bright)) in gpio_mouse_probe()
111 return PTR_ERR(gmouse->bright); in gpio_mouse_probe()
113 input = devm_input_allocate_device(dev); in gpio_mouse_probe()
114 if (!input) in gpio_mouse_probe()
115 return -ENOMEM; in gpio_mouse_probe()
117 input->name = pdev->name; in gpio_mouse_probe()
118 input->id.bustype = BUS_HOST; in gpio_mouse_probe()
120 input_set_drvdata(input, gmouse); in gpio_mouse_probe()
122 input_set_capability(input, EV_REL, REL_X); in gpio_mouse_probe()
123 input_set_capability(input, EV_REL, REL_Y); in gpio_mouse_probe()
124 if (gmouse->bleft) in gpio_mouse_probe()
125 input_set_capability(input, EV_KEY, BTN_LEFT); in gpio_mouse_probe()
126 if (gmouse->bmiddle) in gpio_mouse_probe()
127 input_set_capability(input, EV_KEY, BTN_MIDDLE); in gpio_mouse_probe()
128 if (gmouse->bright) in gpio_mouse_probe()
129 input_set_capability(input, EV_KEY, BTN_RIGHT); in gpio_mouse_probe()
131 error = input_setup_polling(input, gpio_mouse_scan); in gpio_mouse_probe()
135 input_set_poll_interval(input, gmouse->scan_ms); in gpio_mouse_probe()
137 error = input_register_device(input); in gpio_mouse_probe()
139 dev_err(dev, "could not register input device\n"); in gpio_mouse_probe()
144 gmouse->scan_ms, in gpio_mouse_probe()
145 gmouse->bleft ? "" : "left ", in gpio_mouse_probe()
146 gmouse->bmiddle ? "" : "middle ", in gpio_mouse_probe()
147 gmouse->bright ? "" : "right"); in gpio_mouse_probe()
153 { .compatible = "gpio-mouse", },
167 MODULE_AUTHOR("Hans-Christian Egtvedt <egtvedt@samfundet.no>");