f54 127 drivers/input/rmi4/rmi_f54.c static bool is_f54_report_type_valid(struct f54_data *f54, f54 132 drivers/input/rmi4/rmi_f54.c return f54->capabilities & F54_CAP_IMAGE8; f54 135 drivers/input/rmi4/rmi_f54.c return f54->capabilities & F54_CAP_IMAGE16; f54 137 drivers/input/rmi4/rmi_f54.c return f54->capabilities & F54_CAP_IMAGE16; f54 146 drivers/input/rmi4/rmi_f54.c static enum rmi_f54_report_type rmi_f54_get_reptype(struct f54_data *f54, f54 152 drivers/input/rmi4/rmi_f54.c return f54->inputs[i]; f54 155 drivers/input/rmi4/rmi_f54.c static void rmi_f54_create_input_map(struct f54_data *f54) f54 161 drivers/input/rmi4/rmi_f54.c if (!is_f54_report_type_valid(f54, reptype)) f54 164 drivers/input/rmi4/rmi_f54.c f54->inputs[i++] = reptype; f54 172 drivers/input/rmi4/rmi_f54.c struct f54_data *f54 = dev_get_drvdata(&fn->dev); f54 177 drivers/input/rmi4/rmi_f54.c if (f54->report_type != report_type) { f54 178 drivers/input/rmi4/rmi_f54.c error = rmi_write(rmi_dev, f54->fn->fd.data_base_addr, f54 182 drivers/input/rmi4/rmi_f54.c f54->report_type = report_type; f54 192 drivers/input/rmi4/rmi_f54.c mutex_lock(&f54->data_mutex); f54 198 drivers/input/rmi4/rmi_f54.c init_completion(&f54->cmd_done); f54 200 drivers/input/rmi4/rmi_f54.c f54->is_busy = 1; f54 201 drivers/input/rmi4/rmi_f54.c f54->timeout = jiffies + msecs_to_jiffies(100); f54 203 drivers/input/rmi4/rmi_f54.c queue_delayed_work(f54->workqueue, &f54->work, 0); f54 206 drivers/input/rmi4/rmi_f54.c mutex_unlock(&f54->data_mutex); f54 211 drivers/input/rmi4/rmi_f54.c static size_t rmi_f54_get_report_size(struct f54_data *f54) f54 213 drivers/input/rmi4/rmi_f54.c struct rmi_device *rmi_dev = f54->fn->rmi_dev; f54 215 drivers/input/rmi4/rmi_f54.c u8 rx = drv_data->num_rx_electrodes ? : f54->num_rx_electrodes; f54 216 drivers/input/rmi4/rmi_f54.c u8 tx = drv_data->num_tx_electrodes ? : f54->num_tx_electrodes; f54 219 drivers/input/rmi4/rmi_f54.c switch (rmi_f54_get_reptype(f54, f54->input)) { f54 280 drivers/input/rmi4/rmi_f54.c struct f54_data *f54 = q->drv_priv; f54 283 drivers/input/rmi4/rmi_f54.c return sizes[0] < rmi_f54_get_report_size(f54) ? -EINVAL : 0; f54 286 drivers/input/rmi4/rmi_f54.c sizes[0] = rmi_f54_get_report_size(f54); f54 293 drivers/input/rmi4/rmi_f54.c struct f54_data *f54 = vb2_get_drv_priv(vb->vb2_queue); f54 299 drivers/input/rmi4/rmi_f54.c mutex_lock(&f54->status_mutex); f54 301 drivers/input/rmi4/rmi_f54.c reptype = rmi_f54_get_reptype(f54, f54->input); f54 307 drivers/input/rmi4/rmi_f54.c if (f54->is_busy) { f54 312 drivers/input/rmi4/rmi_f54.c ret = rmi_f54_request_report(f54->fn, reptype); f54 314 drivers/input/rmi4/rmi_f54.c dev_err(&f54->fn->dev, "Error requesting F54 report\n"); f54 320 drivers/input/rmi4/rmi_f54.c mutex_lock(&f54->data_mutex); f54 322 drivers/input/rmi4/rmi_f54.c while (f54->is_busy) { f54 323 drivers/input/rmi4/rmi_f54.c mutex_unlock(&f54->data_mutex); f54 324 drivers/input/rmi4/rmi_f54.c if (!wait_for_completion_timeout(&f54->cmd_done, f54 326 drivers/input/rmi4/rmi_f54.c dev_err(&f54->fn->dev, "Timed out\n"); f54 330 drivers/input/rmi4/rmi_f54.c mutex_lock(&f54->data_mutex); f54 335 drivers/input/rmi4/rmi_f54.c dev_err(&f54->fn->dev, "Error acquiring frame ptr\n"); f54 340 drivers/input/rmi4/rmi_f54.c memcpy(ptr, f54->report_data, f54->report_size); f54 341 drivers/input/rmi4/rmi_f54.c vb2_set_plane_payload(vb, 0, rmi_f54_get_report_size(f54)); f54 345 drivers/input/rmi4/rmi_f54.c mutex_unlock(&f54->data_mutex); f54 348 drivers/input/rmi4/rmi_f54.c mutex_unlock(&f54->status_mutex); f54 372 drivers/input/rmi4/rmi_f54.c struct f54_data *f54 = video_drvdata(file); f54 377 drivers/input/rmi4/rmi_f54.c "rmi4:%s", dev_name(&f54->fn->dev)); f54 385 drivers/input/rmi4/rmi_f54.c struct f54_data *f54 = video_drvdata(file); f54 388 drivers/input/rmi4/rmi_f54.c reptype = rmi_f54_get_reptype(f54, i->index); f54 398 drivers/input/rmi4/rmi_f54.c static int rmi_f54_set_input(struct f54_data *f54, unsigned int i) f54 400 drivers/input/rmi4/rmi_f54.c struct rmi_device *rmi_dev = f54->fn->rmi_dev; f54 402 drivers/input/rmi4/rmi_f54.c u8 rx = drv_data->num_rx_electrodes ? : f54->num_rx_electrodes; f54 403 drivers/input/rmi4/rmi_f54.c u8 tx = drv_data->num_tx_electrodes ? : f54->num_tx_electrodes; f54 404 drivers/input/rmi4/rmi_f54.c struct v4l2_pix_format *f = &f54->format; f54 408 drivers/input/rmi4/rmi_f54.c reptype = rmi_f54_get_reptype(f54, i); f54 416 drivers/input/rmi4/rmi_f54.c f54->input = i; f54 436 drivers/input/rmi4/rmi_f54.c struct f54_data *f54 = video_drvdata(file); f54 438 drivers/input/rmi4/rmi_f54.c *i = f54->input; f54 446 drivers/input/rmi4/rmi_f54.c struct f54_data *f54 = video_drvdata(file); f54 448 drivers/input/rmi4/rmi_f54.c f->fmt.pix = f54->format; f54 456 drivers/input/rmi4/rmi_f54.c struct f54_data *f54 = video_drvdata(file); f54 464 drivers/input/rmi4/rmi_f54.c fmt->pixelformat = f54->format.pixelformat; f54 516 drivers/input/rmi4/rmi_f54.c struct f54_data *f54 = container_of(work, struct f54_data, work.work); f54 517 drivers/input/rmi4/rmi_f54.c struct rmi_function *fn = f54->fn; f54 525 drivers/input/rmi4/rmi_f54.c data = f54->report_data; f54 526 drivers/input/rmi4/rmi_f54.c report_size = rmi_f54_get_report_size(f54); f54 529 drivers/input/rmi4/rmi_f54.c f54->report_type); f54 533 drivers/input/rmi4/rmi_f54.c f54->standard_report[0].size = report_size; f54 534 drivers/input/rmi4/rmi_f54.c report = f54->standard_report; f54 536 drivers/input/rmi4/rmi_f54.c mutex_lock(&f54->data_mutex); f54 542 drivers/input/rmi4/rmi_f54.c error = rmi_read(fn->rmi_dev, f54->fn->fd.command_base_addr, f54 549 drivers/input/rmi4/rmi_f54.c if (time_after(jiffies, f54->timeout)) { f54 584 drivers/input/rmi4/rmi_f54.c f54->report_size = error ? 0 : report_size; f54 590 drivers/input/rmi4/rmi_f54.c queue_delayed_work(f54->workqueue, &f54->work, f54 593 drivers/input/rmi4/rmi_f54.c f54->is_busy = false; f54 594 drivers/input/rmi4/rmi_f54.c complete(&f54->cmd_done); f54 597 drivers/input/rmi4/rmi_f54.c mutex_unlock(&f54->data_mutex); f54 612 drivers/input/rmi4/rmi_f54.c struct f54_data *f54; f54 615 drivers/input/rmi4/rmi_f54.c f54 = dev_get_drvdata(&fn->dev); f54 625 drivers/input/rmi4/rmi_f54.c f54->num_rx_electrodes = buf[0]; f54 626 drivers/input/rmi4/rmi_f54.c f54->num_tx_electrodes = buf[1]; f54 627 drivers/input/rmi4/rmi_f54.c f54->capabilities = buf[2]; f54 628 drivers/input/rmi4/rmi_f54.c f54->clock_rate = buf[3] | (buf[4] << 8); f54 629 drivers/input/rmi4/rmi_f54.c f54->family = buf[5]; f54 632 drivers/input/rmi4/rmi_f54.c f54->num_rx_electrodes); f54 634 drivers/input/rmi4/rmi_f54.c f54->num_tx_electrodes); f54 636 drivers/input/rmi4/rmi_f54.c f54->capabilities); f54 638 drivers/input/rmi4/rmi_f54.c f54->clock_rate); f54 640 drivers/input/rmi4/rmi_f54.c f54->family); f54 642 drivers/input/rmi4/rmi_f54.c f54->is_busy = false; f54 649 drivers/input/rmi4/rmi_f54.c struct f54_data *f54; f54 653 drivers/input/rmi4/rmi_f54.c f54 = devm_kzalloc(&fn->dev, sizeof(struct f54_data), GFP_KERNEL); f54 654 drivers/input/rmi4/rmi_f54.c if (!f54) f54 657 drivers/input/rmi4/rmi_f54.c f54->fn = fn; f54 658 drivers/input/rmi4/rmi_f54.c dev_set_drvdata(&fn->dev, f54); f54 664 drivers/input/rmi4/rmi_f54.c mutex_init(&f54->data_mutex); f54 665 drivers/input/rmi4/rmi_f54.c mutex_init(&f54->status_mutex); f54 667 drivers/input/rmi4/rmi_f54.c rx = f54->num_rx_electrodes; f54 668 drivers/input/rmi4/rmi_f54.c tx = f54->num_tx_electrodes; f54 669 drivers/input/rmi4/rmi_f54.c f54->report_data = devm_kzalloc(&fn->dev, f54 672 drivers/input/rmi4/rmi_f54.c if (f54->report_data == NULL) f54 675 drivers/input/rmi4/rmi_f54.c INIT_DELAYED_WORK(&f54->work, rmi_f54_work); f54 677 drivers/input/rmi4/rmi_f54.c f54->workqueue = create_singlethread_workqueue("rmi4-poller"); f54 678 drivers/input/rmi4/rmi_f54.c if (!f54->workqueue) f54 681 drivers/input/rmi4/rmi_f54.c rmi_f54_create_input_map(f54); f54 682 drivers/input/rmi4/rmi_f54.c rmi_f54_set_input(f54, 0); f54 685 drivers/input/rmi4/rmi_f54.c strlcpy(f54->v4l2.name, F54_NAME, sizeof(f54->v4l2.name)); f54 686 drivers/input/rmi4/rmi_f54.c ret = v4l2_device_register(&fn->dev, &f54->v4l2); f54 693 drivers/input/rmi4/rmi_f54.c mutex_init(&f54->lock); f54 694 drivers/input/rmi4/rmi_f54.c f54->queue = rmi_f54_queue; f54 695 drivers/input/rmi4/rmi_f54.c f54->queue.drv_priv = f54; f54 696 drivers/input/rmi4/rmi_f54.c f54->queue.lock = &f54->lock; f54 697 drivers/input/rmi4/rmi_f54.c f54->queue.dev = &fn->dev; f54 699 drivers/input/rmi4/rmi_f54.c ret = vb2_queue_init(&f54->queue); f54 703 drivers/input/rmi4/rmi_f54.c f54->vdev = rmi_f54_video_device; f54 704 drivers/input/rmi4/rmi_f54.c f54->vdev.v4l2_dev = &f54->v4l2; f54 705 drivers/input/rmi4/rmi_f54.c f54->vdev.lock = &f54->lock; f54 706 drivers/input/rmi4/rmi_f54.c f54->vdev.vfl_dir = VFL_DIR_RX; f54 707 drivers/input/rmi4/rmi_f54.c f54->vdev.queue = &f54->queue; f54 708 drivers/input/rmi4/rmi_f54.c video_set_drvdata(&f54->vdev, f54); f54 710 drivers/input/rmi4/rmi_f54.c ret = video_register_device(&f54->vdev, VFL_TYPE_TOUCH, -1); f54 719 drivers/input/rmi4/rmi_f54.c v4l2_device_unregister(&f54->v4l2); f54 721 drivers/input/rmi4/rmi_f54.c cancel_delayed_work_sync(&f54->work); f54 722 drivers/input/rmi4/rmi_f54.c flush_workqueue(f54->workqueue); f54 723 drivers/input/rmi4/rmi_f54.c destroy_workqueue(f54->workqueue); f54 729 drivers/input/rmi4/rmi_f54.c struct f54_data *f54 = dev_get_drvdata(&fn->dev); f54 731 drivers/input/rmi4/rmi_f54.c video_unregister_device(&f54->vdev); f54 732 drivers/input/rmi4/rmi_f54.c v4l2_device_unregister(&f54->v4l2); f54 733 drivers/input/rmi4/rmi_f54.c destroy_workqueue(f54->workqueue);