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