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