Lines Matching +full:event +full:- +full:prox
1 // SPDX-License-Identifier: GPL-2.0-only
11 #include <linux/hid-sensor-hub.h>
14 #include "../common/hid-sensors/hid-sensor-trigger.h"
99 if (chan->scan_index >= prox_state->num_channels) in prox_read_raw()
100 return -EINVAL; in prox_read_raw()
101 address = prox_state->channel2usage[chan->scan_index]; in prox_read_raw()
102 report_id = prox_state->prox_attr[chan->scan_index].report_id; in prox_read_raw()
103 hsdev = prox_state->common_attributes.hsdev; in prox_read_raw()
104 min = prox_state->prox_attr[chan->scan_index].logical_minimum; in prox_read_raw()
105 hid_sensor_power_state(&prox_state->common_attributes, true); in prox_read_raw()
107 hsdev->usage, in prox_read_raw()
112 if (prox_state->channel2usage[chan->scan_index] == in prox_read_raw()
115 hid_sensor_power_state(&prox_state->common_attributes, false); in prox_read_raw()
119 *val = prox_state->scale_pre_decml; in prox_read_raw()
120 *val2 = prox_state->scale_post_decml; in prox_read_raw()
121 ret_type = prox_state->scale_precision; in prox_read_raw()
125 prox_state->prox_attr[chan->scan_index].unit_expo); in prox_read_raw()
130 &prox_state->common_attributes, val, val2); in prox_read_raw()
134 &prox_state->common_attributes, val, val2); in prox_read_raw()
137 ret_type = -EINVAL; in prox_read_raw()
157 &prox_state->common_attributes, val, val2); in prox_write_raw()
161 &prox_state->common_attributes, val, val2); in prox_write_raw()
164 ret = -EINVAL; in prox_write_raw()
175 /* Callback handler to send event after all samples are received and captured */
183 dev_dbg(&indio_dev->dev, "prox_proc_event\n"); in prox_proc_event()
184 if (atomic_read(&prox_state->common_attributes.data_ready)) { in prox_proc_event()
185 dev_dbg(&indio_dev->dev, "hid_sensor_push_data\n"); in prox_proc_event()
186 iio_push_to_buffers(indio_dev, &prox_state->human_presence); in prox_proc_event()
203 for (chan = 0; chan < prox_state->num_channels; chan++) in prox_capture_sample()
204 if (prox_state->channel2usage[chan] == usage_id) in prox_capture_sample()
206 if (chan == prox_state->num_channels) in prox_capture_sample()
207 return -EINVAL; in prox_capture_sample()
214 prox_state->human_presence[chan] = *(u8 *)raw_data * multiplier; in prox_capture_sample()
217 prox_state->human_presence[chan] = *(u32 *)raw_data * multiplier; in prox_capture_sample()
221 return -EINVAL; in prox_capture_sample()
229 struct iio_chan_spec *channels = st->channels; in prox_parse_report()
239 hsdev->usage, in prox_parse_report()
241 &st->prox_attr[index]); in prox_parse_report()
244 st->channel2usage[index] = usage_id; in prox_parse_report()
245 st->scan_mask[0] |= BIT(index); in prox_parse_report()
249 st->prox_attr[index].size); in prox_parse_report()
250 dev_dbg(&pdev->dev, "prox %x:%x\n", st->prox_attr[index].index, in prox_parse_report()
251 st->prox_attr[index].report_id); in prox_parse_report()
258 st->num_channels = index; in prox_parse_report()
266 struct hid_sensor_hub_device *hsdev = dev_get_platdata(&pdev->dev); in hid_prox_probe()
268 static const char *name = "prox"; in hid_prox_probe()
272 indio_dev = devm_iio_device_alloc(&pdev->dev, in hid_prox_probe()
275 return -ENOMEM; in hid_prox_probe()
279 prox_state->common_attributes.hsdev = hsdev; in hid_prox_probe()
280 prox_state->common_attributes.pdev = pdev; in hid_prox_probe()
282 ret = hid_sensor_parse_common_attributes(hsdev, hsdev->usage, in hid_prox_probe()
283 &prox_state->common_attributes, in hid_prox_probe()
287 dev_err(&pdev->dev, "failed to setup common attributes\n"); in hid_prox_probe()
293 dev_err(&pdev->dev, "failed to setup attributes\n"); in hid_prox_probe()
297 indio_dev->num_channels = prox_state->num_channels; in hid_prox_probe()
298 indio_dev->channels = prox_state->channels; in hid_prox_probe()
299 indio_dev->available_scan_masks = prox_state->scan_mask; in hid_prox_probe()
300 indio_dev->info = &prox_info; in hid_prox_probe()
301 indio_dev->name = name; in hid_prox_probe()
302 indio_dev->modes = INDIO_DIRECT_MODE; in hid_prox_probe()
304 atomic_set(&prox_state->common_attributes.data_ready, 0); in hid_prox_probe()
307 &prox_state->common_attributes); in hid_prox_probe()
309 dev_err(&pdev->dev, "trigger setup failed\n"); in hid_prox_probe()
315 dev_err(&pdev->dev, "device register failed\n"); in hid_prox_probe()
319 prox_state->callbacks.send_event = prox_proc_event; in hid_prox_probe()
320 prox_state->callbacks.capture_sample = prox_capture_sample; in hid_prox_probe()
321 prox_state->callbacks.pdev = pdev; in hid_prox_probe()
322 ret = sensor_hub_register_callback(hsdev, hsdev->usage, in hid_prox_probe()
323 &prox_state->callbacks); in hid_prox_probe()
325 dev_err(&pdev->dev, "callback reg failed\n"); in hid_prox_probe()
334 hid_sensor_remove_trigger(indio_dev, &prox_state->common_attributes); in hid_prox_probe()
341 struct hid_sensor_hub_device *hsdev = dev_get_platdata(&pdev->dev); in hid_prox_remove()
345 sensor_hub_remove_callback(hsdev, hsdev->usage); in hid_prox_remove()
347 hid_sensor_remove_trigger(indio_dev, &prox_state->common_attributes); in hid_prox_remove()
352 /* Format: HID-SENSOR-usage_id_in_hex_lowercase */
353 .name = "HID-SENSOR-200011",
356 /* Format: HID-SENSOR-tag-usage_id_in_hex_lowercase */
357 .name = "HID-SENSOR-LISS-0226",