Lines Matching +full:input +full:- +full:value
2 * Input driver for resistor ladder connected on ADC
14 #include <linux/input.h>
15 #include <linux/input-polldev.h>
38 struct adc_keys_state *st = dev->private; in adc_keys_poll()
39 int i, value, ret; in adc_keys_poll() local
43 ret = iio_read_channel_processed(st->channel, &value); in adc_keys_poll()
46 value = st->keyup_voltage; in adc_keys_poll()
48 for (i = 0; i < st->num_keys; i++) { in adc_keys_poll()
49 diff = abs(st->map[i].voltage - value); in adc_keys_poll()
52 keycode = st->map[i].keycode; in adc_keys_poll()
57 if (abs(st->keyup_voltage - value) < closest) in adc_keys_poll()
60 if (st->last_key && st->last_key != keycode) in adc_keys_poll()
61 input_report_key(dev->input, st->last_key, 0); in adc_keys_poll()
64 input_report_key(dev->input, keycode, 1); in adc_keys_poll()
66 input_sync(dev->input); in adc_keys_poll()
67 st->last_key = keycode; in adc_keys_poll()
76 st->num_keys = device_get_child_node_count(dev); in adc_keys_load_keymap()
77 if (st->num_keys == 0) { in adc_keys_load_keymap()
79 return -EINVAL; in adc_keys_load_keymap()
82 map = devm_kmalloc_array(dev, st->num_keys, sizeof(*map), GFP_KERNEL); in adc_keys_load_keymap()
84 return -ENOMEM; in adc_keys_load_keymap()
88 if (fwnode_property_read_u32(child, "press-threshold-microvolt", in adc_keys_load_keymap()
92 return -EINVAL; in adc_keys_load_keymap()
100 return -EINVAL; in adc_keys_load_keymap()
106 st->map = map; in adc_keys_load_keymap()
112 struct device *dev = &pdev->dev; in adc_keys_probe()
115 struct input_dev *input; in adc_keys_probe() local
117 int i, value; in adc_keys_probe() local
122 return -ENOMEM; in adc_keys_probe()
124 st->channel = devm_iio_channel_get(dev, "buttons"); in adc_keys_probe()
125 if (IS_ERR(st->channel)) in adc_keys_probe()
126 return PTR_ERR(st->channel); in adc_keys_probe()
128 if (!st->channel->indio_dev) in adc_keys_probe()
129 return -ENXIO; in adc_keys_probe()
131 error = iio_get_channel_type(st->channel, &type); in adc_keys_probe()
137 return -EINVAL; in adc_keys_probe()
140 if (device_property_read_u32(dev, "keyup-threshold-microvolt", in adc_keys_probe()
141 &st->keyup_voltage)) { in adc_keys_probe()
143 return -EINVAL; in adc_keys_probe()
145 st->keyup_voltage /= 1000; in adc_keys_probe()
153 dev_err(dev, "failed to allocate input device\n"); in adc_keys_probe()
154 return -ENOMEM; in adc_keys_probe()
157 if (!device_property_read_u32(dev, "poll-interval", &value)) in adc_keys_probe()
158 poll_dev->poll_interval = value; in adc_keys_probe()
160 poll_dev->poll = adc_keys_poll; in adc_keys_probe()
161 poll_dev->private = st; in adc_keys_probe()
163 input = poll_dev->input; in adc_keys_probe()
165 input->name = pdev->name; in adc_keys_probe()
166 input->phys = "adc-keys/input0"; in adc_keys_probe()
168 input->id.bustype = BUS_HOST; in adc_keys_probe()
169 input->id.vendor = 0x0001; in adc_keys_probe()
170 input->id.product = 0x0001; in adc_keys_probe()
171 input->id.version = 0x0100; in adc_keys_probe()
173 __set_bit(EV_KEY, input->evbit); in adc_keys_probe()
174 for (i = 0; i < st->num_keys; i++) in adc_keys_probe()
175 __set_bit(st->map[i].keycode, input->keybit); in adc_keys_probe()
178 __set_bit(EV_REP, input->evbit); in adc_keys_probe()
182 dev_err(dev, "Unable to register input device: %d\n", error); in adc_keys_probe()
191 { .compatible = "adc-keys", },
206 MODULE_AUTHOR("Alexandre Belloni <alexandre.belloni@free-electrons.com>");
207 MODULE_DESCRIPTION("Input driver for resistor ladder connected on ADC");