ttusb-budget: use request_firmware()
[linux-2.6/linux-2.6-openrd.git] / drivers / media / dvb / ttusb-budget / dvb-ttusb-budget.c
blobbc2043e44ebdef143d1615dbb9e0b4aab2976753
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/module.h>
16 #include <linux/usb.h>
17 #include <linux/delay.h>
18 #include <linux/time.h>
19 #include <linux/errno.h>
20 #include <linux/jiffies.h>
21 #include <linux/mutex.h>
22 #include <linux/firmware.h>
24 #include "dvb_frontend.h"
25 #include "dmxdev.h"
26 #include "dvb_demux.h"
27 #include "dvb_net.h"
28 #include "ves1820.h"
29 #include "cx22700.h"
30 #include "tda1004x.h"
31 #include "stv0299.h"
32 #include "tda8083.h"
33 #include "stv0297.h"
34 #include "lnbp21.h"
36 #include <linux/dvb/frontend.h>
37 #include <linux/dvb/dmx.h>
38 #include <linux/pci.h>
41 TTUSB_HWSECTIONS:
42 the DSP supports filtering in hardware, however, since the "muxstream"
43 is a bit braindead (no matching channel masks or no matching filter mask),
44 we won't support this - yet. it doesn't event support negative filters,
45 so the best way is maybe to keep TTUSB_HWSECTIONS undef'd and just
46 parse TS data. USB bandwidth will be a problem when having large
47 datastreams, especially for dvb-net, but hey, that's not my problem.
49 TTUSB_DISEQC, TTUSB_TONE:
50 let the STC do the diseqc/tone stuff. this isn't supported at least with
51 my TTUSB, so let it undef'd unless you want to implement another
52 frontend. never tested.
54 DEBUG:
55 define it to > 3 for really hardcore debugging. you probably don't want
56 this unless the device doesn't load at all. > 2 for bandwidth statistics.
59 static int debug;
60 module_param(debug, int, 0644);
61 MODULE_PARM_DESC(debug, "Turn on/off debugging (default:off).");
63 DVB_DEFINE_MOD_OPT_ADAPTER_NR(adapter_nr);
65 #define dprintk(x...) do { if (debug) printk(KERN_DEBUG x); } while (0)
67 #define ISO_BUF_COUNT 4
68 #define FRAMES_PER_ISO_BUF 4
69 #define ISO_FRAME_SIZE 912
70 #define TTUSB_MAXCHANNEL 32
71 #ifdef TTUSB_HWSECTIONS
72 #define TTUSB_MAXFILTER 16 /* ??? */
73 #endif
75 #define TTUSB_REV_2_2 0x22
76 #define TTUSB_BUDGET_NAME "ttusb_stc_fw"
78 /**
79 * since we're casting (struct ttusb*) <-> (struct dvb_demux*) around
80 * the dvb_demux field must be the first in struct!!
82 struct ttusb {
83 struct dvb_demux dvb_demux;
84 struct dmxdev dmxdev;
85 struct dvb_net dvbnet;
87 /* and one for USB access. */
88 struct mutex semi2c;
89 struct mutex semusb;
91 struct dvb_adapter adapter;
92 struct usb_device *dev;
94 struct i2c_adapter i2c_adap;
96 int disconnecting;
97 int iso_streaming;
99 unsigned int bulk_out_pipe;
100 unsigned int bulk_in_pipe;
101 unsigned int isoc_in_pipe;
103 void *iso_buffer;
104 dma_addr_t iso_dma_handle;
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 fe_sec_tone_mode_t tone;
114 fe_sec_voltage_t 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 #define DEBUG 0
137 static int ttusb_cmd(struct ttusb *ttusb,
138 const u8 * data, int len, int needresult)
140 int actual_len;
141 int err;
142 #if DEBUG >= 3
143 int i;
145 printk(">");
146 for (i = 0; i < len; ++i)
147 printk(" %02x", data[i]);
148 printk("\n");
149 #endif
151 if (mutex_lock_interruptible(&ttusb->semusb) < 0)
152 return -EAGAIN;
154 err = usb_bulk_msg(ttusb->dev, ttusb->bulk_out_pipe,
155 (u8 *) data, len, &actual_len, 1000);
156 if (err != 0) {
157 dprintk("%s: usb_bulk_msg(send) failed, err == %i!\n",
158 __func__, err);
159 mutex_unlock(&ttusb->semusb);
160 return err;
162 if (actual_len != len) {
163 dprintk("%s: only wrote %d of %d bytes\n", __func__,
164 actual_len, len);
165 mutex_unlock(&ttusb->semusb);
166 return -1;
169 err = usb_bulk_msg(ttusb->dev, ttusb->bulk_in_pipe,
170 ttusb->last_result, 32, &actual_len, 1000);
172 if (err != 0) {
173 printk("%s: failed, receive error %d\n", __func__,
174 err);
175 mutex_unlock(&ttusb->semusb);
176 return err;
178 #if DEBUG >= 3
179 actual_len = ttusb->last_result[3] + 4;
180 printk("<");
181 for (i = 0; i < actual_len; ++i)
182 printk(" %02x", ttusb->last_result[i]);
183 printk("\n");
184 #endif
185 if (!needresult)
186 mutex_unlock(&ttusb->semusb);
187 return 0;
190 static int ttusb_result(struct ttusb *ttusb, u8 * data, int len)
192 memcpy(data, ttusb->last_result, len);
193 mutex_unlock(&ttusb->semusb);
194 return 0;
197 static int ttusb_i2c_msg(struct ttusb *ttusb,
198 u8 addr, u8 * snd_buf, u8 snd_len, u8 * rcv_buf,
199 u8 rcv_len)
201 u8 b[0x28];
202 u8 id = ++ttusb->c;
203 int i, err;
205 if (snd_len > 0x28 - 7 || rcv_len > 0x20 - 7)
206 return -EINVAL;
208 b[0] = 0xaa;
209 b[1] = id;
210 b[2] = 0x31;
211 b[3] = snd_len + 3;
212 b[4] = addr << 1;
213 b[5] = snd_len;
214 b[6] = rcv_len;
216 for (i = 0; i < snd_len; i++)
217 b[7 + i] = snd_buf[i];
219 err = ttusb_cmd(ttusb, b, snd_len + 7, 1);
221 if (err)
222 return -EREMOTEIO;
224 err = ttusb_result(ttusb, b, 0x20);
226 /* check if the i2c transaction was successful */
227 if ((snd_len != b[5]) || (rcv_len != b[6])) return -EREMOTEIO;
229 if (rcv_len > 0) {
231 if (err || b[0] != 0x55 || b[1] != id) {
232 dprintk
233 ("%s: usb_bulk_msg(recv) failed, err == %i, id == %02x, b == ",
234 __func__, err, id);
235 return -EREMOTEIO;
238 for (i = 0; i < rcv_len; i++)
239 rcv_buf[i] = b[7 + i];
242 return rcv_len;
245 static int master_xfer(struct i2c_adapter* adapter, struct i2c_msg *msg, int num)
247 struct ttusb *ttusb = i2c_get_adapdata(adapter);
248 int i = 0;
249 int inc;
251 if (mutex_lock_interruptible(&ttusb->semi2c) < 0)
252 return -EAGAIN;
254 while (i < num) {
255 u8 addr, snd_len, rcv_len, *snd_buf, *rcv_buf;
256 int err;
258 if (num > i + 1 && (msg[i + 1].flags & I2C_M_RD)) {
259 addr = msg[i].addr;
260 snd_buf = msg[i].buf;
261 snd_len = msg[i].len;
262 rcv_buf = msg[i + 1].buf;
263 rcv_len = msg[i + 1].len;
264 inc = 2;
265 } else {
266 addr = msg[i].addr;
267 snd_buf = msg[i].buf;
268 snd_len = msg[i].len;
269 rcv_buf = NULL;
270 rcv_len = 0;
271 inc = 1;
274 err = ttusb_i2c_msg(ttusb, addr,
275 snd_buf, snd_len, rcv_buf, rcv_len);
277 if (err < rcv_len) {
278 dprintk("%s: i == %i\n", __func__, i);
279 break;
282 i += inc;
285 mutex_unlock(&ttusb->semi2c);
286 return i;
289 static int ttusb_boot_dsp(struct ttusb *ttusb)
291 const struct firmware *fw;
292 int i, err;
293 u8 b[40];
295 err = request_firmware(&fw, "ttusb-budget/dspbootcode.bin",
296 &ttusb->dev->dev);
297 if (err) {
298 printk(KERN_ERR "ttusb-budget: failed to request firmware\n");
299 return err;
302 /* BootBlock */
303 b[0] = 0xaa;
304 b[2] = 0x13;
305 b[3] = 28;
307 /* upload dsp code in 32 byte steps (36 didn't work for me ...) */
308 /* 32 is max packet size, no messages should be splitted. */
309 for (i = 0; i < fw->size; i += 28) {
310 memcpy(&b[4], &fw->data[i], 28);
312 b[1] = ++ttusb->c;
314 err = ttusb_cmd(ttusb, b, 32, 0);
315 if (err)
316 goto done;
319 /* last block ... */
320 b[1] = ++ttusb->c;
321 b[2] = 0x13;
322 b[3] = 0;
324 err = ttusb_cmd(ttusb, b, 4, 0);
325 if (err)
326 goto done;
328 /* BootEnd */
329 b[1] = ++ttusb->c;
330 b[2] = 0x14;
331 b[3] = 0;
333 err = ttusb_cmd(ttusb, b, 4, 0);
335 done:
336 if (err) {
337 dprintk("%s: usb_bulk_msg() failed, return value %i!\n",
338 __func__, err);
341 return err;
344 static int ttusb_set_channel(struct ttusb *ttusb, int chan_id, int filter_type,
345 int pid)
347 int err;
348 /* SetChannel */
349 u8 b[] = { 0xaa, ++ttusb->c, 0x22, 4, chan_id, filter_type,
350 (pid >> 8) & 0xff, pid & 0xff
353 err = ttusb_cmd(ttusb, b, sizeof(b), 0);
354 return err;
357 static int ttusb_del_channel(struct ttusb *ttusb, int channel_id)
359 int err;
360 /* DelChannel */
361 u8 b[] = { 0xaa, ++ttusb->c, 0x23, 1, channel_id };
363 err = ttusb_cmd(ttusb, b, sizeof(b), 0);
364 return err;
367 #ifdef TTUSB_HWSECTIONS
368 static int ttusb_set_filter(struct ttusb *ttusb, int filter_id,
369 int associated_chan, u8 filter[8], u8 mask[8])
371 int err;
372 /* SetFilter */
373 u8 b[] = { 0xaa, 0, 0x24, 0x1a, filter_id, associated_chan,
374 filter[0], filter[1], filter[2], filter[3],
375 filter[4], filter[5], filter[6], filter[7],
376 filter[8], filter[9], filter[10], filter[11],
377 mask[0], mask[1], mask[2], mask[3],
378 mask[4], mask[5], mask[6], mask[7],
379 mask[8], mask[9], mask[10], mask[11]
382 err = ttusb_cmd(ttusb, b, sizeof(b), 0);
383 return err;
386 static int ttusb_del_filter(struct ttusb *ttusb, int filter_id)
388 int err;
389 /* DelFilter */
390 u8 b[] = { 0xaa, ++ttusb->c, 0x25, 1, filter_id };
392 err = ttusb_cmd(ttusb, b, sizeof(b), 0);
393 return err;
395 #endif
397 static int ttusb_init_controller(struct ttusb *ttusb)
399 u8 b0[] = { 0xaa, ++ttusb->c, 0x15, 1, 0 };
400 u8 b1[] = { 0xaa, ++ttusb->c, 0x15, 1, 1 };
401 u8 b2[] = { 0xaa, ++ttusb->c, 0x32, 1, 0 };
402 /* i2c write read: 5 bytes, addr 0x10, 0x02 bytes write, 1 bytes read. */
403 u8 b3[] =
404 { 0xaa, ++ttusb->c, 0x31, 5, 0x10, 0x02, 0x01, 0x00, 0x1e };
405 u8 b4[] =
406 { 0x55, ttusb->c, 0x31, 4, 0x10, 0x02, 0x01, 0x00, 0x1e };
408 u8 get_version[] = { 0xaa, ++ttusb->c, 0x17, 5, 0, 0, 0, 0, 0 };
409 u8 get_dsp_version[0x20] =
410 { 0xaa, ++ttusb->c, 0x26, 28, 0, 0, 0, 0, 0 };
411 int err;
413 /* reset board */
414 if ((err = ttusb_cmd(ttusb, b0, sizeof(b0), 0)))
415 return err;
417 /* reset board (again?) */
418 if ((err = ttusb_cmd(ttusb, b1, sizeof(b1), 0)))
419 return err;
421 ttusb_boot_dsp(ttusb);
423 /* set i2c bit rate */
424 if ((err = ttusb_cmd(ttusb, b2, sizeof(b2), 0)))
425 return err;
427 if ((err = ttusb_cmd(ttusb, b3, sizeof(b3), 1)))
428 return err;
430 err = ttusb_result(ttusb, b4, sizeof(b4));
432 if ((err = ttusb_cmd(ttusb, get_version, sizeof(get_version), 1)))
433 return err;
435 if ((err = ttusb_result(ttusb, get_version, sizeof(get_version))))
436 return err;
438 dprintk("%s: stc-version: %c%c%c%c%c\n", __func__,
439 get_version[4], get_version[5], get_version[6],
440 get_version[7], get_version[8]);
442 if (memcmp(get_version + 4, "V 0.0", 5) &&
443 memcmp(get_version + 4, "V 1.1", 5) &&
444 memcmp(get_version + 4, "V 2.1", 5) &&
445 memcmp(get_version + 4, "V 2.2", 5)) {
446 printk
447 ("%s: unknown STC version %c%c%c%c%c, please report!\n",
448 __func__, get_version[4], get_version[5],
449 get_version[6], get_version[7], get_version[8]);
452 ttusb->revision = ((get_version[6] - '0') << 4) |
453 (get_version[8] - '0');
455 err =
456 ttusb_cmd(ttusb, get_dsp_version, sizeof(get_dsp_version), 1);
457 if (err)
458 return err;
460 err =
461 ttusb_result(ttusb, get_dsp_version, sizeof(get_dsp_version));
462 if (err)
463 return err;
464 printk("%s: dsp-version: %c%c%c\n", __func__,
465 get_dsp_version[4], get_dsp_version[5], get_dsp_version[6]);
466 return 0;
469 #ifdef TTUSB_DISEQC
470 static int ttusb_send_diseqc(struct dvb_frontend* fe,
471 const struct dvb_diseqc_master_cmd *cmd)
473 struct ttusb* ttusb = (struct ttusb*) fe->dvb->priv;
474 u8 b[12] = { 0xaa, ++ttusb->c, 0x18 };
476 int err;
478 b[3] = 4 + 2 + cmd->msg_len;
479 b[4] = 0xFF; /* send diseqc master, not burst */
480 b[5] = cmd->msg_len;
482 memcpy(b + 5, cmd->msg, cmd->msg_len);
484 /* Diseqc */
485 if ((err = ttusb_cmd(ttusb, b, 4 + b[3], 0))) {
486 dprintk("%s: usb_bulk_msg() failed, return value %i!\n",
487 __func__, err);
490 return err;
492 #endif
494 static int ttusb_update_lnb(struct ttusb *ttusb)
496 u8 b[] = { 0xaa, ++ttusb->c, 0x16, 5, /*power: */ 1,
497 ttusb->voltage == SEC_VOLTAGE_18 ? 0 : 1,
498 ttusb->tone == SEC_TONE_ON ? 1 : 0, 1, 1
500 int err;
502 /* SetLNB */
503 if ((err = ttusb_cmd(ttusb, b, sizeof(b), 0))) {
504 dprintk("%s: usb_bulk_msg() failed, return value %i!\n",
505 __func__, err);
508 return err;
511 static int ttusb_set_voltage(struct dvb_frontend* fe, fe_sec_voltage_t voltage)
513 struct ttusb* ttusb = (struct ttusb*) fe->dvb->priv;
515 ttusb->voltage = voltage;
516 return ttusb_update_lnb(ttusb);
519 #ifdef TTUSB_TONE
520 static int ttusb_set_tone(struct dvb_frontend* fe, fe_sec_tone_mode_t tone)
522 struct ttusb* ttusb = (struct ttusb*) fe->dvb->priv;
524 ttusb->tone = tone;
525 return ttusb_update_lnb(ttusb);
527 #endif
530 #if 0
531 static void ttusb_set_led_freq(struct ttusb *ttusb, u8 freq)
533 u8 b[] = { 0xaa, ++ttusb->c, 0x19, 1, freq };
534 int err, actual_len;
536 err = ttusb_cmd(ttusb, b, sizeof(b), 0);
537 if (err) {
538 dprintk("%s: usb_bulk_msg() failed, return value %i!\n",
539 __func__, err);
542 #endif
544 /*****************************************************************************/
546 #ifdef TTUSB_HWSECTIONS
547 static void ttusb_handle_ts_data(struct ttusb_channel *channel,
548 const u8 * data, int len);
549 static void ttusb_handle_sec_data(struct ttusb_channel *channel,
550 const u8 * data, int len);
551 #endif
553 static int numpkt, numts, numstuff, numsec, numinvalid;
554 static unsigned long lastj;
556 static void ttusb_process_muxpack(struct ttusb *ttusb, const u8 * muxpack,
557 int len)
559 u16 csum = 0, cc;
560 int i;
561 for (i = 0; i < len; i += 2)
562 csum ^= le16_to_cpup((__le16 *) (muxpack + i));
563 if (csum) {
564 printk("%s: muxpack with incorrect checksum, ignoring\n",
565 __func__);
566 numinvalid++;
567 return;
570 cc = (muxpack[len - 4] << 8) | muxpack[len - 3];
571 cc &= 0x7FFF;
572 if ((cc != ttusb->cc) && (ttusb->cc != -1))
573 printk("%s: cc discontinuity (%d frames missing)\n",
574 __func__, (cc - ttusb->cc) & 0x7FFF);
575 ttusb->cc = (cc + 1) & 0x7FFF;
576 if (muxpack[0] & 0x80) {
577 #ifdef TTUSB_HWSECTIONS
578 /* section data */
579 int pusi = muxpack[0] & 0x40;
580 int channel = muxpack[0] & 0x1F;
581 int payload = muxpack[1];
582 const u8 *data = muxpack + 2;
583 /* check offset flag */
584 if (muxpack[0] & 0x20)
585 data++;
587 ttusb_handle_sec_data(ttusb->channel + channel, data,
588 payload);
589 data += payload;
591 if ((!!(ttusb->muxpack[0] & 0x20)) ^
592 !!(ttusb->muxpack[1] & 1))
593 data++;
594 #warning TODO: pusi
595 printk("cc: %04x\n", (data[0] << 8) | data[1]);
596 #endif
597 numsec++;
598 } else if (muxpack[0] == 0x47) {
599 #ifdef TTUSB_HWSECTIONS
600 /* we have TS data here! */
601 int pid = ((muxpack[1] & 0x0F) << 8) | muxpack[2];
602 int channel;
603 for (channel = 0; channel < TTUSB_MAXCHANNEL; ++channel)
604 if (ttusb->channel[channel].active
605 && (pid == ttusb->channel[channel].pid))
606 ttusb_handle_ts_data(ttusb->channel +
607 channel, muxpack,
608 188);
609 #endif
610 numts++;
611 dvb_dmx_swfilter_packets(&ttusb->dvb_demux, muxpack, 1);
612 } else if (muxpack[0] != 0) {
613 numinvalid++;
614 printk("illegal muxpack type %02x\n", muxpack[0]);
615 } else
616 numstuff++;
619 static void ttusb_process_frame(struct ttusb *ttusb, u8 * data, int len)
621 int maxwork = 1024;
622 while (len) {
623 if (!(maxwork--)) {
624 printk("%s: too much work\n", __func__);
625 break;
628 switch (ttusb->mux_state) {
629 case 0:
630 case 1:
631 case 2:
632 len--;
633 if (*data++ == 0xAA)
634 ++ttusb->mux_state;
635 else {
636 ttusb->mux_state = 0;
637 #if DEBUG > 3
638 if (ttusb->insync)
639 printk("%02x ", data[-1]);
640 #else
641 if (ttusb->insync) {
642 printk("%s: lost sync.\n",
643 __func__);
644 ttusb->insync = 0;
646 #endif
648 break;
649 case 3:
650 ttusb->insync = 1;
651 len--;
652 ttusb->mux_npacks = *data++;
653 ++ttusb->mux_state;
654 ttusb->muxpack_ptr = 0;
655 /* maximum bytes, until we know the length */
656 ttusb->muxpack_len = 2;
657 break;
658 case 4:
660 int avail;
661 avail = len;
662 if (avail >
663 (ttusb->muxpack_len -
664 ttusb->muxpack_ptr))
665 avail =
666 ttusb->muxpack_len -
667 ttusb->muxpack_ptr;
668 memcpy(ttusb->muxpack + ttusb->muxpack_ptr,
669 data, avail);
670 ttusb->muxpack_ptr += avail;
671 BUG_ON(ttusb->muxpack_ptr > 264);
672 data += avail;
673 len -= avail;
674 /* determine length */
675 if (ttusb->muxpack_ptr == 2) {
676 if (ttusb->muxpack[0] & 0x80) {
677 ttusb->muxpack_len =
678 ttusb->muxpack[1] + 2;
679 if (ttusb->
680 muxpack[0] & 0x20)
681 ttusb->
682 muxpack_len++;
683 if ((!!
684 (ttusb->
685 muxpack[0] & 0x20)) ^
686 !!(ttusb->
687 muxpack[1] & 1))
688 ttusb->
689 muxpack_len++;
690 ttusb->muxpack_len += 4;
691 } else if (ttusb->muxpack[0] ==
692 0x47)
693 ttusb->muxpack_len =
694 188 + 4;
695 else if (ttusb->muxpack[0] == 0x00)
696 ttusb->muxpack_len =
697 ttusb->muxpack[1] + 2 +
699 else {
700 dprintk
701 ("%s: invalid state: first byte is %x\n",
702 __func__,
703 ttusb->muxpack[0]);
704 ttusb->mux_state = 0;
709 * if length is valid and we reached the end:
710 * goto next muxpack
712 if ((ttusb->muxpack_ptr >= 2) &&
713 (ttusb->muxpack_ptr ==
714 ttusb->muxpack_len)) {
715 ttusb_process_muxpack(ttusb,
716 ttusb->
717 muxpack,
718 ttusb->
719 muxpack_ptr);
720 ttusb->muxpack_ptr = 0;
721 /* maximum bytes, until we know the length */
722 ttusb->muxpack_len = 2;
725 * no muxpacks left?
726 * return to search-sync state
728 if (!ttusb->mux_npacks--) {
729 ttusb->mux_state = 0;
730 break;
733 break;
735 default:
736 BUG();
737 break;
742 static void ttusb_iso_irq(struct urb *urb)
744 struct ttusb *ttusb = urb->context;
746 if (!ttusb->iso_streaming)
747 return;
749 #if 0
750 printk("%s: status %d, errcount == %d, length == %i\n",
751 __func__,
752 urb->status, urb->error_count, urb->actual_length);
753 #endif
755 if (!urb->status) {
756 int i;
757 for (i = 0; i < urb->number_of_packets; ++i) {
758 struct usb_iso_packet_descriptor *d;
759 u8 *data;
760 int len;
761 numpkt++;
762 if (time_after_eq(jiffies, lastj + HZ)) {
763 #if DEBUG > 2
764 printk
765 ("frames/s: %d (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 +
769 numinvalid);
770 #endif
771 numts = numstuff = numsec = numinvalid = 0;
772 lastj = jiffies;
773 numpkt = 0;
775 d = &urb->iso_frame_desc[i];
776 data = urb->transfer_buffer + d->offset;
777 len = d->actual_length;
778 d->actual_length = 0;
779 d->status = 0;
780 ttusb_process_frame(ttusb, data, len);
783 usb_submit_urb(urb, GFP_ATOMIC);
786 static void ttusb_free_iso_urbs(struct ttusb *ttusb)
788 int i;
790 for (i = 0; i < ISO_BUF_COUNT; i++)
791 if (ttusb->iso_urb[i])
792 usb_free_urb(ttusb->iso_urb[i]);
794 pci_free_consistent(NULL,
795 ISO_FRAME_SIZE * FRAMES_PER_ISO_BUF *
796 ISO_BUF_COUNT, ttusb->iso_buffer,
797 ttusb->iso_dma_handle);
800 static int ttusb_alloc_iso_urbs(struct ttusb *ttusb)
802 int i;
804 ttusb->iso_buffer = pci_alloc_consistent(NULL,
805 ISO_FRAME_SIZE *
806 FRAMES_PER_ISO_BUF *
807 ISO_BUF_COUNT,
808 &ttusb->iso_dma_handle);
810 memset(ttusb->iso_buffer, 0,
811 ISO_FRAME_SIZE * FRAMES_PER_ISO_BUF * ISO_BUF_COUNT);
813 for (i = 0; i < ISO_BUF_COUNT; i++) {
814 struct urb *urb;
816 if (!
817 (urb =
818 usb_alloc_urb(FRAMES_PER_ISO_BUF, GFP_ATOMIC))) {
819 ttusb_free_iso_urbs(ttusb);
820 return -ENOMEM;
823 ttusb->iso_urb[i] = urb;
826 return 0;
829 static void ttusb_stop_iso_xfer(struct ttusb *ttusb)
831 int i;
833 for (i = 0; i < ISO_BUF_COUNT; i++)
834 usb_kill_urb(ttusb->iso_urb[i]);
836 ttusb->iso_streaming = 0;
839 static int ttusb_start_iso_xfer(struct ttusb *ttusb)
841 int i, j, err, buffer_offset = 0;
843 if (ttusb->iso_streaming) {
844 printk("%s: iso xfer already running!\n", __func__);
845 return 0;
848 ttusb->cc = -1;
849 ttusb->insync = 0;
850 ttusb->mux_state = 0;
852 for (i = 0; i < ISO_BUF_COUNT; i++) {
853 int frame_offset = 0;
854 struct urb *urb = ttusb->iso_urb[i];
856 urb->dev = ttusb->dev;
857 urb->context = ttusb;
858 urb->complete = ttusb_iso_irq;
859 urb->pipe = ttusb->isoc_in_pipe;
860 urb->transfer_flags = URB_ISO_ASAP;
861 urb->interval = 1;
862 urb->number_of_packets = FRAMES_PER_ISO_BUF;
863 urb->transfer_buffer_length =
864 ISO_FRAME_SIZE * FRAMES_PER_ISO_BUF;
865 urb->transfer_buffer = ttusb->iso_buffer + buffer_offset;
866 buffer_offset += ISO_FRAME_SIZE * FRAMES_PER_ISO_BUF;
868 for (j = 0; j < FRAMES_PER_ISO_BUF; j++) {
869 urb->iso_frame_desc[j].offset = frame_offset;
870 urb->iso_frame_desc[j].length = ISO_FRAME_SIZE;
871 frame_offset += ISO_FRAME_SIZE;
875 for (i = 0; i < ISO_BUF_COUNT; i++) {
876 if ((err = usb_submit_urb(ttusb->iso_urb[i], GFP_ATOMIC))) {
877 ttusb_stop_iso_xfer(ttusb);
878 printk
879 ("%s: failed urb submission (%i: err = %i)!\n",
880 __func__, i, err);
881 return err;
885 ttusb->iso_streaming = 1;
887 return 0;
890 #ifdef TTUSB_HWSECTIONS
891 static void ttusb_handle_ts_data(struct dvb_demux_feed *dvbdmxfeed, const u8 * data,
892 int len)
894 dvbdmxfeed->cb.ts(data, len, 0, 0, &dvbdmxfeed->feed.ts, 0);
897 static void ttusb_handle_sec_data(struct dvb_demux_feed *dvbdmxfeed, const u8 * data,
898 int len)
900 // struct dvb_demux_feed *dvbdmxfeed = channel->dvbdmxfeed;
901 #error TODO: handle ugly stuff
902 // dvbdmxfeed->cb.sec(data, len, 0, 0, &dvbdmxfeed->feed.sec, 0);
904 #endif
906 static int ttusb_start_feed(struct dvb_demux_feed *dvbdmxfeed)
908 struct ttusb *ttusb = (struct ttusb *) dvbdmxfeed->demux;
909 int feed_type = 1;
911 dprintk("ttusb_start_feed\n");
913 switch (dvbdmxfeed->type) {
914 case DMX_TYPE_TS:
915 break;
916 case DMX_TYPE_SEC:
917 break;
918 default:
919 return -EINVAL;
922 if (dvbdmxfeed->type == DMX_TYPE_TS) {
923 switch (dvbdmxfeed->pes_type) {
924 case DMX_TS_PES_VIDEO:
925 case DMX_TS_PES_AUDIO:
926 case DMX_TS_PES_TELETEXT:
927 case DMX_TS_PES_PCR:
928 case DMX_TS_PES_OTHER:
929 break;
930 default:
931 return -EINVAL;
935 #ifdef TTUSB_HWSECTIONS
936 #error TODO: allocate filters
937 if (dvbdmxfeed->type == DMX_TYPE_TS) {
938 feed_type = 1;
939 } else if (dvbdmxfeed->type == DMX_TYPE_SEC) {
940 feed_type = 2;
942 #endif
944 ttusb_set_channel(ttusb, dvbdmxfeed->index, feed_type, dvbdmxfeed->pid);
946 if (0 == ttusb->running_feed_count++)
947 ttusb_start_iso_xfer(ttusb);
949 return 0;
952 static int ttusb_stop_feed(struct dvb_demux_feed *dvbdmxfeed)
954 struct ttusb *ttusb = (struct ttusb *) dvbdmxfeed->demux;
956 ttusb_del_channel(ttusb, dvbdmxfeed->index);
958 if (--ttusb->running_feed_count == 0)
959 ttusb_stop_iso_xfer(ttusb);
961 return 0;
964 static int ttusb_setup_interfaces(struct ttusb *ttusb)
966 usb_set_interface(ttusb->dev, 1, 1);
968 ttusb->bulk_out_pipe = usb_sndbulkpipe(ttusb->dev, 1);
969 ttusb->bulk_in_pipe = usb_rcvbulkpipe(ttusb->dev, 1);
970 ttusb->isoc_in_pipe = usb_rcvisocpipe(ttusb->dev, 2);
972 return 0;
975 #if 0
976 static u8 stc_firmware[8192];
978 static int stc_open(struct inode *inode, struct file *file)
980 struct ttusb *ttusb = file->private_data;
981 int addr;
983 for (addr = 0; addr < 8192; addr += 16) {
984 u8 snd_buf[2] = { addr >> 8, addr & 0xFF };
985 ttusb_i2c_msg(ttusb, 0x50, snd_buf, 2, stc_firmware + addr,
986 16);
989 return 0;
992 static ssize_t stc_read(struct file *file, char *buf, size_t count,
993 loff_t * offset)
995 int tc = count;
997 if ((tc + *offset) > 8192)
998 tc = 8192 - *offset;
1000 if (tc < 0)
1001 return 0;
1003 if (copy_to_user(buf, stc_firmware + *offset, tc))
1004 return -EFAULT;
1006 *offset += tc;
1008 return tc;
1011 static int stc_release(struct inode *inode, struct file *file)
1013 return 0;
1016 static const struct file_operations stc_fops = {
1017 .owner = THIS_MODULE,
1018 .read = stc_read,
1019 .open = stc_open,
1020 .release = stc_release,
1022 #endif
1024 static u32 functionality(struct i2c_adapter *adapter)
1026 return I2C_FUNC_I2C;
1031 static int alps_tdmb7_tuner_set_params(struct dvb_frontend* fe, struct dvb_frontend_parameters* params)
1033 struct ttusb* ttusb = (struct ttusb*) fe->dvb->priv;
1034 u8 data[4];
1035 struct i2c_msg msg = {.addr=0x61, .flags=0, .buf=data, .len=sizeof(data) };
1036 u32 div;
1038 div = (params->frequency + 36166667) / 166667;
1040 data[0] = (div >> 8) & 0x7f;
1041 data[1] = div & 0xff;
1042 data[2] = ((div >> 10) & 0x60) | 0x85;
1043 data[3] = params->frequency < 592000000 ? 0x40 : 0x80;
1045 if (fe->ops.i2c_gate_ctrl)
1046 fe->ops.i2c_gate_ctrl(fe, 1);
1047 if (i2c_transfer(&ttusb->i2c_adap, &msg, 1) != 1) return -EIO;
1048 return 0;
1051 static struct cx22700_config alps_tdmb7_config = {
1052 .demod_address = 0x43,
1059 static int philips_tdm1316l_tuner_init(struct dvb_frontend* fe)
1061 struct ttusb* ttusb = (struct ttusb*) fe->dvb->priv;
1062 static u8 td1316_init[] = { 0x0b, 0xf5, 0x85, 0xab };
1063 static u8 disable_mc44BC374c[] = { 0x1d, 0x74, 0xa0, 0x68 };
1064 struct i2c_msg tuner_msg = { .addr=0x60, .flags=0, .buf=td1316_init, .len=sizeof(td1316_init) };
1066 // setup PLL configuration
1067 if (fe->ops.i2c_gate_ctrl)
1068 fe->ops.i2c_gate_ctrl(fe, 1);
1069 if (i2c_transfer(&ttusb->i2c_adap, &tuner_msg, 1) != 1) return -EIO;
1070 msleep(1);
1072 // disable the mc44BC374c (do not check for errors)
1073 tuner_msg.addr = 0x65;
1074 tuner_msg.buf = disable_mc44BC374c;
1075 tuner_msg.len = sizeof(disable_mc44BC374c);
1076 if (fe->ops.i2c_gate_ctrl)
1077 fe->ops.i2c_gate_ctrl(fe, 1);
1078 if (i2c_transfer(&ttusb->i2c_adap, &tuner_msg, 1) != 1) {
1079 i2c_transfer(&ttusb->i2c_adap, &tuner_msg, 1);
1082 return 0;
1085 static int philips_tdm1316l_tuner_set_params(struct dvb_frontend* fe, struct dvb_frontend_parameters* params)
1087 struct ttusb* ttusb = (struct ttusb*) fe->dvb->priv;
1088 u8 tuner_buf[4];
1089 struct i2c_msg tuner_msg = {.addr=0x60, .flags=0, .buf=tuner_buf, .len=sizeof(tuner_buf) };
1090 int tuner_frequency = 0;
1091 u8 band, cp, filter;
1093 // determine charge pump
1094 tuner_frequency = params->frequency + 36130000;
1095 if (tuner_frequency < 87000000) return -EINVAL;
1096 else if (tuner_frequency < 130000000) cp = 3;
1097 else if (tuner_frequency < 160000000) cp = 5;
1098 else if (tuner_frequency < 200000000) cp = 6;
1099 else if (tuner_frequency < 290000000) cp = 3;
1100 else if (tuner_frequency < 420000000) cp = 5;
1101 else if (tuner_frequency < 480000000) cp = 6;
1102 else if (tuner_frequency < 620000000) cp = 3;
1103 else if (tuner_frequency < 830000000) cp = 5;
1104 else if (tuner_frequency < 895000000) cp = 7;
1105 else return -EINVAL;
1107 // determine band
1108 if (params->frequency < 49000000) return -EINVAL;
1109 else if (params->frequency < 159000000) band = 1;
1110 else if (params->frequency < 444000000) band = 2;
1111 else if (params->frequency < 861000000) band = 4;
1112 else return -EINVAL;
1114 // setup PLL filter
1115 switch (params->u.ofdm.bandwidth) {
1116 case BANDWIDTH_6_MHZ:
1117 tda1004x_writereg(fe, 0x0C, 0);
1118 filter = 0;
1119 break;
1121 case BANDWIDTH_7_MHZ:
1122 tda1004x_writereg(fe, 0x0C, 0);
1123 filter = 0;
1124 break;
1126 case BANDWIDTH_8_MHZ:
1127 tda1004x_writereg(fe, 0x0C, 0xFF);
1128 filter = 1;
1129 break;
1131 default:
1132 return -EINVAL;
1135 // calculate divisor
1136 // ((36130000+((1000000/6)/2)) + Finput)/(1000000/6)
1137 tuner_frequency = (((params->frequency / 1000) * 6) + 217280) / 1000;
1139 // setup tuner buffer
1140 tuner_buf[0] = tuner_frequency >> 8;
1141 tuner_buf[1] = tuner_frequency & 0xff;
1142 tuner_buf[2] = 0xca;
1143 tuner_buf[3] = (cp << 5) | (filter << 3) | band;
1145 if (fe->ops.i2c_gate_ctrl)
1146 fe->ops.i2c_gate_ctrl(fe, 1);
1147 if (i2c_transfer(&ttusb->i2c_adap, &tuner_msg, 1) != 1)
1148 return -EIO;
1150 msleep(1);
1151 return 0;
1154 static int philips_tdm1316l_request_firmware(struct dvb_frontend* fe, const struct firmware **fw, char* name)
1156 struct ttusb* ttusb = (struct ttusb*) fe->dvb->priv;
1158 return request_firmware(fw, name, &ttusb->dev->dev);
1161 static struct tda1004x_config philips_tdm1316l_config = {
1163 .demod_address = 0x8,
1164 .invert = 1,
1165 .invert_oclk = 0,
1166 .request_firmware = philips_tdm1316l_request_firmware,
1169 static u8 alps_bsbe1_inittab[] = {
1170 0x01, 0x15,
1171 0x02, 0x30,
1172 0x03, 0x00,
1173 0x04, 0x7d, /* F22FR = 0x7d, F22 = f_VCO / 128 / 0x7d = 22 kHz */
1174 0x05, 0x35, /* I2CT = 0, SCLT = 1, SDAT = 1 */
1175 0x06, 0x40, /* DAC not used, set to high impendance mode */
1176 0x07, 0x00, /* DAC LSB */
1177 0x08, 0x40, /* DiSEqC off, LNB power on OP2/LOCK pin on */
1178 0x09, 0x00, /* FIFO */
1179 0x0c, 0x51, /* OP1 ctl = Normal, OP1 val = 1 (LNB Power ON) */
1180 0x0d, 0x82, /* DC offset compensation = ON, beta_agc1 = 2 */
1181 0x0e, 0x23, /* alpha_tmg = 2, beta_tmg = 3 */
1182 0x10, 0x3f, // AGC2 0x3d
1183 0x11, 0x84,
1184 0x12, 0xb9,
1185 0x15, 0xc9, // lock detector threshold
1186 0x16, 0x00,
1187 0x17, 0x00,
1188 0x18, 0x00,
1189 0x19, 0x00,
1190 0x1a, 0x00,
1191 0x1f, 0x50,
1192 0x20, 0x00,
1193 0x21, 0x00,
1194 0x22, 0x00,
1195 0x23, 0x00,
1196 0x28, 0x00, // out imp: normal out type: parallel FEC mode:0
1197 0x29, 0x1e, // 1/2 threshold
1198 0x2a, 0x14, // 2/3 threshold
1199 0x2b, 0x0f, // 3/4 threshold
1200 0x2c, 0x09, // 5/6 threshold
1201 0x2d, 0x05, // 7/8 threshold
1202 0x2e, 0x01,
1203 0x31, 0x1f, // test all FECs
1204 0x32, 0x19, // viterbi and synchro search
1205 0x33, 0xfc, // rs control
1206 0x34, 0x93, // error control
1207 0x0f, 0x92,
1208 0xff, 0xff
1211 static u8 alps_bsru6_inittab[] = {
1212 0x01, 0x15,
1213 0x02, 0x30,
1214 0x03, 0x00,
1215 0x04, 0x7d, /* F22FR = 0x7d, F22 = f_VCO / 128 / 0x7d = 22 kHz */
1216 0x05, 0x35, /* I2CT = 0, SCLT = 1, SDAT = 1 */
1217 0x06, 0x40, /* DAC not used, set to high impendance mode */
1218 0x07, 0x00, /* DAC LSB */
1219 0x08, 0x40, /* DiSEqC off, LNB power on OP2/LOCK pin on */
1220 0x09, 0x00, /* FIFO */
1221 0x0c, 0x51, /* OP1 ctl = Normal, OP1 val = 1 (LNB Power ON) */
1222 0x0d, 0x82, /* DC offset compensation = ON, beta_agc1 = 2 */
1223 0x0e, 0x23, /* alpha_tmg = 2, beta_tmg = 3 */
1224 0x10, 0x3f, // AGC2 0x3d
1225 0x11, 0x84,
1226 0x12, 0xb9,
1227 0x15, 0xc9, // lock detector threshold
1228 0x16, 0x00,
1229 0x17, 0x00,
1230 0x18, 0x00,
1231 0x19, 0x00,
1232 0x1a, 0x00,
1233 0x1f, 0x50,
1234 0x20, 0x00,
1235 0x21, 0x00,
1236 0x22, 0x00,
1237 0x23, 0x00,
1238 0x28, 0x00, // out imp: normal out type: parallel FEC mode:0
1239 0x29, 0x1e, // 1/2 threshold
1240 0x2a, 0x14, // 2/3 threshold
1241 0x2b, 0x0f, // 3/4 threshold
1242 0x2c, 0x09, // 5/6 threshold
1243 0x2d, 0x05, // 7/8 threshold
1244 0x2e, 0x01,
1245 0x31, 0x1f, // test all FECs
1246 0x32, 0x19, // viterbi and synchro search
1247 0x33, 0xfc, // rs control
1248 0x34, 0x93, // error control
1249 0x0f, 0x52,
1250 0xff, 0xff
1253 static int alps_stv0299_set_symbol_rate(struct dvb_frontend *fe, u32 srate, u32 ratio)
1255 u8 aclk = 0;
1256 u8 bclk = 0;
1258 if (srate < 1500000) {
1259 aclk = 0xb7;
1260 bclk = 0x47;
1261 } else if (srate < 3000000) {
1262 aclk = 0xb7;
1263 bclk = 0x4b;
1264 } else if (srate < 7000000) {
1265 aclk = 0xb7;
1266 bclk = 0x4f;
1267 } else if (srate < 14000000) {
1268 aclk = 0xb7;
1269 bclk = 0x53;
1270 } else if (srate < 30000000) {
1271 aclk = 0xb6;
1272 bclk = 0x53;
1273 } else if (srate < 45000000) {
1274 aclk = 0xb4;
1275 bclk = 0x51;
1278 stv0299_writereg(fe, 0x13, aclk);
1279 stv0299_writereg(fe, 0x14, bclk);
1280 stv0299_writereg(fe, 0x1f, (ratio >> 16) & 0xff);
1281 stv0299_writereg(fe, 0x20, (ratio >> 8) & 0xff);
1282 stv0299_writereg(fe, 0x21, (ratio) & 0xf0);
1284 return 0;
1287 static int philips_tsa5059_tuner_set_params(struct dvb_frontend *fe, struct dvb_frontend_parameters *params)
1289 struct ttusb* ttusb = (struct ttusb*) fe->dvb->priv;
1290 u8 buf[4];
1291 u32 div;
1292 struct i2c_msg msg = {.addr = 0x61,.flags = 0,.buf = buf,.len = sizeof(buf) };
1294 if ((params->frequency < 950000) || (params->frequency > 2150000))
1295 return -EINVAL;
1297 div = (params->frequency + (125 - 1)) / 125; // round correctly
1298 buf[0] = (div >> 8) & 0x7f;
1299 buf[1] = div & 0xff;
1300 buf[2] = 0x80 | ((div & 0x18000) >> 10) | 4;
1301 buf[3] = 0xC4;
1303 if (params->frequency > 1530000)
1304 buf[3] = 0xC0;
1306 /* BSBE1 wants XCE bit set */
1307 if (ttusb->revision == TTUSB_REV_2_2)
1308 buf[3] |= 0x20;
1310 if (fe->ops.i2c_gate_ctrl)
1311 fe->ops.i2c_gate_ctrl(fe, 1);
1312 if (i2c_transfer(&ttusb->i2c_adap, &msg, 1) != 1)
1313 return -EIO;
1315 return 0;
1318 static struct stv0299_config alps_stv0299_config = {
1319 .demod_address = 0x68,
1320 .inittab = alps_bsru6_inittab,
1321 .mclk = 88000000UL,
1322 .invert = 1,
1323 .skip_reinit = 0,
1324 .lock_output = STV0299_LOCKOUTPUT_1,
1325 .volt13_op0_op1 = STV0299_VOLT13_OP1,
1326 .min_delay_ms = 100,
1327 .set_symbol_rate = alps_stv0299_set_symbol_rate,
1330 static int ttusb_novas_grundig_29504_491_tuner_set_params(struct dvb_frontend *fe, struct dvb_frontend_parameters *params)
1332 struct ttusb* ttusb = (struct ttusb*) fe->dvb->priv;
1333 u8 buf[4];
1334 u32 div;
1335 struct i2c_msg msg = {.addr = 0x61,.flags = 0,.buf = buf,.len = sizeof(buf) };
1337 div = params->frequency / 125;
1339 buf[0] = (div >> 8) & 0x7f;
1340 buf[1] = div & 0xff;
1341 buf[2] = 0x8e;
1342 buf[3] = 0x00;
1344 if (fe->ops.i2c_gate_ctrl)
1345 fe->ops.i2c_gate_ctrl(fe, 1);
1346 if (i2c_transfer(&ttusb->i2c_adap, &msg, 1) != 1)
1347 return -EIO;
1349 return 0;
1352 static struct tda8083_config ttusb_novas_grundig_29504_491_config = {
1354 .demod_address = 0x68,
1357 static int alps_tdbe2_tuner_set_params(struct dvb_frontend* fe, struct dvb_frontend_parameters* params)
1359 struct ttusb* ttusb = fe->dvb->priv;
1360 u32 div;
1361 u8 data[4];
1362 struct i2c_msg msg = { .addr = 0x62, .flags = 0, .buf = data, .len = sizeof(data) };
1364 div = (params->frequency + 35937500 + 31250) / 62500;
1366 data[0] = (div >> 8) & 0x7f;
1367 data[1] = div & 0xff;
1368 data[2] = 0x85 | ((div >> 10) & 0x60);
1369 data[3] = (params->frequency < 174000000 ? 0x88 : params->frequency < 470000000 ? 0x84 : 0x81);
1371 if (fe->ops.i2c_gate_ctrl)
1372 fe->ops.i2c_gate_ctrl(fe, 1);
1373 if (i2c_transfer (&ttusb->i2c_adap, &msg, 1) != 1)
1374 return -EIO;
1376 return 0;
1380 static struct ves1820_config alps_tdbe2_config = {
1381 .demod_address = 0x09,
1382 .xin = 57840000UL,
1383 .invert = 1,
1384 .selagc = VES1820_SELAGC_SIGNAMPERR,
1387 static u8 read_pwm(struct ttusb* ttusb)
1389 u8 b = 0xff;
1390 u8 pwm;
1391 struct i2c_msg msg[] = { { .addr = 0x50,.flags = 0,.buf = &b,.len = 1 },
1392 { .addr = 0x50,.flags = I2C_M_RD,.buf = &pwm,.len = 1} };
1394 if ((i2c_transfer(&ttusb->i2c_adap, msg, 2) != 2) || (pwm == 0xff))
1395 pwm = 0x48;
1397 return pwm;
1401 static int dvbc_philips_tdm1316l_tuner_set_params(struct dvb_frontend *fe, struct dvb_frontend_parameters *params)
1403 struct ttusb *ttusb = (struct ttusb *) fe->dvb->priv;
1404 u8 tuner_buf[5];
1405 struct i2c_msg tuner_msg = {.addr = 0x60,
1406 .flags = 0,
1407 .buf = tuner_buf,
1408 .len = sizeof(tuner_buf) };
1409 int tuner_frequency = 0;
1410 u8 band, cp, filter;
1412 // determine charge pump
1413 tuner_frequency = params->frequency;
1414 if (tuner_frequency < 87000000) {return -EINVAL;}
1415 else if (tuner_frequency < 130000000) {cp = 3; band = 1;}
1416 else if (tuner_frequency < 160000000) {cp = 5; band = 1;}
1417 else if (tuner_frequency < 200000000) {cp = 6; band = 1;}
1418 else if (tuner_frequency < 290000000) {cp = 3; band = 2;}
1419 else if (tuner_frequency < 420000000) {cp = 5; band = 2;}
1420 else if (tuner_frequency < 480000000) {cp = 6; band = 2;}
1421 else if (tuner_frequency < 620000000) {cp = 3; band = 4;}
1422 else if (tuner_frequency < 830000000) {cp = 5; band = 4;}
1423 else if (tuner_frequency < 895000000) {cp = 7; band = 4;}
1424 else {return -EINVAL;}
1426 // assume PLL filter should always be 8MHz for the moment.
1427 filter = 1;
1429 // calculate divisor
1430 // (Finput + Fif)/Fref; Fif = 36125000 Hz, Fref = 62500 Hz
1431 tuner_frequency = ((params->frequency + 36125000) / 62500);
1433 // setup tuner buffer
1434 tuner_buf[0] = tuner_frequency >> 8;
1435 tuner_buf[1] = tuner_frequency & 0xff;
1436 tuner_buf[2] = 0xc8;
1437 tuner_buf[3] = (cp << 5) | (filter << 3) | band;
1438 tuner_buf[4] = 0x80;
1440 if (fe->ops.i2c_gate_ctrl)
1441 fe->ops.i2c_gate_ctrl(fe, 1);
1442 if (i2c_transfer(&ttusb->i2c_adap, &tuner_msg, 1) != 1) {
1443 printk("dvb-ttusb-budget: dvbc_philips_tdm1316l_pll_set Error 1\n");
1444 return -EIO;
1447 msleep(50);
1449 if (fe->ops.i2c_gate_ctrl)
1450 fe->ops.i2c_gate_ctrl(fe, 1);
1451 if (i2c_transfer(&ttusb->i2c_adap, &tuner_msg, 1) != 1) {
1452 printk("dvb-ttusb-budget: dvbc_philips_tdm1316l_pll_set Error 2\n");
1453 return -EIO;
1456 msleep(1);
1458 return 0;
1461 static u8 dvbc_philips_tdm1316l_inittab[] = {
1462 0x80, 0x21,
1463 0x80, 0x20,
1464 0x81, 0x01,
1465 0x81, 0x00,
1466 0x00, 0x09,
1467 0x01, 0x69,
1468 0x03, 0x00,
1469 0x04, 0x00,
1470 0x07, 0x00,
1471 0x08, 0x00,
1472 0x20, 0x00,
1473 0x21, 0x40,
1474 0x22, 0x00,
1475 0x23, 0x00,
1476 0x24, 0x40,
1477 0x25, 0x88,
1478 0x30, 0xff,
1479 0x31, 0x00,
1480 0x32, 0xff,
1481 0x33, 0x00,
1482 0x34, 0x50,
1483 0x35, 0x7f,
1484 0x36, 0x00,
1485 0x37, 0x20,
1486 0x38, 0x00,
1487 0x40, 0x1c,
1488 0x41, 0xff,
1489 0x42, 0x29,
1490 0x43, 0x20,
1491 0x44, 0xff,
1492 0x45, 0x00,
1493 0x46, 0x00,
1494 0x49, 0x04,
1495 0x4a, 0xff,
1496 0x4b, 0x7f,
1497 0x52, 0x30,
1498 0x55, 0xae,
1499 0x56, 0x47,
1500 0x57, 0xe1,
1501 0x58, 0x3a,
1502 0x5a, 0x1e,
1503 0x5b, 0x34,
1504 0x60, 0x00,
1505 0x63, 0x00,
1506 0x64, 0x00,
1507 0x65, 0x00,
1508 0x66, 0x00,
1509 0x67, 0x00,
1510 0x68, 0x00,
1511 0x69, 0x00,
1512 0x6a, 0x02,
1513 0x6b, 0x00,
1514 0x70, 0xff,
1515 0x71, 0x00,
1516 0x72, 0x00,
1517 0x73, 0x00,
1518 0x74, 0x0c,
1519 0x80, 0x00,
1520 0x81, 0x00,
1521 0x82, 0x00,
1522 0x83, 0x00,
1523 0x84, 0x04,
1524 0x85, 0x80,
1525 0x86, 0x24,
1526 0x87, 0x78,
1527 0x88, 0x00,
1528 0x89, 0x00,
1529 0x90, 0x01,
1530 0x91, 0x01,
1531 0xa0, 0x00,
1532 0xa1, 0x00,
1533 0xa2, 0x00,
1534 0xb0, 0x91,
1535 0xb1, 0x0b,
1536 0xc0, 0x4b,
1537 0xc1, 0x00,
1538 0xc2, 0x00,
1539 0xd0, 0x00,
1540 0xd1, 0x00,
1541 0xd2, 0x00,
1542 0xd3, 0x00,
1543 0xd4, 0x00,
1544 0xd5, 0x00,
1545 0xde, 0x00,
1546 0xdf, 0x00,
1547 0x61, 0x38,
1548 0x62, 0x0a,
1549 0x53, 0x13,
1550 0x59, 0x08,
1551 0x55, 0x00,
1552 0x56, 0x40,
1553 0x57, 0x08,
1554 0x58, 0x3d,
1555 0x88, 0x10,
1556 0xa0, 0x00,
1557 0xa0, 0x00,
1558 0xa0, 0x00,
1559 0xa0, 0x04,
1560 0xff, 0xff,
1563 static struct stv0297_config dvbc_philips_tdm1316l_config = {
1564 .demod_address = 0x1c,
1565 .inittab = dvbc_philips_tdm1316l_inittab,
1566 .invert = 0,
1569 static void frontend_init(struct ttusb* ttusb)
1571 switch(le16_to_cpu(ttusb->dev->descriptor.idProduct)) {
1572 case 0x1003: // Hauppauge/TT Nova-USB-S budget (stv0299/ALPS BSRU6|BSBE1(tsa5059))
1573 // try the stv0299 based first
1574 ttusb->fe = dvb_attach(stv0299_attach, &alps_stv0299_config, &ttusb->i2c_adap);
1575 if (ttusb->fe != NULL) {
1576 ttusb->fe->ops.tuner_ops.set_params = philips_tsa5059_tuner_set_params;
1578 if(ttusb->revision == TTUSB_REV_2_2) { // ALPS BSBE1
1579 alps_stv0299_config.inittab = alps_bsbe1_inittab;
1580 dvb_attach(lnbp21_attach, ttusb->fe, &ttusb->i2c_adap, 0, 0);
1581 } else { // ALPS BSRU6
1582 ttusb->fe->ops.set_voltage = ttusb_set_voltage;
1584 break;
1587 // Grundig 29504-491
1588 ttusb->fe = dvb_attach(tda8083_attach, &ttusb_novas_grundig_29504_491_config, &ttusb->i2c_adap);
1589 if (ttusb->fe != NULL) {
1590 ttusb->fe->ops.tuner_ops.set_params = ttusb_novas_grundig_29504_491_tuner_set_params;
1591 ttusb->fe->ops.set_voltage = ttusb_set_voltage;
1592 break;
1594 break;
1596 case 0x1004: // Hauppauge/TT DVB-C budget (ves1820/ALPS TDBE2(sp5659))
1597 ttusb->fe = dvb_attach(ves1820_attach, &alps_tdbe2_config, &ttusb->i2c_adap, read_pwm(ttusb));
1598 if (ttusb->fe != NULL) {
1599 ttusb->fe->ops.tuner_ops.set_params = alps_tdbe2_tuner_set_params;
1600 break;
1603 ttusb->fe = dvb_attach(stv0297_attach, &dvbc_philips_tdm1316l_config, &ttusb->i2c_adap);
1604 if (ttusb->fe != NULL) {
1605 ttusb->fe->ops.tuner_ops.set_params = dvbc_philips_tdm1316l_tuner_set_params;
1606 break;
1608 break;
1610 case 0x1005: // Hauppauge/TT Nova-USB-t budget (tda10046/Philips td1316(tda6651tt) OR cx22700/ALPS TDMB7(??))
1611 // try the ALPS TDMB7 first
1612 ttusb->fe = dvb_attach(cx22700_attach, &alps_tdmb7_config, &ttusb->i2c_adap);
1613 if (ttusb->fe != NULL) {
1614 ttusb->fe->ops.tuner_ops.set_params = alps_tdmb7_tuner_set_params;
1615 break;
1618 // Philips td1316
1619 ttusb->fe = dvb_attach(tda10046_attach, &philips_tdm1316l_config, &ttusb->i2c_adap);
1620 if (ttusb->fe != NULL) {
1621 ttusb->fe->ops.tuner_ops.init = philips_tdm1316l_tuner_init;
1622 ttusb->fe->ops.tuner_ops.set_params = philips_tdm1316l_tuner_set_params;
1623 break;
1625 break;
1628 if (ttusb->fe == NULL) {
1629 printk("dvb-ttusb-budget: A frontend driver was not found for device %04x/%04x\n",
1630 le16_to_cpu(ttusb->dev->descriptor.idVendor),
1631 le16_to_cpu(ttusb->dev->descriptor.idProduct));
1632 } else {
1633 if (dvb_register_frontend(&ttusb->adapter, ttusb->fe)) {
1634 printk("dvb-ttusb-budget: Frontend registration failed!\n");
1635 dvb_frontend_detach(ttusb->fe);
1636 ttusb->fe = NULL;
1643 static struct i2c_algorithm ttusb_dec_algo = {
1644 .master_xfer = master_xfer,
1645 .functionality = functionality,
1648 static int ttusb_probe(struct usb_interface *intf, const struct usb_device_id *id)
1650 struct usb_device *udev;
1651 struct ttusb *ttusb;
1652 int result;
1654 dprintk("%s: TTUSB DVB connected\n", __func__);
1656 udev = interface_to_usbdev(intf);
1658 if (intf->altsetting->desc.bInterfaceNumber != 1) return -ENODEV;
1660 if (!(ttusb = kzalloc(sizeof(struct ttusb), GFP_KERNEL)))
1661 return -ENOMEM;
1663 ttusb->dev = udev;
1664 ttusb->c = 0;
1665 ttusb->mux_state = 0;
1666 mutex_init(&ttusb->semi2c);
1668 mutex_lock(&ttusb->semi2c);
1670 mutex_init(&ttusb->semusb);
1672 ttusb_setup_interfaces(ttusb);
1674 ttusb_alloc_iso_urbs(ttusb);
1675 if (ttusb_init_controller(ttusb))
1676 printk("ttusb_init_controller: error\n");
1678 mutex_unlock(&ttusb->semi2c);
1680 result = dvb_register_adapter(&ttusb->adapter,
1681 "Technotrend/Hauppauge Nova-USB",
1682 THIS_MODULE, &udev->dev, adapter_nr);
1683 if (result < 0) {
1684 ttusb_free_iso_urbs(ttusb);
1685 kfree(ttusb);
1686 return result;
1688 ttusb->adapter.priv = ttusb;
1690 /* i2c */
1691 memset(&ttusb->i2c_adap, 0, sizeof(struct i2c_adapter));
1692 strcpy(ttusb->i2c_adap.name, "TTUSB DEC");
1694 i2c_set_adapdata(&ttusb->i2c_adap, ttusb);
1696 #ifdef I2C_ADAP_CLASS_TV_DIGITAL
1697 ttusb->i2c_adap.class = I2C_ADAP_CLASS_TV_DIGITAL;
1698 #else
1699 ttusb->i2c_adap.class = I2C_CLASS_TV_DIGITAL;
1700 #endif
1701 ttusb->i2c_adap.algo = &ttusb_dec_algo;
1702 ttusb->i2c_adap.algo_data = NULL;
1703 ttusb->i2c_adap.dev.parent = &udev->dev;
1705 result = i2c_add_adapter(&ttusb->i2c_adap);
1706 if (result) {
1707 dvb_unregister_adapter (&ttusb->adapter);
1708 return result;
1711 memset(&ttusb->dvb_demux, 0, sizeof(ttusb->dvb_demux));
1713 ttusb->dvb_demux.dmx.capabilities =
1714 DMX_TS_FILTERING | DMX_SECTION_FILTERING;
1715 ttusb->dvb_demux.priv = NULL;
1716 #ifdef TTUSB_HWSECTIONS
1717 ttusb->dvb_demux.filternum = TTUSB_MAXFILTER;
1718 #else
1719 ttusb->dvb_demux.filternum = 32;
1720 #endif
1721 ttusb->dvb_demux.feednum = TTUSB_MAXCHANNEL;
1722 ttusb->dvb_demux.start_feed = ttusb_start_feed;
1723 ttusb->dvb_demux.stop_feed = ttusb_stop_feed;
1724 ttusb->dvb_demux.write_to_decoder = NULL;
1726 if ((result = dvb_dmx_init(&ttusb->dvb_demux)) < 0) {
1727 printk("ttusb_dvb: dvb_dmx_init failed (errno = %d)\n", result);
1728 i2c_del_adapter(&ttusb->i2c_adap);
1729 dvb_unregister_adapter (&ttusb->adapter);
1730 return -ENODEV;
1732 //FIXME dmxdev (nur WAS?)
1733 ttusb->dmxdev.filternum = ttusb->dvb_demux.filternum;
1734 ttusb->dmxdev.demux = &ttusb->dvb_demux.dmx;
1735 ttusb->dmxdev.capabilities = 0;
1737 if ((result = dvb_dmxdev_init(&ttusb->dmxdev, &ttusb->adapter)) < 0) {
1738 printk("ttusb_dvb: dvb_dmxdev_init failed (errno = %d)\n",
1739 result);
1740 dvb_dmx_release(&ttusb->dvb_demux);
1741 i2c_del_adapter(&ttusb->i2c_adap);
1742 dvb_unregister_adapter (&ttusb->adapter);
1743 return -ENODEV;
1746 if (dvb_net_init(&ttusb->adapter, &ttusb->dvbnet, &ttusb->dvb_demux.dmx)) {
1747 printk("ttusb_dvb: dvb_net_init failed!\n");
1748 dvb_dmxdev_release(&ttusb->dmxdev);
1749 dvb_dmx_release(&ttusb->dvb_demux);
1750 i2c_del_adapter(&ttusb->i2c_adap);
1751 dvb_unregister_adapter (&ttusb->adapter);
1752 return -ENODEV;
1755 usb_set_intfdata(intf, (void *) ttusb);
1757 frontend_init(ttusb);
1759 return 0;
1762 static void ttusb_disconnect(struct usb_interface *intf)
1764 struct ttusb *ttusb = usb_get_intfdata(intf);
1766 usb_set_intfdata(intf, NULL);
1768 ttusb->disconnecting = 1;
1770 ttusb_stop_iso_xfer(ttusb);
1772 ttusb->dvb_demux.dmx.close(&ttusb->dvb_demux.dmx);
1773 dvb_net_release(&ttusb->dvbnet);
1774 dvb_dmxdev_release(&ttusb->dmxdev);
1775 dvb_dmx_release(&ttusb->dvb_demux);
1776 if (ttusb->fe != NULL) {
1777 dvb_unregister_frontend(ttusb->fe);
1778 dvb_frontend_detach(ttusb->fe);
1780 i2c_del_adapter(&ttusb->i2c_adap);
1781 dvb_unregister_adapter(&ttusb->adapter);
1783 ttusb_free_iso_urbs(ttusb);
1785 kfree(ttusb);
1787 dprintk("%s: TTUSB DVB disconnected\n", __func__);
1790 static struct usb_device_id ttusb_table[] = {
1791 {USB_DEVICE(0xb48, 0x1003)},
1792 {USB_DEVICE(0xb48, 0x1004)},
1793 {USB_DEVICE(0xb48, 0x1005)},
1797 MODULE_DEVICE_TABLE(usb, ttusb_table);
1799 static struct usb_driver ttusb_driver = {
1800 .name = "ttusb",
1801 .probe = ttusb_probe,
1802 .disconnect = ttusb_disconnect,
1803 .id_table = ttusb_table,
1806 static int __init ttusb_init(void)
1808 int err;
1810 if ((err = usb_register(&ttusb_driver)) < 0) {
1811 printk("%s: usb_register failed! Error number %d",
1812 __FILE__, err);
1813 return err;
1816 return 0;
1819 static void __exit ttusb_exit(void)
1821 usb_deregister(&ttusb_driver);
1824 module_init(ttusb_init);
1825 module_exit(ttusb_exit);
1827 MODULE_AUTHOR("Holger Waechtler <holger@convergence.de>");
1828 MODULE_DESCRIPTION("TTUSB DVB Driver");
1829 MODULE_LICENSE("GPL");
1830 MODULE_FIRMWARE("ttusb-budget/dspbootcode.bin");