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        enum fe_sec_tone_mode tone;
 115        enum fe_sec_voltage 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,
 515                             enum fe_sec_voltage voltage)
 516{
 517        struct ttusb* ttusb = (struct ttusb*) fe->dvb->priv;
 518
 519        ttusb->voltage = voltage;
 520        return ttusb_update_lnb(ttusb);
 521}
 522
 523#ifdef TTUSB_TONE
 524static int ttusb_set_tone(struct dvb_frontend *fe, enum fe_sec_tone_mode tone)
 525{
 526        struct ttusb* ttusb = (struct ttusb*) fe->dvb->priv;
 527
 528        ttusb->tone = tone;
 529        return ttusb_update_lnb(ttusb);
 530}
 531#endif
 532
 533
 534#if 0
 535static void ttusb_set_led_freq(struct ttusb *ttusb, u8 freq)
 536{
 537        u8 b[] = { 0xaa, ++ttusb->c, 0x19, 1, freq };
 538        int err, actual_len;
 539
 540        err = ttusb_cmd(ttusb, b, sizeof(b), 0);
 541        if (err) {
 542                dprintk("%s: usb_bulk_msg() failed, return value %i!\n",
 543                        __func__, err);
 544        }
 545}
 546#endif
 547
 548/*****************************************************************************/
 549
 550#ifdef TTUSB_HWSECTIONS
 551static void ttusb_handle_ts_data(struct ttusb_channel *channel,
 552                                 const u8 * data, int len);
 553static void ttusb_handle_sec_data(struct ttusb_channel *channel,
 554                                  const u8 * data, int len);
 555#endif
 556
 557static int numpkt, numts, numstuff, numsec, numinvalid;
 558static unsigned long lastj;
 559
 560static void ttusb_process_muxpack(struct ttusb *ttusb, const u8 * muxpack,
 561                           int len)
 562{
 563        u16 csum = 0, cc;
 564        int i;
 565
 566        if (len < 4 || len & 0x1) {
 567                pr_warn("%s: muxpack has invalid len %d\n", __func__, len);
 568                numinvalid++;
 569                return;
 570        }
 571
 572        for (i = 0; i < len; i += 2)
 573                csum ^= le16_to_cpup((__le16 *) (muxpack + i));
 574        if (csum) {
 575                printk("%s: muxpack with incorrect checksum, ignoring\n",
 576                       __func__);
 577                numinvalid++;
 578                return;
 579        }
 580
 581        cc = (muxpack[len - 4] << 8) | muxpack[len - 3];
 582        cc &= 0x7FFF;
 583        if ((cc != ttusb->cc) && (ttusb->cc != -1))
 584                printk("%s: cc discontinuity (%d frames missing)\n",
 585                       __func__, (cc - ttusb->cc) & 0x7FFF);
 586        ttusb->cc = (cc + 1) & 0x7FFF;
 587        if (muxpack[0] & 0x80) {
 588#ifdef TTUSB_HWSECTIONS
 589                /* section data */
 590                int pusi = muxpack[0] & 0x40;
 591                int channel = muxpack[0] & 0x1F;
 592                int payload = muxpack[1];
 593                const u8 *data = muxpack + 2;
 594                /* check offset flag */
 595                if (muxpack[0] & 0x20)
 596                        data++;
 597
 598                ttusb_handle_sec_data(ttusb->channel + channel, data,
 599                                      payload);
 600                data += payload;
 601
 602                if ((!!(ttusb->muxpack[0] & 0x20)) ^
 603                    !!(ttusb->muxpack[1] & 1))
 604                        data++;
 605#warning TODO: pusi
 606                printk("cc: %04x\n", (data[0] << 8) | data[1]);
 607#endif
 608                numsec++;
 609        } else if (muxpack[0] == 0x47) {
 610#ifdef TTUSB_HWSECTIONS
 611                /* we have TS data here! */
 612                int pid = ((muxpack[1] & 0x0F) << 8) | muxpack[2];
 613                int channel;
 614                for (channel = 0; channel < TTUSB_MAXCHANNEL; ++channel)
 615                        if (ttusb->channel[channel].active
 616                            && (pid == ttusb->channel[channel].pid))
 617                                ttusb_handle_ts_data(ttusb->channel +
 618                                                     channel, muxpack,
 619                                                     188);
 620#endif
 621                numts++;
 622                dvb_dmx_swfilter_packets(&ttusb->dvb_demux, muxpack, 1);
 623        } else if (muxpack[0] != 0) {
 624                numinvalid++;
 625                printk("illegal muxpack type %02x\n", muxpack[0]);
 626        } else
 627                numstuff++;
 628}
 629
 630static void ttusb_process_frame(struct ttusb *ttusb, u8 * data, int len)
 631{
 632        int maxwork = 1024;
 633        while (len) {
 634                if (!(maxwork--)) {
 635                        printk("%s: too much work\n", __func__);
 636                        break;
 637                }
 638
 639                switch (ttusb->mux_state) {
 640                case 0:
 641                case 1:
 642                case 2:
 643                        len--;
 644                        if (*data++ == 0xAA)
 645                                ++ttusb->mux_state;
 646                        else {
 647                                ttusb->mux_state = 0;
 648                                if (ttusb->insync) {
 649                                        dprintk("%s: %02x\n",
 650                                                __func__, data[-1]);
 651                                        printk(KERN_INFO "%s: lost sync.\n",
 652                                               __func__);
 653                                        ttusb->insync = 0;
 654                                }
 655                        }
 656                        break;
 657                case 3:
 658                        ttusb->insync = 1;
 659                        len--;
 660                        ttusb->mux_npacks = *data++;
 661                        ++ttusb->mux_state;
 662                        ttusb->muxpack_ptr = 0;
 663                        /* maximum bytes, until we know the length */
 664                        ttusb->muxpack_len = 2;
 665                        break;
 666                case 4:
 667                        {
 668                                int avail;
 669                                avail = len;
 670                                if (avail >
 671                                    (ttusb->muxpack_len -
 672                                     ttusb->muxpack_ptr))
 673                                        avail =
 674                                            ttusb->muxpack_len -
 675                                            ttusb->muxpack_ptr;
 676                                memcpy(ttusb->muxpack + ttusb->muxpack_ptr,
 677                                       data, avail);
 678                                ttusb->muxpack_ptr += avail;
 679                                BUG_ON(ttusb->muxpack_ptr > 264);
 680                                data += avail;
 681                                len -= avail;
 682                                /* determine length */
 683                                if (ttusb->muxpack_ptr == 2) {
 684                                        if (ttusb->muxpack[0] & 0x80) {
 685                                                ttusb->muxpack_len =
 686                                                    ttusb->muxpack[1] + 2;
 687                                                if (ttusb->
 688                                                    muxpack[0] & 0x20)
 689                                                        ttusb->
 690                                                            muxpack_len++;
 691                                                if ((!!
 692                                                     (ttusb->
 693                                                      muxpack[0] & 0x20)) ^
 694                                                    !!(ttusb->
 695                                                       muxpack[1] & 1))
 696                                                        ttusb->
 697                                                            muxpack_len++;
 698                                                ttusb->muxpack_len += 4;
 699                                        } else if (ttusb->muxpack[0] ==
 700                                                   0x47)
 701                                                ttusb->muxpack_len =
 702                                                    188 + 4;
 703                                        else if (ttusb->muxpack[0] == 0x00)
 704                                                ttusb->muxpack_len =
 705                                                    ttusb->muxpack[1] + 2 +
 706                                                    4;
 707                                        else {
 708                                                dprintk
 709                                                    ("%s: invalid state: first byte is %x\n",
 710                                                     __func__,
 711                                                     ttusb->muxpack[0]);
 712                                                ttusb->mux_state = 0;
 713                                        }
 714                                }
 715
 716                        /**
 717                         * if length is valid and we reached the end:
 718                         * goto next muxpack
 719                         */
 720                                if ((ttusb->muxpack_ptr >= 2) &&
 721                                    (ttusb->muxpack_ptr ==
 722                                     ttusb->muxpack_len)) {
 723                                        ttusb_process_muxpack(ttusb,
 724                                                              ttusb->
 725                                                              muxpack,
 726                                                              ttusb->
 727                                                              muxpack_ptr);
 728                                        ttusb->muxpack_ptr = 0;
 729                                        /* maximum bytes, until we know the length */
 730                                        ttusb->muxpack_len = 2;
 731
 732                                /**
 733                                 * no muxpacks left?
 734                                 * return to search-sync state
 735                                 */
 736                                        if (!ttusb->mux_npacks--) {
 737                                                ttusb->mux_state = 0;
 738                                                break;
 739                                        }
 740                                }
 741                                break;
 742                        }
 743                default:
 744                        BUG();
 745                        break;
 746                }
 747        }
 748}
 749
 750static void ttusb_iso_irq(struct urb *urb)
 751{
 752        struct ttusb *ttusb = urb->context;
 753        struct usb_iso_packet_descriptor *d;
 754        u8 *data;
 755        int len, i;
 756
 757        if (!ttusb->iso_streaming)
 758                return;
 759
 760#if 0
 761        printk("%s: status %d, errcount == %d, length == %i\n",
 762               __func__,
 763               urb->status, urb->error_count, urb->actual_length);
 764#endif
 765
 766        if (!urb->status) {
 767                for (i = 0; i < urb->number_of_packets; ++i) {
 768                        numpkt++;
 769                        if (time_after_eq(jiffies, lastj + HZ)) {
 770                                dprintk("frames/s: %lu (ts: %d, stuff %d, "
 771                                        "sec: %d, invalid: %d, all: %d)\n",
 772                                        numpkt * HZ / (jiffies - lastj),
 773                                        numts, numstuff, numsec, numinvalid,
 774                                        numts + numstuff + numsec + numinvalid);
 775                                numts = numstuff = numsec = numinvalid = 0;
 776                                lastj = jiffies;
 777                                numpkt = 0;
 778                        }
 779                        d = &urb->iso_frame_desc[i];
 780                        data = urb->transfer_buffer + d->offset;
 781                        len = d->actual_length;
 782                        d->actual_length = 0;
 783                        d->status = 0;
 784                        ttusb_process_frame(ttusb, data, len);
 785                }
 786        }
 787        usb_submit_urb(urb, GFP_ATOMIC);
 788}
 789
 790static void ttusb_free_iso_urbs(struct ttusb *ttusb)
 791{
 792        int i;
 793
 794        for (i = 0; i < ISO_BUF_COUNT; i++)
 795                usb_free_urb(ttusb->iso_urb[i]);
 796
 797        pci_free_consistent(NULL,
 798                            ISO_FRAME_SIZE * FRAMES_PER_ISO_BUF *
 799                            ISO_BUF_COUNT, ttusb->iso_buffer,
 800                            ttusb->iso_dma_handle);
 801}
 802
 803static int ttusb_alloc_iso_urbs(struct ttusb *ttusb)
 804{
 805        int i;
 806
 807        ttusb->iso_buffer = pci_zalloc_consistent(NULL,
 808                                                  ISO_FRAME_SIZE * FRAMES_PER_ISO_BUF * ISO_BUF_COUNT,
 809                                                  &ttusb->iso_dma_handle);
 810
 811        if (!ttusb->iso_buffer) {
 812                dprintk("%s: pci_alloc_consistent - not enough memory\n",
 813                        __func__);
 814                return -ENOMEM;
 815        }
 816
 817        for (i = 0; i < ISO_BUF_COUNT; i++) {
 818                struct urb *urb;
 819
 820                if (!
 821                    (urb =
 822                     usb_alloc_urb(FRAMES_PER_ISO_BUF, GFP_ATOMIC))) {
 823                        ttusb_free_iso_urbs(ttusb);
 824                        return -ENOMEM;
 825                }
 826
 827                ttusb->iso_urb[i] = urb;
 828        }
 829
 830        return 0;
 831}
 832
 833static void ttusb_stop_iso_xfer(struct ttusb *ttusb)
 834{
 835        int i;
 836
 837        for (i = 0; i < ISO_BUF_COUNT; i++)
 838                usb_kill_urb(ttusb->iso_urb[i]);
 839
 840        ttusb->iso_streaming = 0;
 841}
 842
 843static int ttusb_start_iso_xfer(struct ttusb *ttusb)
 844{
 845        int i, j, err, buffer_offset = 0;
 846
 847        if (ttusb->iso_streaming) {
 848                printk("%s: iso xfer already running!\n", __func__);
 849                return 0;
 850        }
 851
 852        ttusb->cc = -1;
 853        ttusb->insync = 0;
 854        ttusb->mux_state = 0;
 855
 856        for (i = 0; i < ISO_BUF_COUNT; i++) {
 857                int frame_offset = 0;
 858                struct urb *urb = ttusb->iso_urb[i];
 859
 860                urb->dev = ttusb->dev;
 861                urb->context = ttusb;
 862                urb->complete = ttusb_iso_irq;
 863                urb->pipe = ttusb->isoc_in_pipe;
 864                urb->transfer_flags = URB_ISO_ASAP;
 865                urb->interval = 1;
 866                urb->number_of_packets = FRAMES_PER_ISO_BUF;
 867                urb->transfer_buffer_length =
 868                    ISO_FRAME_SIZE * FRAMES_PER_ISO_BUF;
 869                urb->transfer_buffer = ttusb->iso_buffer + buffer_offset;
 870                buffer_offset += ISO_FRAME_SIZE * FRAMES_PER_ISO_BUF;
 871
 872                for (j = 0; j < FRAMES_PER_ISO_BUF; j++) {
 873                        urb->iso_frame_desc[j].offset = frame_offset;
 874                        urb->iso_frame_desc[j].length = ISO_FRAME_SIZE;
 875                        frame_offset += ISO_FRAME_SIZE;
 876                }
 877        }
 878
 879        for (i = 0; i < ISO_BUF_COUNT; i++) {
 880                if ((err = usb_submit_urb(ttusb->iso_urb[i], GFP_ATOMIC))) {
 881                        ttusb_stop_iso_xfer(ttusb);
 882                        printk
 883                            ("%s: failed urb submission (%i: err = %i)!\n",
 884                             __func__, i, err);
 885                        return err;
 886                }
 887        }
 888
 889        ttusb->iso_streaming = 1;
 890
 891        return 0;
 892}
 893
 894#ifdef TTUSB_HWSECTIONS
 895static void ttusb_handle_ts_data(struct dvb_demux_feed *dvbdmxfeed, const u8 * data,
 896                          int len)
 897{
 898        dvbdmxfeed->cb.ts(data, len, 0, 0, &dvbdmxfeed->feed.ts, 0);
 899}
 900
 901static void ttusb_handle_sec_data(struct dvb_demux_feed *dvbdmxfeed, const u8 * data,
 902                           int len)
 903{
 904//      struct dvb_demux_feed *dvbdmxfeed = channel->dvbdmxfeed;
 905#error TODO: handle ugly stuff
 906//      dvbdmxfeed->cb.sec(data, len, 0, 0, &dvbdmxfeed->feed.sec, 0);
 907}
 908#endif
 909
 910static int ttusb_start_feed(struct dvb_demux_feed *dvbdmxfeed)
 911{
 912        struct ttusb *ttusb = (struct ttusb *) dvbdmxfeed->demux;
 913        int feed_type = 1;
 914
 915        dprintk("ttusb_start_feed\n");
 916
 917        switch (dvbdmxfeed->type) {
 918        case DMX_TYPE_TS:
 919                break;
 920        case DMX_TYPE_SEC:
 921                break;
 922        default:
 923                return -EINVAL;
 924        }
 925
 926        if (dvbdmxfeed->type == DMX_TYPE_TS) {
 927                switch (dvbdmxfeed->pes_type) {
 928                case DMX_PES_VIDEO:
 929                case DMX_PES_AUDIO:
 930                case DMX_PES_TELETEXT:
 931                case DMX_PES_PCR:
 932                case DMX_PES_OTHER:
 933                        break;
 934                default:
 935                        return -EINVAL;
 936                }
 937        }
 938
 939#ifdef TTUSB_HWSECTIONS
 940#error TODO: allocate filters
 941        if (dvbdmxfeed->type == DMX_TYPE_TS) {
 942                feed_type = 1;
 943        } else if (dvbdmxfeed->type == DMX_TYPE_SEC) {
 944                feed_type = 2;
 945        }
 946#endif
 947
 948        ttusb_set_channel(ttusb, dvbdmxfeed->index, feed_type, dvbdmxfeed->pid);
 949
 950        if (0 == ttusb->running_feed_count++)
 951                ttusb_start_iso_xfer(ttusb);
 952
 953        return 0;
 954}
 955
 956static int ttusb_stop_feed(struct dvb_demux_feed *dvbdmxfeed)
 957{
 958        struct ttusb *ttusb = (struct ttusb *) dvbdmxfeed->demux;
 959
 960        ttusb_del_channel(ttusb, dvbdmxfeed->index);
 961
 962        if (--ttusb->running_feed_count == 0)
 963                ttusb_stop_iso_xfer(ttusb);
 964
 965        return 0;
 966}
 967
 968static int ttusb_setup_interfaces(struct ttusb *ttusb)
 969{
 970        usb_set_interface(ttusb->dev, 1, 1);
 971
 972        ttusb->bulk_out_pipe = usb_sndbulkpipe(ttusb->dev, 1);
 973        ttusb->bulk_in_pipe = usb_rcvbulkpipe(ttusb->dev, 1);
 974        ttusb->isoc_in_pipe = usb_rcvisocpipe(ttusb->dev, 2);
 975
 976        return 0;
 977}
 978
 979#if 0
 980static u8 stc_firmware[8192];
 981
 982static int stc_open(struct inode *inode, struct file *file)
 983{
 984        struct ttusb *ttusb = file->private_data;
 985        int addr;
 986
 987        for (addr = 0; addr < 8192; addr += 16) {
 988                u8 snd_buf[2] = { addr >> 8, addr & 0xFF };
 989                ttusb_i2c_msg(ttusb, 0x50, snd_buf, 2, stc_firmware + addr,
 990                              16);
 991        }
 992
 993        return 0;
 994}
 995
 996static ssize_t stc_read(struct file *file, char *buf, size_t count,
 997                 loff_t *offset)
 998{
 999        return simple_read_from_buffer(buf, count, offset, stc_firmware, 8192);
1000}
1001
1002static int stc_release(struct inode *inode, struct file *file)
1003{
1004        return 0;
1005}
1006
1007static const struct file_operations stc_fops = {
1008        .owner = THIS_MODULE,
1009        .read = stc_read,
1010        .open = stc_open,
1011        .release = stc_release,
1012};
1013#endif
1014
1015static u32 functionality(struct i2c_adapter *adapter)
1016{
1017        return I2C_FUNC_I2C;
1018}
1019
1020
1021
1022static int alps_tdmb7_tuner_set_params(struct dvb_frontend *fe)
1023{
1024        struct dtv_frontend_properties *p = &fe->dtv_property_cache;
1025        struct ttusb* ttusb = (struct ttusb*) fe->dvb->priv;
1026        u8 data[4];
1027        struct i2c_msg msg = {.addr=0x61, .flags=0, .buf=data, .len=sizeof(data) };
1028        u32 div;
1029
1030        div = (p->frequency + 36166667) / 166667;
1031
1032        data[0] = (div >> 8) & 0x7f;
1033        data[1] = div & 0xff;
1034        data[2] = ((div >> 10) & 0x60) | 0x85;
1035        data[3] = p->frequency < 592000000 ? 0x40 : 0x80;
1036
1037        if (fe->ops.i2c_gate_ctrl)
1038                fe->ops.i2c_gate_ctrl(fe, 1);
1039        if (i2c_transfer(&ttusb->i2c_adap, &msg, 1) != 1) return -EIO;
1040        return 0;
1041}
1042
1043static struct cx22700_config alps_tdmb7_config = {
1044        .demod_address = 0x43,
1045};
1046
1047
1048
1049
1050
1051static int philips_tdm1316l_tuner_init(struct dvb_frontend* fe)
1052{
1053        struct ttusb* ttusb = (struct ttusb*) fe->dvb->priv;
1054        static u8 td1316_init[] = { 0x0b, 0xf5, 0x85, 0xab };
1055        static u8 disable_mc44BC374c[] = { 0x1d, 0x74, 0xa0, 0x68 };
1056        struct i2c_msg tuner_msg = { .addr=0x60, .flags=0, .buf=td1316_init, .len=sizeof(td1316_init) };
1057
1058        // setup PLL configuration
1059        if (fe->ops.i2c_gate_ctrl)
1060                fe->ops.i2c_gate_ctrl(fe, 1);
1061        if (i2c_transfer(&ttusb->i2c_adap, &tuner_msg, 1) != 1) return -EIO;
1062        msleep(1);
1063
1064        // disable the mc44BC374c (do not check for errors)
1065        tuner_msg.addr = 0x65;
1066        tuner_msg.buf = disable_mc44BC374c;
1067        tuner_msg.len = sizeof(disable_mc44BC374c);
1068        if (fe->ops.i2c_gate_ctrl)
1069                fe->ops.i2c_gate_ctrl(fe, 1);
1070        if (i2c_transfer(&ttusb->i2c_adap, &tuner_msg, 1) != 1) {
1071                i2c_transfer(&ttusb->i2c_adap, &tuner_msg, 1);
1072        }
1073
1074        return 0;
1075}
1076
1077static int philips_tdm1316l_tuner_set_params(struct dvb_frontend *fe)
1078{
1079        struct dtv_frontend_properties *p = &fe->dtv_property_cache;
1080        struct ttusb* ttusb = (struct ttusb*) fe->dvb->priv;
1081        u8 tuner_buf[4];
1082        struct i2c_msg tuner_msg = {.addr=0x60, .flags=0, .buf=tuner_buf, .len=sizeof(tuner_buf) };
1083        int tuner_frequency = 0;
1084        u8 band, cp, filter;
1085
1086        // determine charge pump
1087        tuner_frequency = p->frequency + 36130000;
1088        if (tuner_frequency < 87000000) return -EINVAL;
1089        else if (tuner_frequency < 130000000) cp = 3;
1090        else if (tuner_frequency < 160000000) cp = 5;
1091        else if (tuner_frequency < 200000000) cp = 6;
1092        else if (tuner_frequency < 290000000) cp = 3;
1093        else if (tuner_frequency < 420000000) cp = 5;
1094        else if (tuner_frequency < 480000000) cp = 6;
1095        else if (tuner_frequency < 620000000) cp = 3;
1096        else if (tuner_frequency < 830000000) cp = 5;
1097        else if (tuner_frequency < 895000000) cp = 7;
1098        else return -EINVAL;
1099
1100        // determine band
1101        if (p->frequency < 49000000)
1102                return -EINVAL;
1103        else if (p->frequency < 159000000)
1104                band = 1;
1105        else if (p->frequency < 444000000)
1106                band = 2;
1107        else if (p->frequency < 861000000)
1108                band = 4;
1109        else return -EINVAL;
1110
1111        // setup PLL filter
1112        switch (p->bandwidth_hz) {
1113        case 6000000:
1114                tda1004x_writereg(fe, 0x0C, 0);
1115                filter = 0;
1116                break;
1117
1118        case 7000000:
1119                tda1004x_writereg(fe, 0x0C, 0);
1120                filter = 0;
1121                break;
1122
1123        case 8000000:
1124                tda1004x_writereg(fe, 0x0C, 0xFF);
1125                filter = 1;
1126                break;
1127
1128        default:
1129                return -EINVAL;
1130        }
1131
1132        // calculate divisor
1133        // ((36130000+((1000000/6)/2)) + Finput)/(1000000/6)
1134        tuner_frequency = (((p->frequency / 1000) * 6) + 217280) / 1000;
1135
1136        // setup tuner buffer
1137        tuner_buf[0] = tuner_frequency >> 8;
1138        tuner_buf[1] = tuner_frequency & 0xff;
1139        tuner_buf[2] = 0xca;
1140        tuner_buf[3] = (cp << 5) | (filter << 3) | band;
1141
1142        if (fe->ops.i2c_gate_ctrl)
1143                fe->ops.i2c_gate_ctrl(fe, 1);
1144        if (i2c_transfer(&ttusb->i2c_adap, &tuner_msg, 1) != 1)
1145                return -EIO;
1146
1147        msleep(1);
1148        return 0;
1149}
1150
1151static int philips_tdm1316l_request_firmware(struct dvb_frontend* fe, const struct firmware **fw, char* name)
1152{
1153        struct ttusb* ttusb = (struct ttusb*) fe->dvb->priv;
1154
1155        return request_firmware(fw, name, &ttusb->dev->dev);
1156}
1157
1158static struct tda1004x_config philips_tdm1316l_config = {
1159
1160        .demod_address = 0x8,
1161        .invert = 1,
1162        .invert_oclk = 0,
1163        .request_firmware = philips_tdm1316l_request_firmware,
1164};
1165
1166static u8 alps_bsbe1_inittab[] = {
1167        0x01, 0x15,
1168        0x02, 0x30,
1169        0x03, 0x00,
1170        0x04, 0x7d,             /* F22FR = 0x7d, F22 = f_VCO / 128 / 0x7d = 22 kHz */
1171        0x05, 0x35,             /* I2CT = 0, SCLT = 1, SDAT = 1 */
1172        0x06, 0x40,             /* DAC not used, set to high impendance mode */
1173        0x07, 0x00,             /* DAC LSB */
1174        0x08, 0x40,             /* DiSEqC off, LNB power on OP2/LOCK pin on */
1175        0x09, 0x00,             /* FIFO */
1176        0x0c, 0x51,             /* OP1 ctl = Normal, OP1 val = 1 (LNB Power ON) */
1177        0x0d, 0x82,             /* DC offset compensation = ON, beta_agc1 = 2 */
1178        0x0e, 0x23,             /* alpha_tmg = 2, beta_tmg = 3 */
1179        0x10, 0x3f,             // AGC2  0x3d
1180        0x11, 0x84,
1181        0x12, 0xb9,
1182        0x15, 0xc9,             // lock detector threshold
1183        0x16, 0x00,
1184        0x17, 0x00,
1185        0x18, 0x00,
1186        0x19, 0x00,
1187        0x1a, 0x00,
1188        0x1f, 0x50,
1189        0x20, 0x00,
1190        0x21, 0x00,
1191        0x22, 0x00,
1192        0x23, 0x00,
1193        0x28, 0x00,             // out imp: normal  out type: parallel FEC mode:0
1194        0x29, 0x1e,             // 1/2 threshold
1195        0x2a, 0x14,             // 2/3 threshold
1196        0x2b, 0x0f,             // 3/4 threshold
1197        0x2c, 0x09,             // 5/6 threshold
1198        0x2d, 0x05,             // 7/8 threshold
1199        0x2e, 0x01,
1200        0x31, 0x1f,             // test all FECs
1201        0x32, 0x19,             // viterbi and synchro search
1202        0x33, 0xfc,             // rs control
1203        0x34, 0x93,             // error control
1204        0x0f, 0x92,
1205        0xff, 0xff
1206};
1207
1208static u8 alps_bsru6_inittab[] = {
1209        0x01, 0x15,
1210        0x02, 0x30,
1211        0x03, 0x00,
1212        0x04, 0x7d,             /* F22FR = 0x7d, F22 = f_VCO / 128 / 0x7d = 22 kHz */
1213        0x05, 0x35,             /* I2CT = 0, SCLT = 1, SDAT = 1 */
1214        0x06, 0x40,             /* DAC not used, set to high impendance mode */
1215        0x07, 0x00,             /* DAC LSB */
1216        0x08, 0x40,             /* DiSEqC off, LNB power on OP2/LOCK pin on */
1217        0x09, 0x00,             /* FIFO */
1218        0x0c, 0x51,             /* OP1 ctl = Normal, OP1 val = 1 (LNB Power ON) */
1219        0x0d, 0x82,             /* DC offset compensation = ON, beta_agc1 = 2 */
1220        0x0e, 0x23,             /* alpha_tmg = 2, beta_tmg = 3 */
1221        0x10, 0x3f,             // AGC2  0x3d
1222        0x11, 0x84,
1223        0x12, 0xb9,
1224        0x15, 0xc9,             // lock detector threshold
1225        0x16, 0x00,
1226        0x17, 0x00,
1227        0x18, 0x00,
1228        0x19, 0x00,
1229        0x1a, 0x00,
1230        0x1f, 0x50,
1231        0x20, 0x00,
1232        0x21, 0x00,
1233        0x22, 0x00,
1234        0x23, 0x00,
1235        0x28, 0x00,             // out imp: normal  out type: parallel FEC mode:0
1236        0x29, 0x1e,             // 1/2 threshold
1237        0x2a, 0x14,             // 2/3 threshold
1238        0x2b, 0x0f,             // 3/4 threshold
1239        0x2c, 0x09,             // 5/6 threshold
1240        0x2d, 0x05,             // 7/8 threshold
1241        0x2e, 0x01,
1242        0x31, 0x1f,             // test all FECs
1243        0x32, 0x19,             // viterbi and synchro search
1244        0x33, 0xfc,             // rs control
1245        0x34, 0x93,             // error control
1246        0x0f, 0x52,
1247        0xff, 0xff
1248};
1249
1250static int alps_stv0299_set_symbol_rate(struct dvb_frontend *fe, u32 srate, u32 ratio)
1251{
1252        u8 aclk = 0;
1253        u8 bclk = 0;
1254
1255        if (srate < 1500000) {
1256                aclk = 0xb7;
1257                bclk = 0x47;
1258        } else if (srate < 3000000) {
1259                aclk = 0xb7;
1260                bclk = 0x4b;
1261        } else if (srate < 7000000) {
1262                aclk = 0xb7;
1263                bclk = 0x4f;
1264        } else if (srate < 14000000) {
1265                aclk = 0xb7;
1266                bclk = 0x53;
1267        } else if (srate < 30000000) {
1268                aclk = 0xb6;
1269                bclk = 0x53;
1270        } else if (srate < 45000000) {
1271                aclk = 0xb4;
1272                bclk = 0x51;
1273        }
1274
1275        stv0299_writereg(fe, 0x13, aclk);
1276        stv0299_writereg(fe, 0x14, bclk);
1277        stv0299_writereg(fe, 0x1f, (ratio >> 16) & 0xff);
1278        stv0299_writereg(fe, 0x20, (ratio >> 8) & 0xff);
1279        stv0299_writereg(fe, 0x21, (ratio) & 0xf0);
1280
1281        return 0;
1282}
1283
1284static int philips_tsa5059_tuner_set_params(struct dvb_frontend *fe)
1285{
1286        struct dtv_frontend_properties *p = &fe->dtv_property_cache;
1287        struct ttusb* ttusb = (struct ttusb*) fe->dvb->priv;
1288        u8 buf[4];
1289        u32 div;
1290        struct i2c_msg msg = {.addr = 0x61,.flags = 0,.buf = buf,.len = sizeof(buf) };
1291
1292        if ((p->frequency < 950000) || (p->frequency > 2150000))
1293                return -EINVAL;
1294
1295        div = (p->frequency + (125 - 1)) / 125; /* round correctly */
1296        buf[0] = (div >> 8) & 0x7f;
1297        buf[1] = div & 0xff;
1298        buf[2] = 0x80 | ((div & 0x18000) >> 10) | 4;
1299        buf[3] = 0xC4;
1300
1301        if (p->frequency > 1530000)
1302                buf[3] = 0xC0;
1303
1304        /* BSBE1 wants XCE bit set */
1305        if (ttusb->revision == TTUSB_REV_2_2)
1306                buf[3] |= 0x20;
1307
1308        if (fe->ops.i2c_gate_ctrl)
1309                fe->ops.i2c_gate_ctrl(fe, 1);
1310        if (i2c_transfer(&ttusb->i2c_adap, &msg, 1) != 1)
1311                return -EIO;
1312
1313        return 0;
1314}
1315
1316static struct stv0299_config alps_stv0299_config = {
1317        .demod_address = 0x68,
1318        .inittab = alps_bsru6_inittab,
1319        .mclk = 88000000UL,
1320        .invert = 1,
1321        .skip_reinit = 0,
1322        .lock_output = STV0299_LOCKOUTPUT_1,
1323        .volt13_op0_op1 = STV0299_VOLT13_OP1,
1324        .min_delay_ms = 100,
1325        .set_symbol_rate = alps_stv0299_set_symbol_rate,
1326};
1327
1328static int ttusb_novas_grundig_29504_491_tuner_set_params(struct dvb_frontend *fe)
1329{
1330        struct dtv_frontend_properties *p = &fe->dtv_property_cache;
1331        struct ttusb* ttusb = (struct ttusb*) fe->dvb->priv;
1332        u8 buf[4];
1333        u32 div;
1334        struct i2c_msg msg = {.addr = 0x61,.flags = 0,.buf = buf,.len = sizeof(buf) };
1335
1336        div = p->frequency / 125;
1337
1338        buf[0] = (div >> 8) & 0x7f;
1339        buf[1] = div & 0xff;
1340        buf[2] = 0x8e;
1341        buf[3] = 0x00;
1342
1343        if (fe->ops.i2c_gate_ctrl)
1344                fe->ops.i2c_gate_ctrl(fe, 1);
1345        if (i2c_transfer(&ttusb->i2c_adap, &msg, 1) != 1)
1346                return -EIO;
1347
1348        return 0;
1349}
1350
1351static struct tda8083_config ttusb_novas_grundig_29504_491_config = {
1352
1353        .demod_address = 0x68,
1354};
1355
1356static int alps_tdbe2_tuner_set_params(struct dvb_frontend *fe)
1357{
1358        struct dtv_frontend_properties *p = &fe->dtv_property_cache;
1359        struct ttusb* ttusb = fe->dvb->priv;
1360        u32 div;
1361        u8 data[4];
1362        struct i2c_msg msg = { .addr = 0x62, .flags = 0, .buf = data, .len = sizeof(data) };
1363
1364        div = (p->frequency + 35937500 + 31250) / 62500;
1365
1366        data[0] = (div >> 8) & 0x7f;
1367        data[1] = div & 0xff;
1368        data[2] = 0x85 | ((div >> 10) & 0x60);
1369        data[3] = (p->frequency < 174000000 ? 0x88 : p->frequency < 470000000 ? 0x84 : 0x81);
1370
1371        if (fe->ops.i2c_gate_ctrl)
1372                fe->ops.i2c_gate_ctrl(fe, 1);
1373        if (i2c_transfer (&ttusb->i2c_adap, &msg, 1) != 1)
1374                return -EIO;
1375
1376        return 0;
1377}
1378
1379
1380static struct ves1820_config alps_tdbe2_config = {
1381        .demod_address = 0x09,
1382        .xin = 57840000UL,
1383        .invert = 1,
1384        .selagc = VES1820_SELAGC_SIGNAMPERR,
1385};
1386
1387static u8 read_pwm(struct ttusb* ttusb)
1388{
1389        u8 b = 0xff;
1390        u8 pwm;
1391        struct i2c_msg msg[] = { { .addr = 0x50,.flags = 0,.buf = &b,.len = 1 },
1392                                { .addr = 0x50,.flags = I2C_M_RD,.buf = &pwm,.len = 1} };
1393
1394        if ((i2c_transfer(&ttusb->i2c_adap, msg, 2) != 2) || (pwm == 0xff))
1395                pwm = 0x48;
1396
1397        return pwm;
1398}
1399
1400
1401static int dvbc_philips_tdm1316l_tuner_set_params(struct dvb_frontend *fe)
1402{
1403        struct dtv_frontend_properties *p = &fe->dtv_property_cache;
1404        struct ttusb *ttusb = (struct ttusb *) fe->dvb->priv;
1405        u8 tuner_buf[5];
1406        struct i2c_msg tuner_msg = {.addr = 0x60,
1407                                    .flags = 0,
1408                                    .buf = tuner_buf,
1409                                    .len = sizeof(tuner_buf) };
1410        int tuner_frequency = 0;
1411        u8 band, cp, filter;
1412
1413        // determine charge pump
1414        tuner_frequency = p->frequency;
1415        if      (tuner_frequency <  87000000) {return -EINVAL;}
1416        else if (tuner_frequency < 130000000) {cp = 3; band = 1;}
1417        else if (tuner_frequency < 160000000) {cp = 5; band = 1;}
1418        else if (tuner_frequency < 200000000) {cp = 6; band = 1;}
1419        else if (tuner_frequency < 290000000) {cp = 3; band = 2;}
1420        else if (tuner_frequency < 420000000) {cp = 5; band = 2;}
1421        else if (tuner_frequency < 480000000) {cp = 6; band = 2;}
1422        else if (tuner_frequency < 620000000) {cp = 3; band = 4;}
1423        else if (tuner_frequency < 830000000) {cp = 5; band = 4;}
1424        else if (tuner_frequency < 895000000) {cp = 7; band = 4;}
1425        else {return -EINVAL;}
1426
1427        // assume PLL filter should always be 8MHz for the moment.
1428        filter = 1;
1429
1430        // calculate divisor
1431        // (Finput + Fif)/Fref; Fif = 36125000 Hz, Fref = 62500 Hz
1432        tuner_frequency = ((p->frequency + 36125000) / 62500);
1433
1434        // setup tuner buffer
1435        tuner_buf[0] = tuner_frequency >> 8;
1436        tuner_buf[1] = tuner_frequency & 0xff;
1437        tuner_buf[2] = 0xc8;
1438        tuner_buf[3] = (cp << 5) | (filter << 3) | band;
1439        tuner_buf[4] = 0x80;
1440
1441        if (fe->ops.i2c_gate_ctrl)
1442                fe->ops.i2c_gate_ctrl(fe, 1);
1443        if (i2c_transfer(&ttusb->i2c_adap, &tuner_msg, 1) != 1) {
1444                printk("dvb-ttusb-budget: dvbc_philips_tdm1316l_pll_set Error 1\n");
1445                return -EIO;
1446        }
1447
1448        msleep(50);
1449
1450        if (fe->ops.i2c_gate_ctrl)
1451                fe->ops.i2c_gate_ctrl(fe, 1);
1452        if (i2c_transfer(&ttusb->i2c_adap, &tuner_msg, 1) != 1) {
1453                printk("dvb-ttusb-budget: dvbc_philips_tdm1316l_pll_set Error 2\n");
1454                return -EIO;
1455        }
1456
1457        msleep(1);
1458
1459        return 0;
1460}
1461
1462static u8 dvbc_philips_tdm1316l_inittab[] = {
1463        0x80, 0x21,
1464        0x80, 0x20,
1465        0x81, 0x01,
1466        0x81, 0x00,
1467        0x00, 0x09,
1468        0x01, 0x69,
1469        0x03, 0x00,
1470        0x04, 0x00,
1471        0x07, 0x00,
1472        0x08, 0x00,
1473        0x20, 0x00,
1474        0x21, 0x40,
1475        0x22, 0x00,
1476        0x23, 0x00,
1477        0x24, 0x40,
1478        0x25, 0x88,
1479        0x30, 0xff,
1480        0x31, 0x00,
1481        0x32, 0xff,
1482        0x33, 0x00,
1483        0x34, 0x50,
1484        0x35, 0x7f,
1485        0x36, 0x00,
1486        0x37, 0x20,
1487        0x38, 0x00,
1488        0x40, 0x1c,
1489        0x41, 0xff,
1490        0x42, 0x29,
1491        0x43, 0x20,
1492        0x44, 0xff,
1493        0x45, 0x00,
1494        0x46, 0x00,
1495        0x49, 0x04,
1496        0x4a, 0xff,
1497        0x4b, 0x7f,
1498        0x52, 0x30,
1499        0x55, 0xae,
1500        0x56, 0x47,
1501        0x57, 0xe1,
1502        0x58, 0x3a,
1503        0x5a, 0x1e,
1504        0x5b, 0x34,
1505        0x60, 0x00,
1506        0x63, 0x00,
1507        0x64, 0x00,
1508        0x65, 0x00,
1509        0x66, 0x00,
1510        0x67, 0x00,
1511        0x68, 0x00,
1512        0x69, 0x00,
1513        0x6a, 0x02,
1514        0x6b, 0x00,
1515        0x70, 0xff,
1516        0x71, 0x00,
1517        0x72, 0x00,
1518        0x73, 0x00,
1519        0x74, 0x0c,
1520        0x80, 0x00,
1521        0x81, 0x00,
1522        0x82, 0x00,
1523        0x83, 0x00,
1524        0x84, 0x04,
1525        0x85, 0x80,
1526        0x86, 0x24,
1527        0x87, 0x78,
1528        0x88, 0x00,
1529        0x89, 0x00,
1530        0x90, 0x01,
1531        0x91, 0x01,
1532        0xa0, 0x00,
1533        0xa1, 0x00,
1534        0xa2, 0x00,
1535        0xb0, 0x91,
1536        0xb1, 0x0b,
1537        0xc0, 0x4b,
1538        0xc1, 0x00,
1539        0xc2, 0x00,
1540        0xd0, 0x00,
1541        0xd1, 0x00,
1542        0xd2, 0x00,
1543        0xd3, 0x00,
1544        0xd4, 0x00,
1545        0xd5, 0x00,
1546        0xde, 0x00,
1547        0xdf, 0x00,
1548        0x61, 0x38,
1549        0x62, 0x0a,
1550        0x53, 0x13,
1551        0x59, 0x08,
1552        0x55, 0x00,
1553        0x56, 0x40,
1554        0x57, 0x08,
1555        0x58, 0x3d,
1556        0x88, 0x10,
1557        0xa0, 0x00,
1558        0xa0, 0x00,
1559        0xa0, 0x00,
1560        0xa0, 0x04,
1561        0xff, 0xff,
1562};
1563
1564static struct stv0297_config dvbc_philips_tdm1316l_config = {
1565        .demod_address = 0x1c,
1566        .inittab = dvbc_philips_tdm1316l_inittab,
1567        .invert = 0,
1568};
1569
1570static void frontend_init(struct ttusb* ttusb)
1571{
1572        switch(le16_to_cpu(ttusb->dev->descriptor.idProduct)) {
1573        case 0x1003: // Hauppauge/TT Nova-USB-S budget (stv0299/ALPS BSRU6|BSBE1(tsa5059))
1574                // try the stv0299 based first
1575                ttusb->fe = dvb_attach(stv0299_attach, &alps_stv0299_config, &ttusb->i2c_adap);
1576                if (ttusb->fe != NULL) {
1577                        ttusb->fe->ops.tuner_ops.set_params = philips_tsa5059_tuner_set_params;
1578
1579                        if(ttusb->revision == TTUSB_REV_2_2) { // ALPS BSBE1
1580                                alps_stv0299_config.inittab = alps_bsbe1_inittab;
1581                                dvb_attach(lnbp21_attach, ttusb->fe, &ttusb->i2c_adap, 0, 0);
1582                        } else { // ALPS BSRU6
1583                                ttusb->fe->ops.set_voltage = ttusb_set_voltage;
1584                        }
1585                        break;
1586                }
1587
1588                // Grundig 29504-491
1589                ttusb->fe = dvb_attach(tda8083_attach, &ttusb_novas_grundig_29504_491_config, &ttusb->i2c_adap);
1590                if (ttusb->fe != NULL) {
1591                        ttusb->fe->ops.tuner_ops.set_params = ttusb_novas_grundig_29504_491_tuner_set_params;
1592                        ttusb->fe->ops.set_voltage = ttusb_set_voltage;
1593                        break;
1594                }
1595                break;
1596
1597        case 0x1004: // Hauppauge/TT DVB-C budget (ves1820/ALPS TDBE2(sp5659))
1598                ttusb->fe = dvb_attach(ves1820_attach, &alps_tdbe2_config, &ttusb->i2c_adap, read_pwm(ttusb));
1599                if (ttusb->fe != NULL) {
1600                        ttusb->fe->ops.tuner_ops.set_params = alps_tdbe2_tuner_set_params;
1601                        break;
1602                }
1603
1604                ttusb->fe = dvb_attach(stv0297_attach, &dvbc_philips_tdm1316l_config, &ttusb->i2c_adap);
1605                if (ttusb->fe != NULL) {
1606                        ttusb->fe->ops.tuner_ops.set_params = dvbc_philips_tdm1316l_tuner_set_params;
1607                        break;
1608                }
1609                break;
1610
1611        case 0x1005: // Hauppauge/TT Nova-USB-t budget (tda10046/Philips td1316(tda6651tt) OR cx22700/ALPS TDMB7(??))
1612                // try the ALPS TDMB7 first
1613                ttusb->fe = dvb_attach(cx22700_attach, &alps_tdmb7_config, &ttusb->i2c_adap);
1614                if (ttusb->fe != NULL) {
1615                        ttusb->fe->ops.tuner_ops.set_params = alps_tdmb7_tuner_set_params;
1616                        break;
1617                }
1618
1619                // Philips td1316
1620                ttusb->fe = dvb_attach(tda10046_attach, &philips_tdm1316l_config, &ttusb->i2c_adap);
1621                if (ttusb->fe != NULL) {
1622                        ttusb->fe->ops.tuner_ops.init = philips_tdm1316l_tuner_init;
1623                        ttusb->fe->ops.tuner_ops.set_params = philips_tdm1316l_tuner_set_params;
1624                        break;
1625                }
1626                break;
1627        }
1628
1629        if (ttusb->fe == NULL) {
1630                printk("dvb-ttusb-budget: A frontend driver was not found for device [%04x:%04x]\n",
1631                       le16_to_cpu(ttusb->dev->descriptor.idVendor),
1632                       le16_to_cpu(ttusb->dev->descriptor.idProduct));
1633        } else {
1634                if (dvb_register_frontend(&ttusb->adapter, ttusb->fe)) {
1635                        printk("dvb-ttusb-budget: Frontend registration failed!\n");
1636                        dvb_frontend_detach(ttusb->fe);
1637                        ttusb->fe = NULL;
1638                }
1639        }
1640}
1641
1642
1643
1644static struct i2c_algorithm ttusb_dec_algo = {
1645        .master_xfer    = master_xfer,
1646        .functionality  = functionality,
1647};
1648
1649static int ttusb_probe(struct usb_interface *intf, const struct usb_device_id *id)
1650{
1651        struct usb_device *udev;
1652        struct ttusb *ttusb;
1653        int result;
1654
1655        dprintk("%s: TTUSB DVB connected\n", __func__);
1656
1657        udev = interface_to_usbdev(intf);
1658
1659        if (intf->altsetting->desc.bInterfaceNumber != 1) return -ENODEV;
1660
1661        if (!(ttusb = kzalloc(sizeof(struct ttusb), GFP_KERNEL)))
1662                return -ENOMEM;
1663
1664        ttusb->dev = udev;
1665        ttusb->c = 0;
1666        ttusb->mux_state = 0;
1667        mutex_init(&ttusb->semi2c);
1668
1669        mutex_lock(&ttusb->semi2c);
1670
1671        mutex_init(&ttusb->semusb);
1672
1673        ttusb_setup_interfaces(ttusb);
1674
1675        result = ttusb_alloc_iso_urbs(ttusb);
1676        if (result < 0) {
1677                dprintk("%s: ttusb_alloc_iso_urbs - failed\n", __func__);
1678                mutex_unlock(&ttusb->semi2c);
1679                kfree(ttusb);
1680                return result;
1681        }
1682
1683        if (ttusb_init_controller(ttusb))
1684                printk("ttusb_init_controller: error\n");
1685
1686        mutex_unlock(&ttusb->semi2c);
1687
1688        result = dvb_register_adapter(&ttusb->adapter,
1689                                      "Technotrend/Hauppauge Nova-USB",
1690                                      THIS_MODULE, &udev->dev, adapter_nr);
1691        if (result < 0) {
1692                ttusb_free_iso_urbs(ttusb);
1693                kfree(ttusb);
1694                return result;
1695        }
1696        ttusb->adapter.priv = ttusb;
1697
1698        /* i2c */
1699        memset(&ttusb->i2c_adap, 0, sizeof(struct i2c_adapter));
1700        strcpy(ttusb->i2c_adap.name, "TTUSB DEC");
1701
1702        i2c_set_adapdata(&ttusb->i2c_adap, ttusb);
1703
1704        ttusb->i2c_adap.algo              = &ttusb_dec_algo;
1705        ttusb->i2c_adap.algo_data         = NULL;
1706        ttusb->i2c_adap.dev.parent        = &udev->dev;
1707
1708        result = i2c_add_adapter(&ttusb->i2c_adap);
1709        if (result)
1710                goto err_unregister_adapter;
1711
1712        memset(&ttusb->dvb_demux, 0, sizeof(ttusb->dvb_demux));
1713
1714        ttusb->dvb_demux.dmx.capabilities =
1715            DMX_TS_FILTERING | DMX_SECTION_FILTERING;
1716        ttusb->dvb_demux.priv = NULL;
1717#ifdef TTUSB_HWSECTIONS
1718        ttusb->dvb_demux.filternum = TTUSB_MAXFILTER;
1719#else
1720        ttusb->dvb_demux.filternum = 32;
1721#endif
1722        ttusb->dvb_demux.feednum = TTUSB_MAXCHANNEL;
1723        ttusb->dvb_demux.start_feed = ttusb_start_feed;
1724        ttusb->dvb_demux.stop_feed = ttusb_stop_feed;
1725        ttusb->dvb_demux.write_to_decoder = NULL;
1726
1727        result = dvb_dmx_init(&ttusb->dvb_demux);
1728        if (result < 0) {
1729                printk("ttusb_dvb: dvb_dmx_init failed (errno = %d)\n", result);
1730                result = -ENODEV;
1731                goto err_i2c_del_adapter;
1732        }
1733//FIXME dmxdev (nur WAS?)
1734        ttusb->dmxdev.filternum = ttusb->dvb_demux.filternum;
1735        ttusb->dmxdev.demux = &ttusb->dvb_demux.dmx;
1736        ttusb->dmxdev.capabilities = 0;
1737
1738        result = dvb_dmxdev_init(&ttusb->dmxdev, &ttusb->adapter);
1739        if (result < 0) {
1740                printk("ttusb_dvb: dvb_dmxdev_init failed (errno = %d)\n",
1741                       result);
1742                result = -ENODEV;
1743                goto err_release_dmx;
1744        }
1745
1746        if (dvb_net_init(&ttusb->adapter, &ttusb->dvbnet, &ttusb->dvb_demux.dmx)) {
1747                printk("ttusb_dvb: dvb_net_init failed!\n");
1748                result = -ENODEV;
1749                goto err_release_dmxdev;
1750        }
1751
1752        usb_set_intfdata(intf, (void *) ttusb);
1753
1754        frontend_init(ttusb);
1755
1756        return 0;
1757
1758err_release_dmxdev:
1759        dvb_dmxdev_release(&ttusb->dmxdev);
1760err_release_dmx:
1761        dvb_dmx_release(&ttusb->dvb_demux);
1762err_i2c_del_adapter:
1763        i2c_del_adapter(&ttusb->i2c_adap);
1764err_unregister_adapter:
1765        dvb_unregister_adapter (&ttusb->adapter);
1766        ttusb_free_iso_urbs(ttusb);
1767        kfree(ttusb);
1768        return result;
1769}
1770
1771static void ttusb_disconnect(struct usb_interface *intf)
1772{
1773        struct ttusb *ttusb = usb_get_intfdata(intf);
1774
1775        usb_set_intfdata(intf, NULL);
1776
1777        ttusb->disconnecting = 1;
1778
1779        ttusb_stop_iso_xfer(ttusb);
1780
1781        ttusb->dvb_demux.dmx.close(&ttusb->dvb_demux.dmx);
1782        dvb_net_release(&ttusb->dvbnet);
1783        dvb_dmxdev_release(&ttusb->dmxdev);
1784        dvb_dmx_release(&ttusb->dvb_demux);
1785        if (ttusb->fe != NULL) {
1786                dvb_unregister_frontend(ttusb->fe);
1787                dvb_frontend_detach(ttusb->fe);
1788        }
1789        i2c_del_adapter(&ttusb->i2c_adap);
1790        dvb_unregister_adapter(&ttusb->adapter);
1791
1792        ttusb_free_iso_urbs(ttusb);
1793
1794        kfree(ttusb);
1795
1796        dprintk("%s: TTUSB DVB disconnected\n", __func__);
1797}
1798
1799static struct usb_device_id ttusb_table[] = {
1800        {USB_DEVICE(0xb48, 0x1003)},
1801        {USB_DEVICE(0xb48, 0x1004)},
1802        {USB_DEVICE(0xb48, 0x1005)},
1803        {}
1804};
1805
1806MODULE_DEVICE_TABLE(usb, ttusb_table);
1807
1808static struct usb_driver ttusb_driver = {
1809      .name             = "ttusb",
1810      .probe            = ttusb_probe,
1811      .disconnect       = ttusb_disconnect,
1812      .id_table         = ttusb_table,
1813};
1814
1815module_usb_driver(ttusb_driver);
1816
1817MODULE_AUTHOR("Holger Waechtler <holger@convergence.de>");
1818MODULE_DESCRIPTION("TTUSB DVB Driver");
1819MODULE_LICENSE("GPL");
1820MODULE_FIRMWARE("ttusb-budget/dspbootcode.bin");
1821