Merge tag 'hwmon-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/groeck...
[linux-drm-fsl-dcu.git] / drivers / staging / media / lirc / lirc_zilog.c
1 /*
2  * i2c IR lirc driver for devices with zilog IR processors
3  *
4  * Copyright (c) 2000 Gerd Knorr <kraxel@goldbach.in-berlin.de>
5  * modified for PixelView (BT878P+W/FM) by
6  *      Michal Kochanowicz <mkochano@pld.org.pl>
7  *      Christoph Bartelmus <lirc@bartelmus.de>
8  * modified for KNC ONE TV Station/Anubis Typhoon TView Tuner by
9  *      Ulrich Mueller <ulrich.mueller42@web.de>
10  * modified for Asus TV-Box and Creative/VisionTek BreakOut-Box by
11  *      Stefan Jahn <stefan@lkcc.org>
12  * modified for inclusion into kernel sources by
13  *      Jerome Brock <jbrock@users.sourceforge.net>
14  * modified for Leadtek Winfast PVR2000 by
15  *      Thomas Reitmayr (treitmayr@yahoo.com)
16  * modified for Hauppauge PVR-150 IR TX device by
17  *      Mark Weaver <mark@npsl.co.uk>
18  * changed name from lirc_pvr150 to lirc_zilog, works on more than pvr-150
19  *      Jarod Wilson <jarod@redhat.com>
20  *
21  * parts are cut&pasted from the lirc_i2c.c driver
22  *
23  * Numerous changes updating lirc_zilog.c in kernel 2.6.38 and later are
24  * Copyright (C) 2011 Andy Walls <awalls@md.metrocast.net>
25  *
26  *  This program is free software; you can redistribute it and/or modify
27  *  it under the terms of the GNU General Public License as published by
28  *  the Free Software Foundation; either version 2 of the License, or
29  *  (at your option) any later version.
30  *
31  *  This program is distributed in the hope that it will be useful,
32  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
33  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
34  *  GNU General Public License for more details.
35  *
36  *  You should have received a copy of the GNU General Public License
37  *  along with this program; if not, write to the Free Software
38  *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
39  *
40  */
41
42 #include <linux/module.h>
43 #include <linux/kmod.h>
44 #include <linux/kernel.h>
45 #include <linux/sched.h>
46 #include <linux/fs.h>
47 #include <linux/poll.h>
48 #include <linux/string.h>
49 #include <linux/timer.h>
50 #include <linux/delay.h>
51 #include <linux/completion.h>
52 #include <linux/errno.h>
53 #include <linux/slab.h>
54 #include <linux/i2c.h>
55 #include <linux/firmware.h>
56 #include <linux/vmalloc.h>
57
58 #include <linux/mutex.h>
59 #include <linux/kthread.h>
60
61 #include <media/lirc_dev.h>
62 #include <media/lirc.h>
63
64 /* Max transfer size done by I2C transfer functions */
65 #define MAX_XFER_SIZE  64
66
67 struct IR;
68
69 struct IR_rx {
70         struct kref ref;
71         struct IR *ir;
72
73         /* RX device */
74         struct mutex client_lock;
75         struct i2c_client *c;
76
77         /* RX polling thread data */
78         struct task_struct *task;
79
80         /* RX read data */
81         unsigned char b[3];
82         bool hdpvr_data_fmt;
83 };
84
85 struct IR_tx {
86         struct kref ref;
87         struct IR *ir;
88
89         /* TX device */
90         struct mutex client_lock;
91         struct i2c_client *c;
92
93         /* TX additional actions needed */
94         int need_boot;
95         bool post_tx_ready_poll;
96 };
97
98 struct IR {
99         struct kref ref;
100         struct list_head list;
101
102         /* FIXME spinlock access to l.features */
103         struct lirc_driver l;
104         struct lirc_buffer rbuf;
105
106         struct mutex ir_lock;
107         atomic_t open_count;
108
109         struct i2c_adapter *adapter;
110
111         spinlock_t rx_ref_lock; /* struct IR_rx kref get()/put() */
112         struct IR_rx *rx;
113
114         spinlock_t tx_ref_lock; /* struct IR_tx kref get()/put() */
115         struct IR_tx *tx;
116 };
117
118 /* IR transceiver instance object list */
119 /*
120  * This lock is used for the following:
121  * a. ir_devices_list access, insertions, deletions
122  * b. struct IR kref get()s and put()s
123  * c. serialization of ir_probe() for the two i2c_clients for a Z8
124  */
125 static DEFINE_MUTEX(ir_devices_lock);
126 static LIST_HEAD(ir_devices_list);
127
128 /* Block size for IR transmitter */
129 #define TX_BLOCK_SIZE   99
130
131 /* Hauppauge IR transmitter data */
132 struct tx_data_struct {
133         /* Boot block */
134         unsigned char *boot_data;
135
136         /* Start of binary data block */
137         unsigned char *datap;
138
139         /* End of binary data block */
140         unsigned char *endp;
141
142         /* Number of installed codesets */
143         unsigned int num_code_sets;
144
145         /* Pointers to codesets */
146         unsigned char **code_sets;
147
148         /* Global fixed data template */
149         int fixed[TX_BLOCK_SIZE];
150 };
151
152 static struct tx_data_struct *tx_data;
153 static struct mutex tx_data_lock;
154
155 #define zilog_notify(s, args...) printk(KERN_NOTICE KBUILD_MODNAME ": " s, \
156                                         ## args)
157 #define zilog_error(s, args...) printk(KERN_ERR KBUILD_MODNAME ": " s, ## args)
158 #define zilog_info(s, args...) printk(KERN_INFO KBUILD_MODNAME ": " s, ## args)
159
160 /* module parameters */
161 static bool debug;      /* debug output */
162 static bool tx_only;    /* only handle the IR Tx function */
163 static int minor = -1;  /* minor number */
164
165 #define dprintk(fmt, args...)                                           \
166         do {                                                            \
167                 if (debug)                                              \
168                         printk(KERN_DEBUG KBUILD_MODNAME ": " fmt,      \
169                                  ## args);                              \
170         } while (0)
171
172
173 /* struct IR reference counting */
174 static struct IR *get_ir_device(struct IR *ir, bool ir_devices_lock_held)
175 {
176         if (ir_devices_lock_held) {
177                 kref_get(&ir->ref);
178         } else {
179                 mutex_lock(&ir_devices_lock);
180                 kref_get(&ir->ref);
181                 mutex_unlock(&ir_devices_lock);
182         }
183         return ir;
184 }
185
186 static void release_ir_device(struct kref *ref)
187 {
188         struct IR *ir = container_of(ref, struct IR, ref);
189
190         /*
191          * Things should be in this state by now:
192          * ir->rx set to NULL and deallocated - happens before ir->rx->ir put()
193          * ir->rx->task kthread stopped - happens before ir->rx->ir put()
194          * ir->tx set to NULL and deallocated - happens before ir->tx->ir put()
195          * ir->open_count ==  0 - happens on final close()
196          * ir_lock, tx_ref_lock, rx_ref_lock, all released
197          */
198         if (ir->l.minor >= 0 && ir->l.minor < MAX_IRCTL_DEVICES) {
199                 lirc_unregister_driver(ir->l.minor);
200                 ir->l.minor = MAX_IRCTL_DEVICES;
201         }
202         if (ir->rbuf.fifo_initialized)
203                 lirc_buffer_free(&ir->rbuf);
204         list_del(&ir->list);
205         kfree(ir);
206 }
207
208 static int put_ir_device(struct IR *ir, bool ir_devices_lock_held)
209 {
210         int released;
211
212         if (ir_devices_lock_held)
213                 return kref_put(&ir->ref, release_ir_device);
214
215         mutex_lock(&ir_devices_lock);
216         released = kref_put(&ir->ref, release_ir_device);
217         mutex_unlock(&ir_devices_lock);
218
219         return released;
220 }
221
222 /* struct IR_rx reference counting */
223 static struct IR_rx *get_ir_rx(struct IR *ir)
224 {
225         struct IR_rx *rx;
226
227         spin_lock(&ir->rx_ref_lock);
228         rx = ir->rx;
229         if (rx != NULL)
230                 kref_get(&rx->ref);
231         spin_unlock(&ir->rx_ref_lock);
232         return rx;
233 }
234
235 static void destroy_rx_kthread(struct IR_rx *rx, bool ir_devices_lock_held)
236 {
237         /* end up polling thread */
238         if (!IS_ERR_OR_NULL(rx->task)) {
239                 kthread_stop(rx->task);
240                 rx->task = NULL;
241                 /* Put the ir ptr that ir_probe() gave to the rx poll thread */
242                 put_ir_device(rx->ir, ir_devices_lock_held);
243         }
244 }
245
246 static void release_ir_rx(struct kref *ref)
247 {
248         struct IR_rx *rx = container_of(ref, struct IR_rx, ref);
249         struct IR *ir = rx->ir;
250
251         /*
252          * This release function can't do all the work, as we want
253          * to keep the rx_ref_lock a spinlock, and killing the poll thread
254          * and releasing the ir reference can cause a sleep.  That work is
255          * performed by put_ir_rx()
256          */
257         ir->l.features &= ~LIRC_CAN_REC_LIRCCODE;
258         /* Don't put_ir_device(rx->ir) here; lock can't be freed yet */
259         ir->rx = NULL;
260         /* Don't do the kfree(rx) here; we still need to kill the poll thread */
261         return;
262 }
263
264 static int put_ir_rx(struct IR_rx *rx, bool ir_devices_lock_held)
265 {
266         int released;
267         struct IR *ir = rx->ir;
268
269         spin_lock(&ir->rx_ref_lock);
270         released = kref_put(&rx->ref, release_ir_rx);
271         spin_unlock(&ir->rx_ref_lock);
272         /* Destroy the rx kthread while not holding the spinlock */
273         if (released) {
274                 destroy_rx_kthread(rx, ir_devices_lock_held);
275                 kfree(rx);
276                 /* Make sure we're not still in a poll_table somewhere */
277                 wake_up_interruptible(&ir->rbuf.wait_poll);
278         }
279         /* Do a reference put() for the rx->ir reference, if we released rx */
280         if (released)
281                 put_ir_device(ir, ir_devices_lock_held);
282         return released;
283 }
284
285 /* struct IR_tx reference counting */
286 static struct IR_tx *get_ir_tx(struct IR *ir)
287 {
288         struct IR_tx *tx;
289
290         spin_lock(&ir->tx_ref_lock);
291         tx = ir->tx;
292         if (tx != NULL)
293                 kref_get(&tx->ref);
294         spin_unlock(&ir->tx_ref_lock);
295         return tx;
296 }
297
298 static void release_ir_tx(struct kref *ref)
299 {
300         struct IR_tx *tx = container_of(ref, struct IR_tx, ref);
301         struct IR *ir = tx->ir;
302
303         ir->l.features &= ~LIRC_CAN_SEND_PULSE;
304         /* Don't put_ir_device(tx->ir) here, so our lock doesn't get freed */
305         ir->tx = NULL;
306         kfree(tx);
307 }
308
309 static int put_ir_tx(struct IR_tx *tx, bool ir_devices_lock_held)
310 {
311         int released;
312         struct IR *ir = tx->ir;
313
314         spin_lock(&ir->tx_ref_lock);
315         released = kref_put(&tx->ref, release_ir_tx);
316         spin_unlock(&ir->tx_ref_lock);
317         /* Do a reference put() for the tx->ir reference, if we released tx */
318         if (released)
319                 put_ir_device(ir, ir_devices_lock_held);
320         return released;
321 }
322
323 static int add_to_buf(struct IR *ir)
324 {
325         __u16 code;
326         unsigned char codes[2];
327         unsigned char keybuf[6];
328         int got_data = 0;
329         int ret;
330         int failures = 0;
331         unsigned char sendbuf[1] = { 0 };
332         struct lirc_buffer *rbuf = ir->l.rbuf;
333         struct IR_rx *rx;
334         struct IR_tx *tx;
335
336         if (lirc_buffer_full(rbuf)) {
337                 dprintk("buffer overflow\n");
338                 return -EOVERFLOW;
339         }
340
341         rx = get_ir_rx(ir);
342         if (rx == NULL)
343                 return -ENXIO;
344
345         /* Ensure our rx->c i2c_client remains valid for the duration */
346         mutex_lock(&rx->client_lock);
347         if (rx->c == NULL) {
348                 mutex_unlock(&rx->client_lock);
349                 put_ir_rx(rx, false);
350                 return -ENXIO;
351         }
352
353         tx = get_ir_tx(ir);
354
355         /*
356          * service the device as long as it is returning
357          * data and we have space
358          */
359         do {
360                 if (kthread_should_stop()) {
361                         ret = -ENODATA;
362                         break;
363                 }
364
365                 /*
366                  * Lock i2c bus for the duration.  RX/TX chips interfere so
367                  * this is worth it
368                  */
369                 mutex_lock(&ir->ir_lock);
370
371                 if (kthread_should_stop()) {
372                         mutex_unlock(&ir->ir_lock);
373                         ret = -ENODATA;
374                         break;
375                 }
376
377                 /*
378                  * Send random "poll command" (?)  Windows driver does this
379                  * and it is a good point to detect chip failure.
380                  */
381                 ret = i2c_master_send(rx->c, sendbuf, 1);
382                 if (ret != 1) {
383                         zilog_error("i2c_master_send failed with %d\n", ret);
384                         if (failures >= 3) {
385                                 mutex_unlock(&ir->ir_lock);
386                                 zilog_error("unable to read from the IR chip "
387                                             "after 3 resets, giving up\n");
388                                 break;
389                         }
390
391                         /* Looks like the chip crashed, reset it */
392                         zilog_error("polling the IR receiver chip failed, "
393                                     "trying reset\n");
394
395                         set_current_state(TASK_UNINTERRUPTIBLE);
396                         if (kthread_should_stop()) {
397                                 mutex_unlock(&ir->ir_lock);
398                                 ret = -ENODATA;
399                                 break;
400                         }
401                         schedule_timeout((100 * HZ + 999) / 1000);
402                         if (tx != NULL)
403                                 tx->need_boot = 1;
404
405                         ++failures;
406                         mutex_unlock(&ir->ir_lock);
407                         ret = 0;
408                         continue;
409                 }
410
411                 if (kthread_should_stop()) {
412                         mutex_unlock(&ir->ir_lock);
413                         ret = -ENODATA;
414                         break;
415                 }
416                 ret = i2c_master_recv(rx->c, keybuf, sizeof(keybuf));
417                 mutex_unlock(&ir->ir_lock);
418                 if (ret != sizeof(keybuf)) {
419                         zilog_error("i2c_master_recv failed with %d -- "
420                                     "keeping last read buffer\n", ret);
421                 } else {
422                         rx->b[0] = keybuf[3];
423                         rx->b[1] = keybuf[4];
424                         rx->b[2] = keybuf[5];
425                         dprintk("key (0x%02x/0x%02x)\n", rx->b[0], rx->b[1]);
426                 }
427
428                 /* key pressed ? */
429                 if (rx->hdpvr_data_fmt) {
430                         if (got_data && (keybuf[0] == 0x80)) {
431                                 ret = 0;
432                                 break;
433                         } else if (got_data && (keybuf[0] == 0x00)) {
434                                 ret = -ENODATA;
435                                 break;
436                         }
437                 } else if ((rx->b[0] & 0x80) == 0) {
438                         ret = got_data ? 0 : -ENODATA;
439                         break;
440                 }
441
442                 /* look what we have */
443                 code = (((__u16)rx->b[0] & 0x7f) << 6) | (rx->b[1] >> 2);
444
445                 codes[0] = (code >> 8) & 0xff;
446                 codes[1] = code & 0xff;
447
448                 /* return it */
449                 lirc_buffer_write(rbuf, codes);
450                 ++got_data;
451                 ret = 0;
452         } while (!lirc_buffer_full(rbuf));
453
454         mutex_unlock(&rx->client_lock);
455         if (tx != NULL)
456                 put_ir_tx(tx, false);
457         put_ir_rx(rx, false);
458         return ret;
459 }
460
461 /*
462  * Main function of the polling thread -- from lirc_dev.
463  * We don't fit the LIRC model at all anymore.  This is horrible, but
464  * basically we have a single RX/TX device with a nasty failure mode
465  * that needs to be accounted for across the pair.  lirc lets us provide
466  * fops, but prevents us from using the internal polling, etc. if we do
467  * so.  Hence the replication.  Might be neater to extend the LIRC model
468  * to account for this but I'd think it's a very special case of seriously
469  * messed up hardware.
470  */
471 static int lirc_thread(void *arg)
472 {
473         struct IR *ir = arg;
474         struct lirc_buffer *rbuf = ir->l.rbuf;
475
476         dprintk("poll thread started\n");
477
478         while (!kthread_should_stop()) {
479                 set_current_state(TASK_INTERRUPTIBLE);
480
481                 /* if device not opened, we can sleep half a second */
482                 if (atomic_read(&ir->open_count) == 0) {
483                         schedule_timeout(HZ/2);
484                         continue;
485                 }
486
487                 /*
488                  * This is ~113*2 + 24 + jitter (2*repeat gap + code length).
489                  * We use this interval as the chip resets every time you poll
490                  * it (bad!).  This is therefore just sufficient to catch all
491                  * of the button presses.  It makes the remote much more
492                  * responsive.  You can see the difference by running irw and
493                  * holding down a button.  With 100ms, the old polling
494                  * interval, you'll notice breaks in the repeat sequence
495                  * corresponding to lost keypresses.
496                  */
497                 schedule_timeout((260 * HZ) / 1000);
498                 if (kthread_should_stop())
499                         break;
500                 if (!add_to_buf(ir))
501                         wake_up_interruptible(&rbuf->wait_poll);
502         }
503
504         dprintk("poll thread ended\n");
505         return 0;
506 }
507
508 static int set_use_inc(void *data)
509 {
510         return 0;
511 }
512
513 static void set_use_dec(void *data)
514 {
515         return;
516 }
517
518 /* safe read of a uint32 (always network byte order) */
519 static int read_uint32(unsigned char **data,
520                                      unsigned char *endp, unsigned int *val)
521 {
522         if (*data + 4 > endp)
523                 return 0;
524         *val = ((*data)[0] << 24) | ((*data)[1] << 16) |
525                ((*data)[2] << 8) | (*data)[3];
526         *data += 4;
527         return 1;
528 }
529
530 /* safe read of a uint8 */
531 static int read_uint8(unsigned char **data,
532                                     unsigned char *endp, unsigned char *val)
533 {
534         if (*data + 1 > endp)
535                 return 0;
536         *val = *((*data)++);
537         return 1;
538 }
539
540 /* safe skipping of N bytes */
541 static int skip(unsigned char **data,
542                               unsigned char *endp, unsigned int distance)
543 {
544         if (*data + distance > endp)
545                 return 0;
546         *data += distance;
547         return 1;
548 }
549
550 /* decompress key data into the given buffer */
551 static int get_key_data(unsigned char *buf,
552                              unsigned int codeset, unsigned int key)
553 {
554         unsigned char *data, *endp, *diffs, *key_block;
555         unsigned char keys, ndiffs, id;
556         unsigned int base, lim, pos, i;
557
558         /* Binary search for the codeset */
559         for (base = 0, lim = tx_data->num_code_sets; lim; lim >>= 1) {
560                 pos = base + (lim >> 1);
561                 data = tx_data->code_sets[pos];
562
563                 if (!read_uint32(&data, tx_data->endp, &i))
564                         goto corrupt;
565
566                 if (i == codeset)
567                         break;
568                 else if (codeset > i) {
569                         base = pos + 1;
570                         --lim;
571                 }
572         }
573         /* Not found? */
574         if (!lim)
575                 return -EPROTO;
576
577         /* Set end of data block */
578         endp = pos < tx_data->num_code_sets - 1 ?
579                 tx_data->code_sets[pos + 1] : tx_data->endp;
580
581         /* Read the block header */
582         if (!read_uint8(&data, endp, &keys) ||
583             !read_uint8(&data, endp, &ndiffs) ||
584             ndiffs > TX_BLOCK_SIZE || keys == 0)
585                 goto corrupt;
586
587         /* Save diffs & skip */
588         diffs = data;
589         if (!skip(&data, endp, ndiffs))
590                 goto corrupt;
591
592         /* Read the id of the first key */
593         if (!read_uint8(&data, endp, &id))
594                 goto corrupt;
595
596         /* Unpack the first key's data */
597         for (i = 0; i < TX_BLOCK_SIZE; ++i) {
598                 if (tx_data->fixed[i] == -1) {
599                         if (!read_uint8(&data, endp, &buf[i]))
600                                 goto corrupt;
601                 } else {
602                         buf[i] = (unsigned char)tx_data->fixed[i];
603                 }
604         }
605
606         /* Early out key found/not found */
607         if (key == id)
608                 return 0;
609         if (keys == 1)
610                 return -EPROTO;
611
612         /* Sanity check */
613         key_block = data;
614         if (!skip(&data, endp, (keys - 1) * (ndiffs + 1)))
615                 goto corrupt;
616
617         /* Binary search for the key */
618         for (base = 0, lim = keys - 1; lim; lim >>= 1) {
619                 /* Seek to block */
620                 unsigned char *key_data;
621                 pos = base + (lim >> 1);
622                 key_data = key_block + (ndiffs + 1) * pos;
623
624                 if (*key_data == key) {
625                         /* skip key id */
626                         ++key_data;
627
628                         /* found, so unpack the diffs */
629                         for (i = 0; i < ndiffs; ++i) {
630                                 unsigned char val;
631                                 if (!read_uint8(&key_data, endp, &val) ||
632                                     diffs[i] >= TX_BLOCK_SIZE)
633                                         goto corrupt;
634                                 buf[diffs[i]] = val;
635                         }
636
637                         return 0;
638                 } else if (key > *key_data) {
639                         base = pos + 1;
640                         --lim;
641                 }
642         }
643         /* Key not found */
644         return -EPROTO;
645
646 corrupt:
647         zilog_error("firmware is corrupt\n");
648         return -EFAULT;
649 }
650
651 /* send a block of data to the IR TX device */
652 static int send_data_block(struct IR_tx *tx, unsigned char *data_block)
653 {
654         int i, j, ret;
655         unsigned char buf[5];
656
657         for (i = 0; i < TX_BLOCK_SIZE;) {
658                 int tosend = TX_BLOCK_SIZE - i;
659                 if (tosend > 4)
660                         tosend = 4;
661                 buf[0] = (unsigned char)(i + 1);
662                 for (j = 0; j < tosend; ++j)
663                         buf[1 + j] = data_block[i + j];
664                 dprintk("%*ph", 5, buf);
665                 ret = i2c_master_send(tx->c, buf, tosend + 1);
666                 if (ret != tosend + 1) {
667                         zilog_error("i2c_master_send failed with %d\n", ret);
668                         return ret < 0 ? ret : -EFAULT;
669                 }
670                 i += tosend;
671         }
672         return 0;
673 }
674
675 /* send boot data to the IR TX device */
676 static int send_boot_data(struct IR_tx *tx)
677 {
678         int ret, i;
679         unsigned char buf[4];
680
681         /* send the boot block */
682         ret = send_data_block(tx, tx_data->boot_data);
683         if (ret != 0)
684                 return ret;
685
686         /* Hit the go button to activate the new boot data */
687         buf[0] = 0x00;
688         buf[1] = 0x20;
689         ret = i2c_master_send(tx->c, buf, 2);
690         if (ret != 2) {
691                 zilog_error("i2c_master_send failed with %d\n", ret);
692                 return ret < 0 ? ret : -EFAULT;
693         }
694
695         /*
696          * Wait for zilog to settle after hitting go post boot block upload.
697          * Without this delay, the HD-PVR and HVR-1950 both return an -EIO
698          * upon attempting to get firmware revision, and tx probe thus fails.
699          */
700         for (i = 0; i < 10; i++) {
701                 ret = i2c_master_send(tx->c, buf, 1);
702                 if (ret == 1)
703                         break;
704                 udelay(100);
705         }
706
707         if (ret != 1) {
708                 zilog_error("i2c_master_send failed with %d\n", ret);
709                 return ret < 0 ? ret : -EFAULT;
710         }
711
712         /* Here comes the firmware version... (hopefully) */
713         ret = i2c_master_recv(tx->c, buf, 4);
714         if (ret != 4) {
715                 zilog_error("i2c_master_recv failed with %d\n", ret);
716                 return 0;
717         }
718         if ((buf[0] != 0x80) && (buf[0] != 0xa0)) {
719                 zilog_error("unexpected IR TX init response: %02x\n", buf[0]);
720                 return 0;
721         }
722         zilog_notify("Zilog/Hauppauge IR blaster firmware version "
723                      "%d.%d.%d loaded\n", buf[1], buf[2], buf[3]);
724
725         return 0;
726 }
727
728 /* unload "firmware", lock held */
729 static void fw_unload_locked(void)
730 {
731         if (tx_data) {
732                 if (tx_data->code_sets)
733                         vfree(tx_data->code_sets);
734
735                 if (tx_data->datap)
736                         vfree(tx_data->datap);
737
738                 vfree(tx_data);
739                 tx_data = NULL;
740                 dprintk("successfully unloaded IR blaster firmware\n");
741         }
742 }
743
744 /* unload "firmware" for the IR TX device */
745 static void fw_unload(void)
746 {
747         mutex_lock(&tx_data_lock);
748         fw_unload_locked();
749         mutex_unlock(&tx_data_lock);
750 }
751
752 /* load "firmware" for the IR TX device */
753 static int fw_load(struct IR_tx *tx)
754 {
755         int ret;
756         unsigned int i;
757         unsigned char *data, version, num_global_fixed;
758         const struct firmware *fw_entry;
759
760         /* Already loaded? */
761         mutex_lock(&tx_data_lock);
762         if (tx_data) {
763                 ret = 0;
764                 goto out;
765         }
766
767         /* Request codeset data file */
768         ret = request_firmware(&fw_entry, "haup-ir-blaster.bin", tx->ir->l.dev);
769         if (ret != 0) {
770                 zilog_error("firmware haup-ir-blaster.bin not available "
771                             "(%d)\n", ret);
772                 ret = ret < 0 ? ret : -EFAULT;
773                 goto out;
774         }
775         dprintk("firmware of size %zu loaded\n", fw_entry->size);
776
777         /* Parse the file */
778         tx_data = vmalloc(sizeof(*tx_data));
779         if (tx_data == NULL) {
780                 zilog_error("out of memory\n");
781                 release_firmware(fw_entry);
782                 ret = -ENOMEM;
783                 goto out;
784         }
785         tx_data->code_sets = NULL;
786
787         /* Copy the data so hotplug doesn't get confused and timeout */
788         tx_data->datap = vmalloc(fw_entry->size);
789         if (tx_data->datap == NULL) {
790                 zilog_error("out of memory\n");
791                 release_firmware(fw_entry);
792                 vfree(tx_data);
793                 ret = -ENOMEM;
794                 goto out;
795         }
796         memcpy(tx_data->datap, fw_entry->data, fw_entry->size);
797         tx_data->endp = tx_data->datap + fw_entry->size;
798         release_firmware(fw_entry); fw_entry = NULL;
799
800         /* Check version */
801         data = tx_data->datap;
802         if (!read_uint8(&data, tx_data->endp, &version))
803                 goto corrupt;
804         if (version != 1) {
805                 zilog_error("unsupported code set file version (%u, expected"
806                             "1) -- please upgrade to a newer driver",
807                             version);
808                 fw_unload_locked();
809                 ret = -EFAULT;
810                 goto out;
811         }
812
813         /* Save boot block for later */
814         tx_data->boot_data = data;
815         if (!skip(&data, tx_data->endp, TX_BLOCK_SIZE))
816                 goto corrupt;
817
818         if (!read_uint32(&data, tx_data->endp,
819                               &tx_data->num_code_sets))
820                 goto corrupt;
821
822         dprintk("%u IR blaster codesets loaded\n", tx_data->num_code_sets);
823
824         tx_data->code_sets = vmalloc(
825                 tx_data->num_code_sets * sizeof(char *));
826         if (tx_data->code_sets == NULL) {
827                 fw_unload_locked();
828                 ret = -ENOMEM;
829                 goto out;
830         }
831
832         for (i = 0; i < TX_BLOCK_SIZE; ++i)
833                 tx_data->fixed[i] = -1;
834
835         /* Read global fixed data template */
836         if (!read_uint8(&data, tx_data->endp, &num_global_fixed) ||
837             num_global_fixed > TX_BLOCK_SIZE)
838                 goto corrupt;
839         for (i = 0; i < num_global_fixed; ++i) {
840                 unsigned char pos, val;
841                 if (!read_uint8(&data, tx_data->endp, &pos) ||
842                     !read_uint8(&data, tx_data->endp, &val) ||
843                     pos >= TX_BLOCK_SIZE)
844                         goto corrupt;
845                 tx_data->fixed[pos] = (int)val;
846         }
847
848         /* Filch out the position of each code set */
849         for (i = 0; i < tx_data->num_code_sets; ++i) {
850                 unsigned int id;
851                 unsigned char keys;
852                 unsigned char ndiffs;
853
854                 /* Save the codeset position */
855                 tx_data->code_sets[i] = data;
856
857                 /* Read header */
858                 if (!read_uint32(&data, tx_data->endp, &id) ||
859                     !read_uint8(&data, tx_data->endp, &keys) ||
860                     !read_uint8(&data, tx_data->endp, &ndiffs) ||
861                     ndiffs > TX_BLOCK_SIZE || keys == 0)
862                         goto corrupt;
863
864                 /* skip diff positions */
865                 if (!skip(&data, tx_data->endp, ndiffs))
866                         goto corrupt;
867
868                 /*
869                  * After the diffs we have the first key id + data -
870                  * global fixed
871                  */
872                 if (!skip(&data, tx_data->endp,
873                                1 + TX_BLOCK_SIZE - num_global_fixed))
874                         goto corrupt;
875
876                 /* Then we have keys-1 blocks of key id+diffs */
877                 if (!skip(&data, tx_data->endp,
878                                (ndiffs + 1) * (keys - 1)))
879                         goto corrupt;
880         }
881         ret = 0;
882         goto out;
883
884 corrupt:
885         zilog_error("firmware is corrupt\n");
886         fw_unload_locked();
887         ret = -EFAULT;
888
889 out:
890         mutex_unlock(&tx_data_lock);
891         return ret;
892 }
893
894 /* copied from lirc_dev */
895 static ssize_t read(struct file *filep, char *outbuf, size_t n, loff_t *ppos)
896 {
897         struct IR *ir = filep->private_data;
898         struct IR_rx *rx;
899         struct lirc_buffer *rbuf = ir->l.rbuf;
900         int ret = 0, written = 0, retries = 0;
901         unsigned int m;
902         DECLARE_WAITQUEUE(wait, current);
903
904         dprintk("read called\n");
905         if (n % rbuf->chunk_size) {
906                 dprintk("read result = -EINVAL\n");
907                 return -EINVAL;
908         }
909
910         rx = get_ir_rx(ir);
911         if (rx == NULL)
912                 return -ENXIO;
913
914         /*
915          * we add ourselves to the task queue before buffer check
916          * to avoid losing scan code (in case when queue is awaken somewhere
917          * between while condition checking and scheduling)
918          */
919         add_wait_queue(&rbuf->wait_poll, &wait);
920         set_current_state(TASK_INTERRUPTIBLE);
921
922         /*
923          * while we didn't provide 'length' bytes, device is opened in blocking
924          * mode and 'copy_to_user' is happy, wait for data.
925          */
926         while (written < n && ret == 0) {
927                 if (lirc_buffer_empty(rbuf)) {
928                         /*
929                          * According to the read(2) man page, 'written' can be
930                          * returned as less than 'n', instead of blocking
931                          * again, returning -EWOULDBLOCK, or returning
932                          * -ERESTARTSYS
933                          */
934                         if (written)
935                                 break;
936                         if (filep->f_flags & O_NONBLOCK) {
937                                 ret = -EWOULDBLOCK;
938                                 break;
939                         }
940                         if (signal_pending(current)) {
941                                 ret = -ERESTARTSYS;
942                                 break;
943                         }
944                         schedule();
945                         set_current_state(TASK_INTERRUPTIBLE);
946                 } else {
947                         unsigned char buf[MAX_XFER_SIZE];
948
949                         if (rbuf->chunk_size > sizeof(buf)) {
950                                 zilog_error("chunk_size is too big (%d)!\n",
951                                             rbuf->chunk_size);
952                                 ret = -EINVAL;
953                                 break;
954                         }
955                         m = lirc_buffer_read(rbuf, buf);
956                         if (m == rbuf->chunk_size) {
957                                 ret = copy_to_user((void *)outbuf+written, buf,
958                                                    rbuf->chunk_size);
959                                 written += rbuf->chunk_size;
960                         } else {
961                                 retries++;
962                         }
963                         if (retries >= 5) {
964                                 zilog_error("Buffer read failed!\n");
965                                 ret = -EIO;
966                         }
967                 }
968         }
969
970         remove_wait_queue(&rbuf->wait_poll, &wait);
971         put_ir_rx(rx, false);
972         set_current_state(TASK_RUNNING);
973
974         dprintk("read result = %d (%s)\n", ret, ret ? "Error" : "OK");
975
976         return ret ? ret : written;
977 }
978
979 /* send a keypress to the IR TX device */
980 static int send_code(struct IR_tx *tx, unsigned int code, unsigned int key)
981 {
982         unsigned char data_block[TX_BLOCK_SIZE];
983         unsigned char buf[2];
984         int i, ret;
985
986         /* Get data for the codeset/key */
987         ret = get_key_data(data_block, code, key);
988
989         if (ret == -EPROTO) {
990                 zilog_error("failed to get data for code %u, key %u -- check "
991                             "lircd.conf entries\n", code, key);
992                 return ret;
993         } else if (ret != 0)
994                 return ret;
995
996         /* Send the data block */
997         ret = send_data_block(tx, data_block);
998         if (ret != 0)
999                 return ret;
1000
1001         /* Send data block length? */
1002         buf[0] = 0x00;
1003         buf[1] = 0x40;
1004         ret = i2c_master_send(tx->c, buf, 2);
1005         if (ret != 2) {
1006                 zilog_error("i2c_master_send failed with %d\n", ret);
1007                 return ret < 0 ? ret : -EFAULT;
1008         }
1009
1010         /* Give the z8 a moment to process data block */
1011         for (i = 0; i < 10; i++) {
1012                 ret = i2c_master_send(tx->c, buf, 1);
1013                 if (ret == 1)
1014                         break;
1015                 udelay(100);
1016         }
1017
1018         if (ret != 1) {
1019                 zilog_error("i2c_master_send failed with %d\n", ret);
1020                 return ret < 0 ? ret : -EFAULT;
1021         }
1022
1023         /* Send finished download? */
1024         ret = i2c_master_recv(tx->c, buf, 1);
1025         if (ret != 1) {
1026                 zilog_error("i2c_master_recv failed with %d\n", ret);
1027                 return ret < 0 ? ret : -EFAULT;
1028         }
1029         if (buf[0] != 0xA0) {
1030                 zilog_error("unexpected IR TX response #1: %02x\n",
1031                         buf[0]);
1032                 return -EFAULT;
1033         }
1034
1035         /* Send prepare command? */
1036         buf[0] = 0x00;
1037         buf[1] = 0x80;
1038         ret = i2c_master_send(tx->c, buf, 2);
1039         if (ret != 2) {
1040                 zilog_error("i2c_master_send failed with %d\n", ret);
1041                 return ret < 0 ? ret : -EFAULT;
1042         }
1043
1044         /*
1045          * The sleep bits aren't necessary on the HD PVR, and in fact, the
1046          * last i2c_master_recv always fails with a -5, so for now, we're
1047          * going to skip this whole mess and say we're done on the HD PVR
1048          */
1049         if (!tx->post_tx_ready_poll) {
1050                 dprintk("sent code %u, key %u\n", code, key);
1051                 return 0;
1052         }
1053
1054         /*
1055          * This bit NAKs until the device is ready, so we retry it
1056          * sleeping a bit each time.  This seems to be what the windows
1057          * driver does, approximately.
1058          * Try for up to 1s.
1059          */
1060         for (i = 0; i < 20; ++i) {
1061                 set_current_state(TASK_UNINTERRUPTIBLE);
1062                 schedule_timeout((50 * HZ + 999) / 1000);
1063                 ret = i2c_master_send(tx->c, buf, 1);
1064                 if (ret == 1)
1065                         break;
1066                 dprintk("NAK expected: i2c_master_send "
1067                         "failed with %d (try %d)\n", ret, i+1);
1068         }
1069         if (ret != 1) {
1070                 zilog_error("IR TX chip never got ready: last i2c_master_send "
1071                             "failed with %d\n", ret);
1072                 return ret < 0 ? ret : -EFAULT;
1073         }
1074
1075         /* Seems to be an 'ok' response */
1076         i = i2c_master_recv(tx->c, buf, 1);
1077         if (i != 1) {
1078                 zilog_error("i2c_master_recv failed with %d\n", ret);
1079                 return -EFAULT;
1080         }
1081         if (buf[0] != 0x80) {
1082                 zilog_error("unexpected IR TX response #2: %02x\n", buf[0]);
1083                 return -EFAULT;
1084         }
1085
1086         /* Oh good, it worked */
1087         dprintk("sent code %u, key %u\n", code, key);
1088         return 0;
1089 }
1090
1091 /*
1092  * Write a code to the device.  We take in a 32-bit number (an int) and then
1093  * decode this to a codeset/key index.  The key data is then decompressed and
1094  * sent to the device.  We have a spin lock as per i2c documentation to prevent
1095  * multiple concurrent sends which would probably cause the device to explode.
1096  */
1097 static ssize_t write(struct file *filep, const char *buf, size_t n,
1098                           loff_t *ppos)
1099 {
1100         struct IR *ir = filep->private_data;
1101         struct IR_tx *tx;
1102         size_t i;
1103         int failures = 0;
1104
1105         /* Validate user parameters */
1106         if (n % sizeof(int))
1107                 return -EINVAL;
1108
1109         /* Get a struct IR_tx reference */
1110         tx = get_ir_tx(ir);
1111         if (tx == NULL)
1112                 return -ENXIO;
1113
1114         /* Ensure our tx->c i2c_client remains valid for the duration */
1115         mutex_lock(&tx->client_lock);
1116         if (tx->c == NULL) {
1117                 mutex_unlock(&tx->client_lock);
1118                 put_ir_tx(tx, false);
1119                 return -ENXIO;
1120         }
1121
1122         /* Lock i2c bus for the duration */
1123         mutex_lock(&ir->ir_lock);
1124
1125         /* Send each keypress */
1126         for (i = 0; i < n;) {
1127                 int ret = 0;
1128                 int command;
1129
1130                 if (copy_from_user(&command, buf + i, sizeof(command))) {
1131                         mutex_unlock(&ir->ir_lock);
1132                         mutex_unlock(&tx->client_lock);
1133                         put_ir_tx(tx, false);
1134                         return -EFAULT;
1135                 }
1136
1137                 /* Send boot data first if required */
1138                 if (tx->need_boot == 1) {
1139                         /* Make sure we have the 'firmware' loaded, first */
1140                         ret = fw_load(tx);
1141                         if (ret != 0) {
1142                                 mutex_unlock(&ir->ir_lock);
1143                                 mutex_unlock(&tx->client_lock);
1144                                 put_ir_tx(tx, false);
1145                                 if (ret != -ENOMEM)
1146                                         ret = -EIO;
1147                                 return ret;
1148                         }
1149                         /* Prep the chip for transmitting codes */
1150                         ret = send_boot_data(tx);
1151                         if (ret == 0)
1152                                 tx->need_boot = 0;
1153                 }
1154
1155                 /* Send the code */
1156                 if (ret == 0) {
1157                         ret = send_code(tx, (unsigned)command >> 16,
1158                                             (unsigned)command & 0xFFFF);
1159                         if (ret == -EPROTO) {
1160                                 mutex_unlock(&ir->ir_lock);
1161                                 mutex_unlock(&tx->client_lock);
1162                                 put_ir_tx(tx, false);
1163                                 return ret;
1164                         }
1165                 }
1166
1167                 /*
1168                  * Hmm, a failure.  If we've had a few then give up, otherwise
1169                  * try a reset
1170                  */
1171                 if (ret != 0) {
1172                         /* Looks like the chip crashed, reset it */
1173                         zilog_error("sending to the IR transmitter chip "
1174                                     "failed, trying reset\n");
1175
1176                         if (failures >= 3) {
1177                                 zilog_error("unable to send to the IR chip "
1178                                             "after 3 resets, giving up\n");
1179                                 mutex_unlock(&ir->ir_lock);
1180                                 mutex_unlock(&tx->client_lock);
1181                                 put_ir_tx(tx, false);
1182                                 return ret;
1183                         }
1184                         set_current_state(TASK_UNINTERRUPTIBLE);
1185                         schedule_timeout((100 * HZ + 999) / 1000);
1186                         tx->need_boot = 1;
1187                         ++failures;
1188                 } else
1189                         i += sizeof(int);
1190         }
1191
1192         /* Release i2c bus */
1193         mutex_unlock(&ir->ir_lock);
1194
1195         mutex_unlock(&tx->client_lock);
1196
1197         /* Give back our struct IR_tx reference */
1198         put_ir_tx(tx, false);
1199
1200         /* All looks good */
1201         return n;
1202 }
1203
1204 /* copied from lirc_dev */
1205 static unsigned int poll(struct file *filep, poll_table *wait)
1206 {
1207         struct IR *ir = filep->private_data;
1208         struct IR_rx *rx;
1209         struct lirc_buffer *rbuf = ir->l.rbuf;
1210         unsigned int ret;
1211
1212         dprintk("poll called\n");
1213
1214         rx = get_ir_rx(ir);
1215         if (rx == NULL) {
1216                 /*
1217                  * Revisit this, if our poll function ever reports writeable
1218                  * status for Tx
1219                  */
1220                 dprintk("poll result = POLLERR\n");
1221                 return POLLERR;
1222         }
1223
1224         /*
1225          * Add our lirc_buffer's wait_queue to the poll_table. A wake up on
1226          * that buffer's wait queue indicates we may have a new poll status.
1227          */
1228         poll_wait(filep, &rbuf->wait_poll, wait);
1229
1230         /* Indicate what ops could happen immediately without blocking */
1231         ret = lirc_buffer_empty(rbuf) ? 0 : (POLLIN|POLLRDNORM);
1232
1233         dprintk("poll result = %s\n", ret ? "POLLIN|POLLRDNORM" : "none");
1234         return ret;
1235 }
1236
1237 static long ioctl(struct file *filep, unsigned int cmd, unsigned long arg)
1238 {
1239         struct IR *ir = filep->private_data;
1240         int result;
1241         unsigned long mode, features;
1242
1243         features = ir->l.features;
1244
1245         switch (cmd) {
1246         case LIRC_GET_LENGTH:
1247                 result = put_user((unsigned long)13,
1248                                   (unsigned long *)arg);
1249                 break;
1250         case LIRC_GET_FEATURES:
1251                 result = put_user(features, (unsigned long *) arg);
1252                 break;
1253         case LIRC_GET_REC_MODE:
1254                 if (!(features&LIRC_CAN_REC_MASK))
1255                         return -ENOSYS;
1256
1257                 result = put_user(LIRC_REC2MODE
1258                                   (features&LIRC_CAN_REC_MASK),
1259                                   (unsigned long *)arg);
1260                 break;
1261         case LIRC_SET_REC_MODE:
1262                 if (!(features&LIRC_CAN_REC_MASK))
1263                         return -ENOSYS;
1264
1265                 result = get_user(mode, (unsigned long *)arg);
1266                 if (!result && !(LIRC_MODE2REC(mode) & features))
1267                         result = -EINVAL;
1268                 break;
1269         case LIRC_GET_SEND_MODE:
1270                 if (!(features&LIRC_CAN_SEND_MASK))
1271                         return -ENOSYS;
1272
1273                 result = put_user(LIRC_MODE_PULSE, (unsigned long *) arg);
1274                 break;
1275         case LIRC_SET_SEND_MODE:
1276                 if (!(features&LIRC_CAN_SEND_MASK))
1277                         return -ENOSYS;
1278
1279                 result = get_user(mode, (unsigned long *) arg);
1280                 if (!result && mode != LIRC_MODE_PULSE)
1281                         return -EINVAL;
1282                 break;
1283         default:
1284                 return -EINVAL;
1285         }
1286         return result;
1287 }
1288
1289 static struct IR *get_ir_device_by_minor(unsigned int minor)
1290 {
1291         struct IR *ir;
1292         struct IR *ret = NULL;
1293
1294         mutex_lock(&ir_devices_lock);
1295
1296         if (!list_empty(&ir_devices_list)) {
1297                 list_for_each_entry(ir, &ir_devices_list, list) {
1298                         if (ir->l.minor == minor) {
1299                                 ret = get_ir_device(ir, true);
1300                                 break;
1301                         }
1302                 }
1303         }
1304
1305         mutex_unlock(&ir_devices_lock);
1306         return ret;
1307 }
1308
1309 /*
1310  * Open the IR device.  Get hold of our IR structure and
1311  * stash it in private_data for the file
1312  */
1313 static int open(struct inode *node, struct file *filep)
1314 {
1315         struct IR *ir;
1316         unsigned int minor = MINOR(node->i_rdev);
1317
1318         /* find our IR struct */
1319         ir = get_ir_device_by_minor(minor);
1320
1321         if (ir == NULL)
1322                 return -ENODEV;
1323
1324         atomic_inc(&ir->open_count);
1325
1326         /* stash our IR struct */
1327         filep->private_data = ir;
1328
1329         nonseekable_open(node, filep);
1330         return 0;
1331 }
1332
1333 /* Close the IR device */
1334 static int close(struct inode *node, struct file *filep)
1335 {
1336         /* find our IR struct */
1337         struct IR *ir = filep->private_data;
1338         if (ir == NULL) {
1339                 zilog_error("close: no private_data attached to the file!\n");
1340                 return -ENODEV;
1341         }
1342
1343         atomic_dec(&ir->open_count);
1344
1345         put_ir_device(ir, false);
1346         return 0;
1347 }
1348
1349 static int ir_remove(struct i2c_client *client);
1350 static int ir_probe(struct i2c_client *client, const struct i2c_device_id *id);
1351
1352 #define ID_FLAG_TX      0x01
1353 #define ID_FLAG_HDPVR   0x02
1354
1355 static const struct i2c_device_id ir_transceiver_id[] = {
1356         { "ir_tx_z8f0811_haup",  ID_FLAG_TX                 },
1357         { "ir_rx_z8f0811_haup",  0                          },
1358         { "ir_tx_z8f0811_hdpvr", ID_FLAG_HDPVR | ID_FLAG_TX },
1359         { "ir_rx_z8f0811_hdpvr", ID_FLAG_HDPVR              },
1360         { }
1361 };
1362
1363 static struct i2c_driver driver = {
1364         .driver = {
1365                 .owner  = THIS_MODULE,
1366                 .name   = "Zilog/Hauppauge i2c IR",
1367         },
1368         .probe          = ir_probe,
1369         .remove         = ir_remove,
1370         .id_table       = ir_transceiver_id,
1371 };
1372
1373 static const struct file_operations lirc_fops = {
1374         .owner          = THIS_MODULE,
1375         .llseek         = no_llseek,
1376         .read           = read,
1377         .write          = write,
1378         .poll           = poll,
1379         .unlocked_ioctl = ioctl,
1380 #ifdef CONFIG_COMPAT
1381         .compat_ioctl   = ioctl,
1382 #endif
1383         .open           = open,
1384         .release        = close
1385 };
1386
1387 static struct lirc_driver lirc_template = {
1388         .name           = "lirc_zilog",
1389         .minor          = -1,
1390         .code_length    = 13,
1391         .buffer_size    = BUFLEN / 2,
1392         .sample_rate    = 0, /* tell lirc_dev to not start its own kthread */
1393         .chunk_size     = 2,
1394         .set_use_inc    = set_use_inc,
1395         .set_use_dec    = set_use_dec,
1396         .fops           = &lirc_fops,
1397         .owner          = THIS_MODULE,
1398 };
1399
1400 static int ir_remove(struct i2c_client *client)
1401 {
1402         if (strncmp("ir_tx_z8", client->name, 8) == 0) {
1403                 struct IR_tx *tx = i2c_get_clientdata(client);
1404                 if (tx != NULL) {
1405                         mutex_lock(&tx->client_lock);
1406                         tx->c = NULL;
1407                         mutex_unlock(&tx->client_lock);
1408                         put_ir_tx(tx, false);
1409                 }
1410         } else if (strncmp("ir_rx_z8", client->name, 8) == 0) {
1411                 struct IR_rx *rx = i2c_get_clientdata(client);
1412                 if (rx != NULL) {
1413                         mutex_lock(&rx->client_lock);
1414                         rx->c = NULL;
1415                         mutex_unlock(&rx->client_lock);
1416                         put_ir_rx(rx, false);
1417                 }
1418         }
1419         return 0;
1420 }
1421
1422
1423 /* ir_devices_lock must be held */
1424 static struct IR *get_ir_device_by_adapter(struct i2c_adapter *adapter)
1425 {
1426         struct IR *ir;
1427
1428         if (list_empty(&ir_devices_list))
1429                 return NULL;
1430
1431         list_for_each_entry(ir, &ir_devices_list, list)
1432                 if (ir->adapter == adapter) {
1433                         get_ir_device(ir, true);
1434                         return ir;
1435                 }
1436
1437         return NULL;
1438 }
1439
1440 static int ir_probe(struct i2c_client *client, const struct i2c_device_id *id)
1441 {
1442         struct IR *ir;
1443         struct IR_tx *tx;
1444         struct IR_rx *rx;
1445         struct i2c_adapter *adap = client->adapter;
1446         int ret;
1447         bool tx_probe = false;
1448
1449         dprintk("%s: %s on i2c-%d (%s), client addr=0x%02x\n",
1450                 __func__, id->name, adap->nr, adap->name, client->addr);
1451
1452         /*
1453          * The IR receiver    is at i2c address 0x71.
1454          * The IR transmitter is at i2c address 0x70.
1455          */
1456
1457         if (id->driver_data & ID_FLAG_TX)
1458                 tx_probe = true;
1459         else if (tx_only) /* module option */
1460                 return -ENXIO;
1461
1462         zilog_info("probing IR %s on %s (i2c-%d)\n",
1463                    tx_probe ? "Tx" : "Rx", adap->name, adap->nr);
1464
1465         mutex_lock(&ir_devices_lock);
1466
1467         /* Use a single struct IR instance for both the Rx and Tx functions */
1468         ir = get_ir_device_by_adapter(adap);
1469         if (ir == NULL) {
1470                 ir = kzalloc(sizeof(struct IR), GFP_KERNEL);
1471                 if (ir == NULL) {
1472                         ret = -ENOMEM;
1473                         goto out_no_ir;
1474                 }
1475                 kref_init(&ir->ref);
1476
1477                 /* store for use in ir_probe() again, and open() later on */
1478                 INIT_LIST_HEAD(&ir->list);
1479                 list_add_tail(&ir->list, &ir_devices_list);
1480
1481                 ir->adapter = adap;
1482                 mutex_init(&ir->ir_lock);
1483                 atomic_set(&ir->open_count, 0);
1484                 spin_lock_init(&ir->tx_ref_lock);
1485                 spin_lock_init(&ir->rx_ref_lock);
1486
1487                 /* set lirc_dev stuff */
1488                 memcpy(&ir->l, &lirc_template, sizeof(struct lirc_driver));
1489                 /*
1490                  * FIXME this is a pointer reference to us, but no refcount.
1491                  *
1492                  * This OK for now, since lirc_dev currently won't touch this
1493                  * buffer as we provide our own lirc_fops.
1494                  *
1495                  * Currently our own lirc_fops rely on this ir->l.rbuf pointer
1496                  */
1497                 ir->l.rbuf = &ir->rbuf;
1498                 ir->l.dev  = &adap->dev;
1499                 ret = lirc_buffer_init(ir->l.rbuf,
1500                                        ir->l.chunk_size, ir->l.buffer_size);
1501                 if (ret)
1502                         goto out_put_ir;
1503         }
1504
1505         if (tx_probe) {
1506                 /* Get the IR_rx instance for later, if already allocated */
1507                 rx = get_ir_rx(ir);
1508
1509                 /* Set up a struct IR_tx instance */
1510                 tx = kzalloc(sizeof(struct IR_tx), GFP_KERNEL);
1511                 if (tx == NULL) {
1512                         ret = -ENOMEM;
1513                         goto out_put_xx;
1514                 }
1515                 kref_init(&tx->ref);
1516                 ir->tx = tx;
1517
1518                 ir->l.features |= LIRC_CAN_SEND_PULSE;
1519                 mutex_init(&tx->client_lock);
1520                 tx->c = client;
1521                 tx->need_boot = 1;
1522                 tx->post_tx_ready_poll =
1523                                (id->driver_data & ID_FLAG_HDPVR) ? false : true;
1524
1525                 /* An ir ref goes to the struct IR_tx instance */
1526                 tx->ir = get_ir_device(ir, true);
1527
1528                 /* A tx ref goes to the i2c_client */
1529                 i2c_set_clientdata(client, get_ir_tx(ir));
1530
1531                 /*
1532                  * Load the 'firmware'.  We do this before registering with
1533                  * lirc_dev, so the first firmware load attempt does not happen
1534                  * after a open() or write() call on the device.
1535                  *
1536                  * Failure here is not deemed catastrophic, so the receiver will
1537                  * still be usable.  Firmware load will be retried in write(),
1538                  * if it is needed.
1539                  */
1540                 fw_load(tx);
1541
1542                 /* Proceed only if the Rx client is also ready or not needed */
1543                 if (rx == NULL && !tx_only) {
1544                         zilog_info("probe of IR Tx on %s (i2c-%d) done. Waiting"
1545                                    " on IR Rx.\n", adap->name, adap->nr);
1546                         goto out_ok;
1547                 }
1548         } else {
1549                 /* Get the IR_tx instance for later, if already allocated */
1550                 tx = get_ir_tx(ir);
1551
1552                 /* Set up a struct IR_rx instance */
1553                 rx = kzalloc(sizeof(struct IR_rx), GFP_KERNEL);
1554                 if (rx == NULL) {
1555                         ret = -ENOMEM;
1556                         goto out_put_xx;
1557                 }
1558                 kref_init(&rx->ref);
1559                 ir->rx = rx;
1560
1561                 ir->l.features |= LIRC_CAN_REC_LIRCCODE;
1562                 mutex_init(&rx->client_lock);
1563                 rx->c = client;
1564                 rx->hdpvr_data_fmt =
1565                                (id->driver_data & ID_FLAG_HDPVR) ? true : false;
1566
1567                 /* An ir ref goes to the struct IR_rx instance */
1568                 rx->ir = get_ir_device(ir, true);
1569
1570                 /* An rx ref goes to the i2c_client */
1571                 i2c_set_clientdata(client, get_ir_rx(ir));
1572
1573                 /*
1574                  * Start the polling thread.
1575                  * It will only perform an empty loop around schedule_timeout()
1576                  * until we register with lirc_dev and the first user open()
1577                  */
1578                 /* An ir ref goes to the new rx polling kthread */
1579                 rx->task = kthread_run(lirc_thread, get_ir_device(ir, true),
1580                                        "zilog-rx-i2c-%d", adap->nr);
1581                 if (IS_ERR(rx->task)) {
1582                         ret = PTR_ERR(rx->task);
1583                         zilog_error("%s: could not start IR Rx polling thread"
1584                                     "\n", __func__);
1585                         /* Failed kthread, so put back the ir ref */
1586                         put_ir_device(ir, true);
1587                         /* Failure exit, so put back rx ref from i2c_client */
1588                         i2c_set_clientdata(client, NULL);
1589                         put_ir_rx(rx, true);
1590                         ir->l.features &= ~LIRC_CAN_REC_LIRCCODE;
1591                         goto out_put_xx;
1592                 }
1593
1594                 /* Proceed only if the Tx client is also ready */
1595                 if (tx == NULL) {
1596                         zilog_info("probe of IR Rx on %s (i2c-%d) done. Waiting"
1597                                    " on IR Tx.\n", adap->name, adap->nr);
1598                         goto out_ok;
1599                 }
1600         }
1601
1602         /* register with lirc */
1603         ir->l.minor = minor; /* module option: user requested minor number */
1604         ir->l.minor = lirc_register_driver(&ir->l);
1605         if (ir->l.minor < 0 || ir->l.minor >= MAX_IRCTL_DEVICES) {
1606                 zilog_error("%s: \"minor\" must be between 0 and %d (%d)!\n",
1607                             __func__, MAX_IRCTL_DEVICES-1, ir->l.minor);
1608                 ret = -EBADRQC;
1609                 goto out_put_xx;
1610         }
1611         zilog_info("IR unit on %s (i2c-%d) registered as lirc%d and ready\n",
1612                    adap->name, adap->nr, ir->l.minor);
1613
1614 out_ok:
1615         if (rx != NULL)
1616                 put_ir_rx(rx, true);
1617         if (tx != NULL)
1618                 put_ir_tx(tx, true);
1619         put_ir_device(ir, true);
1620         zilog_info("probe of IR %s on %s (i2c-%d) done\n",
1621                    tx_probe ? "Tx" : "Rx", adap->name, adap->nr);
1622         mutex_unlock(&ir_devices_lock);
1623         return 0;
1624
1625 out_put_xx:
1626         if (rx != NULL)
1627                 put_ir_rx(rx, true);
1628         if (tx != NULL)
1629                 put_ir_tx(tx, true);
1630 out_put_ir:
1631         put_ir_device(ir, true);
1632 out_no_ir:
1633         zilog_error("%s: probing IR %s on %s (i2c-%d) failed with %d\n",
1634                     __func__, tx_probe ? "Tx" : "Rx", adap->name, adap->nr,
1635                    ret);
1636         mutex_unlock(&ir_devices_lock);
1637         return ret;
1638 }
1639
1640 static int __init zilog_init(void)
1641 {
1642         int ret;
1643
1644         zilog_notify("Zilog/Hauppauge IR driver initializing\n");
1645
1646         mutex_init(&tx_data_lock);
1647
1648         request_module("firmware_class");
1649
1650         ret = i2c_add_driver(&driver);
1651         if (ret)
1652                 zilog_error("initialization failed\n");
1653         else
1654                 zilog_notify("initialization complete\n");
1655
1656         return ret;
1657 }
1658
1659 static void __exit zilog_exit(void)
1660 {
1661         i2c_del_driver(&driver);
1662         /* if loaded */
1663         fw_unload();
1664         zilog_notify("Zilog/Hauppauge IR driver unloaded\n");
1665 }
1666
1667 module_init(zilog_init);
1668 module_exit(zilog_exit);
1669
1670 MODULE_DESCRIPTION("Zilog/Hauppauge infrared transmitter driver (i2c stack)");
1671 MODULE_AUTHOR("Gerd Knorr, Michal Kochanowicz, Christoph Bartelmus, "
1672               "Ulrich Mueller, Stefan Jahn, Jerome Brock, Mark Weaver, "
1673               "Andy Walls");
1674 MODULE_LICENSE("GPL");
1675 /* for compat with old name, which isn't all that accurate anymore */
1676 MODULE_ALIAS("lirc_pvr150");
1677
1678 module_param(minor, int, 0444);
1679 MODULE_PARM_DESC(minor, "Preferred minor device number");
1680
1681 module_param(debug, bool, 0644);
1682 MODULE_PARM_DESC(debug, "Enable debugging messages");
1683
1684 module_param(tx_only, bool, 0644);
1685 MODULE_PARM_DESC(tx_only, "Only handle the IR transmit function");