Lines Matching refs:f54
134 static bool is_f54_report_type_valid(struct f54_data *f54,
139 return f54->capabilities & F54_CAP_IMAGE8;
142 return f54->capabilities & F54_CAP_IMAGE16;
144 return f54->capabilities & F54_CAP_IMAGE16;
153 static enum rmi_f54_report_type rmi_f54_get_reptype(struct f54_data *f54,
159 return f54->inputs[i];
162 static void rmi_f54_create_input_map(struct f54_data *f54)
168 if (!is_f54_report_type_valid(f54, reptype))
171 f54->inputs[i++] = reptype;
179 struct f54_data *f54 = dev_get_drvdata(&fn->dev);
184 if (f54->report_type != report_type) {
185 error = rmi_write(rmi_dev, f54->fn->fd.data_base_addr,
189 f54->report_type = report_type;
199 mutex_lock(&f54->data_mutex);
205 init_completion(&f54->cmd_done);
207 f54->is_busy = 1;
208 f54->timeout = jiffies + msecs_to_jiffies(100);
210 queue_delayed_work(f54->workqueue, &f54->work, 0);
213 mutex_unlock(&f54->data_mutex);
218 static size_t rmi_f54_get_report_size(struct f54_data *f54)
220 struct rmi_device *rmi_dev = f54->fn->rmi_dev;
222 u8 rx = drv_data->num_rx_electrodes ? : f54->num_rx_electrodes;
223 u8 tx = drv_data->num_tx_electrodes ? : f54->num_tx_electrodes;
226 switch (rmi_f54_get_reptype(f54, f54->input)) {
287 struct f54_data *f54 = q->drv_priv;
290 return sizes[0] < rmi_f54_get_report_size(f54) ? -EINVAL : 0;
293 sizes[0] = rmi_f54_get_report_size(f54);
301 struct f54_data *f54 = vb2_get_drv_priv(vb->vb2_queue);
307 mutex_lock(&f54->status_mutex);
310 reptype = rmi_f54_get_reptype(f54, f54->input);
316 if (f54->is_busy) {
321 ret = rmi_f54_request_report(f54->fn, reptype);
323 dev_err(&f54->fn->dev, "Error requesting F54 report\n");
329 mutex_lock(&f54->data_mutex);
331 while (f54->is_busy) {
332 mutex_unlock(&f54->data_mutex);
333 if (!wait_for_completion_timeout(&f54->cmd_done,
335 dev_err(&f54->fn->dev, "Timed out\n");
339 mutex_lock(&f54->data_mutex);
344 dev_err(&f54->fn->dev, "Error acquiring frame ptr\n");
349 memcpy(ptr, f54->report_data, f54->report_size);
350 vb2_set_plane_payload(vb, 0, rmi_f54_get_report_size(f54));
354 mutex_unlock(&f54->data_mutex);
358 vbuf->sequence = f54->sequence++;
360 mutex_unlock(&f54->status_mutex);
365 struct f54_data *f54 = vb2_get_drv_priv(q);
367 f54->sequence = 0;
391 struct f54_data *f54 = video_drvdata(file);
396 "rmi4:%s", dev_name(&f54->fn->dev));
404 struct f54_data *f54 = video_drvdata(file);
407 reptype = rmi_f54_get_reptype(f54, i->index);
417 static int rmi_f54_set_input(struct f54_data *f54, unsigned int i)
419 struct rmi_device *rmi_dev = f54->fn->rmi_dev;
421 u8 rx = drv_data->num_rx_electrodes ? : f54->num_rx_electrodes;
422 u8 tx = drv_data->num_tx_electrodes ? : f54->num_tx_electrodes;
423 struct v4l2_pix_format *f = &f54->format;
427 reptype = rmi_f54_get_reptype(f54, i);
435 f54->input = i;
455 struct f54_data *f54 = video_drvdata(file);
457 *i = f54->input;
465 struct f54_data *f54 = video_drvdata(file);
467 f->fmt.pix = f54->format;
475 struct f54_data *f54 = video_drvdata(file);
483 fmt->pixelformat = f54->format.pixelformat;
535 struct f54_data *f54 = container_of(work, struct f54_data, work.work);
536 struct rmi_function *fn = f54->fn;
543 report_size = rmi_f54_get_report_size(f54);
546 f54->report_type);
551 mutex_lock(&f54->data_mutex);
557 error = rmi_read(fn->rmi_dev, f54->fn->fd.command_base_addr,
564 if (time_after(jiffies, f54->timeout)) {
589 f54->report_data + i, size);
598 f54->report_size = error ? 0 : report_size;
604 queue_delayed_work(f54->workqueue, &f54->work,
607 f54->is_busy = false;
608 complete(&f54->cmd_done);
611 mutex_unlock(&f54->data_mutex);
626 struct f54_data *f54;
629 f54 = dev_get_drvdata(&fn->dev);
639 f54->num_rx_electrodes = buf[0];
640 f54->num_tx_electrodes = buf[1];
641 f54->capabilities = buf[2];
642 f54->clock_rate = buf[3] | (buf[4] << 8);
643 f54->family = buf[5];
646 f54->num_rx_electrodes);
648 f54->num_tx_electrodes);
650 f54->capabilities);
652 f54->clock_rate);
654 f54->family);
656 f54->is_busy = false;
663 struct f54_data *f54;
667 f54 = devm_kzalloc(&fn->dev, sizeof(struct f54_data), GFP_KERNEL);
668 if (!f54)
671 f54->fn = fn;
672 dev_set_drvdata(&fn->dev, f54);
678 mutex_init(&f54->data_mutex);
679 mutex_init(&f54->status_mutex);
681 rx = f54->num_rx_electrodes;
682 tx = f54->num_tx_electrodes;
683 f54->report_data = devm_kzalloc(&fn->dev,
686 if (f54->report_data == NULL)
689 INIT_DELAYED_WORK(&f54->work, rmi_f54_work);
691 f54->workqueue = create_singlethread_workqueue("rmi4-poller");
692 if (!f54->workqueue)
695 rmi_f54_create_input_map(f54);
696 rmi_f54_set_input(f54, 0);
699 strscpy(f54->v4l2.name, F54_NAME, sizeof(f54->v4l2.name));
700 ret = v4l2_device_register(&fn->dev, &f54->v4l2);
707 mutex_init(&f54->lock);
708 f54->queue = rmi_f54_queue;
709 f54->queue.drv_priv = f54;
710 f54->queue.lock = &f54->lock;
711 f54->queue.dev = &fn->dev;
713 ret = vb2_queue_init(&f54->queue);
717 f54->vdev = rmi_f54_video_device;
718 f54->vdev.v4l2_dev = &f54->v4l2;
719 f54->vdev.lock = &f54->lock;
720 f54->vdev.vfl_dir = VFL_DIR_RX;
721 f54->vdev.queue = &f54->queue;
722 video_set_drvdata(&f54->vdev, f54);
724 ret = video_register_device(&f54->vdev, VFL_TYPE_TOUCH, -1);
733 v4l2_device_unregister(&f54->v4l2);
735 cancel_delayed_work_sync(&f54->work);
736 destroy_workqueue(f54->workqueue);
742 struct f54_data *f54 = dev_get_drvdata(&fn->dev);
744 video_unregister_device(&f54->vdev);
745 v4l2_device_unregister(&f54->v4l2);
746 destroy_workqueue(f54->workqueue);