cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

dvb-ttusb-budget.c (42120B)


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