xref: /linux/drivers/media/usb/ttusb-budget/dvb-ttusb-budget.c (revision b85d45947951d23cb22d90caecf4c1eb81342c96)
1 /*
2  * TTUSB DVB driver
3  *
4  * Copyright (c) 2002 Holger Waechtler <holger@convergence.de>
5  * Copyright (c) 2003 Felix Domke <tmbinc@elitedvb.net>
6  *
7  *	This program is free software; you can redistribute it and/or
8  *	modify it under the terms of the GNU General Public License as
9  *	published by the Free Software Foundation; either version 2 of
10  *	the License, or (at your option) any later version.
11  */
12 #include <linux/init.h>
13 #include <linux/slab.h>
14 #include <linux/wait.h>
15 #include <linux/fs.h>
16 #include <linux/module.h>
17 #include <linux/usb.h>
18 #include <linux/delay.h>
19 #include <linux/time.h>
20 #include <linux/errno.h>
21 #include <linux/jiffies.h>
22 #include <linux/mutex.h>
23 #include <linux/firmware.h>
24 
25 #include "dvb_frontend.h"
26 #include "dmxdev.h"
27 #include "dvb_demux.h"
28 #include "dvb_net.h"
29 #include "ves1820.h"
30 #include "cx22700.h"
31 #include "tda1004x.h"
32 #include "stv0299.h"
33 #include "tda8083.h"
34 #include "stv0297.h"
35 #include "lnbp21.h"
36 
37 #include <linux/dvb/frontend.h>
38 #include <linux/dvb/dmx.h>
39 #include <linux/pci.h>
40 
41 /*
42   TTUSB_HWSECTIONS:
43     the DSP supports filtering in hardware, however, since the "muxstream"
44     is a bit braindead (no matching channel masks or no matching filter mask),
45     we won't support this - yet. it doesn't event support negative filters,
46     so the best way is maybe to keep TTUSB_HWSECTIONS undef'd and just
47     parse TS data. USB bandwidth will be a problem when having large
48     datastreams, especially for dvb-net, but hey, that's not my problem.
49 
50   TTUSB_DISEQC, TTUSB_TONE:
51     let the STC do the diseqc/tone stuff. this isn't supported at least with
52     my TTUSB, so let it undef'd unless you want to implement another
53     frontend. never tested.
54 
55   debug:
56     define it to > 3 for really hardcore debugging. you probably don't want
57     this unless the device doesn't load at all. > 2 for bandwidth statistics.
58 */
59 
60 static int debug;
61 module_param(debug, int, 0644);
62 MODULE_PARM_DESC(debug, "Turn on/off debugging (default:off).");
63 
64 DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);
65 
66 #define dprintk(x...) do { if (debug) printk(KERN_DEBUG x); } while (0)
67 
68 #define ISO_BUF_COUNT      4
69 #define FRAMES_PER_ISO_BUF 4
70 #define ISO_FRAME_SIZE     912
71 #define TTUSB_MAXCHANNEL   32
72 #ifdef TTUSB_HWSECTIONS
73 #define TTUSB_MAXFILTER    16	/* ??? */
74 #endif
75 
76 #define TTUSB_REV_2_2	0x22
77 #define TTUSB_BUDGET_NAME "ttusb_stc_fw"
78 
79 /**
80  *  since we're casting (struct ttusb*) <-> (struct dvb_demux*) around
81  *  the dvb_demux field must be the first in struct!!
82  */
83 struct ttusb {
84 	struct dvb_demux dvb_demux;
85 	struct dmxdev dmxdev;
86 	struct dvb_net dvbnet;
87 
88 	/* and one for USB access. */
89 	struct mutex semi2c;
90 	struct mutex semusb;
91 
92 	struct dvb_adapter adapter;
93 	struct usb_device *dev;
94 
95 	struct i2c_adapter i2c_adap;
96 
97 	int disconnecting;
98 	int iso_streaming;
99 
100 	unsigned int bulk_out_pipe;
101 	unsigned int bulk_in_pipe;
102 	unsigned int isoc_in_pipe;
103 
104 	void *iso_buffer;
105 	dma_addr_t iso_dma_handle;
106 
107 	struct urb *iso_urb[ISO_BUF_COUNT];
108 
109 	int running_feed_count;
110 	int last_channel;
111 	int last_filter;
112 
113 	u8 c;			/* transaction counter, wraps around...  */
114 	enum fe_sec_tone_mode tone;
115 	enum fe_sec_voltage voltage;
116 
117 	int mux_state;		// 0..2 - MuxSyncWord, 3 - nMuxPacks,    4 - muxpack
118 	u8 mux_npacks;
119 	u8 muxpack[256 + 8];
120 	int muxpack_ptr, muxpack_len;
121 
122 	int insync;
123 
124 	int cc;			/* MuxCounter - will increment on EVERY MUX PACKET */
125 	/* (including stuffing. yes. really.) */
126 
127 	u8 last_result[32];
128 
129 	int revision;
130 
131 	struct dvb_frontend* fe;
132 };
133 
134 /* ugly workaround ... don't know why it's necessary to read */
135 /* all result codes. */
136 
137 static int ttusb_cmd(struct ttusb *ttusb,
138 	      const u8 * data, int len, int needresult)
139 {
140 	int actual_len;
141 	int err;
142 	int i;
143 
144 	if (debug >= 3) {
145 		printk(KERN_DEBUG ">");
146 		for (i = 0; i < len; ++i)
147 			printk(KERN_CONT " %02x", data[i]);
148 		printk(KERN_CONT "\n");
149 	}
150 
151 	if (mutex_lock_interruptible(&ttusb->semusb) < 0)
152 		return -EAGAIN;
153 
154 	err = usb_bulk_msg(ttusb->dev, ttusb->bulk_out_pipe,
155 			   (u8 *) data, len, &actual_len, 1000);
156 	if (err != 0) {
157 		dprintk("%s: usb_bulk_msg(send) failed, err == %i!\n",
158 			__func__, err);
159 		mutex_unlock(&ttusb->semusb);
160 		return err;
161 	}
162 	if (actual_len != len) {
163 		dprintk("%s: only wrote %d of %d bytes\n", __func__,
164 			actual_len, len);
165 		mutex_unlock(&ttusb->semusb);
166 		return -1;
167 	}
168 
169 	err = usb_bulk_msg(ttusb->dev, ttusb->bulk_in_pipe,
170 			   ttusb->last_result, 32, &actual_len, 1000);
171 
172 	if (err != 0) {
173 		printk("%s: failed, receive error %d\n", __func__,
174 		       err);
175 		mutex_unlock(&ttusb->semusb);
176 		return err;
177 	}
178 
179 	if (debug >= 3) {
180 		actual_len = ttusb->last_result[3] + 4;
181 		printk(KERN_DEBUG "<");
182 		for (i = 0; i < actual_len; ++i)
183 			printk(KERN_CONT " %02x", ttusb->last_result[i]);
184 		printk(KERN_CONT "\n");
185 	}
186 
187 	if (!needresult)
188 		mutex_unlock(&ttusb->semusb);
189 	return 0;
190 }
191 
192 static int ttusb_result(struct ttusb *ttusb, u8 * data, int len)
193 {
194 	memcpy(data, ttusb->last_result, len);
195 	mutex_unlock(&ttusb->semusb);
196 	return 0;
197 }
198 
199 static int ttusb_i2c_msg(struct ttusb *ttusb,
200 		  u8 addr, u8 * snd_buf, u8 snd_len, u8 * rcv_buf,
201 		  u8 rcv_len)
202 {
203 	u8 b[0x28];
204 	u8 id = ++ttusb->c;
205 	int i, err;
206 
207 	if (snd_len > 0x28 - 7 || rcv_len > 0x20 - 7)
208 		return -EINVAL;
209 
210 	b[0] = 0xaa;
211 	b[1] = id;
212 	b[2] = 0x31;
213 	b[3] = snd_len + 3;
214 	b[4] = addr << 1;
215 	b[5] = snd_len;
216 	b[6] = rcv_len;
217 
218 	for (i = 0; i < snd_len; i++)
219 		b[7 + i] = snd_buf[i];
220 
221 	err = ttusb_cmd(ttusb, b, snd_len + 7, 1);
222 
223 	if (err)
224 		return -EREMOTEIO;
225 
226 	err = ttusb_result(ttusb, b, 0x20);
227 
228 	/* check if the i2c transaction was successful */
229 	if ((snd_len != b[5]) || (rcv_len != b[6])) return -EREMOTEIO;
230 
231 	if (rcv_len > 0) {
232 
233 		if (err || b[0] != 0x55 || b[1] != id) {
234 			dprintk
235 			    ("%s: usb_bulk_msg(recv) failed, err == %i, id == %02x, b == ",
236 			     __func__, err, id);
237 			return -EREMOTEIO;
238 		}
239 
240 		for (i = 0; i < rcv_len; i++)
241 			rcv_buf[i] = b[7 + i];
242 	}
243 
244 	return rcv_len;
245 }
246 
247 static int master_xfer(struct i2c_adapter* adapter, struct i2c_msg *msg, int num)
248 {
249 	struct ttusb *ttusb = i2c_get_adapdata(adapter);
250 	int i = 0;
251 	int inc;
252 
253 	if (mutex_lock_interruptible(&ttusb->semi2c) < 0)
254 		return -EAGAIN;
255 
256 	while (i < num) {
257 		u8 addr, snd_len, rcv_len, *snd_buf, *rcv_buf;
258 		int err;
259 
260 		if (num > i + 1 && (msg[i + 1].flags & I2C_M_RD)) {
261 			addr = msg[i].addr;
262 			snd_buf = msg[i].buf;
263 			snd_len = msg[i].len;
264 			rcv_buf = msg[i + 1].buf;
265 			rcv_len = msg[i + 1].len;
266 			inc = 2;
267 		} else {
268 			addr = msg[i].addr;
269 			snd_buf = msg[i].buf;
270 			snd_len = msg[i].len;
271 			rcv_buf = NULL;
272 			rcv_len = 0;
273 			inc = 1;
274 		}
275 
276 		err = ttusb_i2c_msg(ttusb, addr,
277 				    snd_buf, snd_len, rcv_buf, rcv_len);
278 
279 		if (err < rcv_len) {
280 			dprintk("%s: i == %i\n", __func__, i);
281 			break;
282 		}
283 
284 		i += inc;
285 	}
286 
287 	mutex_unlock(&ttusb->semi2c);
288 	return i;
289 }
290 
291 static int ttusb_boot_dsp(struct ttusb *ttusb)
292 {
293 	const struct firmware *fw;
294 	int i, err;
295 	u8 b[40];
296 
297 	err = request_firmware(&fw, "ttusb-budget/dspbootcode.bin",
298 			       &ttusb->dev->dev);
299 	if (err) {
300 		printk(KERN_ERR "ttusb-budget: failed to request firmware\n");
301 		return err;
302 	}
303 
304 	/* BootBlock */
305 	b[0] = 0xaa;
306 	b[2] = 0x13;
307 	b[3] = 28;
308 
309 	/* upload dsp code in 32 byte steps (36 didn't work for me ...) */
310 	/* 32 is max packet size, no messages should be splitted. */
311 	for (i = 0; i < fw->size; i += 28) {
312 		memcpy(&b[4], &fw->data[i], 28);
313 
314 		b[1] = ++ttusb->c;
315 
316 		err = ttusb_cmd(ttusb, b, 32, 0);
317 		if (err)
318 			goto done;
319 	}
320 
321 	/* last block ... */
322 	b[1] = ++ttusb->c;
323 	b[2] = 0x13;
324 	b[3] = 0;
325 
326 	err = ttusb_cmd(ttusb, b, 4, 0);
327 	if (err)
328 		goto done;
329 
330 	/* BootEnd */
331 	b[1] = ++ttusb->c;
332 	b[2] = 0x14;
333 	b[3] = 0;
334 
335 	err = ttusb_cmd(ttusb, b, 4, 0);
336 
337       done:
338 	release_firmware(fw);
339 	if (err) {
340 		dprintk("%s: usb_bulk_msg() failed, return value %i!\n",
341 			__func__, err);
342 	}
343 
344 	return err;
345 }
346 
347 static int ttusb_set_channel(struct ttusb *ttusb, int chan_id, int filter_type,
348 		      int pid)
349 {
350 	int err;
351 	/* SetChannel */
352 	u8 b[] = { 0xaa, ++ttusb->c, 0x22, 4, chan_id, filter_type,
353 		(pid >> 8) & 0xff, pid & 0xff
354 	};
355 
356 	err = ttusb_cmd(ttusb, b, sizeof(b), 0);
357 	return err;
358 }
359 
360 static int ttusb_del_channel(struct ttusb *ttusb, int channel_id)
361 {
362 	int err;
363 	/* DelChannel */
364 	u8 b[] = { 0xaa, ++ttusb->c, 0x23, 1, channel_id };
365 
366 	err = ttusb_cmd(ttusb, b, sizeof(b), 0);
367 	return err;
368 }
369 
370 #ifdef TTUSB_HWSECTIONS
371 static int ttusb_set_filter(struct ttusb *ttusb, int filter_id,
372 		     int associated_chan, u8 filter[8], u8 mask[8])
373 {
374 	int err;
375 	/* SetFilter */
376 	u8 b[] = { 0xaa, 0, 0x24, 0x1a, filter_id, associated_chan,
377 		filter[0], filter[1], filter[2], filter[3],
378 		filter[4], filter[5], filter[6], filter[7],
379 		filter[8], filter[9], filter[10], filter[11],
380 		mask[0], mask[1], mask[2], mask[3],
381 		mask[4], mask[5], mask[6], mask[7],
382 		mask[8], mask[9], mask[10], mask[11]
383 	};
384 
385 	err = ttusb_cmd(ttusb, b, sizeof(b), 0);
386 	return err;
387 }
388 
389 static int ttusb_del_filter(struct ttusb *ttusb, int filter_id)
390 {
391 	int err;
392 	/* DelFilter */
393 	u8 b[] = { 0xaa, ++ttusb->c, 0x25, 1, filter_id };
394 
395 	err = ttusb_cmd(ttusb, b, sizeof(b), 0);
396 	return err;
397 }
398 #endif
399 
400 static int ttusb_init_controller(struct ttusb *ttusb)
401 {
402 	u8 b0[] = { 0xaa, ++ttusb->c, 0x15, 1, 0 };
403 	u8 b1[] = { 0xaa, ++ttusb->c, 0x15, 1, 1 };
404 	u8 b2[] = { 0xaa, ++ttusb->c, 0x32, 1, 0 };
405 	/* i2c write read: 5 bytes, addr 0x10, 0x02 bytes write, 1 bytes read. */
406 	u8 b3[] =
407 	    { 0xaa, ++ttusb->c, 0x31, 5, 0x10, 0x02, 0x01, 0x00, 0x1e };
408 	u8 b4[] =
409 	    { 0x55, ttusb->c, 0x31, 4, 0x10, 0x02, 0x01, 0x00, 0x1e };
410 
411 	u8 get_version[] = { 0xaa, ++ttusb->c, 0x17, 5, 0, 0, 0, 0, 0 };
412 	u8 get_dsp_version[0x20] =
413 	    { 0xaa, ++ttusb->c, 0x26, 28, 0, 0, 0, 0, 0 };
414 	int err;
415 
416 	/* reset board */
417 	if ((err = ttusb_cmd(ttusb, b0, sizeof(b0), 0)))
418 		return err;
419 
420 	/* reset board (again?) */
421 	if ((err = ttusb_cmd(ttusb, b1, sizeof(b1), 0)))
422 		return err;
423 
424 	ttusb_boot_dsp(ttusb);
425 
426 	/* set i2c bit rate */
427 	if ((err = ttusb_cmd(ttusb, b2, sizeof(b2), 0)))
428 		return err;
429 
430 	if ((err = ttusb_cmd(ttusb, b3, sizeof(b3), 1)))
431 		return err;
432 
433 	err = ttusb_result(ttusb, b4, sizeof(b4));
434 
435 	if ((err = ttusb_cmd(ttusb, get_version, sizeof(get_version), 1)))
436 		return err;
437 
438 	if ((err = ttusb_result(ttusb, get_version, sizeof(get_version))))
439 		return err;
440 
441 	dprintk("%s: stc-version: %c%c%c%c%c\n", __func__,
442 		get_version[4], get_version[5], get_version[6],
443 		get_version[7], get_version[8]);
444 
445 	if (memcmp(get_version + 4, "V 0.0", 5) &&
446 	    memcmp(get_version + 4, "V 1.1", 5) &&
447 	    memcmp(get_version + 4, "V 2.1", 5) &&
448 	    memcmp(get_version + 4, "V 2.2", 5)) {
449 		printk
450 		    ("%s: unknown STC version %c%c%c%c%c, please report!\n",
451 		     __func__, get_version[4], get_version[5],
452 		     get_version[6], get_version[7], get_version[8]);
453 	}
454 
455 	ttusb->revision = ((get_version[6] - '0') << 4) |
456 			   (get_version[8] - '0');
457 
458 	err =
459 	    ttusb_cmd(ttusb, get_dsp_version, sizeof(get_dsp_version), 1);
460 	if (err)
461 		return err;
462 
463 	err =
464 	    ttusb_result(ttusb, get_dsp_version, sizeof(get_dsp_version));
465 	if (err)
466 		return err;
467 	printk("%s: dsp-version: %c%c%c\n", __func__,
468 	       get_dsp_version[4], get_dsp_version[5], get_dsp_version[6]);
469 	return 0;
470 }
471 
472 #ifdef TTUSB_DISEQC
473 static int ttusb_send_diseqc(struct dvb_frontend* fe,
474 			     const struct dvb_diseqc_master_cmd *cmd)
475 {
476 	struct ttusb* ttusb = (struct ttusb*) fe->dvb->priv;
477 	u8 b[12] = { 0xaa, ++ttusb->c, 0x18 };
478 
479 	int err;
480 
481 	b[3] = 4 + 2 + cmd->msg_len;
482 	b[4] = 0xFF;		/* send diseqc master, not burst */
483 	b[5] = cmd->msg_len;
484 
485 	memcpy(b + 5, cmd->msg, cmd->msg_len);
486 
487 	/* Diseqc */
488 	if ((err = ttusb_cmd(ttusb, b, 4 + b[3], 0))) {
489 		dprintk("%s: usb_bulk_msg() failed, return value %i!\n",
490 			__func__, err);
491 	}
492 
493 	return err;
494 }
495 #endif
496 
497 static int ttusb_update_lnb(struct ttusb *ttusb)
498 {
499 	u8 b[] = { 0xaa, ++ttusb->c, 0x16, 5, /*power: */ 1,
500 		ttusb->voltage == SEC_VOLTAGE_18 ? 0 : 1,
501 		ttusb->tone == SEC_TONE_ON ? 1 : 0, 1, 1
502 	};
503 	int err;
504 
505 	/* SetLNB */
506 	if ((err = ttusb_cmd(ttusb, b, sizeof(b), 0))) {
507 		dprintk("%s: usb_bulk_msg() failed, return value %i!\n",
508 			__func__, err);
509 	}
510 
511 	return err;
512 }
513 
514 static int ttusb_set_voltage(struct dvb_frontend *fe,
515 			     enum fe_sec_voltage voltage)
516 {
517 	struct ttusb* ttusb = (struct ttusb*) fe->dvb->priv;
518 
519 	ttusb->voltage = voltage;
520 	return ttusb_update_lnb(ttusb);
521 }
522 
523 #ifdef TTUSB_TONE
524 static int ttusb_set_tone(struct dvb_frontend *fe, enum fe_sec_tone_mode tone)
525 {
526 	struct ttusb* ttusb = (struct ttusb*) fe->dvb->priv;
527 
528 	ttusb->tone = tone;
529 	return ttusb_update_lnb(ttusb);
530 }
531 #endif
532 
533 
534 #if 0
535 static void ttusb_set_led_freq(struct ttusb *ttusb, u8 freq)
536 {
537 	u8 b[] = { 0xaa, ++ttusb->c, 0x19, 1, freq };
538 	int err, actual_len;
539 
540 	err = ttusb_cmd(ttusb, b, sizeof(b), 0);
541 	if (err) {
542 		dprintk("%s: usb_bulk_msg() failed, return value %i!\n",
543 			__func__, err);
544 	}
545 }
546 #endif
547 
548 /*****************************************************************************/
549 
550 #ifdef TTUSB_HWSECTIONS
551 static void ttusb_handle_ts_data(struct ttusb_channel *channel,
552 				 const u8 * data, int len);
553 static void ttusb_handle_sec_data(struct ttusb_channel *channel,
554 				  const u8 * data, int len);
555 #endif
556 
557 static int numpkt, numts, numstuff, numsec, numinvalid;
558 static unsigned long lastj;
559 
560 static void ttusb_process_muxpack(struct ttusb *ttusb, const u8 * muxpack,
561 			   int len)
562 {
563 	u16 csum = 0, cc;
564 	int i;
565 
566 	if (len < 4 || len & 0x1) {
567 		pr_warn("%s: muxpack has invalid len %d\n", __func__, len);
568 		numinvalid++;
569 		return;
570 	}
571 
572 	for (i = 0; i < len; i += 2)
573 		csum ^= le16_to_cpup((__le16 *) (muxpack + i));
574 	if (csum) {
575 		printk("%s: muxpack with incorrect checksum, ignoring\n",
576 		       __func__);
577 		numinvalid++;
578 		return;
579 	}
580 
581 	cc = (muxpack[len - 4] << 8) | muxpack[len - 3];
582 	cc &= 0x7FFF;
583 	if ((cc != ttusb->cc) && (ttusb->cc != -1))
584 		printk("%s: cc discontinuity (%d frames missing)\n",
585 		       __func__, (cc - ttusb->cc) & 0x7FFF);
586 	ttusb->cc = (cc + 1) & 0x7FFF;
587 	if (muxpack[0] & 0x80) {
588 #ifdef TTUSB_HWSECTIONS
589 		/* section data */
590 		int pusi = muxpack[0] & 0x40;
591 		int channel = muxpack[0] & 0x1F;
592 		int payload = muxpack[1];
593 		const u8 *data = muxpack + 2;
594 		/* check offset flag */
595 		if (muxpack[0] & 0x20)
596 			data++;
597 
598 		ttusb_handle_sec_data(ttusb->channel + channel, data,
599 				      payload);
600 		data += payload;
601 
602 		if ((!!(ttusb->muxpack[0] & 0x20)) ^
603 		    !!(ttusb->muxpack[1] & 1))
604 			data++;
605 #warning TODO: pusi
606 		printk("cc: %04x\n", (data[0] << 8) | data[1]);
607 #endif
608 		numsec++;
609 	} else if (muxpack[0] == 0x47) {
610 #ifdef TTUSB_HWSECTIONS
611 		/* we have TS data here! */
612 		int pid = ((muxpack[1] & 0x0F) << 8) | muxpack[2];
613 		int channel;
614 		for (channel = 0; channel < TTUSB_MAXCHANNEL; ++channel)
615 			if (ttusb->channel[channel].active
616 			    && (pid == ttusb->channel[channel].pid))
617 				ttusb_handle_ts_data(ttusb->channel +
618 						     channel, muxpack,
619 						     188);
620 #endif
621 		numts++;
622 		dvb_dmx_swfilter_packets(&ttusb->dvb_demux, muxpack, 1);
623 	} else if (muxpack[0] != 0) {
624 		numinvalid++;
625 		printk("illegal muxpack type %02x\n", muxpack[0]);
626 	} else
627 		numstuff++;
628 }
629 
630 static void ttusb_process_frame(struct ttusb *ttusb, u8 * data, int len)
631 {
632 	int maxwork = 1024;
633 	while (len) {
634 		if (!(maxwork--)) {
635 			printk("%s: too much work\n", __func__);
636 			break;
637 		}
638 
639 		switch (ttusb->mux_state) {
640 		case 0:
641 		case 1:
642 		case 2:
643 			len--;
644 			if (*data++ == 0xAA)
645 				++ttusb->mux_state;
646 			else {
647 				ttusb->mux_state = 0;
648 				if (ttusb->insync) {
649 					dprintk("%s: %02x\n",
650 						__func__, data[-1]);
651 					printk(KERN_INFO "%s: lost sync.\n",
652 					       __func__);
653 					ttusb->insync = 0;
654 				}
655 			}
656 			break;
657 		case 3:
658 			ttusb->insync = 1;
659 			len--;
660 			ttusb->mux_npacks = *data++;
661 			++ttusb->mux_state;
662 			ttusb->muxpack_ptr = 0;
663 			/* maximum bytes, until we know the length */
664 			ttusb->muxpack_len = 2;
665 			break;
666 		case 4:
667 			{
668 				int avail;
669 				avail = len;
670 				if (avail >
671 				    (ttusb->muxpack_len -
672 				     ttusb->muxpack_ptr))
673 					avail =
674 					    ttusb->muxpack_len -
675 					    ttusb->muxpack_ptr;
676 				memcpy(ttusb->muxpack + ttusb->muxpack_ptr,
677 				       data, avail);
678 				ttusb->muxpack_ptr += avail;
679 				BUG_ON(ttusb->muxpack_ptr > 264);
680 				data += avail;
681 				len -= avail;
682 				/* determine length */
683 				if (ttusb->muxpack_ptr == 2) {
684 					if (ttusb->muxpack[0] & 0x80) {
685 						ttusb->muxpack_len =
686 						    ttusb->muxpack[1] + 2;
687 						if (ttusb->
688 						    muxpack[0] & 0x20)
689 							ttusb->
690 							    muxpack_len++;
691 						if ((!!
692 						     (ttusb->
693 						      muxpack[0] & 0x20)) ^
694 						    !!(ttusb->
695 						       muxpack[1] & 1))
696 							ttusb->
697 							    muxpack_len++;
698 						ttusb->muxpack_len += 4;
699 					} else if (ttusb->muxpack[0] ==
700 						   0x47)
701 						ttusb->muxpack_len =
702 						    188 + 4;
703 					else if (ttusb->muxpack[0] == 0x00)
704 						ttusb->muxpack_len =
705 						    ttusb->muxpack[1] + 2 +
706 						    4;
707 					else {
708 						dprintk
709 						    ("%s: invalid state: first byte is %x\n",
710 						     __func__,
711 						     ttusb->muxpack[0]);
712 						ttusb->mux_state = 0;
713 					}
714 				}
715 
716 			/**
717 			 * if length is valid and we reached the end:
718 			 * goto next muxpack
719 			 */
720 				if ((ttusb->muxpack_ptr >= 2) &&
721 				    (ttusb->muxpack_ptr ==
722 				     ttusb->muxpack_len)) {
723 					ttusb_process_muxpack(ttusb,
724 							      ttusb->
725 							      muxpack,
726 							      ttusb->
727 							      muxpack_ptr);
728 					ttusb->muxpack_ptr = 0;
729 					/* maximum bytes, until we know the length */
730 					ttusb->muxpack_len = 2;
731 
732 				/**
733 				 * no muxpacks left?
734 				 * return to search-sync state
735 				 */
736 					if (!ttusb->mux_npacks--) {
737 						ttusb->mux_state = 0;
738 						break;
739 					}
740 				}
741 				break;
742 			}
743 		default:
744 			BUG();
745 			break;
746 		}
747 	}
748 }
749 
750 static void ttusb_iso_irq(struct urb *urb)
751 {
752 	struct ttusb *ttusb = urb->context;
753 	struct usb_iso_packet_descriptor *d;
754 	u8 *data;
755 	int len, i;
756 
757 	if (!ttusb->iso_streaming)
758 		return;
759 
760 #if 0
761 	printk("%s: status %d, errcount == %d, length == %i\n",
762 	       __func__,
763 	       urb->status, urb->error_count, urb->actual_length);
764 #endif
765 
766 	if (!urb->status) {
767 		for (i = 0; i < urb->number_of_packets; ++i) {
768 			numpkt++;
769 			if (time_after_eq(jiffies, lastj + HZ)) {
770 				dprintk("frames/s: %lu (ts: %d, stuff %d, "
771 					"sec: %d, invalid: %d, all: %d)\n",
772 					numpkt * HZ / (jiffies - lastj),
773 					numts, numstuff, numsec, numinvalid,
774 					numts + numstuff + numsec + numinvalid);
775 				numts = numstuff = numsec = numinvalid = 0;
776 				lastj = jiffies;
777 				numpkt = 0;
778 			}
779 			d = &urb->iso_frame_desc[i];
780 			data = urb->transfer_buffer + d->offset;
781 			len = d->actual_length;
782 			d->actual_length = 0;
783 			d->status = 0;
784 			ttusb_process_frame(ttusb, data, len);
785 		}
786 	}
787 	usb_submit_urb(urb, GFP_ATOMIC);
788 }
789 
790 static void ttusb_free_iso_urbs(struct ttusb *ttusb)
791 {
792 	int i;
793 
794 	for (i = 0; i < ISO_BUF_COUNT; i++)
795 		usb_free_urb(ttusb->iso_urb[i]);
796 
797 	pci_free_consistent(NULL,
798 			    ISO_FRAME_SIZE * FRAMES_PER_ISO_BUF *
799 			    ISO_BUF_COUNT, ttusb->iso_buffer,
800 			    ttusb->iso_dma_handle);
801 }
802 
803 static int ttusb_alloc_iso_urbs(struct ttusb *ttusb)
804 {
805 	int i;
806 
807 	ttusb->iso_buffer = pci_zalloc_consistent(NULL,
808 						  ISO_FRAME_SIZE * FRAMES_PER_ISO_BUF * ISO_BUF_COUNT,
809 						  &ttusb->iso_dma_handle);
810 
811 	if (!ttusb->iso_buffer) {
812 		dprintk("%s: pci_alloc_consistent - not enough memory\n",
813 			__func__);
814 		return -ENOMEM;
815 	}
816 
817 	for (i = 0; i < ISO_BUF_COUNT; i++) {
818 		struct urb *urb;
819 
820 		if (!
821 		    (urb =
822 		     usb_alloc_urb(FRAMES_PER_ISO_BUF, GFP_ATOMIC))) {
823 			ttusb_free_iso_urbs(ttusb);
824 			return -ENOMEM;
825 		}
826 
827 		ttusb->iso_urb[i] = urb;
828 	}
829 
830 	return 0;
831 }
832 
833 static void ttusb_stop_iso_xfer(struct ttusb *ttusb)
834 {
835 	int i;
836 
837 	for (i = 0; i < ISO_BUF_COUNT; i++)
838 		usb_kill_urb(ttusb->iso_urb[i]);
839 
840 	ttusb->iso_streaming = 0;
841 }
842 
843 static int ttusb_start_iso_xfer(struct ttusb *ttusb)
844 {
845 	int i, j, err, buffer_offset = 0;
846 
847 	if (ttusb->iso_streaming) {
848 		printk("%s: iso xfer already running!\n", __func__);
849 		return 0;
850 	}
851 
852 	ttusb->cc = -1;
853 	ttusb->insync = 0;
854 	ttusb->mux_state = 0;
855 
856 	for (i = 0; i < ISO_BUF_COUNT; i++) {
857 		int frame_offset = 0;
858 		struct urb *urb = ttusb->iso_urb[i];
859 
860 		urb->dev = ttusb->dev;
861 		urb->context = ttusb;
862 		urb->complete = ttusb_iso_irq;
863 		urb->pipe = ttusb->isoc_in_pipe;
864 		urb->transfer_flags = URB_ISO_ASAP;
865 		urb->interval = 1;
866 		urb->number_of_packets = FRAMES_PER_ISO_BUF;
867 		urb->transfer_buffer_length =
868 		    ISO_FRAME_SIZE * FRAMES_PER_ISO_BUF;
869 		urb->transfer_buffer = ttusb->iso_buffer + buffer_offset;
870 		buffer_offset += ISO_FRAME_SIZE * FRAMES_PER_ISO_BUF;
871 
872 		for (j = 0; j < FRAMES_PER_ISO_BUF; j++) {
873 			urb->iso_frame_desc[j].offset = frame_offset;
874 			urb->iso_frame_desc[j].length = ISO_FRAME_SIZE;
875 			frame_offset += ISO_FRAME_SIZE;
876 		}
877 	}
878 
879 	for (i = 0; i < ISO_BUF_COUNT; i++) {
880 		if ((err = usb_submit_urb(ttusb->iso_urb[i], GFP_ATOMIC))) {
881 			ttusb_stop_iso_xfer(ttusb);
882 			printk
883 			    ("%s: failed urb submission (%i: err = %i)!\n",
884 			     __func__, i, err);
885 			return err;
886 		}
887 	}
888 
889 	ttusb->iso_streaming = 1;
890 
891 	return 0;
892 }
893 
894 #ifdef TTUSB_HWSECTIONS
895 static void ttusb_handle_ts_data(struct dvb_demux_feed *dvbdmxfeed, const u8 * data,
896 			  int len)
897 {
898 	dvbdmxfeed->cb.ts(data, len, 0, 0, &dvbdmxfeed->feed.ts, 0);
899 }
900 
901 static void ttusb_handle_sec_data(struct dvb_demux_feed *dvbdmxfeed, const u8 * data,
902 			   int len)
903 {
904 //      struct dvb_demux_feed *dvbdmxfeed = channel->dvbdmxfeed;
905 #error TODO: handle ugly stuff
906 //      dvbdmxfeed->cb.sec(data, len, 0, 0, &dvbdmxfeed->feed.sec, 0);
907 }
908 #endif
909 
910 static int ttusb_start_feed(struct dvb_demux_feed *dvbdmxfeed)
911 {
912 	struct ttusb *ttusb = (struct ttusb *) dvbdmxfeed->demux;
913 	int feed_type = 1;
914 
915 	dprintk("ttusb_start_feed\n");
916 
917 	switch (dvbdmxfeed->type) {
918 	case DMX_TYPE_TS:
919 		break;
920 	case DMX_TYPE_SEC:
921 		break;
922 	default:
923 		return -EINVAL;
924 	}
925 
926 	if (dvbdmxfeed->type == DMX_TYPE_TS) {
927 		switch (dvbdmxfeed->pes_type) {
928 		case DMX_PES_VIDEO:
929 		case DMX_PES_AUDIO:
930 		case DMX_PES_TELETEXT:
931 		case DMX_PES_PCR:
932 		case DMX_PES_OTHER:
933 			break;
934 		default:
935 			return -EINVAL;
936 		}
937 	}
938 
939 #ifdef TTUSB_HWSECTIONS
940 #error TODO: allocate filters
941 	if (dvbdmxfeed->type == DMX_TYPE_TS) {
942 		feed_type = 1;
943 	} else if (dvbdmxfeed->type == DMX_TYPE_SEC) {
944 		feed_type = 2;
945 	}
946 #endif
947 
948 	ttusb_set_channel(ttusb, dvbdmxfeed->index, feed_type, dvbdmxfeed->pid);
949 
950 	if (0 == ttusb->running_feed_count++)
951 		ttusb_start_iso_xfer(ttusb);
952 
953 	return 0;
954 }
955 
956 static int ttusb_stop_feed(struct dvb_demux_feed *dvbdmxfeed)
957 {
958 	struct ttusb *ttusb = (struct ttusb *) dvbdmxfeed->demux;
959 
960 	ttusb_del_channel(ttusb, dvbdmxfeed->index);
961 
962 	if (--ttusb->running_feed_count == 0)
963 		ttusb_stop_iso_xfer(ttusb);
964 
965 	return 0;
966 }
967 
968 static int ttusb_setup_interfaces(struct ttusb *ttusb)
969 {
970 	usb_set_interface(ttusb->dev, 1, 1);
971 
972 	ttusb->bulk_out_pipe = usb_sndbulkpipe(ttusb->dev, 1);
973 	ttusb->bulk_in_pipe = usb_rcvbulkpipe(ttusb->dev, 1);
974 	ttusb->isoc_in_pipe = usb_rcvisocpipe(ttusb->dev, 2);
975 
976 	return 0;
977 }
978 
979 #if 0
980 static u8 stc_firmware[8192];
981 
982 static int stc_open(struct inode *inode, struct file *file)
983 {
984 	struct ttusb *ttusb = file->private_data;
985 	int addr;
986 
987 	for (addr = 0; addr < 8192; addr += 16) {
988 		u8 snd_buf[2] = { addr >> 8, addr & 0xFF };
989 		ttusb_i2c_msg(ttusb, 0x50, snd_buf, 2, stc_firmware + addr,
990 			      16);
991 	}
992 
993 	return 0;
994 }
995 
996 static ssize_t stc_read(struct file *file, char *buf, size_t count,
997 		 loff_t *offset)
998 {
999 	return simple_read_from_buffer(buf, count, offset, stc_firmware, 8192);
1000 }
1001 
1002 static int stc_release(struct inode *inode, struct file *file)
1003 {
1004 	return 0;
1005 }
1006 
1007 static const struct file_operations stc_fops = {
1008 	.owner = THIS_MODULE,
1009 	.read = stc_read,
1010 	.open = stc_open,
1011 	.release = stc_release,
1012 };
1013 #endif
1014 
1015 static u32 functionality(struct i2c_adapter *adapter)
1016 {
1017 	return I2C_FUNC_I2C;
1018 }
1019 
1020 
1021 
1022 static int alps_tdmb7_tuner_set_params(struct dvb_frontend *fe)
1023 {
1024 	struct dtv_frontend_properties *p = &fe->dtv_property_cache;
1025 	struct ttusb* ttusb = (struct ttusb*) fe->dvb->priv;
1026 	u8 data[4];
1027 	struct i2c_msg msg = {.addr=0x61, .flags=0, .buf=data, .len=sizeof(data) };
1028 	u32 div;
1029 
1030 	div = (p->frequency + 36166667) / 166667;
1031 
1032 	data[0] = (div >> 8) & 0x7f;
1033 	data[1] = div & 0xff;
1034 	data[2] = ((div >> 10) & 0x60) | 0x85;
1035 	data[3] = p->frequency < 592000000 ? 0x40 : 0x80;
1036 
1037 	if (fe->ops.i2c_gate_ctrl)
1038 		fe->ops.i2c_gate_ctrl(fe, 1);
1039 	if (i2c_transfer(&ttusb->i2c_adap, &msg, 1) != 1) return -EIO;
1040 	return 0;
1041 }
1042 
1043 static struct cx22700_config alps_tdmb7_config = {
1044 	.demod_address = 0x43,
1045 };
1046 
1047 
1048 
1049 
1050 
1051 static int philips_tdm1316l_tuner_init(struct dvb_frontend* fe)
1052 {
1053 	struct ttusb* ttusb = (struct ttusb*) fe->dvb->priv;
1054 	static u8 td1316_init[] = { 0x0b, 0xf5, 0x85, 0xab };
1055 	static u8 disable_mc44BC374c[] = { 0x1d, 0x74, 0xa0, 0x68 };
1056 	struct i2c_msg tuner_msg = { .addr=0x60, .flags=0, .buf=td1316_init, .len=sizeof(td1316_init) };
1057 
1058 	// setup PLL configuration
1059 	if (fe->ops.i2c_gate_ctrl)
1060 		fe->ops.i2c_gate_ctrl(fe, 1);
1061 	if (i2c_transfer(&ttusb->i2c_adap, &tuner_msg, 1) != 1) return -EIO;
1062 	msleep(1);
1063 
1064 	// disable the mc44BC374c (do not check for errors)
1065 	tuner_msg.addr = 0x65;
1066 	tuner_msg.buf = disable_mc44BC374c;
1067 	tuner_msg.len = sizeof(disable_mc44BC374c);
1068 	if (fe->ops.i2c_gate_ctrl)
1069 		fe->ops.i2c_gate_ctrl(fe, 1);
1070 	if (i2c_transfer(&ttusb->i2c_adap, &tuner_msg, 1) != 1) {
1071 		i2c_transfer(&ttusb->i2c_adap, &tuner_msg, 1);
1072 	}
1073 
1074 	return 0;
1075 }
1076 
1077 static int philips_tdm1316l_tuner_set_params(struct dvb_frontend *fe)
1078 {
1079 	struct dtv_frontend_properties *p = &fe->dtv_property_cache;
1080 	struct ttusb* ttusb = (struct ttusb*) fe->dvb->priv;
1081 	u8 tuner_buf[4];
1082 	struct i2c_msg tuner_msg = {.addr=0x60, .flags=0, .buf=tuner_buf, .len=sizeof(tuner_buf) };
1083 	int tuner_frequency = 0;
1084 	u8 band, cp, filter;
1085 
1086 	// determine charge pump
1087 	tuner_frequency = p->frequency + 36130000;
1088 	if (tuner_frequency < 87000000) return -EINVAL;
1089 	else if (tuner_frequency < 130000000) cp = 3;
1090 	else if (tuner_frequency < 160000000) cp = 5;
1091 	else if (tuner_frequency < 200000000) cp = 6;
1092 	else if (tuner_frequency < 290000000) cp = 3;
1093 	else if (tuner_frequency < 420000000) cp = 5;
1094 	else if (tuner_frequency < 480000000) cp = 6;
1095 	else if (tuner_frequency < 620000000) cp = 3;
1096 	else if (tuner_frequency < 830000000) cp = 5;
1097 	else if (tuner_frequency < 895000000) cp = 7;
1098 	else return -EINVAL;
1099 
1100 	// determine band
1101 	if (p->frequency < 49000000)
1102 		return -EINVAL;
1103 	else if (p->frequency < 159000000)
1104 		band = 1;
1105 	else if (p->frequency < 444000000)
1106 		band = 2;
1107 	else if (p->frequency < 861000000)
1108 		band = 4;
1109 	else return -EINVAL;
1110 
1111 	// setup PLL filter
1112 	switch (p->bandwidth_hz) {
1113 	case 6000000:
1114 		tda1004x_writereg(fe, 0x0C, 0);
1115 		filter = 0;
1116 		break;
1117 
1118 	case 7000000:
1119 		tda1004x_writereg(fe, 0x0C, 0);
1120 		filter = 0;
1121 		break;
1122 
1123 	case 8000000:
1124 		tda1004x_writereg(fe, 0x0C, 0xFF);
1125 		filter = 1;
1126 		break;
1127 
1128 	default:
1129 		return -EINVAL;
1130 	}
1131 
1132 	// calculate divisor
1133 	// ((36130000+((1000000/6)/2)) + Finput)/(1000000/6)
1134 	tuner_frequency = (((p->frequency / 1000) * 6) + 217280) / 1000;
1135 
1136 	// setup tuner buffer
1137 	tuner_buf[0] = tuner_frequency >> 8;
1138 	tuner_buf[1] = tuner_frequency & 0xff;
1139 	tuner_buf[2] = 0xca;
1140 	tuner_buf[3] = (cp << 5) | (filter << 3) | band;
1141 
1142 	if (fe->ops.i2c_gate_ctrl)
1143 		fe->ops.i2c_gate_ctrl(fe, 1);
1144 	if (i2c_transfer(&ttusb->i2c_adap, &tuner_msg, 1) != 1)
1145 		return -EIO;
1146 
1147 	msleep(1);
1148 	return 0;
1149 }
1150 
1151 static int philips_tdm1316l_request_firmware(struct dvb_frontend* fe, const struct firmware **fw, char* name)
1152 {
1153 	struct ttusb* ttusb = (struct ttusb*) fe->dvb->priv;
1154 
1155 	return request_firmware(fw, name, &ttusb->dev->dev);
1156 }
1157 
1158 static struct tda1004x_config philips_tdm1316l_config = {
1159 
1160 	.demod_address = 0x8,
1161 	.invert = 1,
1162 	.invert_oclk = 0,
1163 	.request_firmware = philips_tdm1316l_request_firmware,
1164 };
1165 
1166 static u8 alps_bsbe1_inittab[] = {
1167 	0x01, 0x15,
1168 	0x02, 0x30,
1169 	0x03, 0x00,
1170 	0x04, 0x7d,             /* F22FR = 0x7d, F22 = f_VCO / 128 / 0x7d = 22 kHz */
1171 	0x05, 0x35,             /* I2CT = 0, SCLT = 1, SDAT = 1 */
1172 	0x06, 0x40,             /* DAC not used, set to high impendance mode */
1173 	0x07, 0x00,             /* DAC LSB */
1174 	0x08, 0x40,             /* DiSEqC off, LNB power on OP2/LOCK pin on */
1175 	0x09, 0x00,             /* FIFO */
1176 	0x0c, 0x51,             /* OP1 ctl = Normal, OP1 val = 1 (LNB Power ON) */
1177 	0x0d, 0x82,             /* DC offset compensation = ON, beta_agc1 = 2 */
1178 	0x0e, 0x23,             /* alpha_tmg = 2, beta_tmg = 3 */
1179 	0x10, 0x3f,             // AGC2  0x3d
1180 	0x11, 0x84,
1181 	0x12, 0xb9,
1182 	0x15, 0xc9,             // lock detector threshold
1183 	0x16, 0x00,
1184 	0x17, 0x00,
1185 	0x18, 0x00,
1186 	0x19, 0x00,
1187 	0x1a, 0x00,
1188 	0x1f, 0x50,
1189 	0x20, 0x00,
1190 	0x21, 0x00,
1191 	0x22, 0x00,
1192 	0x23, 0x00,
1193 	0x28, 0x00,             // out imp: normal  out type: parallel FEC mode:0
1194 	0x29, 0x1e,             // 1/2 threshold
1195 	0x2a, 0x14,             // 2/3 threshold
1196 	0x2b, 0x0f,             // 3/4 threshold
1197 	0x2c, 0x09,             // 5/6 threshold
1198 	0x2d, 0x05,             // 7/8 threshold
1199 	0x2e, 0x01,
1200 	0x31, 0x1f,             // test all FECs
1201 	0x32, 0x19,             // viterbi and synchro search
1202 	0x33, 0xfc,             // rs control
1203 	0x34, 0x93,             // error control
1204 	0x0f, 0x92,
1205 	0xff, 0xff
1206 };
1207 
1208 static u8 alps_bsru6_inittab[] = {
1209 	0x01, 0x15,
1210 	0x02, 0x30,
1211 	0x03, 0x00,
1212 	0x04, 0x7d,		/* F22FR = 0x7d, F22 = f_VCO / 128 / 0x7d = 22 kHz */
1213 	0x05, 0x35,		/* I2CT = 0, SCLT = 1, SDAT = 1 */
1214 	0x06, 0x40,		/* DAC not used, set to high impendance mode */
1215 	0x07, 0x00,		/* DAC LSB */
1216 	0x08, 0x40,		/* DiSEqC off, LNB power on OP2/LOCK pin on */
1217 	0x09, 0x00,		/* FIFO */
1218 	0x0c, 0x51,		/* OP1 ctl = Normal, OP1 val = 1 (LNB Power ON) */
1219 	0x0d, 0x82,		/* DC offset compensation = ON, beta_agc1 = 2 */
1220 	0x0e, 0x23,		/* alpha_tmg = 2, beta_tmg = 3 */
1221 	0x10, 0x3f,		// AGC2  0x3d
1222 	0x11, 0x84,
1223 	0x12, 0xb9,
1224 	0x15, 0xc9,		// lock detector threshold
1225 	0x16, 0x00,
1226 	0x17, 0x00,
1227 	0x18, 0x00,
1228 	0x19, 0x00,
1229 	0x1a, 0x00,
1230 	0x1f, 0x50,
1231 	0x20, 0x00,
1232 	0x21, 0x00,
1233 	0x22, 0x00,
1234 	0x23, 0x00,
1235 	0x28, 0x00,		// out imp: normal  out type: parallel FEC mode:0
1236 	0x29, 0x1e,		// 1/2 threshold
1237 	0x2a, 0x14,		// 2/3 threshold
1238 	0x2b, 0x0f,		// 3/4 threshold
1239 	0x2c, 0x09,		// 5/6 threshold
1240 	0x2d, 0x05,		// 7/8 threshold
1241 	0x2e, 0x01,
1242 	0x31, 0x1f,		// test all FECs
1243 	0x32, 0x19,		// viterbi and synchro search
1244 	0x33, 0xfc,		// rs control
1245 	0x34, 0x93,		// error control
1246 	0x0f, 0x52,
1247 	0xff, 0xff
1248 };
1249 
1250 static int alps_stv0299_set_symbol_rate(struct dvb_frontend *fe, u32 srate, u32 ratio)
1251 {
1252 	u8 aclk = 0;
1253 	u8 bclk = 0;
1254 
1255 	if (srate < 1500000) {
1256 		aclk = 0xb7;
1257 		bclk = 0x47;
1258 	} else if (srate < 3000000) {
1259 		aclk = 0xb7;
1260 		bclk = 0x4b;
1261 	} else if (srate < 7000000) {
1262 		aclk = 0xb7;
1263 		bclk = 0x4f;
1264 	} else if (srate < 14000000) {
1265 		aclk = 0xb7;
1266 		bclk = 0x53;
1267 	} else if (srate < 30000000) {
1268 		aclk = 0xb6;
1269 		bclk = 0x53;
1270 	} else if (srate < 45000000) {
1271 		aclk = 0xb4;
1272 		bclk = 0x51;
1273 	}
1274 
1275 	stv0299_writereg(fe, 0x13, aclk);
1276 	stv0299_writereg(fe, 0x14, bclk);
1277 	stv0299_writereg(fe, 0x1f, (ratio >> 16) & 0xff);
1278 	stv0299_writereg(fe, 0x20, (ratio >> 8) & 0xff);
1279 	stv0299_writereg(fe, 0x21, (ratio) & 0xf0);
1280 
1281 	return 0;
1282 }
1283 
1284 static int philips_tsa5059_tuner_set_params(struct dvb_frontend *fe)
1285 {
1286 	struct dtv_frontend_properties *p = &fe->dtv_property_cache;
1287 	struct ttusb* ttusb = (struct ttusb*) fe->dvb->priv;
1288 	u8 buf[4];
1289 	u32 div;
1290 	struct i2c_msg msg = {.addr = 0x61,.flags = 0,.buf = buf,.len = sizeof(buf) };
1291 
1292 	if ((p->frequency < 950000) || (p->frequency > 2150000))
1293 		return -EINVAL;
1294 
1295 	div = (p->frequency + (125 - 1)) / 125;	/* round correctly */
1296 	buf[0] = (div >> 8) & 0x7f;
1297 	buf[1] = div & 0xff;
1298 	buf[2] = 0x80 | ((div & 0x18000) >> 10) | 4;
1299 	buf[3] = 0xC4;
1300 
1301 	if (p->frequency > 1530000)
1302 		buf[3] = 0xC0;
1303 
1304 	/* BSBE1 wants XCE bit set */
1305 	if (ttusb->revision == TTUSB_REV_2_2)
1306 		buf[3] |= 0x20;
1307 
1308 	if (fe->ops.i2c_gate_ctrl)
1309 		fe->ops.i2c_gate_ctrl(fe, 1);
1310 	if (i2c_transfer(&ttusb->i2c_adap, &msg, 1) != 1)
1311 		return -EIO;
1312 
1313 	return 0;
1314 }
1315 
1316 static struct stv0299_config alps_stv0299_config = {
1317 	.demod_address = 0x68,
1318 	.inittab = alps_bsru6_inittab,
1319 	.mclk = 88000000UL,
1320 	.invert = 1,
1321 	.skip_reinit = 0,
1322 	.lock_output = STV0299_LOCKOUTPUT_1,
1323 	.volt13_op0_op1 = STV0299_VOLT13_OP1,
1324 	.min_delay_ms = 100,
1325 	.set_symbol_rate = alps_stv0299_set_symbol_rate,
1326 };
1327 
1328 static int ttusb_novas_grundig_29504_491_tuner_set_params(struct dvb_frontend *fe)
1329 {
1330 	struct dtv_frontend_properties *p = &fe->dtv_property_cache;
1331 	struct ttusb* ttusb = (struct ttusb*) fe->dvb->priv;
1332 	u8 buf[4];
1333 	u32 div;
1334 	struct i2c_msg msg = {.addr = 0x61,.flags = 0,.buf = buf,.len = sizeof(buf) };
1335 
1336 	div = p->frequency / 125;
1337 
1338 	buf[0] = (div >> 8) & 0x7f;
1339 	buf[1] = div & 0xff;
1340 	buf[2] = 0x8e;
1341 	buf[3] = 0x00;
1342 
1343 	if (fe->ops.i2c_gate_ctrl)
1344 		fe->ops.i2c_gate_ctrl(fe, 1);
1345 	if (i2c_transfer(&ttusb->i2c_adap, &msg, 1) != 1)
1346 		return -EIO;
1347 
1348 	return 0;
1349 }
1350 
1351 static struct tda8083_config ttusb_novas_grundig_29504_491_config = {
1352 
1353 	.demod_address = 0x68,
1354 };
1355 
1356 static int alps_tdbe2_tuner_set_params(struct dvb_frontend *fe)
1357 {
1358 	struct dtv_frontend_properties *p = &fe->dtv_property_cache;
1359 	struct ttusb* ttusb = fe->dvb->priv;
1360 	u32 div;
1361 	u8 data[4];
1362 	struct i2c_msg msg = { .addr = 0x62, .flags = 0, .buf = data, .len = sizeof(data) };
1363 
1364 	div = (p->frequency + 35937500 + 31250) / 62500;
1365 
1366 	data[0] = (div >> 8) & 0x7f;
1367 	data[1] = div & 0xff;
1368 	data[2] = 0x85 | ((div >> 10) & 0x60);
1369 	data[3] = (p->frequency < 174000000 ? 0x88 : p->frequency < 470000000 ? 0x84 : 0x81);
1370 
1371 	if (fe->ops.i2c_gate_ctrl)
1372 		fe->ops.i2c_gate_ctrl(fe, 1);
1373 	if (i2c_transfer (&ttusb->i2c_adap, &msg, 1) != 1)
1374 		return -EIO;
1375 
1376 	return 0;
1377 }
1378 
1379 
1380 static struct ves1820_config alps_tdbe2_config = {
1381 	.demod_address = 0x09,
1382 	.xin = 57840000UL,
1383 	.invert = 1,
1384 	.selagc = VES1820_SELAGC_SIGNAMPERR,
1385 };
1386 
1387 static u8 read_pwm(struct ttusb* ttusb)
1388 {
1389 	u8 b = 0xff;
1390 	u8 pwm;
1391 	struct i2c_msg msg[] = { { .addr = 0x50,.flags = 0,.buf = &b,.len = 1 },
1392 				{ .addr = 0x50,.flags = I2C_M_RD,.buf = &pwm,.len = 1} };
1393 
1394 	if ((i2c_transfer(&ttusb->i2c_adap, msg, 2) != 2) || (pwm == 0xff))
1395 		pwm = 0x48;
1396 
1397 	return pwm;
1398 }
1399 
1400 
1401 static int dvbc_philips_tdm1316l_tuner_set_params(struct dvb_frontend *fe)
1402 {
1403 	struct dtv_frontend_properties *p = &fe->dtv_property_cache;
1404 	struct ttusb *ttusb = (struct ttusb *) fe->dvb->priv;
1405 	u8 tuner_buf[5];
1406 	struct i2c_msg tuner_msg = {.addr = 0x60,
1407 				    .flags = 0,
1408 				    .buf = tuner_buf,
1409 				    .len = sizeof(tuner_buf) };
1410 	int tuner_frequency = 0;
1411 	u8 band, cp, filter;
1412 
1413 	// determine charge pump
1414 	tuner_frequency = p->frequency;
1415 	if      (tuner_frequency <  87000000) {return -EINVAL;}
1416 	else if (tuner_frequency < 130000000) {cp = 3; band = 1;}
1417 	else if (tuner_frequency < 160000000) {cp = 5; band = 1;}
1418 	else if (tuner_frequency < 200000000) {cp = 6; band = 1;}
1419 	else if (tuner_frequency < 290000000) {cp = 3; band = 2;}
1420 	else if (tuner_frequency < 420000000) {cp = 5; band = 2;}
1421 	else if (tuner_frequency < 480000000) {cp = 6; band = 2;}
1422 	else if (tuner_frequency < 620000000) {cp = 3; band = 4;}
1423 	else if (tuner_frequency < 830000000) {cp = 5; band = 4;}
1424 	else if (tuner_frequency < 895000000) {cp = 7; band = 4;}
1425 	else {return -EINVAL;}
1426 
1427 	// assume PLL filter should always be 8MHz for the moment.
1428 	filter = 1;
1429 
1430 	// calculate divisor
1431 	// (Finput + Fif)/Fref; Fif = 36125000 Hz, Fref = 62500 Hz
1432 	tuner_frequency = ((p->frequency + 36125000) / 62500);
1433 
1434 	// setup tuner buffer
1435 	tuner_buf[0] = tuner_frequency >> 8;
1436 	tuner_buf[1] = tuner_frequency & 0xff;
1437 	tuner_buf[2] = 0xc8;
1438 	tuner_buf[3] = (cp << 5) | (filter << 3) | band;
1439 	tuner_buf[4] = 0x80;
1440 
1441 	if (fe->ops.i2c_gate_ctrl)
1442 		fe->ops.i2c_gate_ctrl(fe, 1);
1443 	if (i2c_transfer(&ttusb->i2c_adap, &tuner_msg, 1) != 1) {
1444 		printk("dvb-ttusb-budget: dvbc_philips_tdm1316l_pll_set Error 1\n");
1445 		return -EIO;
1446 	}
1447 
1448 	msleep(50);
1449 
1450 	if (fe->ops.i2c_gate_ctrl)
1451 		fe->ops.i2c_gate_ctrl(fe, 1);
1452 	if (i2c_transfer(&ttusb->i2c_adap, &tuner_msg, 1) != 1) {
1453 		printk("dvb-ttusb-budget: dvbc_philips_tdm1316l_pll_set Error 2\n");
1454 		return -EIO;
1455 	}
1456 
1457 	msleep(1);
1458 
1459 	return 0;
1460 }
1461 
1462 static u8 dvbc_philips_tdm1316l_inittab[] = {
1463 	0x80, 0x21,
1464 	0x80, 0x20,
1465 	0x81, 0x01,
1466 	0x81, 0x00,
1467 	0x00, 0x09,
1468 	0x01, 0x69,
1469 	0x03, 0x00,
1470 	0x04, 0x00,
1471 	0x07, 0x00,
1472 	0x08, 0x00,
1473 	0x20, 0x00,
1474 	0x21, 0x40,
1475 	0x22, 0x00,
1476 	0x23, 0x00,
1477 	0x24, 0x40,
1478 	0x25, 0x88,
1479 	0x30, 0xff,
1480 	0x31, 0x00,
1481 	0x32, 0xff,
1482 	0x33, 0x00,
1483 	0x34, 0x50,
1484 	0x35, 0x7f,
1485 	0x36, 0x00,
1486 	0x37, 0x20,
1487 	0x38, 0x00,
1488 	0x40, 0x1c,
1489 	0x41, 0xff,
1490 	0x42, 0x29,
1491 	0x43, 0x20,
1492 	0x44, 0xff,
1493 	0x45, 0x00,
1494 	0x46, 0x00,
1495 	0x49, 0x04,
1496 	0x4a, 0xff,
1497 	0x4b, 0x7f,
1498 	0x52, 0x30,
1499 	0x55, 0xae,
1500 	0x56, 0x47,
1501 	0x57, 0xe1,
1502 	0x58, 0x3a,
1503 	0x5a, 0x1e,
1504 	0x5b, 0x34,
1505 	0x60, 0x00,
1506 	0x63, 0x00,
1507 	0x64, 0x00,
1508 	0x65, 0x00,
1509 	0x66, 0x00,
1510 	0x67, 0x00,
1511 	0x68, 0x00,
1512 	0x69, 0x00,
1513 	0x6a, 0x02,
1514 	0x6b, 0x00,
1515 	0x70, 0xff,
1516 	0x71, 0x00,
1517 	0x72, 0x00,
1518 	0x73, 0x00,
1519 	0x74, 0x0c,
1520 	0x80, 0x00,
1521 	0x81, 0x00,
1522 	0x82, 0x00,
1523 	0x83, 0x00,
1524 	0x84, 0x04,
1525 	0x85, 0x80,
1526 	0x86, 0x24,
1527 	0x87, 0x78,
1528 	0x88, 0x00,
1529 	0x89, 0x00,
1530 	0x90, 0x01,
1531 	0x91, 0x01,
1532 	0xa0, 0x00,
1533 	0xa1, 0x00,
1534 	0xa2, 0x00,
1535 	0xb0, 0x91,
1536 	0xb1, 0x0b,
1537 	0xc0, 0x4b,
1538 	0xc1, 0x00,
1539 	0xc2, 0x00,
1540 	0xd0, 0x00,
1541 	0xd1, 0x00,
1542 	0xd2, 0x00,
1543 	0xd3, 0x00,
1544 	0xd4, 0x00,
1545 	0xd5, 0x00,
1546 	0xde, 0x00,
1547 	0xdf, 0x00,
1548 	0x61, 0x38,
1549 	0x62, 0x0a,
1550 	0x53, 0x13,
1551 	0x59, 0x08,
1552 	0x55, 0x00,
1553 	0x56, 0x40,
1554 	0x57, 0x08,
1555 	0x58, 0x3d,
1556 	0x88, 0x10,
1557 	0xa0, 0x00,
1558 	0xa0, 0x00,
1559 	0xa0, 0x00,
1560 	0xa0, 0x04,
1561 	0xff, 0xff,
1562 };
1563 
1564 static struct stv0297_config dvbc_philips_tdm1316l_config = {
1565 	.demod_address = 0x1c,
1566 	.inittab = dvbc_philips_tdm1316l_inittab,
1567 	.invert = 0,
1568 };
1569 
1570 static void frontend_init(struct ttusb* ttusb)
1571 {
1572 	switch(le16_to_cpu(ttusb->dev->descriptor.idProduct)) {
1573 	case 0x1003: // Hauppauge/TT Nova-USB-S budget (stv0299/ALPS BSRU6|BSBE1(tsa5059))
1574 		// try the stv0299 based first
1575 		ttusb->fe = dvb_attach(stv0299_attach, &alps_stv0299_config, &ttusb->i2c_adap);
1576 		if (ttusb->fe != NULL) {
1577 			ttusb->fe->ops.tuner_ops.set_params = philips_tsa5059_tuner_set_params;
1578 
1579 			if(ttusb->revision == TTUSB_REV_2_2) { // ALPS BSBE1
1580 				alps_stv0299_config.inittab = alps_bsbe1_inittab;
1581 				dvb_attach(lnbp21_attach, ttusb->fe, &ttusb->i2c_adap, 0, 0);
1582 			} else { // ALPS BSRU6
1583 				ttusb->fe->ops.set_voltage = ttusb_set_voltage;
1584 			}
1585 			break;
1586 		}
1587 
1588 		// Grundig 29504-491
1589 		ttusb->fe = dvb_attach(tda8083_attach, &ttusb_novas_grundig_29504_491_config, &ttusb->i2c_adap);
1590 		if (ttusb->fe != NULL) {
1591 			ttusb->fe->ops.tuner_ops.set_params = ttusb_novas_grundig_29504_491_tuner_set_params;
1592 			ttusb->fe->ops.set_voltage = ttusb_set_voltage;
1593 			break;
1594 		}
1595 		break;
1596 
1597 	case 0x1004: // Hauppauge/TT DVB-C budget (ves1820/ALPS TDBE2(sp5659))
1598 		ttusb->fe = dvb_attach(ves1820_attach, &alps_tdbe2_config, &ttusb->i2c_adap, read_pwm(ttusb));
1599 		if (ttusb->fe != NULL) {
1600 			ttusb->fe->ops.tuner_ops.set_params = alps_tdbe2_tuner_set_params;
1601 			break;
1602 		}
1603 
1604 		ttusb->fe = dvb_attach(stv0297_attach, &dvbc_philips_tdm1316l_config, &ttusb->i2c_adap);
1605 		if (ttusb->fe != NULL) {
1606 			ttusb->fe->ops.tuner_ops.set_params = dvbc_philips_tdm1316l_tuner_set_params;
1607 			break;
1608 		}
1609 		break;
1610 
1611 	case 0x1005: // Hauppauge/TT Nova-USB-t budget (tda10046/Philips td1316(tda6651tt) OR cx22700/ALPS TDMB7(??))
1612 		// try the ALPS TDMB7 first
1613 		ttusb->fe = dvb_attach(cx22700_attach, &alps_tdmb7_config, &ttusb->i2c_adap);
1614 		if (ttusb->fe != NULL) {
1615 			ttusb->fe->ops.tuner_ops.set_params = alps_tdmb7_tuner_set_params;
1616 			break;
1617 		}
1618 
1619 		// Philips td1316
1620 		ttusb->fe = dvb_attach(tda10046_attach, &philips_tdm1316l_config, &ttusb->i2c_adap);
1621 		if (ttusb->fe != NULL) {
1622 			ttusb->fe->ops.tuner_ops.init = philips_tdm1316l_tuner_init;
1623 			ttusb->fe->ops.tuner_ops.set_params = philips_tdm1316l_tuner_set_params;
1624 			break;
1625 		}
1626 		break;
1627 	}
1628 
1629 	if (ttusb->fe == NULL) {
1630 		printk("dvb-ttusb-budget: A frontend driver was not found for device [%04x:%04x]\n",
1631 		       le16_to_cpu(ttusb->dev->descriptor.idVendor),
1632 		       le16_to_cpu(ttusb->dev->descriptor.idProduct));
1633 	} else {
1634 		if (dvb_register_frontend(&ttusb->adapter, ttusb->fe)) {
1635 			printk("dvb-ttusb-budget: Frontend registration failed!\n");
1636 			dvb_frontend_detach(ttusb->fe);
1637 			ttusb->fe = NULL;
1638 		}
1639 	}
1640 }
1641 
1642 
1643 
1644 static struct i2c_algorithm ttusb_dec_algo = {
1645 	.master_xfer	= master_xfer,
1646 	.functionality	= functionality,
1647 };
1648 
1649 static int ttusb_probe(struct usb_interface *intf, const struct usb_device_id *id)
1650 {
1651 	struct usb_device *udev;
1652 	struct ttusb *ttusb;
1653 	int result;
1654 
1655 	dprintk("%s: TTUSB DVB connected\n", __func__);
1656 
1657 	udev = interface_to_usbdev(intf);
1658 
1659 	if (intf->altsetting->desc.bInterfaceNumber != 1) return -ENODEV;
1660 
1661 	if (!(ttusb = kzalloc(sizeof(struct ttusb), GFP_KERNEL)))
1662 		return -ENOMEM;
1663 
1664 	ttusb->dev = udev;
1665 	ttusb->c = 0;
1666 	ttusb->mux_state = 0;
1667 	mutex_init(&ttusb->semi2c);
1668 
1669 	mutex_lock(&ttusb->semi2c);
1670 
1671 	mutex_init(&ttusb->semusb);
1672 
1673 	ttusb_setup_interfaces(ttusb);
1674 
1675 	result = ttusb_alloc_iso_urbs(ttusb);
1676 	if (result < 0) {
1677 		dprintk("%s: ttusb_alloc_iso_urbs - failed\n", __func__);
1678 		mutex_unlock(&ttusb->semi2c);
1679 		kfree(ttusb);
1680 		return result;
1681 	}
1682 
1683 	if (ttusb_init_controller(ttusb))
1684 		printk("ttusb_init_controller: error\n");
1685 
1686 	mutex_unlock(&ttusb->semi2c);
1687 
1688 	result = dvb_register_adapter(&ttusb->adapter,
1689 				      "Technotrend/Hauppauge Nova-USB",
1690 				      THIS_MODULE, &udev->dev, adapter_nr);
1691 	if (result < 0) {
1692 		ttusb_free_iso_urbs(ttusb);
1693 		kfree(ttusb);
1694 		return result;
1695 	}
1696 	ttusb->adapter.priv = ttusb;
1697 
1698 	/* i2c */
1699 	memset(&ttusb->i2c_adap, 0, sizeof(struct i2c_adapter));
1700 	strcpy(ttusb->i2c_adap.name, "TTUSB DEC");
1701 
1702 	i2c_set_adapdata(&ttusb->i2c_adap, ttusb);
1703 
1704 	ttusb->i2c_adap.algo              = &ttusb_dec_algo;
1705 	ttusb->i2c_adap.algo_data         = NULL;
1706 	ttusb->i2c_adap.dev.parent	  = &udev->dev;
1707 
1708 	result = i2c_add_adapter(&ttusb->i2c_adap);
1709 	if (result)
1710 		goto err_unregister_adapter;
1711 
1712 	memset(&ttusb->dvb_demux, 0, sizeof(ttusb->dvb_demux));
1713 
1714 	ttusb->dvb_demux.dmx.capabilities =
1715 	    DMX_TS_FILTERING | DMX_SECTION_FILTERING;
1716 	ttusb->dvb_demux.priv = NULL;
1717 #ifdef TTUSB_HWSECTIONS
1718 	ttusb->dvb_demux.filternum = TTUSB_MAXFILTER;
1719 #else
1720 	ttusb->dvb_demux.filternum = 32;
1721 #endif
1722 	ttusb->dvb_demux.feednum = TTUSB_MAXCHANNEL;
1723 	ttusb->dvb_demux.start_feed = ttusb_start_feed;
1724 	ttusb->dvb_demux.stop_feed = ttusb_stop_feed;
1725 	ttusb->dvb_demux.write_to_decoder = NULL;
1726 
1727 	result = dvb_dmx_init(&ttusb->dvb_demux);
1728 	if (result < 0) {
1729 		printk("ttusb_dvb: dvb_dmx_init failed (errno = %d)\n", result);
1730 		result = -ENODEV;
1731 		goto err_i2c_del_adapter;
1732 	}
1733 //FIXME dmxdev (nur WAS?)
1734 	ttusb->dmxdev.filternum = ttusb->dvb_demux.filternum;
1735 	ttusb->dmxdev.demux = &ttusb->dvb_demux.dmx;
1736 	ttusb->dmxdev.capabilities = 0;
1737 
1738 	result = dvb_dmxdev_init(&ttusb->dmxdev, &ttusb->adapter);
1739 	if (result < 0) {
1740 		printk("ttusb_dvb: dvb_dmxdev_init failed (errno = %d)\n",
1741 		       result);
1742 		result = -ENODEV;
1743 		goto err_release_dmx;
1744 	}
1745 
1746 	if (dvb_net_init(&ttusb->adapter, &ttusb->dvbnet, &ttusb->dvb_demux.dmx)) {
1747 		printk("ttusb_dvb: dvb_net_init failed!\n");
1748 		result = -ENODEV;
1749 		goto err_release_dmxdev;
1750 	}
1751 
1752 	usb_set_intfdata(intf, (void *) ttusb);
1753 
1754 	frontend_init(ttusb);
1755 
1756 	return 0;
1757 
1758 err_release_dmxdev:
1759 	dvb_dmxdev_release(&ttusb->dmxdev);
1760 err_release_dmx:
1761 	dvb_dmx_release(&ttusb->dvb_demux);
1762 err_i2c_del_adapter:
1763 	i2c_del_adapter(&ttusb->i2c_adap);
1764 err_unregister_adapter:
1765 	dvb_unregister_adapter (&ttusb->adapter);
1766 	ttusb_free_iso_urbs(ttusb);
1767 	kfree(ttusb);
1768 	return result;
1769 }
1770 
1771 static void ttusb_disconnect(struct usb_interface *intf)
1772 {
1773 	struct ttusb *ttusb = usb_get_intfdata(intf);
1774 
1775 	usb_set_intfdata(intf, NULL);
1776 
1777 	ttusb->disconnecting = 1;
1778 
1779 	ttusb_stop_iso_xfer(ttusb);
1780 
1781 	ttusb->dvb_demux.dmx.close(&ttusb->dvb_demux.dmx);
1782 	dvb_net_release(&ttusb->dvbnet);
1783 	dvb_dmxdev_release(&ttusb->dmxdev);
1784 	dvb_dmx_release(&ttusb->dvb_demux);
1785 	if (ttusb->fe != NULL) {
1786 		dvb_unregister_frontend(ttusb->fe);
1787 		dvb_frontend_detach(ttusb->fe);
1788 	}
1789 	i2c_del_adapter(&ttusb->i2c_adap);
1790 	dvb_unregister_adapter(&ttusb->adapter);
1791 
1792 	ttusb_free_iso_urbs(ttusb);
1793 
1794 	kfree(ttusb);
1795 
1796 	dprintk("%s: TTUSB DVB disconnected\n", __func__);
1797 }
1798 
1799 static struct usb_device_id ttusb_table[] = {
1800 	{USB_DEVICE(0xb48, 0x1003)},
1801 	{USB_DEVICE(0xb48, 0x1004)},
1802 	{USB_DEVICE(0xb48, 0x1005)},
1803 	{}
1804 };
1805 
1806 MODULE_DEVICE_TABLE(usb, ttusb_table);
1807 
1808 static struct usb_driver ttusb_driver = {
1809       .name		= "ttusb",
1810       .probe		= ttusb_probe,
1811       .disconnect	= ttusb_disconnect,
1812       .id_table		= ttusb_table,
1813 };
1814 
1815 module_usb_driver(ttusb_driver);
1816 
1817 MODULE_AUTHOR("Holger Waechtler <holger@convergence.de>");
1818 MODULE_DESCRIPTION("TTUSB DVB Driver");
1819 MODULE_LICENSE("GPL");
1820 MODULE_FIRMWARE("ttusb-budget/dspbootcode.bin");
1821