Lines Matching refs:f54
128 static bool is_f54_report_type_valid(struct f54_data *f54,
133 return f54->capabilities & F54_CAP_IMAGE8;
136 return f54->capabilities & F54_CAP_IMAGE16;
138 return f54->capabilities & F54_CAP_IMAGE16;
147 static enum rmi_f54_report_type rmi_f54_get_reptype(struct f54_data *f54,
153 return f54->inputs[i];
156 static void rmi_f54_create_input_map(struct f54_data *f54)
162 if (!is_f54_report_type_valid(f54, reptype))
165 f54->inputs[i++] = reptype;
173 struct f54_data *f54 = dev_get_drvdata(&fn->dev);
178 if (f54->report_type != report_type) {
179 error = rmi_write(rmi_dev, f54->fn->fd.data_base_addr,
183 f54->report_type = report_type;
193 mutex_lock(&f54->data_mutex);
199 init_completion(&f54->cmd_done);
201 f54->is_busy = 1;
202 f54->timeout = jiffies + msecs_to_jiffies(100);
204 queue_delayed_work(f54->workqueue, &f54->work, 0);
207 mutex_unlock(&f54->data_mutex);
212 static size_t rmi_f54_get_report_size(struct f54_data *f54)
214 struct rmi_device *rmi_dev = f54->fn->rmi_dev;
216 u8 rx = drv_data->num_rx_electrodes ? : f54->num_rx_electrodes;
217 u8 tx = drv_data->num_tx_electrodes ? : f54->num_tx_electrodes;
220 switch (rmi_f54_get_reptype(f54, f54->input)) {
281 struct f54_data *f54 = q->drv_priv;
284 return sizes[0] < rmi_f54_get_report_size(f54) ? -EINVAL : 0;
287 sizes[0] = rmi_f54_get_report_size(f54);
295 struct f54_data *f54 = vb2_get_drv_priv(vb->vb2_queue);
301 mutex_lock(&f54->status_mutex);
304 reptype = rmi_f54_get_reptype(f54, f54->input);
310 if (f54->is_busy) {
315 ret = rmi_f54_request_report(f54->fn, reptype);
317 dev_err(&f54->fn->dev, "Error requesting F54 report\n");
323 mutex_lock(&f54->data_mutex);
325 while (f54->is_busy) {
326 mutex_unlock(&f54->data_mutex);
327 if (!wait_for_completion_timeout(&f54->cmd_done,
329 dev_err(&f54->fn->dev, "Timed out\n");
333 mutex_lock(&f54->data_mutex);
338 dev_err(&f54->fn->dev, "Error acquiring frame ptr\n");
343 memcpy(ptr, f54->report_data, f54->report_size);
344 vb2_set_plane_payload(vb, 0, rmi_f54_get_report_size(f54));
348 mutex_unlock(&f54->data_mutex);
352 vbuf->sequence = f54->sequence++;
354 mutex_unlock(&f54->status_mutex);
359 struct f54_data *f54 = vb2_get_drv_priv(q);
361 f54->sequence = 0;
385 struct f54_data *f54 = video_drvdata(file);
390 "rmi4:%s", dev_name(&f54->fn->dev));
398 struct f54_data *f54 = video_drvdata(file);
401 reptype = rmi_f54_get_reptype(f54, i->index);
411 static int rmi_f54_set_input(struct f54_data *f54, unsigned int i)
413 struct rmi_device *rmi_dev = f54->fn->rmi_dev;
415 u8 rx = drv_data->num_rx_electrodes ? : f54->num_rx_electrodes;
416 u8 tx = drv_data->num_tx_electrodes ? : f54->num_tx_electrodes;
417 struct v4l2_pix_format *f = &f54->format;
421 reptype = rmi_f54_get_reptype(f54, i);
429 f54->input = i;
449 struct f54_data *f54 = video_drvdata(file);
451 *i = f54->input;
459 struct f54_data *f54 = video_drvdata(file);
461 f->fmt.pix = f54->format;
469 struct f54_data *f54 = video_drvdata(file);
477 fmt->pixelformat = f54->format.pixelformat;
529 struct f54_data *f54 = container_of(work, struct f54_data, work.work);
530 struct rmi_function *fn = f54->fn;
537 report_size = rmi_f54_get_report_size(f54);
540 f54->report_type);
545 mutex_lock(&f54->data_mutex);
551 error = rmi_read(fn->rmi_dev, f54->fn->fd.command_base_addr,
558 if (time_after(jiffies, f54->timeout)) {
583 f54->report_data + i, size);
592 f54->report_size = error ? 0 : report_size;
598 queue_delayed_work(f54->workqueue, &f54->work,
601 f54->is_busy = false;
602 complete(&f54->cmd_done);
605 mutex_unlock(&f54->data_mutex);
620 struct f54_data *f54;
623 f54 = dev_get_drvdata(&fn->dev);
633 f54->num_rx_electrodes = buf[0];
634 f54->num_tx_electrodes = buf[1];
635 f54->capabilities = buf[2];
636 f54->clock_rate = buf[3] | (buf[4] << 8);
637 f54->family = buf[5];
640 f54->num_rx_electrodes);
642 f54->num_tx_electrodes);
644 f54->capabilities);
646 f54->clock_rate);
648 f54->family);
650 f54->is_busy = false;
657 struct f54_data *f54;
661 f54 = devm_kzalloc(&fn->dev, sizeof(struct f54_data), GFP_KERNEL);
662 if (!f54)
665 f54->fn = fn;
666 dev_set_drvdata(&fn->dev, f54);
672 mutex_init(&f54->data_mutex);
673 mutex_init(&f54->status_mutex);
675 rx = f54->num_rx_electrodes;
676 tx = f54->num_tx_electrodes;
677 f54->report_data = devm_kzalloc(&fn->dev,
680 if (f54->report_data == NULL)
683 INIT_DELAYED_WORK(&f54->work, rmi_f54_work);
685 f54->workqueue = create_singlethread_workqueue("rmi4-poller");
686 if (!f54->workqueue)
689 rmi_f54_create_input_map(f54);
690 rmi_f54_set_input(f54, 0);
693 strlcpy(f54->v4l2.name, F54_NAME, sizeof(f54->v4l2.name));
694 ret = v4l2_device_register(&fn->dev, &f54->v4l2);
701 mutex_init(&f54->lock);
702 f54->queue = rmi_f54_queue;
703 f54->queue.drv_priv = f54;
704 f54->queue.lock = &f54->lock;
705 f54->queue.dev = &fn->dev;
707 ret = vb2_queue_init(&f54->queue);
711 f54->vdev = rmi_f54_video_device;
712 f54->vdev.v4l2_dev = &f54->v4l2;
713 f54->vdev.lock = &f54->lock;
714 f54->vdev.vfl_dir = VFL_DIR_RX;
715 f54->vdev.queue = &f54->queue;
716 video_set_drvdata(&f54->vdev, f54);
718 ret = video_register_device(&f54->vdev, VFL_TYPE_TOUCH, -1);
727 v4l2_device_unregister(&f54->v4l2);
729 cancel_delayed_work_sync(&f54->work);
730 flush_workqueue(f54->workqueue);
731 destroy_workqueue(f54->workqueue);
737 struct f54_data *f54 = dev_get_drvdata(&fn->dev);
739 video_unregister_device(&f54->vdev);
740 v4l2_device_unregister(&f54->v4l2);
741 destroy_workqueue(f54->workqueue);