Linux-libre 5.3.12-gnu
[librecmc/linux-libre.git] / drivers / input / rmi4 / rmi_f54.c
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * Copyright (c) 2012-2015 Synaptics Incorporated
4  * Copyright (C) 2016 Zodiac Inflight Innovations
5  */
6
7 #include <linux/kernel.h>
8 #include <linux/rmi.h>
9 #include <linux/input.h>
10 #include <linux/slab.h>
11 #include <linux/delay.h>
12 #include <linux/i2c.h>
13 #include <media/v4l2-device.h>
14 #include <media/v4l2-ioctl.h>
15 #include <media/videobuf2-v4l2.h>
16 #include <media/videobuf2-vmalloc.h>
17 #include "rmi_driver.h"
18
19 #define F54_NAME                "rmi4_f54"
20
21 /* F54 data offsets */
22 #define F54_REPORT_DATA_OFFSET  3
23 #define F54_FIFO_OFFSET         1
24 #define F54_NUM_TX_OFFSET       1
25 #define F54_NUM_RX_OFFSET       0
26
27 /* F54 commands */
28 #define F54_GET_REPORT          1
29 #define F54_FORCE_CAL           2
30
31 /* F54 capabilities */
32 #define F54_CAP_BASELINE        (1 << 2)
33 #define F54_CAP_IMAGE8          (1 << 3)
34 #define F54_CAP_IMAGE16         (1 << 6)
35
36 /**
37  * enum rmi_f54_report_type - RMI4 F54 report types
38  *
39  * @F54_8BIT_IMAGE:     Normalized 8-Bit Image Report. The capacitance variance
40  *                      from baseline for each pixel.
41  *
42  * @F54_16BIT_IMAGE:    Normalized 16-Bit Image Report. The capacitance variance
43  *                      from baseline for each pixel.
44  *
45  * @F54_RAW_16BIT_IMAGE:
46  *                      Raw 16-Bit Image Report. The raw capacitance for each
47  *                      pixel.
48  *
49  * @F54_TRUE_BASELINE:  True Baseline Report. The baseline capacitance for each
50  *                      pixel.
51  *
52  * @F54_FULL_RAW_CAP:   Full Raw Capacitance Report. The raw capacitance with
53  *                      low reference set to its minimum value and high
54  *                      reference set to its maximum value.
55  *
56  * @F54_FULL_RAW_CAP_RX_OFFSET_REMOVED:
57  *                      Full Raw Capacitance with Receiver Offset Removed
58  *                      Report. Set Low reference to its minimum value and high
59  *                      references to its maximum value, then report the raw
60  *                      capacitance for each pixel.
61  */
62 enum rmi_f54_report_type {
63         F54_REPORT_NONE = 0,
64         F54_8BIT_IMAGE = 1,
65         F54_16BIT_IMAGE = 2,
66         F54_RAW_16BIT_IMAGE = 3,
67         F54_TRUE_BASELINE = 9,
68         F54_FULL_RAW_CAP = 19,
69         F54_FULL_RAW_CAP_RX_OFFSET_REMOVED = 20,
70         F54_MAX_REPORT_TYPE,
71 };
72
73 static const char * const rmi_f54_report_type_names[] = {
74         [F54_REPORT_NONE]               = "Unknown",
75         [F54_8BIT_IMAGE]                = "Normalized 8-Bit Image",
76         [F54_16BIT_IMAGE]               = "Normalized 16-Bit Image",
77         [F54_RAW_16BIT_IMAGE]           = "Raw 16-Bit Image",
78         [F54_TRUE_BASELINE]             = "True Baseline",
79         [F54_FULL_RAW_CAP]              = "Full Raw Capacitance",
80         [F54_FULL_RAW_CAP_RX_OFFSET_REMOVED]
81                                         = "Full Raw Capacitance RX Offset Removed",
82 };
83
84 struct rmi_f54_reports {
85         int start;
86         int size;
87 };
88
89 struct f54_data {
90         struct rmi_function *fn;
91
92         u8 num_rx_electrodes;
93         u8 num_tx_electrodes;
94         u8 capabilities;
95         u16 clock_rate;
96         u8 family;
97
98         enum rmi_f54_report_type report_type;
99         u8 *report_data;
100         int report_size;
101         struct rmi_f54_reports standard_report[2];
102
103         bool is_busy;
104         struct mutex status_mutex;
105         struct mutex data_mutex;
106
107         struct workqueue_struct *workqueue;
108         struct delayed_work work;
109         unsigned long timeout;
110
111         struct completion cmd_done;
112
113         /* V4L2 support */
114         struct v4l2_device v4l2;
115         struct v4l2_pix_format format;
116         struct video_device vdev;
117         struct vb2_queue queue;
118         struct mutex lock;
119         int input;
120         enum rmi_f54_report_type inputs[F54_MAX_REPORT_TYPE];
121 };
122
123 /*
124  * Basic checks on report_type to ensure we write a valid type
125  * to the sensor.
126  */
127 static bool is_f54_report_type_valid(struct f54_data *f54,
128                                      enum rmi_f54_report_type reptype)
129 {
130         switch (reptype) {
131         case F54_8BIT_IMAGE:
132                 return f54->capabilities & F54_CAP_IMAGE8;
133         case F54_16BIT_IMAGE:
134         case F54_RAW_16BIT_IMAGE:
135                 return f54->capabilities & F54_CAP_IMAGE16;
136         case F54_TRUE_BASELINE:
137                 return f54->capabilities & F54_CAP_IMAGE16;
138         case F54_FULL_RAW_CAP:
139         case F54_FULL_RAW_CAP_RX_OFFSET_REMOVED:
140                 return true;
141         default:
142                 return false;
143         }
144 }
145
146 static enum rmi_f54_report_type rmi_f54_get_reptype(struct f54_data *f54,
147                                                 unsigned int i)
148 {
149         if (i >= F54_MAX_REPORT_TYPE)
150                 return F54_REPORT_NONE;
151
152         return f54->inputs[i];
153 }
154
155 static void rmi_f54_create_input_map(struct f54_data *f54)
156 {
157         int i = 0;
158         enum rmi_f54_report_type reptype;
159
160         for (reptype = 1; reptype < F54_MAX_REPORT_TYPE; reptype++) {
161                 if (!is_f54_report_type_valid(f54, reptype))
162                         continue;
163
164                 f54->inputs[i++] = reptype;
165         }
166
167         /* Remaining values are zero via kzalloc */
168 }
169
170 static int rmi_f54_request_report(struct rmi_function *fn, u8 report_type)
171 {
172         struct f54_data *f54 = dev_get_drvdata(&fn->dev);
173         struct rmi_device *rmi_dev = fn->rmi_dev;
174         int error;
175
176         /* Write Report Type into F54_AD_Data0 */
177         if (f54->report_type != report_type) {
178                 error = rmi_write(rmi_dev, f54->fn->fd.data_base_addr,
179                                   report_type);
180                 if (error)
181                         return error;
182                 f54->report_type = report_type;
183         }
184
185         /*
186          * Small delay after disabling interrupts to avoid race condition
187          * in firmare. This value is a bit higher than absolutely necessary.
188          * Should be removed once issue is resolved in firmware.
189          */
190         usleep_range(2000, 3000);
191
192         mutex_lock(&f54->data_mutex);
193
194         error = rmi_write(rmi_dev, fn->fd.command_base_addr, F54_GET_REPORT);
195         if (error < 0)
196                 goto unlock;
197
198         init_completion(&f54->cmd_done);
199
200         f54->is_busy = 1;
201         f54->timeout = jiffies + msecs_to_jiffies(100);
202
203         queue_delayed_work(f54->workqueue, &f54->work, 0);
204
205 unlock:
206         mutex_unlock(&f54->data_mutex);
207
208         return error;
209 }
210
211 static size_t rmi_f54_get_report_size(struct f54_data *f54)
212 {
213         struct rmi_device *rmi_dev = f54->fn->rmi_dev;
214         struct rmi_driver_data *drv_data = dev_get_drvdata(&rmi_dev->dev);
215         u8 rx = drv_data->num_rx_electrodes ? : f54->num_rx_electrodes;
216         u8 tx = drv_data->num_tx_electrodes ? : f54->num_tx_electrodes;
217         size_t size;
218
219         switch (rmi_f54_get_reptype(f54, f54->input)) {
220         case F54_8BIT_IMAGE:
221                 size = rx * tx;
222                 break;
223         case F54_16BIT_IMAGE:
224         case F54_RAW_16BIT_IMAGE:
225         case F54_TRUE_BASELINE:
226         case F54_FULL_RAW_CAP:
227         case F54_FULL_RAW_CAP_RX_OFFSET_REMOVED:
228                 size = sizeof(u16) * rx * tx;
229                 break;
230         default:
231                 size = 0;
232         }
233
234         return size;
235 }
236
237 static int rmi_f54_get_pixel_fmt(enum rmi_f54_report_type reptype, u32 *pixfmt)
238 {
239         int ret = 0;
240
241         switch (reptype) {
242         case F54_8BIT_IMAGE:
243                 *pixfmt = V4L2_TCH_FMT_DELTA_TD08;
244                 break;
245
246         case F54_16BIT_IMAGE:
247                 *pixfmt = V4L2_TCH_FMT_DELTA_TD16;
248                 break;
249
250         case F54_RAW_16BIT_IMAGE:
251         case F54_TRUE_BASELINE:
252         case F54_FULL_RAW_CAP:
253         case F54_FULL_RAW_CAP_RX_OFFSET_REMOVED:
254                 *pixfmt = V4L2_TCH_FMT_TU16;
255                 break;
256
257         case F54_REPORT_NONE:
258         case F54_MAX_REPORT_TYPE:
259                 ret = -EINVAL;
260                 break;
261         }
262
263         return ret;
264 }
265
266 static const struct v4l2_file_operations rmi_f54_video_fops = {
267         .owner = THIS_MODULE,
268         .open = v4l2_fh_open,
269         .release = vb2_fop_release,
270         .unlocked_ioctl = video_ioctl2,
271         .read = vb2_fop_read,
272         .mmap = vb2_fop_mmap,
273         .poll = vb2_fop_poll,
274 };
275
276 static int rmi_f54_queue_setup(struct vb2_queue *q, unsigned int *nbuffers,
277                                unsigned int *nplanes, unsigned int sizes[],
278                                struct device *alloc_devs[])
279 {
280         struct f54_data *f54 = q->drv_priv;
281
282         if (*nplanes)
283                 return sizes[0] < rmi_f54_get_report_size(f54) ? -EINVAL : 0;
284
285         *nplanes = 1;
286         sizes[0] = rmi_f54_get_report_size(f54);
287
288         return 0;
289 }
290
291 static void rmi_f54_buffer_queue(struct vb2_buffer *vb)
292 {
293         struct f54_data *f54 = vb2_get_drv_priv(vb->vb2_queue);
294         u16 *ptr;
295         enum vb2_buffer_state state;
296         enum rmi_f54_report_type reptype;
297         int ret;
298
299         mutex_lock(&f54->status_mutex);
300
301         reptype = rmi_f54_get_reptype(f54, f54->input);
302         if (reptype == F54_REPORT_NONE) {
303                 state = VB2_BUF_STATE_ERROR;
304                 goto done;
305         }
306
307         if (f54->is_busy) {
308                 state = VB2_BUF_STATE_ERROR;
309                 goto done;
310         }
311
312         ret = rmi_f54_request_report(f54->fn, reptype);
313         if (ret) {
314                 dev_err(&f54->fn->dev, "Error requesting F54 report\n");
315                 state = VB2_BUF_STATE_ERROR;
316                 goto done;
317         }
318
319         /* get frame data */
320         mutex_lock(&f54->data_mutex);
321
322         while (f54->is_busy) {
323                 mutex_unlock(&f54->data_mutex);
324                 if (!wait_for_completion_timeout(&f54->cmd_done,
325                                                  msecs_to_jiffies(1000))) {
326                         dev_err(&f54->fn->dev, "Timed out\n");
327                         state = VB2_BUF_STATE_ERROR;
328                         goto done;
329                 }
330                 mutex_lock(&f54->data_mutex);
331         }
332
333         ptr = vb2_plane_vaddr(vb, 0);
334         if (!ptr) {
335                 dev_err(&f54->fn->dev, "Error acquiring frame ptr\n");
336                 state = VB2_BUF_STATE_ERROR;
337                 goto data_done;
338         }
339
340         memcpy(ptr, f54->report_data, f54->report_size);
341         vb2_set_plane_payload(vb, 0, rmi_f54_get_report_size(f54));
342         state = VB2_BUF_STATE_DONE;
343
344 data_done:
345         mutex_unlock(&f54->data_mutex);
346 done:
347         vb2_buffer_done(vb, state);
348         mutex_unlock(&f54->status_mutex);
349 }
350
351 /* V4L2 structures */
352 static const struct vb2_ops rmi_f54_queue_ops = {
353         .queue_setup            = rmi_f54_queue_setup,
354         .buf_queue              = rmi_f54_buffer_queue,
355         .wait_prepare           = vb2_ops_wait_prepare,
356         .wait_finish            = vb2_ops_wait_finish,
357 };
358
359 static const struct vb2_queue rmi_f54_queue = {
360         .type = V4L2_BUF_TYPE_VIDEO_CAPTURE,
361         .io_modes = VB2_MMAP | VB2_USERPTR | VB2_DMABUF | VB2_READ,
362         .buf_struct_size = sizeof(struct vb2_v4l2_buffer),
363         .ops = &rmi_f54_queue_ops,
364         .mem_ops = &vb2_vmalloc_memops,
365         .timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_MONOTONIC,
366         .min_buffers_needed = 1,
367 };
368
369 static int rmi_f54_vidioc_querycap(struct file *file, void *priv,
370                                    struct v4l2_capability *cap)
371 {
372         struct f54_data *f54 = video_drvdata(file);
373
374         strlcpy(cap->driver, F54_NAME, sizeof(cap->driver));
375         strlcpy(cap->card, SYNAPTICS_INPUT_DEVICE_NAME, sizeof(cap->card));
376         snprintf(cap->bus_info, sizeof(cap->bus_info),
377                 "rmi4:%s", dev_name(&f54->fn->dev));
378
379         return 0;
380 }
381
382 static int rmi_f54_vidioc_enum_input(struct file *file, void *priv,
383                                      struct v4l2_input *i)
384 {
385         struct f54_data *f54 = video_drvdata(file);
386         enum rmi_f54_report_type reptype;
387
388         reptype = rmi_f54_get_reptype(f54, i->index);
389         if (reptype == F54_REPORT_NONE)
390                 return -EINVAL;
391
392         i->type = V4L2_INPUT_TYPE_TOUCH;
393
394         strlcpy(i->name, rmi_f54_report_type_names[reptype], sizeof(i->name));
395         return 0;
396 }
397
398 static int rmi_f54_set_input(struct f54_data *f54, unsigned int i)
399 {
400         struct rmi_device *rmi_dev = f54->fn->rmi_dev;
401         struct rmi_driver_data *drv_data = dev_get_drvdata(&rmi_dev->dev);
402         u8 rx = drv_data->num_rx_electrodes ? : f54->num_rx_electrodes;
403         u8 tx = drv_data->num_tx_electrodes ? : f54->num_tx_electrodes;
404         struct v4l2_pix_format *f = &f54->format;
405         enum rmi_f54_report_type reptype;
406         int ret;
407
408         reptype = rmi_f54_get_reptype(f54, i);
409         if (reptype == F54_REPORT_NONE)
410                 return -EINVAL;
411
412         ret = rmi_f54_get_pixel_fmt(reptype, &f->pixelformat);
413         if (ret)
414                 return ret;
415
416         f54->input = i;
417
418         f->width = rx;
419         f->height = tx;
420         f->field = V4L2_FIELD_NONE;
421         f->colorspace = V4L2_COLORSPACE_RAW;
422         f->bytesperline = f->width * sizeof(u16);
423         f->sizeimage = f->width * f->height * sizeof(u16);
424
425         return 0;
426 }
427
428 static int rmi_f54_vidioc_s_input(struct file *file, void *priv, unsigned int i)
429 {
430         return rmi_f54_set_input(video_drvdata(file), i);
431 }
432
433 static int rmi_f54_vidioc_g_input(struct file *file, void *priv,
434                                   unsigned int *i)
435 {
436         struct f54_data *f54 = video_drvdata(file);
437
438         *i = f54->input;
439
440         return 0;
441 }
442
443 static int rmi_f54_vidioc_fmt(struct file *file, void *priv,
444                               struct v4l2_format *f)
445 {
446         struct f54_data *f54 = video_drvdata(file);
447
448         f->fmt.pix = f54->format;
449
450         return 0;
451 }
452
453 static int rmi_f54_vidioc_enum_fmt(struct file *file, void *priv,
454                                    struct v4l2_fmtdesc *fmt)
455 {
456         struct f54_data *f54 = video_drvdata(file);
457
458         if (fmt->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
459                 return -EINVAL;
460
461         if (fmt->index)
462                 return -EINVAL;
463
464         fmt->pixelformat = f54->format.pixelformat;
465
466         return 0;
467 }
468
469 static int rmi_f54_vidioc_g_parm(struct file *file, void *fh,
470                                  struct v4l2_streamparm *a)
471 {
472         if (a->type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
473                 return -EINVAL;
474
475         a->parm.capture.readbuffers = 1;
476         a->parm.capture.timeperframe.numerator = 1;
477         a->parm.capture.timeperframe.denominator = 10;
478         return 0;
479 }
480
481 static const struct v4l2_ioctl_ops rmi_f54_video_ioctl_ops = {
482         .vidioc_querycap        = rmi_f54_vidioc_querycap,
483
484         .vidioc_enum_fmt_vid_cap = rmi_f54_vidioc_enum_fmt,
485         .vidioc_s_fmt_vid_cap   = rmi_f54_vidioc_fmt,
486         .vidioc_g_fmt_vid_cap   = rmi_f54_vidioc_fmt,
487         .vidioc_try_fmt_vid_cap = rmi_f54_vidioc_fmt,
488         .vidioc_g_parm          = rmi_f54_vidioc_g_parm,
489
490         .vidioc_enum_input      = rmi_f54_vidioc_enum_input,
491         .vidioc_g_input         = rmi_f54_vidioc_g_input,
492         .vidioc_s_input         = rmi_f54_vidioc_s_input,
493
494         .vidioc_reqbufs         = vb2_ioctl_reqbufs,
495         .vidioc_create_bufs     = vb2_ioctl_create_bufs,
496         .vidioc_querybuf        = vb2_ioctl_querybuf,
497         .vidioc_qbuf            = vb2_ioctl_qbuf,
498         .vidioc_dqbuf           = vb2_ioctl_dqbuf,
499         .vidioc_expbuf          = vb2_ioctl_expbuf,
500
501         .vidioc_streamon        = vb2_ioctl_streamon,
502         .vidioc_streamoff       = vb2_ioctl_streamoff,
503 };
504
505 static const struct video_device rmi_f54_video_device = {
506         .name = "Synaptics RMI4",
507         .fops = &rmi_f54_video_fops,
508         .ioctl_ops = &rmi_f54_video_ioctl_ops,
509         .release = video_device_release_empty,
510         .device_caps = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_TOUCH |
511                        V4L2_CAP_READWRITE | V4L2_CAP_STREAMING,
512 };
513
514 static void rmi_f54_work(struct work_struct *work)
515 {
516         struct f54_data *f54 = container_of(work, struct f54_data, work.work);
517         struct rmi_function *fn = f54->fn;
518         u8 fifo[2];
519         struct rmi_f54_reports *report;
520         int report_size;
521         u8 command;
522         u8 *data;
523         int error;
524
525         data = f54->report_data;
526         report_size = rmi_f54_get_report_size(f54);
527         if (report_size == 0) {
528                 dev_err(&fn->dev, "Bad report size, report type=%d\n",
529                                 f54->report_type);
530                 error = -EINVAL;
531                 goto error;     /* retry won't help */
532         }
533         f54->standard_report[0].size = report_size;
534         report = f54->standard_report;
535
536         mutex_lock(&f54->data_mutex);
537
538         /*
539          * Need to check if command has completed.
540          * If not try again later.
541          */
542         error = rmi_read(fn->rmi_dev, f54->fn->fd.command_base_addr,
543                          &command);
544         if (error) {
545                 dev_err(&fn->dev, "Failed to read back command\n");
546                 goto error;
547         }
548         if (command & F54_GET_REPORT) {
549                 if (time_after(jiffies, f54->timeout)) {
550                         dev_err(&fn->dev, "Get report command timed out\n");
551                         error = -ETIMEDOUT;
552                 }
553                 report_size = 0;
554                 goto error;
555         }
556
557         rmi_dbg(RMI_DEBUG_FN, &fn->dev, "Get report command completed, reading data\n");
558
559         report_size = 0;
560         for (; report->size; report++) {
561                 fifo[0] = report->start & 0xff;
562                 fifo[1] = (report->start >> 8) & 0xff;
563                 error = rmi_write_block(fn->rmi_dev,
564                                         fn->fd.data_base_addr + F54_FIFO_OFFSET,
565                                         fifo, sizeof(fifo));
566                 if (error) {
567                         dev_err(&fn->dev, "Failed to set fifo start offset\n");
568                         goto abort;
569                 }
570
571                 error = rmi_read_block(fn->rmi_dev, fn->fd.data_base_addr +
572                                        F54_REPORT_DATA_OFFSET, data,
573                                        report->size);
574                 if (error) {
575                         dev_err(&fn->dev, "%s: read [%d bytes] returned %d\n",
576                                 __func__, report->size, error);
577                         goto abort;
578                 }
579                 data += report->size;
580                 report_size += report->size;
581         }
582
583 abort:
584         f54->report_size = error ? 0 : report_size;
585 error:
586         if (error)
587                 report_size = 0;
588
589         if (report_size == 0 && !error) {
590                 queue_delayed_work(f54->workqueue, &f54->work,
591                                    msecs_to_jiffies(1));
592         } else {
593                 f54->is_busy = false;
594                 complete(&f54->cmd_done);
595         }
596
597         mutex_unlock(&f54->data_mutex);
598 }
599
600 static int rmi_f54_config(struct rmi_function *fn)
601 {
602         struct rmi_driver *drv = fn->rmi_dev->driver;
603
604         drv->clear_irq_bits(fn->rmi_dev, fn->irq_mask);
605
606         return 0;
607 }
608
609 static int rmi_f54_detect(struct rmi_function *fn)
610 {
611         int error;
612         struct f54_data *f54;
613         u8 buf[6];
614
615         f54 = dev_get_drvdata(&fn->dev);
616
617         error = rmi_read_block(fn->rmi_dev, fn->fd.query_base_addr,
618                                buf, sizeof(buf));
619         if (error) {
620                 dev_err(&fn->dev, "%s: Failed to query F54 properties\n",
621                         __func__);
622                 return error;
623         }
624
625         f54->num_rx_electrodes = buf[0];
626         f54->num_tx_electrodes = buf[1];
627         f54->capabilities = buf[2];
628         f54->clock_rate = buf[3] | (buf[4] << 8);
629         f54->family = buf[5];
630
631         rmi_dbg(RMI_DEBUG_FN, &fn->dev, "F54 num_rx_electrodes: %d\n",
632                 f54->num_rx_electrodes);
633         rmi_dbg(RMI_DEBUG_FN, &fn->dev, "F54 num_tx_electrodes: %d\n",
634                 f54->num_tx_electrodes);
635         rmi_dbg(RMI_DEBUG_FN, &fn->dev, "F54 capabilities: 0x%x\n",
636                 f54->capabilities);
637         rmi_dbg(RMI_DEBUG_FN, &fn->dev, "F54 clock rate: 0x%x\n",
638                 f54->clock_rate);
639         rmi_dbg(RMI_DEBUG_FN, &fn->dev, "F54 family: 0x%x\n",
640                 f54->family);
641
642         f54->is_busy = false;
643
644         return 0;
645 }
646
647 static int rmi_f54_probe(struct rmi_function *fn)
648 {
649         struct f54_data *f54;
650         int ret;
651         u8 rx, tx;
652
653         f54 = devm_kzalloc(&fn->dev, sizeof(struct f54_data), GFP_KERNEL);
654         if (!f54)
655                 return -ENOMEM;
656
657         f54->fn = fn;
658         dev_set_drvdata(&fn->dev, f54);
659
660         ret = rmi_f54_detect(fn);
661         if (ret)
662                 return ret;
663
664         mutex_init(&f54->data_mutex);
665         mutex_init(&f54->status_mutex);
666
667         rx = f54->num_rx_electrodes;
668         tx = f54->num_tx_electrodes;
669         f54->report_data = devm_kzalloc(&fn->dev,
670                                         array3_size(tx, rx, sizeof(u16)),
671                                         GFP_KERNEL);
672         if (f54->report_data == NULL)
673                 return -ENOMEM;
674
675         INIT_DELAYED_WORK(&f54->work, rmi_f54_work);
676
677         f54->workqueue = create_singlethread_workqueue("rmi4-poller");
678         if (!f54->workqueue)
679                 return -ENOMEM;
680
681         rmi_f54_create_input_map(f54);
682         rmi_f54_set_input(f54, 0);
683
684         /* register video device */
685         strlcpy(f54->v4l2.name, F54_NAME, sizeof(f54->v4l2.name));
686         ret = v4l2_device_register(&fn->dev, &f54->v4l2);
687         if (ret) {
688                 dev_err(&fn->dev, "Unable to register video dev.\n");
689                 goto remove_wq;
690         }
691
692         /* initialize the queue */
693         mutex_init(&f54->lock);
694         f54->queue = rmi_f54_queue;
695         f54->queue.drv_priv = f54;
696         f54->queue.lock = &f54->lock;
697         f54->queue.dev = &fn->dev;
698
699         ret = vb2_queue_init(&f54->queue);
700         if (ret)
701                 goto remove_v4l2;
702
703         f54->vdev = rmi_f54_video_device;
704         f54->vdev.v4l2_dev = &f54->v4l2;
705         f54->vdev.lock = &f54->lock;
706         f54->vdev.vfl_dir = VFL_DIR_RX;
707         f54->vdev.queue = &f54->queue;
708         video_set_drvdata(&f54->vdev, f54);
709
710         ret = video_register_device(&f54->vdev, VFL_TYPE_TOUCH, -1);
711         if (ret) {
712                 dev_err(&fn->dev, "Unable to register video subdevice.");
713                 goto remove_v4l2;
714         }
715
716         return 0;
717
718 remove_v4l2:
719         v4l2_device_unregister(&f54->v4l2);
720 remove_wq:
721         cancel_delayed_work_sync(&f54->work);
722         flush_workqueue(f54->workqueue);
723         destroy_workqueue(f54->workqueue);
724         return ret;
725 }
726
727 static void rmi_f54_remove(struct rmi_function *fn)
728 {
729         struct f54_data *f54 = dev_get_drvdata(&fn->dev);
730
731         video_unregister_device(&f54->vdev);
732         v4l2_device_unregister(&f54->v4l2);
733         destroy_workqueue(f54->workqueue);
734 }
735
736 struct rmi_function_handler rmi_f54_handler = {
737         .driver = {
738                 .name = F54_NAME,
739         },
740         .func = 0x54,
741         .probe = rmi_f54_probe,
742         .config = rmi_f54_config,
743         .remove = rmi_f54_remove,
744 };