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