File Index
Files and directories
Sign in
FILE

dvb-ttusb-budget.c

File preview with syntax highlighting.

linux-6.19.14/drivers/media/usb/ttusb-budget/dvb-ttusb-budget.c C
   1// SPDX-License-Identifier: GPL-2.0-or-later
   2/*
   3 * TTUSB DVB driver
   4 *
   5 * Copyright (c) 2002 Holger Waechtler <holger@convergence.de>
   6 * Copyright (c) 2003 Felix Domke <tmbinc@elitedvb.net>
   7 */
   8
   9#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
  10
  11#include <linux/init.h>
  12#include <linux/slab.h>
  13#include <linux/wait.h>
  14#include <linux/fs.h>
  15#include <linux/module.h>
  16#include <linux/usb.h>
  17#include <linux/delay.h>
  18#include <linux/time.h>
  19#include <linux/errno.h>
  20#include <linux/jiffies.h>
  21#include <linux/mutex.h>
  22#include <linux/firmware.h>
  23
  24#include <media/dvb_frontend.h>
  25#include <media/dmxdev.h>
  26#include <media/dvb_demux.h>
  27#include <media/dvb_net.h>
  28#include "ves1820.h"
  29#include "cx22700.h"
  30#include "tda1004x.h"
  31#include "stv0299.h"
  32#include "tda8083.h"
  33#include "stv0297.h"
  34#include "lnbp21.h"
  35
  36#include <linux/dvb/frontend.h>
  37#include <linux/dvb/dmx.h>
  38#include <linux/pci.h>
  39
  40/*
  41  TTUSB_HWSECTIONS:
  42    the DSP supports filtering in hardware, however, since the "muxstream"
  43    is a bit braindead (no matching channel masks or no matching filter mask),
  44    we won't support this - yet. it doesn't event support negative filters,
  45    so the best way is maybe to keep TTUSB_HWSECTIONS undef'd and just
  46    parse TS data. USB bandwidth will be a problem when having large
  47    datastreams, especially for dvb-net, but hey, that's not my problem.
  48
  49  TTUSB_DISEQC, TTUSB_TONE:
  50    let the STC do the diseqc/tone stuff. this isn't supported at least with
  51    my TTUSB, so let it undef'd unless you want to implement another
  52    frontend. never tested.
  53
  54  debug:
  55    define it to > 3 for really hardcore debugging. you probably don't want
  56    this unless the device doesn't load at all. > 2 for bandwidth statistics.
  57*/
  58
  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");
~/ Read-only file preview.