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