perf tools: Don't clone maps from parent when synthesizing forks
[linux/fpc-iii.git] / drivers / media / usb / ttusb-budget / dvb-ttusb-budget.c
blobeed56895c2b99052295614f742441f94d923a836
1 /*
2 * TTUSB DVB driver
4 * Copyright (c) 2002 Holger Waechtler <holger@convergence.de>
5 * Copyright (c) 2003 Felix Domke <tmbinc@elitedvb.net>
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.
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>
25 #include <media/dvb_frontend.h>
26 #include <media/dmxdev.h>
27 #include <media/dvb_demux.h>
28 #include <media/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"
37 #include <linux/dvb/frontend.h>
38 #include <linux/dvb/dmx.h>
39 #include <linux/pci.h>
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.
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.
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.
60 static int debug;
61 module_param(debug, int, 0644);
62 MODULE_PARM_DESC(debug, "Turn on/off debugging (default:off).");
64 DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);
66 #define dprintk(x...) do { if (debug) printk(KERN_DEBUG x); } while (0)
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
76 #define TTUSB_REV_2_2 0x22
77 #define TTUSB_BUDGET_NAME "ttusb_stc_fw"
80 * since we're casting (struct ttusb*) <-> (struct dvb_demux*) around
81 * the dvb_demux field must be the first in struct!!
83 struct ttusb {
84 struct dvb_demux dvb_demux;
85 struct dmxdev dmxdev;
86 struct dvb_net dvbnet;
88 /* and one for USB access. */
89 struct mutex semi2c;
90 struct mutex semusb;
92 struct dvb_adapter adapter;
93 struct usb_device *dev;
95 struct i2c_adapter i2c_adap;
97 int disconnecting;
98 int iso_streaming;
100 unsigned int bulk_out_pipe;
101 unsigned int bulk_in_pipe;
102 unsigned int isoc_in_pipe;
104 void *iso_buffer;
106 struct urb *iso_urb[ISO_BUF_COUNT];
108 int running_feed_count;
109 int last_channel;
110 int last_filter;
112 u8 c; /* transaction counter, wraps around... */
113 enum fe_sec_tone_mode tone;
114 enum fe_sec_voltage voltage;
116 int mux_state; // 0..2 - MuxSyncWord, 3 - nMuxPacks, 4 - muxpack
117 u8 mux_npacks;
118 u8 muxpack[256 + 8];
119 int muxpack_ptr, muxpack_len;
121 int insync;
123 int cc; /* MuxCounter - will increment on EVERY MUX PACKET */
124 /* (including stuffing. yes. really.) */
126 u8 last_result[32];
128 int revision;
130 struct dvb_frontend* fe;
133 /* ugly workaround ... don't know why it's necessary to read */
134 /* all result codes. */
136 static int ttusb_cmd(struct ttusb *ttusb,
137 const u8 * data, int len, int needresult)
139 int actual_len;
140 int err;
141 int i;
143 if (debug >= 3) {
144 printk(KERN_DEBUG ">");
145 for (i = 0; i < len; ++i)
146 printk(KERN_CONT " %02x", data[i]);
147 printk(KERN_CONT "\n");
150 if (mutex_lock_interruptible(&ttusb->semusb) < 0)
151 return -EAGAIN;
153 err = usb_bulk_msg(ttusb->dev, ttusb->bulk_out_pipe,
154 (u8 *) data, len, &actual_len, 1000);
155 if (err != 0) {
156 dprintk("%s: usb_bulk_msg(send) failed, err == %i!\n",
157 __func__, err);
158 mutex_unlock(&ttusb->semusb);
159 return err;
161 if (actual_len != len) {
162 dprintk("%s: only wrote %d of %d bytes\n", __func__,
163 actual_len, len);
164 mutex_unlock(&ttusb->semusb);
165 return -1;
168 err = usb_bulk_msg(ttusb->dev, ttusb->bulk_in_pipe,
169 ttusb->last_result, 32, &actual_len, 1000);
171 if (err != 0) {
172 printk("%s: failed, receive error %d\n", __func__,
173 err);
174 mutex_unlock(&ttusb->semusb);
175 return err;
178 if (debug >= 3) {
179 actual_len = ttusb->last_result[3] + 4;
180 printk(KERN_DEBUG "<");
181 for (i = 0; i < actual_len; ++i)
182 printk(KERN_CONT " %02x", ttusb->last_result[i]);
183 printk(KERN_CONT "\n");
186 if (!needresult)
187 mutex_unlock(&ttusb->semusb);
188 return 0;
191 static int ttusb_result(struct ttusb *ttusb, u8 * data, int len)
193 memcpy(data, ttusb->last_result, len);
194 mutex_unlock(&ttusb->semusb);
195 return 0;
198 static int ttusb_i2c_msg(struct ttusb *ttusb,
199 u8 addr, u8 * snd_buf, u8 snd_len, u8 * rcv_buf,
200 u8 rcv_len)
202 u8 b[0x28];
203 u8 id = ++ttusb->c;
204 int i, err;
206 if (snd_len > 0x28 - 7 || rcv_len > 0x20 - 7)
207 return -EINVAL;
209 b[0] = 0xaa;
210 b[1] = id;
211 b[2] = 0x31;
212 b[3] = snd_len + 3;
213 b[4] = addr << 1;
214 b[5] = snd_len;
215 b[6] = rcv_len;
217 for (i = 0; i < snd_len; i++)
218 b[7 + i] = snd_buf[i];
220 err = ttusb_cmd(ttusb, b, snd_len + 7, 1);
222 if (err)
223 return -EREMOTEIO;
225 err = ttusb_result(ttusb, b, 0x20);
227 /* check if the i2c transaction was successful */
228 if ((snd_len != b[5]) || (rcv_len != b[6])) return -EREMOTEIO;
230 if (rcv_len > 0) {
232 if (err || b[0] != 0x55 || b[1] != id) {
233 dprintk
234 ("%s: usb_bulk_msg(recv) failed, err == %i, id == %02x, b == ",
235 __func__, err, id);
236 return -EREMOTEIO;
239 for (i = 0; i < rcv_len; i++)
240 rcv_buf[i] = b[7 + i];
243 return rcv_len;
246 static int master_xfer(struct i2c_adapter* adapter, struct i2c_msg *msg, int num)
248 struct ttusb *ttusb = i2c_get_adapdata(adapter);
249 int i = 0;
250 int inc;
252 if (mutex_lock_interruptible(&ttusb->semi2c) < 0)
253 return -EAGAIN;
255 while (i < num) {
256 u8 addr, snd_len, rcv_len, *snd_buf, *rcv_buf;
257 int err;
259 if (num > i + 1 && (msg[i + 1].flags & I2C_M_RD)) {
260 addr = msg[i].addr;
261 snd_buf = msg[i].buf;
262 snd_len = msg[i].len;
263 rcv_buf = msg[i + 1].buf;
264 rcv_len = msg[i + 1].len;
265 inc = 2;
266 } else {
267 addr = msg[i].addr;
268 snd_buf = msg[i].buf;
269 snd_len = msg[i].len;
270 rcv_buf = NULL;
271 rcv_len = 0;
272 inc = 1;
275 err = ttusb_i2c_msg(ttusb, addr,
276 snd_buf, snd_len, rcv_buf, rcv_len);
278 if (err < rcv_len) {
279 dprintk("%s: i == %i\n", __func__, i);
280 break;
283 i += inc;
286 mutex_unlock(&ttusb->semi2c);
287 return i;
290 static int ttusb_boot_dsp(struct ttusb *ttusb)
292 const struct firmware *fw;
293 int i, err;
294 u8 b[40];
296 err = request_firmware(&fw, "ttusb-budget/dspbootcode.bin",
297 &ttusb->dev->dev);
298 if (err) {
299 printk(KERN_ERR "ttusb-budget: failed to request firmware\n");
300 return err;
303 /* BootBlock */
304 b[0] = 0xaa;
305 b[2] = 0x13;
306 b[3] = 28;
308 /* upload dsp code in 32 byte steps (36 didn't work for me ...) */
309 /* 32 is max packet size, no messages should be splitted. */
310 for (i = 0; i < fw->size; i += 28) {
311 memcpy(&b[4], &fw->data[i], 28);
313 b[1] = ++ttusb->c;
315 err = ttusb_cmd(ttusb, b, 32, 0);
316 if (err)
317 goto done;
320 /* last block ... */
321 b[1] = ++ttusb->c;
322 b[2] = 0x13;
323 b[3] = 0;
325 err = ttusb_cmd(ttusb, b, 4, 0);
326 if (err)
327 goto done;
329 /* BootEnd */
330 b[1] = ++ttusb->c;
331 b[2] = 0x14;
332 b[3] = 0;
334 err = ttusb_cmd(ttusb, b, 4, 0);
336 done:
337 release_firmware(fw);
338 if (err) {
339 dprintk("%s: usb_bulk_msg() failed, return value %i!\n",
340 __func__, err);
343 return err;
346 static int ttusb_set_channel(struct ttusb *ttusb, int chan_id, int filter_type,
347 int pid)
349 int err;
350 /* SetChannel */
351 u8 b[] = { 0xaa, ++ttusb->c, 0x22, 4, chan_id, filter_type,
352 (pid >> 8) & 0xff, pid & 0xff
355 err = ttusb_cmd(ttusb, b, sizeof(b), 0);
356 return err;
359 static int ttusb_del_channel(struct ttusb *ttusb, int channel_id)
361 int err;
362 /* DelChannel */
363 u8 b[] = { 0xaa, ++ttusb->c, 0x23, 1, channel_id };
365 err = ttusb_cmd(ttusb, b, sizeof(b), 0);
366 return err;
369 #ifdef TTUSB_HWSECTIONS
370 static int ttusb_set_filter(struct ttusb *ttusb, int filter_id,
371 int associated_chan, u8 filter[8], u8 mask[8])
373 int err;
374 /* SetFilter */
375 u8 b[] = { 0xaa, 0, 0x24, 0x1a, filter_id, associated_chan,
376 filter[0], filter[1], filter[2], filter[3],
377 filter[4], filter[5], filter[6], filter[7],
378 filter[8], filter[9], filter[10], filter[11],
379 mask[0], mask[1], mask[2], mask[3],
380 mask[4], mask[5], mask[6], mask[7],
381 mask[8], mask[9], mask[10], mask[11]
384 err = ttusb_cmd(ttusb, b, sizeof(b), 0);
385 return err;
388 static int ttusb_del_filter(struct ttusb *ttusb, int filter_id)
390 int err;
391 /* DelFilter */
392 u8 b[] = { 0xaa, ++ttusb->c, 0x25, 1, filter_id };
394 err = ttusb_cmd(ttusb, b, sizeof(b), 0);
395 return err;
397 #endif
399 static int ttusb_init_controller(struct ttusb *ttusb)
401 u8 b0[] = { 0xaa, ++ttusb->c, 0x15, 1, 0 };
402 u8 b1[] = { 0xaa, ++ttusb->c, 0x15, 1, 1 };
403 u8 b2[] = { 0xaa, ++ttusb->c, 0x32, 1, 0 };
404 /* i2c write read: 5 bytes, addr 0x10, 0x02 bytes write, 1 bytes read. */
405 u8 b3[] =
406 { 0xaa, ++ttusb->c, 0x31, 5, 0x10, 0x02, 0x01, 0x00, 0x1e };
407 u8 b4[] =
408 { 0x55, ttusb->c, 0x31, 4, 0x10, 0x02, 0x01, 0x00, 0x1e };
410 u8 get_version[] = { 0xaa, ++ttusb->c, 0x17, 5, 0, 0, 0, 0, 0 };
411 u8 get_dsp_version[0x20] =
412 { 0xaa, ++ttusb->c, 0x26, 28, 0, 0, 0, 0, 0 };
413 int err;
415 /* reset board */
416 if ((err = ttusb_cmd(ttusb, b0, sizeof(b0), 0)))
417 return err;
419 /* reset board (again?) */
420 if ((err = ttusb_cmd(ttusb, b1, sizeof(b1), 0)))
421 return err;
423 ttusb_boot_dsp(ttusb);
425 /* set i2c bit rate */
426 if ((err = ttusb_cmd(ttusb, b2, sizeof(b2), 0)))
427 return err;
429 if ((err = ttusb_cmd(ttusb, b3, sizeof(b3), 1)))
430 return err;
432 err = ttusb_result(ttusb, b4, sizeof(b4));
434 if ((err = ttusb_cmd(ttusb, get_version, sizeof(get_version), 1)))
435 return err;
437 if ((err = ttusb_result(ttusb, get_version, sizeof(get_version))))
438 return err;
440 dprintk("%s: stc-version: %c%c%c%c%c\n", __func__,
441 get_version[4], get_version[5], get_version[6],
442 get_version[7], get_version[8]);
444 if (memcmp(get_version + 4, "V 0.0", 5) &&
445 memcmp(get_version + 4, "V 1.1", 5) &&
446 memcmp(get_version + 4, "V 2.1", 5) &&
447 memcmp(get_version + 4, "V 2.2", 5)) {
448 printk
449 ("%s: unknown STC version %c%c%c%c%c, please report!\n",
450 __func__, get_version[4], get_version[5],
451 get_version[6], get_version[7], get_version[8]);
454 ttusb->revision = ((get_version[6] - '0') << 4) |
455 (get_version[8] - '0');
457 err =
458 ttusb_cmd(ttusb, get_dsp_version, sizeof(get_dsp_version), 1);
459 if (err)
460 return err;
462 err =
463 ttusb_result(ttusb, get_dsp_version, sizeof(get_dsp_version));
464 if (err)
465 return err;
466 printk("%s: dsp-version: %c%c%c\n", __func__,
467 get_dsp_version[4], get_dsp_version[5], get_dsp_version[6]);
468 return 0;
471 #ifdef TTUSB_DISEQC
472 static int ttusb_send_diseqc(struct dvb_frontend* fe,
473 const struct dvb_diseqc_master_cmd *cmd)
475 struct ttusb* ttusb = (struct ttusb*) fe->dvb->priv;
476 u8 b[12] = { 0xaa, ++ttusb->c, 0x18 };
478 int err;
480 b[3] = 4 + 2 + cmd->msg_len;
481 b[4] = 0xFF; /* send diseqc master, not burst */
482 b[5] = cmd->msg_len;
484 memcpy(b + 5, cmd->msg, cmd->msg_len);
486 /* Diseqc */
487 if ((err = ttusb_cmd(ttusb, b, 4 + b[3], 0))) {
488 dprintk("%s: usb_bulk_msg() failed, return value %i!\n",
489 __func__, err);
492 return err;
494 #endif
496 static int ttusb_update_lnb(struct ttusb *ttusb)
498 u8 b[] = { 0xaa, ++ttusb->c, 0x16, 5, /*power: */ 1,
499 ttusb->voltage == SEC_VOLTAGE_18 ? 0 : 1,
500 ttusb->tone == SEC_TONE_ON ? 1 : 0, 1, 1
502 int err;
504 /* SetLNB */
505 if ((err = ttusb_cmd(ttusb, b, sizeof(b), 0))) {
506 dprintk("%s: usb_bulk_msg() failed, return value %i!\n",
507 __func__, err);
510 return err;
513 static int ttusb_set_voltage(struct dvb_frontend *fe,
514 enum fe_sec_voltage voltage)
516 struct ttusb* ttusb = (struct ttusb*) fe->dvb->priv;
518 ttusb->voltage = voltage;
519 return ttusb_update_lnb(ttusb);
522 #ifdef TTUSB_TONE
523 static int ttusb_set_tone(struct dvb_frontend *fe, enum fe_sec_tone_mode tone)
525 struct ttusb* ttusb = (struct ttusb*) fe->dvb->priv;
527 ttusb->tone = tone;
528 return ttusb_update_lnb(ttusb);
530 #endif
533 #if 0
534 static void ttusb_set_led_freq(struct ttusb *ttusb, u8 freq)
536 u8 b[] = { 0xaa, ++ttusb->c, 0x19, 1, freq };
537 int err, actual_len;
539 err = ttusb_cmd(ttusb, b, sizeof(b), 0);
540 if (err) {
541 dprintk("%s: usb_bulk_msg() failed, return value %i!\n",
542 __func__, err);
545 #endif
547 /*****************************************************************************/
549 #ifdef TTUSB_HWSECTIONS
550 static void ttusb_handle_ts_data(struct ttusb_channel *channel,
551 const u8 * data, int len);
552 static void ttusb_handle_sec_data(struct ttusb_channel *channel,
553 const u8 * data, int len);
554 #endif
556 static int numpkt, numts, numstuff, numsec, numinvalid;
557 static unsigned long lastj;
559 static void ttusb_process_muxpack(struct ttusb *ttusb, const u8 * muxpack,
560 int len)
562 u16 csum = 0, cc;
563 int i;
565 if (len < 4 || len & 0x1) {
566 pr_warn("%s: muxpack has invalid len %d\n", __func__, len);
567 numinvalid++;
568 return;
571 for (i = 0; i < len; i += 2)
572 csum ^= le16_to_cpup((__le16 *) (muxpack + i));
573 if (csum) {
574 printk("%s: muxpack with incorrect checksum, ignoring\n",
575 __func__);
576 numinvalid++;
577 return;
580 cc = (muxpack[len - 4] << 8) | muxpack[len - 3];
581 cc &= 0x7FFF;
582 if ((cc != ttusb->cc) && (ttusb->cc != -1))
583 printk("%s: cc discontinuity (%d frames missing)\n",
584 __func__, (cc - ttusb->cc) & 0x7FFF);
585 ttusb->cc = (cc + 1) & 0x7FFF;
586 if (muxpack[0] & 0x80) {
587 #ifdef TTUSB_HWSECTIONS
588 /* section data */
589 int pusi = muxpack[0] & 0x40;
590 int channel = muxpack[0] & 0x1F;
591 int payload = muxpack[1];
592 const u8 *data = muxpack + 2;
593 /* check offset flag */
594 if (muxpack[0] & 0x20)
595 data++;
597 ttusb_handle_sec_data(ttusb->channel + channel, data,
598 payload);
599 data += payload;
601 if ((!!(ttusb->muxpack[0] & 0x20)) ^
602 !!(ttusb->muxpack[1] & 1))
603 data++;
604 #warning TODO: pusi
605 printk("cc: %04x\n", (data[0] << 8) | data[1]);
606 #endif
607 numsec++;
608 } else if (muxpack[0] == 0x47) {
609 #ifdef TTUSB_HWSECTIONS
610 /* we have TS data here! */
611 int pid = ((muxpack[1] & 0x0F) << 8) | muxpack[2];
612 int channel;
613 for (channel = 0; channel < TTUSB_MAXCHANNEL; ++channel)
614 if (ttusb->channel[channel].active
615 && (pid == ttusb->channel[channel].pid))
616 ttusb_handle_ts_data(ttusb->channel +
617 channel, muxpack,
618 188);
619 #endif
620 numts++;
621 dvb_dmx_swfilter_packets(&ttusb->dvb_demux, muxpack, 1);
622 } else if (muxpack[0] != 0) {
623 numinvalid++;
624 printk("illegal muxpack type %02x\n", muxpack[0]);
625 } else
626 numstuff++;
629 static void ttusb_process_frame(struct ttusb *ttusb, u8 * data, int len)
631 int maxwork = 1024;
632 while (len) {
633 if (!(maxwork--)) {
634 printk("%s: too much work\n", __func__);
635 break;
638 switch (ttusb->mux_state) {
639 case 0:
640 case 1:
641 case 2:
642 len--;
643 if (*data++ == 0xAA)
644 ++ttusb->mux_state;
645 else {
646 ttusb->mux_state = 0;
647 if (ttusb->insync) {
648 dprintk("%s: %02x\n",
649 __func__, data[-1]);
650 printk(KERN_INFO "%s: lost sync.\n",
651 __func__);
652 ttusb->insync = 0;
655 break;
656 case 3:
657 ttusb->insync = 1;
658 len--;
659 ttusb->mux_npacks = *data++;
660 ++ttusb->mux_state;
661 ttusb->muxpack_ptr = 0;
662 /* maximum bytes, until we know the length */
663 ttusb->muxpack_len = 2;
664 break;
665 case 4:
667 int avail;
668 avail = len;
669 if (avail >
670 (ttusb->muxpack_len -
671 ttusb->muxpack_ptr))
672 avail =
673 ttusb->muxpack_len -
674 ttusb->muxpack_ptr;
675 memcpy(ttusb->muxpack + ttusb->muxpack_ptr,
676 data, avail);
677 ttusb->muxpack_ptr += avail;
678 BUG_ON(ttusb->muxpack_ptr > 264);
679 data += avail;
680 len -= avail;
681 /* determine length */
682 if (ttusb->muxpack_ptr == 2) {
683 if (ttusb->muxpack[0] & 0x80) {
684 ttusb->muxpack_len =
685 ttusb->muxpack[1] + 2;
686 if (ttusb->
687 muxpack[0] & 0x20)
688 ttusb->
689 muxpack_len++;
690 if ((!!
691 (ttusb->
692 muxpack[0] & 0x20)) ^
693 !!(ttusb->
694 muxpack[1] & 1))
695 ttusb->
696 muxpack_len++;
697 ttusb->muxpack_len += 4;
698 } else if (ttusb->muxpack[0] ==
699 0x47)
700 ttusb->muxpack_len =
701 188 + 4;
702 else if (ttusb->muxpack[0] == 0x00)
703 ttusb->muxpack_len =
704 ttusb->muxpack[1] + 2 +
706 else {
707 dprintk
708 ("%s: invalid state: first byte is %x\n",
709 __func__,
710 ttusb->muxpack[0]);
711 ttusb->mux_state = 0;
716 * if length is valid and we reached the end:
717 * goto next muxpack
719 if ((ttusb->muxpack_ptr >= 2) &&
720 (ttusb->muxpack_ptr ==
721 ttusb->muxpack_len)) {
722 ttusb_process_muxpack(ttusb,
723 ttusb->
724 muxpack,
725 ttusb->
726 muxpack_ptr);
727 ttusb->muxpack_ptr = 0;
728 /* maximum bytes, until we know the length */
729 ttusb->muxpack_len = 2;
732 * no muxpacks left?
733 * return to search-sync state
735 if (!ttusb->mux_npacks--) {
736 ttusb->mux_state = 0;
737 break;
740 break;
742 default:
743 BUG();
744 break;
749 static void ttusb_iso_irq(struct urb *urb)
751 struct ttusb *ttusb = urb->context;
752 struct usb_iso_packet_descriptor *d;
753 u8 *data;
754 int len, i;
756 if (!ttusb->iso_streaming)
757 return;
759 #if 0
760 printk("%s: status %d, errcount == %d, length == %i\n",
761 __func__,
762 urb->status, urb->error_count, urb->actual_length);
763 #endif
765 if (!urb->status) {
766 for (i = 0; i < urb->number_of_packets; ++i) {
767 numpkt++;
768 if (time_after_eq(jiffies, lastj + HZ)) {
769 dprintk("frames/s: %lu (ts: %d, stuff %d, sec: %d, invalid: %d, all: %d)\n",
770 numpkt * HZ / (jiffies - lastj),
771 numts, numstuff, numsec, numinvalid,
772 numts + numstuff + numsec + numinvalid);
773 numts = numstuff = numsec = numinvalid = 0;
774 lastj = jiffies;
775 numpkt = 0;
777 d = &urb->iso_frame_desc[i];
778 data = urb->transfer_buffer + d->offset;
779 len = d->actual_length;
780 d->actual_length = 0;
781 d->status = 0;
782 ttusb_process_frame(ttusb, data, len);
785 usb_submit_urb(urb, GFP_ATOMIC);
788 static void ttusb_free_iso_urbs(struct ttusb *ttusb)
790 int i;
792 for (i = 0; i < ISO_BUF_COUNT; i++)
793 usb_free_urb(ttusb->iso_urb[i]);
794 kfree(ttusb->iso_buffer);
797 static int ttusb_alloc_iso_urbs(struct ttusb *ttusb)
799 int i;
801 ttusb->iso_buffer = kcalloc(FRAMES_PER_ISO_BUF * ISO_BUF_COUNT,
802 ISO_FRAME_SIZE, GFP_KERNEL);
803 if (!ttusb->iso_buffer)
804 return -ENOMEM;
806 for (i = 0; i < ISO_BUF_COUNT; i++) {
807 struct urb *urb;
809 if (!
810 (urb =
811 usb_alloc_urb(FRAMES_PER_ISO_BUF, GFP_ATOMIC))) {
812 ttusb_free_iso_urbs(ttusb);
813 return -ENOMEM;
816 ttusb->iso_urb[i] = urb;
819 return 0;
822 static void ttusb_stop_iso_xfer(struct ttusb *ttusb)
824 int i;
826 for (i = 0; i < ISO_BUF_COUNT; i++)
827 usb_kill_urb(ttusb->iso_urb[i]);
829 ttusb->iso_streaming = 0;
832 static int ttusb_start_iso_xfer(struct ttusb *ttusb)
834 int i, j, err, buffer_offset = 0;
836 if (ttusb->iso_streaming) {
837 printk("%s: iso xfer already running!\n", __func__);
838 return 0;
841 ttusb->cc = -1;
842 ttusb->insync = 0;
843 ttusb->mux_state = 0;
845 for (i = 0; i < ISO_BUF_COUNT; i++) {
846 int frame_offset = 0;
847 struct urb *urb = ttusb->iso_urb[i];
849 urb->dev = ttusb->dev;
850 urb->context = ttusb;
851 urb->complete = ttusb_iso_irq;
852 urb->pipe = ttusb->isoc_in_pipe;
853 urb->transfer_flags = URB_ISO_ASAP;
854 urb->interval = 1;
855 urb->number_of_packets = FRAMES_PER_ISO_BUF;
856 urb->transfer_buffer_length =
857 ISO_FRAME_SIZE * FRAMES_PER_ISO_BUF;
858 urb->transfer_buffer = ttusb->iso_buffer + buffer_offset;
859 buffer_offset += ISO_FRAME_SIZE * FRAMES_PER_ISO_BUF;
861 for (j = 0; j < FRAMES_PER_ISO_BUF; j++) {
862 urb->iso_frame_desc[j].offset = frame_offset;
863 urb->iso_frame_desc[j].length = ISO_FRAME_SIZE;
864 frame_offset += ISO_FRAME_SIZE;
868 for (i = 0; i < ISO_BUF_COUNT; i++) {
869 if ((err = usb_submit_urb(ttusb->iso_urb[i], GFP_ATOMIC))) {
870 ttusb_stop_iso_xfer(ttusb);
871 printk
872 ("%s: failed urb submission (%i: err = %i)!\n",
873 __func__, i, err);
874 return err;
878 ttusb->iso_streaming = 1;
880 return 0;
883 #ifdef TTUSB_HWSECTIONS
884 static void ttusb_handle_ts_data(struct dvb_demux_feed *dvbdmxfeed, const u8 * data,
885 int len)
887 dvbdmxfeed->cb.ts(data, len, 0, 0, &dvbdmxfeed->feed.ts, 0);
890 static void ttusb_handle_sec_data(struct dvb_demux_feed *dvbdmxfeed, const u8 * data,
891 int len)
893 // struct dvb_demux_feed *dvbdmxfeed = channel->dvbdmxfeed;
894 #error TODO: handle ugly stuff
895 // dvbdmxfeed->cb.sec(data, len, 0, 0, &dvbdmxfeed->feed.sec, 0);
897 #endif
899 static int ttusb_start_feed(struct dvb_demux_feed *dvbdmxfeed)
901 struct ttusb *ttusb = (struct ttusb *) dvbdmxfeed->demux;
902 int feed_type = 1;
904 dprintk("ttusb_start_feed\n");
906 switch (dvbdmxfeed->type) {
907 case DMX_TYPE_TS:
908 break;
909 case DMX_TYPE_SEC:
910 break;
911 default:
912 return -EINVAL;
915 if (dvbdmxfeed->type == DMX_TYPE_TS) {
916 switch (dvbdmxfeed->pes_type) {
917 case DMX_PES_VIDEO:
918 case DMX_PES_AUDIO:
919 case DMX_PES_TELETEXT:
920 case DMX_PES_PCR:
921 case DMX_PES_OTHER:
922 break;
923 default:
924 return -EINVAL;
928 #ifdef TTUSB_HWSECTIONS
929 #error TODO: allocate filters
930 if (dvbdmxfeed->type == DMX_TYPE_TS) {
931 feed_type = 1;
932 } else if (dvbdmxfeed->type == DMX_TYPE_SEC) {
933 feed_type = 2;
935 #endif
937 ttusb_set_channel(ttusb, dvbdmxfeed->index, feed_type, dvbdmxfeed->pid);
939 if (0 == ttusb->running_feed_count++)
940 ttusb_start_iso_xfer(ttusb);
942 return 0;
945 static int ttusb_stop_feed(struct dvb_demux_feed *dvbdmxfeed)
947 struct ttusb *ttusb = (struct ttusb *) dvbdmxfeed->demux;
949 ttusb_del_channel(ttusb, dvbdmxfeed->index);
951 if (--ttusb->running_feed_count == 0)
952 ttusb_stop_iso_xfer(ttusb);
954 return 0;
957 static int ttusb_setup_interfaces(struct ttusb *ttusb)
959 usb_set_interface(ttusb->dev, 1, 1);
961 ttusb->bulk_out_pipe = usb_sndbulkpipe(ttusb->dev, 1);
962 ttusb->bulk_in_pipe = usb_rcvbulkpipe(ttusb->dev, 1);
963 ttusb->isoc_in_pipe = usb_rcvisocpipe(ttusb->dev, 2);
965 return 0;
968 #if 0
969 static u8 stc_firmware[8192];
971 static int stc_open(struct inode *inode, struct file *file)
973 struct ttusb *ttusb = file->private_data;
974 int addr;
976 for (addr = 0; addr < 8192; addr += 16) {
977 u8 snd_buf[2] = { addr >> 8, addr & 0xFF };
978 ttusb_i2c_msg(ttusb, 0x50, snd_buf, 2, stc_firmware + addr,
979 16);
982 return 0;
985 static ssize_t stc_read(struct file *file, char *buf, size_t count,
986 loff_t *offset)
988 return simple_read_from_buffer(buf, count, offset, stc_firmware, 8192);
991 static int stc_release(struct inode *inode, struct file *file)
993 return 0;
996 static const struct file_operations stc_fops = {
997 .owner = THIS_MODULE,
998 .read = stc_read,
999 .open = stc_open,
1000 .release = stc_release,
1002 #endif
1004 static u32 functionality(struct i2c_adapter *adapter)
1006 return I2C_FUNC_I2C;
1011 static int alps_tdmb7_tuner_set_params(struct dvb_frontend *fe)
1013 struct dtv_frontend_properties *p = &fe->dtv_property_cache;
1014 struct ttusb* ttusb = (struct ttusb*) fe->dvb->priv;
1015 u8 data[4];
1016 struct i2c_msg msg = {.addr=0x61, .flags=0, .buf=data, .len=sizeof(data) };
1017 u32 div;
1019 div = (p->frequency + 36166667) / 166667;
1021 data[0] = (div >> 8) & 0x7f;
1022 data[1] = div & 0xff;
1023 data[2] = ((div >> 10) & 0x60) | 0x85;
1024 data[3] = p->frequency < 592000000 ? 0x40 : 0x80;
1026 if (fe->ops.i2c_gate_ctrl)
1027 fe->ops.i2c_gate_ctrl(fe, 1);
1028 if (i2c_transfer(&ttusb->i2c_adap, &msg, 1) != 1) return -EIO;
1029 return 0;
1032 static struct cx22700_config alps_tdmb7_config = {
1033 .demod_address = 0x43,
1040 static int philips_tdm1316l_tuner_init(struct dvb_frontend* fe)
1042 struct ttusb* ttusb = (struct ttusb*) fe->dvb->priv;
1043 static u8 td1316_init[] = { 0x0b, 0xf5, 0x85, 0xab };
1044 static u8 disable_mc44BC374c[] = { 0x1d, 0x74, 0xa0, 0x68 };
1045 struct i2c_msg tuner_msg = { .addr=0x60, .flags=0, .buf=td1316_init, .len=sizeof(td1316_init) };
1047 // setup PLL configuration
1048 if (fe->ops.i2c_gate_ctrl)
1049 fe->ops.i2c_gate_ctrl(fe, 1);
1050 if (i2c_transfer(&ttusb->i2c_adap, &tuner_msg, 1) != 1) return -EIO;
1051 msleep(1);
1053 // disable the mc44BC374c (do not check for errors)
1054 tuner_msg.addr = 0x65;
1055 tuner_msg.buf = disable_mc44BC374c;
1056 tuner_msg.len = sizeof(disable_mc44BC374c);
1057 if (fe->ops.i2c_gate_ctrl)
1058 fe->ops.i2c_gate_ctrl(fe, 1);
1059 if (i2c_transfer(&ttusb->i2c_adap, &tuner_msg, 1) != 1) {
1060 i2c_transfer(&ttusb->i2c_adap, &tuner_msg, 1);
1063 return 0;
1066 static int philips_tdm1316l_tuner_set_params(struct dvb_frontend *fe)
1068 struct dtv_frontend_properties *p = &fe->dtv_property_cache;
1069 struct ttusb* ttusb = (struct ttusb*) fe->dvb->priv;
1070 u8 tuner_buf[4];
1071 struct i2c_msg tuner_msg = {.addr=0x60, .flags=0, .buf=tuner_buf, .len=sizeof(tuner_buf) };
1072 int tuner_frequency = 0;
1073 u8 band, cp, filter;
1075 // determine charge pump
1076 tuner_frequency = p->frequency + 36130000;
1077 if (tuner_frequency < 87000000) return -EINVAL;
1078 else if (tuner_frequency < 130000000) cp = 3;
1079 else if (tuner_frequency < 160000000) cp = 5;
1080 else if (tuner_frequency < 200000000) cp = 6;
1081 else if (tuner_frequency < 290000000) cp = 3;
1082 else if (tuner_frequency < 420000000) cp = 5;
1083 else if (tuner_frequency < 480000000) cp = 6;
1084 else if (tuner_frequency < 620000000) cp = 3;
1085 else if (tuner_frequency < 830000000) cp = 5;
1086 else if (tuner_frequency < 895000000) cp = 7;
1087 else return -EINVAL;
1089 // determine band
1090 if (p->frequency < 49000000)
1091 return -EINVAL;
1092 else if (p->frequency < 159000000)
1093 band = 1;
1094 else if (p->frequency < 444000000)
1095 band = 2;
1096 else if (p->frequency < 861000000)
1097 band = 4;
1098 else return -EINVAL;
1100 // setup PLL filter
1101 switch (p->bandwidth_hz) {
1102 case 6000000:
1103 tda1004x_writereg(fe, 0x0C, 0);
1104 filter = 0;
1105 break;
1107 case 7000000:
1108 tda1004x_writereg(fe, 0x0C, 0);
1109 filter = 0;
1110 break;
1112 case 8000000:
1113 tda1004x_writereg(fe, 0x0C, 0xFF);
1114 filter = 1;
1115 break;
1117 default:
1118 return -EINVAL;
1121 // calculate divisor
1122 // ((36130000+((1000000/6)/2)) + Finput)/(1000000/6)
1123 tuner_frequency = (((p->frequency / 1000) * 6) + 217280) / 1000;
1125 // setup tuner buffer
1126 tuner_buf[0] = tuner_frequency >> 8;
1127 tuner_buf[1] = tuner_frequency & 0xff;
1128 tuner_buf[2] = 0xca;
1129 tuner_buf[3] = (cp << 5) | (filter << 3) | band;
1131 if (fe->ops.i2c_gate_ctrl)
1132 fe->ops.i2c_gate_ctrl(fe, 1);
1133 if (i2c_transfer(&ttusb->i2c_adap, &tuner_msg, 1) != 1)
1134 return -EIO;
1136 msleep(1);
1137 return 0;
1140 static int philips_tdm1316l_request_firmware(struct dvb_frontend* fe, const struct firmware **fw, char* name)
1142 struct ttusb* ttusb = (struct ttusb*) fe->dvb->priv;
1144 return request_firmware(fw, name, &ttusb->dev->dev);
1147 static struct tda1004x_config philips_tdm1316l_config = {
1149 .demod_address = 0x8,
1150 .invert = 1,
1151 .invert_oclk = 0,
1152 .request_firmware = philips_tdm1316l_request_firmware,
1155 static u8 alps_bsbe1_inittab[] = {
1156 0x01, 0x15,
1157 0x02, 0x30,
1158 0x03, 0x00,
1159 0x04, 0x7d, /* F22FR = 0x7d, F22 = f_VCO / 128 / 0x7d = 22 kHz */
1160 0x05, 0x35, /* I2CT = 0, SCLT = 1, SDAT = 1 */
1161 0x06, 0x40, /* DAC not used, set to high impendance mode */
1162 0x07, 0x00, /* DAC LSB */
1163 0x08, 0x40, /* DiSEqC off, LNB power on OP2/LOCK pin on */
1164 0x09, 0x00, /* FIFO */
1165 0x0c, 0x51, /* OP1 ctl = Normal, OP1 val = 1 (LNB Power ON) */
1166 0x0d, 0x82, /* DC offset compensation = ON, beta_agc1 = 2 */
1167 0x0e, 0x23, /* alpha_tmg = 2, beta_tmg = 3 */
1168 0x10, 0x3f, // AGC2 0x3d
1169 0x11, 0x84,
1170 0x12, 0xb9,
1171 0x15, 0xc9, // lock detector threshold
1172 0x16, 0x00,
1173 0x17, 0x00,
1174 0x18, 0x00,
1175 0x19, 0x00,
1176 0x1a, 0x00,
1177 0x1f, 0x50,
1178 0x20, 0x00,
1179 0x21, 0x00,
1180 0x22, 0x00,
1181 0x23, 0x00,
1182 0x28, 0x00, // out imp: normal out type: parallel FEC mode:0
1183 0x29, 0x1e, // 1/2 threshold
1184 0x2a, 0x14, // 2/3 threshold
1185 0x2b, 0x0f, // 3/4 threshold
1186 0x2c, 0x09, // 5/6 threshold
1187 0x2d, 0x05, // 7/8 threshold
1188 0x2e, 0x01,
1189 0x31, 0x1f, // test all FECs
1190 0x32, 0x19, // viterbi and synchro search
1191 0x33, 0xfc, // rs control
1192 0x34, 0x93, // error control
1193 0x0f, 0x92,
1194 0xff, 0xff
1197 static u8 alps_bsru6_inittab[] = {
1198 0x01, 0x15,
1199 0x02, 0x30,
1200 0x03, 0x00,
1201 0x04, 0x7d, /* F22FR = 0x7d, F22 = f_VCO / 128 / 0x7d = 22 kHz */
1202 0x05, 0x35, /* I2CT = 0, SCLT = 1, SDAT = 1 */
1203 0x06, 0x40, /* DAC not used, set to high impendance mode */
1204 0x07, 0x00, /* DAC LSB */
1205 0x08, 0x40, /* DiSEqC off, LNB power on OP2/LOCK pin on */
1206 0x09, 0x00, /* FIFO */
1207 0x0c, 0x51, /* OP1 ctl = Normal, OP1 val = 1 (LNB Power ON) */
1208 0x0d, 0x82, /* DC offset compensation = ON, beta_agc1 = 2 */
1209 0x0e, 0x23, /* alpha_tmg = 2, beta_tmg = 3 */
1210 0x10, 0x3f, // AGC2 0x3d
1211 0x11, 0x84,
1212 0x12, 0xb9,
1213 0x15, 0xc9, // lock detector threshold
1214 0x16, 0x00,
1215 0x17, 0x00,
1216 0x18, 0x00,
1217 0x19, 0x00,
1218 0x1a, 0x00,
1219 0x1f, 0x50,
1220 0x20, 0x00,
1221 0x21, 0x00,
1222 0x22, 0x00,
1223 0x23, 0x00,
1224 0x28, 0x00, // out imp: normal out type: parallel FEC mode:0
1225 0x29, 0x1e, // 1/2 threshold
1226 0x2a, 0x14, // 2/3 threshold
1227 0x2b, 0x0f, // 3/4 threshold
1228 0x2c, 0x09, // 5/6 threshold
1229 0x2d, 0x05, // 7/8 threshold
1230 0x2e, 0x01,
1231 0x31, 0x1f, // test all FECs
1232 0x32, 0x19, // viterbi and synchro search
1233 0x33, 0xfc, // rs control
1234 0x34, 0x93, // error control
1235 0x0f, 0x52,
1236 0xff, 0xff
1239 static int alps_stv0299_set_symbol_rate(struct dvb_frontend *fe, u32 srate, u32 ratio)
1241 u8 aclk = 0;
1242 u8 bclk = 0;
1244 if (srate < 1500000) {
1245 aclk = 0xb7;
1246 bclk = 0x47;
1247 } else if (srate < 3000000) {
1248 aclk = 0xb7;
1249 bclk = 0x4b;
1250 } else if (srate < 7000000) {
1251 aclk = 0xb7;
1252 bclk = 0x4f;
1253 } else if (srate < 14000000) {
1254 aclk = 0xb7;
1255 bclk = 0x53;
1256 } else if (srate < 30000000) {
1257 aclk = 0xb6;
1258 bclk = 0x53;
1259 } else if (srate < 45000000) {
1260 aclk = 0xb4;
1261 bclk = 0x51;
1264 stv0299_writereg(fe, 0x13, aclk);
1265 stv0299_writereg(fe, 0x14, bclk);
1266 stv0299_writereg(fe, 0x1f, (ratio >> 16) & 0xff);
1267 stv0299_writereg(fe, 0x20, (ratio >> 8) & 0xff);
1268 stv0299_writereg(fe, 0x21, (ratio) & 0xf0);
1270 return 0;
1273 static int philips_tsa5059_tuner_set_params(struct dvb_frontend *fe)
1275 struct dtv_frontend_properties *p = &fe->dtv_property_cache;
1276 struct ttusb* ttusb = (struct ttusb*) fe->dvb->priv;
1277 u8 buf[4];
1278 u32 div;
1279 struct i2c_msg msg = {.addr = 0x61,.flags = 0,.buf = buf,.len = sizeof(buf) };
1281 if ((p->frequency < 950000) || (p->frequency > 2150000))
1282 return -EINVAL;
1284 div = (p->frequency + (125 - 1)) / 125; /* round correctly */
1285 buf[0] = (div >> 8) & 0x7f;
1286 buf[1] = div & 0xff;
1287 buf[2] = 0x80 | ((div & 0x18000) >> 10) | 4;
1288 buf[3] = 0xC4;
1290 if (p->frequency > 1530000)
1291 buf[3] = 0xC0;
1293 /* BSBE1 wants XCE bit set */
1294 if (ttusb->revision == TTUSB_REV_2_2)
1295 buf[3] |= 0x20;
1297 if (fe->ops.i2c_gate_ctrl)
1298 fe->ops.i2c_gate_ctrl(fe, 1);
1299 if (i2c_transfer(&ttusb->i2c_adap, &msg, 1) != 1)
1300 return -EIO;
1302 return 0;
1305 static struct stv0299_config alps_stv0299_config = {
1306 .demod_address = 0x68,
1307 .inittab = alps_bsru6_inittab,
1308 .mclk = 88000000UL,
1309 .invert = 1,
1310 .skip_reinit = 0,
1311 .lock_output = STV0299_LOCKOUTPUT_1,
1312 .volt13_op0_op1 = STV0299_VOLT13_OP1,
1313 .min_delay_ms = 100,
1314 .set_symbol_rate = alps_stv0299_set_symbol_rate,
1317 static int ttusb_novas_grundig_29504_491_tuner_set_params(struct dvb_frontend *fe)
1319 struct dtv_frontend_properties *p = &fe->dtv_property_cache;
1320 struct ttusb* ttusb = (struct ttusb*) fe->dvb->priv;
1321 u8 buf[4];
1322 u32 div;
1323 struct i2c_msg msg = {.addr = 0x61,.flags = 0,.buf = buf,.len = sizeof(buf) };
1325 div = p->frequency / 125;
1327 buf[0] = (div >> 8) & 0x7f;
1328 buf[1] = div & 0xff;
1329 buf[2] = 0x8e;
1330 buf[3] = 0x00;
1332 if (fe->ops.i2c_gate_ctrl)
1333 fe->ops.i2c_gate_ctrl(fe, 1);
1334 if (i2c_transfer(&ttusb->i2c_adap, &msg, 1) != 1)
1335 return -EIO;
1337 return 0;
1340 static struct tda8083_config ttusb_novas_grundig_29504_491_config = {
1342 .demod_address = 0x68,
1345 static int alps_tdbe2_tuner_set_params(struct dvb_frontend *fe)
1347 struct dtv_frontend_properties *p = &fe->dtv_property_cache;
1348 struct ttusb* ttusb = fe->dvb->priv;
1349 u32 div;
1350 u8 data[4];
1351 struct i2c_msg msg = { .addr = 0x62, .flags = 0, .buf = data, .len = sizeof(data) };
1353 div = (p->frequency + 35937500 + 31250) / 62500;
1355 data[0] = (div >> 8) & 0x7f;
1356 data[1] = div & 0xff;
1357 data[2] = 0x85 | ((div >> 10) & 0x60);
1358 data[3] = (p->frequency < 174000000 ? 0x88 : p->frequency < 470000000 ? 0x84 : 0x81);
1360 if (fe->ops.i2c_gate_ctrl)
1361 fe->ops.i2c_gate_ctrl(fe, 1);
1362 if (i2c_transfer (&ttusb->i2c_adap, &msg, 1) != 1)
1363 return -EIO;
1365 return 0;
1369 static struct ves1820_config alps_tdbe2_config = {
1370 .demod_address = 0x09,
1371 .xin = 57840000UL,
1372 .invert = 1,
1373 .selagc = VES1820_SELAGC_SIGNAMPERR,
1376 static u8 read_pwm(struct ttusb* ttusb)
1378 u8 b = 0xff;
1379 u8 pwm;
1380 struct i2c_msg msg[] = { { .addr = 0x50,.flags = 0,.buf = &b,.len = 1 },
1381 { .addr = 0x50,.flags = I2C_M_RD,.buf = &pwm,.len = 1} };
1383 if ((i2c_transfer(&ttusb->i2c_adap, msg, 2) != 2) || (pwm == 0xff))
1384 pwm = 0x48;
1386 return pwm;
1390 static int dvbc_philips_tdm1316l_tuner_set_params(struct dvb_frontend *fe)
1392 struct dtv_frontend_properties *p = &fe->dtv_property_cache;
1393 struct ttusb *ttusb = (struct ttusb *) fe->dvb->priv;
1394 u8 tuner_buf[5];
1395 struct i2c_msg tuner_msg = {.addr = 0x60,
1396 .flags = 0,
1397 .buf = tuner_buf,
1398 .len = sizeof(tuner_buf) };
1399 int tuner_frequency = 0;
1400 u8 band, cp, filter;
1402 // determine charge pump
1403 tuner_frequency = p->frequency;
1404 if (tuner_frequency < 87000000) {return -EINVAL;}
1405 else if (tuner_frequency < 130000000) {cp = 3; band = 1;}
1406 else if (tuner_frequency < 160000000) {cp = 5; band = 1;}
1407 else if (tuner_frequency < 200000000) {cp = 6; band = 1;}
1408 else if (tuner_frequency < 290000000) {cp = 3; band = 2;}
1409 else if (tuner_frequency < 420000000) {cp = 5; band = 2;}
1410 else if (tuner_frequency < 480000000) {cp = 6; band = 2;}
1411 else if (tuner_frequency < 620000000) {cp = 3; band = 4;}
1412 else if (tuner_frequency < 830000000) {cp = 5; band = 4;}
1413 else if (tuner_frequency < 895000000) {cp = 7; band = 4;}
1414 else {return -EINVAL;}
1416 // assume PLL filter should always be 8MHz for the moment.
1417 filter = 1;
1419 // calculate divisor
1420 // (Finput + Fif)/Fref; Fif = 36125000 Hz, Fref = 62500 Hz
1421 tuner_frequency = ((p->frequency + 36125000) / 62500);
1423 // setup tuner buffer
1424 tuner_buf[0] = tuner_frequency >> 8;
1425 tuner_buf[1] = tuner_frequency & 0xff;
1426 tuner_buf[2] = 0xc8;
1427 tuner_buf[3] = (cp << 5) | (filter << 3) | band;
1428 tuner_buf[4] = 0x80;
1430 if (fe->ops.i2c_gate_ctrl)
1431 fe->ops.i2c_gate_ctrl(fe, 1);
1432 if (i2c_transfer(&ttusb->i2c_adap, &tuner_msg, 1) != 1) {
1433 printk("dvb-ttusb-budget: dvbc_philips_tdm1316l_pll_set Error 1\n");
1434 return -EIO;
1437 msleep(50);
1439 if (fe->ops.i2c_gate_ctrl)
1440 fe->ops.i2c_gate_ctrl(fe, 1);
1441 if (i2c_transfer(&ttusb->i2c_adap, &tuner_msg, 1) != 1) {
1442 printk("dvb-ttusb-budget: dvbc_philips_tdm1316l_pll_set Error 2\n");
1443 return -EIO;
1446 msleep(1);
1448 return 0;
1451 static u8 dvbc_philips_tdm1316l_inittab[] = {
1452 0x80, 0x21,
1453 0x80, 0x20,
1454 0x81, 0x01,
1455 0x81, 0x00,
1456 0x00, 0x09,
1457 0x01, 0x69,
1458 0x03, 0x00,
1459 0x04, 0x00,
1460 0x07, 0x00,
1461 0x08, 0x00,
1462 0x20, 0x00,
1463 0x21, 0x40,
1464 0x22, 0x00,
1465 0x23, 0x00,
1466 0x24, 0x40,
1467 0x25, 0x88,
1468 0x30, 0xff,
1469 0x31, 0x00,
1470 0x32, 0xff,
1471 0x33, 0x00,
1472 0x34, 0x50,
1473 0x35, 0x7f,
1474 0x36, 0x00,
1475 0x37, 0x20,
1476 0x38, 0x00,
1477 0x40, 0x1c,
1478 0x41, 0xff,
1479 0x42, 0x29,
1480 0x43, 0x20,
1481 0x44, 0xff,
1482 0x45, 0x00,
1483 0x46, 0x00,
1484 0x49, 0x04,
1485 0x4a, 0xff,
1486 0x4b, 0x7f,
1487 0x52, 0x30,
1488 0x55, 0xae,
1489 0x56, 0x47,
1490 0x57, 0xe1,
1491 0x58, 0x3a,
1492 0x5a, 0x1e,
1493 0x5b, 0x34,
1494 0x60, 0x00,
1495 0x63, 0x00,
1496 0x64, 0x00,
1497 0x65, 0x00,
1498 0x66, 0x00,
1499 0x67, 0x00,
1500 0x68, 0x00,
1501 0x69, 0x00,
1502 0x6a, 0x02,
1503 0x6b, 0x00,
1504 0x70, 0xff,
1505 0x71, 0x00,
1506 0x72, 0x00,
1507 0x73, 0x00,
1508 0x74, 0x0c,
1509 0x80, 0x00,
1510 0x81, 0x00,
1511 0x82, 0x00,
1512 0x83, 0x00,
1513 0x84, 0x04,
1514 0x85, 0x80,
1515 0x86, 0x24,
1516 0x87, 0x78,
1517 0x88, 0x00,
1518 0x89, 0x00,
1519 0x90, 0x01,
1520 0x91, 0x01,
1521 0xa0, 0x00,
1522 0xa1, 0x00,
1523 0xa2, 0x00,
1524 0xb0, 0x91,
1525 0xb1, 0x0b,
1526 0xc0, 0x4b,
1527 0xc1, 0x00,
1528 0xc2, 0x00,
1529 0xd0, 0x00,
1530 0xd1, 0x00,
1531 0xd2, 0x00,
1532 0xd3, 0x00,
1533 0xd4, 0x00,
1534 0xd5, 0x00,
1535 0xde, 0x00,
1536 0xdf, 0x00,
1537 0x61, 0x38,
1538 0x62, 0x0a,
1539 0x53, 0x13,
1540 0x59, 0x08,
1541 0x55, 0x00,
1542 0x56, 0x40,
1543 0x57, 0x08,
1544 0x58, 0x3d,
1545 0x88, 0x10,
1546 0xa0, 0x00,
1547 0xa0, 0x00,
1548 0xa0, 0x00,
1549 0xa0, 0x04,
1550 0xff, 0xff,
1553 static struct stv0297_config dvbc_philips_tdm1316l_config = {
1554 .demod_address = 0x1c,
1555 .inittab = dvbc_philips_tdm1316l_inittab,
1556 .invert = 0,
1559 static void frontend_init(struct ttusb* ttusb)
1561 switch(le16_to_cpu(ttusb->dev->descriptor.idProduct)) {
1562 case 0x1003: // Hauppauge/TT Nova-USB-S budget (stv0299/ALPS BSRU6|BSBE1(tsa5059))
1563 // try the stv0299 based first
1564 ttusb->fe = dvb_attach(stv0299_attach, &alps_stv0299_config, &ttusb->i2c_adap);
1565 if (ttusb->fe != NULL) {
1566 ttusb->fe->ops.tuner_ops.set_params = philips_tsa5059_tuner_set_params;
1568 if(ttusb->revision == TTUSB_REV_2_2) { // ALPS BSBE1
1569 alps_stv0299_config.inittab = alps_bsbe1_inittab;
1570 dvb_attach(lnbp21_attach, ttusb->fe, &ttusb->i2c_adap, 0, 0);
1571 } else { // ALPS BSRU6
1572 ttusb->fe->ops.set_voltage = ttusb_set_voltage;
1574 break;
1577 // Grundig 29504-491
1578 ttusb->fe = dvb_attach(tda8083_attach, &ttusb_novas_grundig_29504_491_config, &ttusb->i2c_adap);
1579 if (ttusb->fe != NULL) {
1580 ttusb->fe->ops.tuner_ops.set_params = ttusb_novas_grundig_29504_491_tuner_set_params;
1581 ttusb->fe->ops.set_voltage = ttusb_set_voltage;
1582 break;
1584 break;
1586 case 0x1004: // Hauppauge/TT DVB-C budget (ves1820/ALPS TDBE2(sp5659))
1587 ttusb->fe = dvb_attach(ves1820_attach, &alps_tdbe2_config, &ttusb->i2c_adap, read_pwm(ttusb));
1588 if (ttusb->fe != NULL) {
1589 ttusb->fe->ops.tuner_ops.set_params = alps_tdbe2_tuner_set_params;
1590 break;
1593 ttusb->fe = dvb_attach(stv0297_attach, &dvbc_philips_tdm1316l_config, &ttusb->i2c_adap);
1594 if (ttusb->fe != NULL) {
1595 ttusb->fe->ops.tuner_ops.set_params = dvbc_philips_tdm1316l_tuner_set_params;
1596 break;
1598 break;
1600 case 0x1005: // Hauppauge/TT Nova-USB-t budget (tda10046/Philips td1316(tda6651tt) OR cx22700/ALPS TDMB7(??))
1601 // try the ALPS TDMB7 first
1602 ttusb->fe = dvb_attach(cx22700_attach, &alps_tdmb7_config, &ttusb->i2c_adap);
1603 if (ttusb->fe != NULL) {
1604 ttusb->fe->ops.tuner_ops.set_params = alps_tdmb7_tuner_set_params;
1605 break;
1608 // Philips td1316
1609 ttusb->fe = dvb_attach(tda10046_attach, &philips_tdm1316l_config, &ttusb->i2c_adap);
1610 if (ttusb->fe != NULL) {
1611 ttusb->fe->ops.tuner_ops.init = philips_tdm1316l_tuner_init;
1612 ttusb->fe->ops.tuner_ops.set_params = philips_tdm1316l_tuner_set_params;
1613 break;
1615 break;
1618 if (ttusb->fe == NULL) {
1619 printk("dvb-ttusb-budget: A frontend driver was not found for device [%04x:%04x]\n",
1620 le16_to_cpu(ttusb->dev->descriptor.idVendor),
1621 le16_to_cpu(ttusb->dev->descriptor.idProduct));
1622 } else {
1623 if (dvb_register_frontend(&ttusb->adapter, ttusb->fe)) {
1624 printk("dvb-ttusb-budget: Frontend registration failed!\n");
1625 dvb_frontend_detach(ttusb->fe);
1626 ttusb->fe = NULL;
1633 static const struct i2c_algorithm ttusb_dec_algo = {
1634 .master_xfer = master_xfer,
1635 .functionality = functionality,
1638 static int ttusb_probe(struct usb_interface *intf, const struct usb_device_id *id)
1640 struct usb_device *udev;
1641 struct ttusb *ttusb;
1642 int result;
1644 dprintk("%s: TTUSB DVB connected\n", __func__);
1646 udev = interface_to_usbdev(intf);
1648 if (intf->altsetting->desc.bInterfaceNumber != 1) return -ENODEV;
1650 if (!(ttusb = kzalloc(sizeof(struct ttusb), GFP_KERNEL)))
1651 return -ENOMEM;
1653 ttusb->dev = udev;
1654 ttusb->c = 0;
1655 ttusb->mux_state = 0;
1656 mutex_init(&ttusb->semi2c);
1658 mutex_lock(&ttusb->semi2c);
1660 mutex_init(&ttusb->semusb);
1662 ttusb_setup_interfaces(ttusb);
1664 result = ttusb_alloc_iso_urbs(ttusb);
1665 if (result < 0) {
1666 dprintk("%s: ttusb_alloc_iso_urbs - failed\n", __func__);
1667 mutex_unlock(&ttusb->semi2c);
1668 kfree(ttusb);
1669 return result;
1672 if (ttusb_init_controller(ttusb))
1673 printk("ttusb_init_controller: error\n");
1675 mutex_unlock(&ttusb->semi2c);
1677 result = dvb_register_adapter(&ttusb->adapter,
1678 "Technotrend/Hauppauge Nova-USB",
1679 THIS_MODULE, &udev->dev, adapter_nr);
1680 if (result < 0) {
1681 ttusb_free_iso_urbs(ttusb);
1682 kfree(ttusb);
1683 return result;
1685 ttusb->adapter.priv = ttusb;
1687 /* i2c */
1688 memset(&ttusb->i2c_adap, 0, sizeof(struct i2c_adapter));
1689 strcpy(ttusb->i2c_adap.name, "TTUSB DEC");
1691 i2c_set_adapdata(&ttusb->i2c_adap, ttusb);
1693 ttusb->i2c_adap.algo = &ttusb_dec_algo;
1694 ttusb->i2c_adap.algo_data = NULL;
1695 ttusb->i2c_adap.dev.parent = &udev->dev;
1697 result = i2c_add_adapter(&ttusb->i2c_adap);
1698 if (result)
1699 goto err_unregister_adapter;
1701 memset(&ttusb->dvb_demux, 0, sizeof(ttusb->dvb_demux));
1703 ttusb->dvb_demux.dmx.capabilities =
1704 DMX_TS_FILTERING | DMX_SECTION_FILTERING;
1705 ttusb->dvb_demux.priv = NULL;
1706 #ifdef TTUSB_HWSECTIONS
1707 ttusb->dvb_demux.filternum = TTUSB_MAXFILTER;
1708 #else
1709 ttusb->dvb_demux.filternum = 32;
1710 #endif
1711 ttusb->dvb_demux.feednum = TTUSB_MAXCHANNEL;
1712 ttusb->dvb_demux.start_feed = ttusb_start_feed;
1713 ttusb->dvb_demux.stop_feed = ttusb_stop_feed;
1714 ttusb->dvb_demux.write_to_decoder = NULL;
1716 result = dvb_dmx_init(&ttusb->dvb_demux);
1717 if (result < 0) {
1718 printk("ttusb_dvb: dvb_dmx_init failed (errno = %d)\n", result);
1719 result = -ENODEV;
1720 goto err_i2c_del_adapter;
1722 //FIXME dmxdev (nur WAS?)
1723 ttusb->dmxdev.filternum = ttusb->dvb_demux.filternum;
1724 ttusb->dmxdev.demux = &ttusb->dvb_demux.dmx;
1725 ttusb->dmxdev.capabilities = 0;
1727 result = dvb_dmxdev_init(&ttusb->dmxdev, &ttusb->adapter);
1728 if (result < 0) {
1729 printk("ttusb_dvb: dvb_dmxdev_init failed (errno = %d)\n",
1730 result);
1731 result = -ENODEV;
1732 goto err_release_dmx;
1735 if (dvb_net_init(&ttusb->adapter, &ttusb->dvbnet, &ttusb->dvb_demux.dmx)) {
1736 printk("ttusb_dvb: dvb_net_init failed!\n");
1737 result = -ENODEV;
1738 goto err_release_dmxdev;
1741 usb_set_intfdata(intf, (void *) ttusb);
1743 frontend_init(ttusb);
1745 return 0;
1747 err_release_dmxdev:
1748 dvb_dmxdev_release(&ttusb->dmxdev);
1749 err_release_dmx:
1750 dvb_dmx_release(&ttusb->dvb_demux);
1751 err_i2c_del_adapter:
1752 i2c_del_adapter(&ttusb->i2c_adap);
1753 err_unregister_adapter:
1754 dvb_unregister_adapter (&ttusb->adapter);
1755 ttusb_free_iso_urbs(ttusb);
1756 kfree(ttusb);
1757 return result;
1760 static void ttusb_disconnect(struct usb_interface *intf)
1762 struct ttusb *ttusb = usb_get_intfdata(intf);
1764 usb_set_intfdata(intf, NULL);
1766 ttusb->disconnecting = 1;
1768 ttusb_stop_iso_xfer(ttusb);
1770 ttusb->dvb_demux.dmx.close(&ttusb->dvb_demux.dmx);
1771 dvb_net_release(&ttusb->dvbnet);
1772 dvb_dmxdev_release(&ttusb->dmxdev);
1773 dvb_dmx_release(&ttusb->dvb_demux);
1774 if (ttusb->fe != NULL) {
1775 dvb_unregister_frontend(ttusb->fe);
1776 dvb_frontend_detach(ttusb->fe);
1778 i2c_del_adapter(&ttusb->i2c_adap);
1779 dvb_unregister_adapter(&ttusb->adapter);
1781 ttusb_free_iso_urbs(ttusb);
1783 kfree(ttusb);
1785 dprintk("%s: TTUSB DVB disconnected\n", __func__);
1788 static const struct usb_device_id ttusb_table[] = {
1789 {USB_DEVICE(0xb48, 0x1003)},
1790 {USB_DEVICE(0xb48, 0x1004)},
1791 {USB_DEVICE(0xb48, 0x1005)},
1795 MODULE_DEVICE_TABLE(usb, ttusb_table);
1797 static struct usb_driver ttusb_driver = {
1798 .name = "ttusb",
1799 .probe = ttusb_probe,
1800 .disconnect = ttusb_disconnect,
1801 .id_table = ttusb_table,
1804 module_usb_driver(ttusb_driver);
1806 MODULE_AUTHOR("Holger Waechtler <holger@convergence.de>");
1807 MODULE_DESCRIPTION("TTUSB DVB Driver");
1808 MODULE_LICENSE("GPL");
1809 MODULE_FIRMWARE("ttusb-budget/dspbootcode.bin");