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