tuner-xc2028.c 34.6 KB
Newer Older
1 2
/* tuner-xc2028
 *
3
 * Copyright (c) 2007-2008 Mauro Carvalho Chehab (mchehab@infradead.org)
4
 *
5 6
 * Copyright (c) 2007 Michel Ludwig (michel.ludwig@gmail.com)
 *       - frontend interface
7
 *
8 9 10 11 12 13
 * This code is placed under the terms of the GNU General Public License v2
 */

#include <linux/i2c.h>
#include <asm/div64.h>
#include <linux/firmware.h>
14
#include <linux/videodev2.h>
15
#include <linux/delay.h>
16
#include <media/tuner.h>
17
#include <linux/mutex.h>
18
#include <linux/slab.h>
19
#include <asm/unaligned.h>
20
#include "tuner-i2c.h"
21
#include "tuner-xc2028.h"
22
#include "tuner-xc2028-types.h"
23

24 25 26
#include <linux/dvb/frontend.h>
#include "dvb_frontend.h"

27 28 29
/* Max transfer size done by I2C transfer functions */
#define MAX_XFER_SIZE  80

30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
/* Registers (Write-only) */
#define XREG_INIT         0x00
#define XREG_RF_FREQ      0x02
#define XREG_POWER_DOWN   0x08

/* Registers (Read-only) */
#define XREG_FREQ_ERROR   0x01
#define XREG_LOCK         0x02
#define XREG_VERSION      0x04
#define XREG_PRODUCT_ID   0x08
#define XREG_HSYNC_FREQ   0x10
#define XREG_FRAME_LINES  0x20
#define XREG_SNR          0x40

#define XREG_ADC_ENV      0x0100
45

46 47 48 49
static int debug;
module_param(debug, int, 0644);
MODULE_PARM_DESC(debug, "enable verbose debug messages");

50 51
static int no_poweroff;
module_param(no_poweroff, int, 0644);
52
MODULE_PARM_DESC(no_poweroff, "0 (default) powers device off when not used.\n"
53 54 55
	"1 keep device energized and with tuner ready all the times.\n"
	"  Faster, but consumes more power and keeps the device hotter\n");

56 57 58 59 60 61 62 63 64 65 66 67 68 69
static char audio_std[8];
module_param_string(audio_std, audio_std, sizeof(audio_std), 0);
MODULE_PARM_DESC(audio_std,
	"Audio standard. XC3028 audio decoder explicitly "
	"needs to know what audio\n"
	"standard is needed for some video standards with audio A2 or NICAM.\n"
	"The valid values are:\n"
	"A2\n"
	"A2/A\n"
	"A2/B\n"
	"NICAM\n"
	"NICAM/A\n"
	"NICAM/B\n");

70
static char firmware_name[30];
71 72 73 74
module_param_string(firmware_name, firmware_name, sizeof(firmware_name), 0);
MODULE_PARM_DESC(firmware_name, "Firmware file name. Allows overriding the "
				"default firmware name\n");

75
static LIST_HEAD(hybrid_tuner_instance_list);
76 77
static DEFINE_MUTEX(xc2028_list_mutex);

78 79 80 81
/* struct for storing firmware table */
struct firmware_description {
	unsigned int  type;
	v4l2_std_id   id;
82
	__u16         int_freq;
83 84 85
	unsigned char *ptr;
	unsigned int  size;
};
86

87 88 89 90
struct firmware_properties {
	unsigned int	type;
	v4l2_std_id	id;
	v4l2_std_id	std_req;
91
	__u16		int_freq;
92 93 94 95
	unsigned int	scode_table;
	int 		scode_nr;
};

96 97 98 99 100 101 102 103
enum xc2028_state {
	XC2028_NO_FIRMWARE = 0,
	XC2028_WAITING_FIRMWARE,
	XC2028_ACTIVE,
	XC2028_SLEEP,
	XC2028_NODEV,
};

104
struct xc2028_data {
105
	struct list_head        hybrid_tuner_instance_list;
106
	struct tuner_i2c_props  i2c_props;
107 108
	__u32			frequency;

109 110 111
	enum xc2028_state	state;
	const char		*fname;

112 113
	struct firmware_description *firm;
	int			firm_size;
114
	__u16			firm_version;
115

116 117 118
	__u16			hwmodel;
	__u16			hwvers;

119
	struct xc2028_ctrl	ctrl;
120

121
	struct firmware_properties cur_fw;
122 123

	struct mutex lock;
124 125
};

126 127 128 129 130 131
#define i2c_send(priv, buf, size) ({					\
	int _rc;							\
	_rc = tuner_i2c_xfer_send(&priv->i2c_props, buf, size);		\
	if (size != _rc)						\
		tuner_info("i2c output error: rc = %d (should be %d)\n",\
			   _rc, (int)size);				\
132 133
	if (priv->ctrl.msleep)						\
		msleep(priv->ctrl.msleep);				\
134 135 136
	_rc;								\
})

137 138 139 140 141 142 143
#define i2c_send_recv(priv, obuf, osize, ibuf, isize) ({		\
	int _rc;							\
	_rc = tuner_i2c_xfer_send_recv(&priv->i2c_props, obuf, osize,	\
				       ibuf, isize);			\
	if (isize != _rc)						\
		tuner_err("i2c input error: rc = %d (should be %d)\n",	\
			   _rc, (int)isize); 				\
144 145
	if (priv->ctrl.msleep)						\
		msleep(priv->ctrl.msleep);				\
146 147 148
	_rc;								\
})

149
#define send_seq(priv, data...)	({					\
150
	static u8 _val[] = data;					\
151
	int _rc;							\
152
	if (sizeof(_val) !=						\
153
			(_rc = tuner_i2c_xfer_send(&priv->i2c_props,	\
154
						_val, sizeof(_val)))) {	\
155
		tuner_err("Error on line %d: %d\n", __LINE__, _rc);	\
156
	} else if (priv->ctrl.msleep)					\
157
		msleep(priv->ctrl.msleep);				\
158 159
	_rc;								\
})
160

161
static int xc2028_get_reg(struct xc2028_data *priv, u16 reg, u16 *val)
162
{
163
	unsigned char buf[2];
164
	unsigned char ibuf[2];
165

166
	tuner_dbg("%s %04x called\n", __func__, reg);
167

168
	buf[0] = reg >> 8;
169
	buf[1] = (unsigned char) reg;
170

171 172
	if (i2c_send_recv(priv, buf, 2, ibuf, 2) != 2)
		return -EIO;
173

174 175
	*val = (ibuf[1]) | (ibuf[0] << 8);
	return 0;
176 177
}

178
#define dump_firm_type(t) 	dump_firm_type_and_int_freq(t, 0)
179
static void dump_firm_type_and_int_freq(unsigned int type, u16 int_freq)
180 181 182
{
	 if (type & BASE)
		printk("BASE ");
183 184
	 if (type & INIT1)
		printk("INIT1 ");
185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240
	 if (type & F8MHZ)
		printk("F8MHZ ");
	 if (type & MTS)
		printk("MTS ");
	 if (type & D2620)
		printk("D2620 ");
	 if (type & D2633)
		printk("D2633 ");
	 if (type & DTV6)
		printk("DTV6 ");
	 if (type & QAM)
		printk("QAM ");
	 if (type & DTV7)
		printk("DTV7 ");
	 if (type & DTV78)
		printk("DTV78 ");
	 if (type & DTV8)
		printk("DTV8 ");
	 if (type & FM)
		printk("FM ");
	 if (type & INPUT1)
		printk("INPUT1 ");
	 if (type & LCD)
		printk("LCD ");
	 if (type & NOGD)
		printk("NOGD ");
	 if (type & MONO)
		printk("MONO ");
	 if (type & ATSC)
		printk("ATSC ");
	 if (type & IF)
		printk("IF ");
	 if (type & LG60)
		printk("LG60 ");
	 if (type & ATI638)
		printk("ATI638 ");
	 if (type & OREN538)
		printk("OREN538 ");
	 if (type & OREN36)
		printk("OREN36 ");
	 if (type & TOYOTA388)
		printk("TOYOTA388 ");
	 if (type & TOYOTA794)
		printk("TOYOTA794 ");
	 if (type & DIBCOM52)
		printk("DIBCOM52 ");
	 if (type & ZARLINK456)
		printk("ZARLINK456 ");
	 if (type & CHINA)
		printk("CHINA ");
	 if (type & F6MHZ)
		printk("F6MHZ ");
	 if (type & INPUT2)
		printk("INPUT2 ");
	 if (type & SCODE)
		printk("SCODE ");
241 242
	 if (type & HAS_IF)
		printk("HAS_IF_%d ", int_freq);
243 244
}

245
static  v4l2_std_id parse_audio_std_option(void)
246
{
247
	if (strcasecmp(audio_std, "A2") == 0)
248
		return V4L2_STD_A2;
249
	if (strcasecmp(audio_std, "A2/A") == 0)
250
		return V4L2_STD_A2_A;
251
	if (strcasecmp(audio_std, "A2/B") == 0)
252
		return V4L2_STD_A2_B;
253
	if (strcasecmp(audio_std, "NICAM") == 0)
254
		return V4L2_STD_NICAM;
255
	if (strcasecmp(audio_std, "NICAM/A") == 0)
256
		return V4L2_STD_NICAM_A;
257
	if (strcasecmp(audio_std, "NICAM/B") == 0)
258 259 260 261 262
		return V4L2_STD_NICAM_B;

	return 0;
}

263 264 265 266 267 268 269 270 271 272 273 274 275 276 277
static int check_device_status(struct xc2028_data *priv)
{
	switch (priv->state) {
	case XC2028_NO_FIRMWARE:
	case XC2028_WAITING_FIRMWARE:
		return -EAGAIN;
	case XC2028_ACTIVE:
	case XC2028_SLEEP:
		return 0;
	case XC2028_NODEV:
		return -ENODEV;
	}
	return 0;
}

278
static void free_firmware(struct xc2028_data *priv)
279
{
280
	int i;
281
	tuner_dbg("%s called\n", __func__);
282 283 284 285

	if (!priv->firm)
		return;

286 287 288
	for (i = 0; i < priv->firm_size; i++)
		kfree(priv->firm[i].ptr);

289 290
	kfree(priv->firm);

291
	priv->firm = NULL;
292
	priv->firm_size = 0;
293
	priv->state = XC2028_NO_FIRMWARE;
294 295

	memset(&priv->cur_fw, 0, sizeof(priv->cur_fw));
296 297
}

298 299
static int load_all_firmwares(struct dvb_frontend *fe,
			      const struct firmware *fw)
300 301
{
	struct xc2028_data    *priv = fe->tuner_priv;
302
	const unsigned char   *p, *endp;
303 304
	int                   rc = 0;
	int		      n, n_array;
305
	char		      name[33];
306

307
	tuner_dbg("%s called\n", __func__);
308

309 310
	p = fw->data;
	endp = p + fw->size;
311

312 313
	if (fw->size < sizeof(name) - 1 + 2 + 2) {
		tuner_err("Error: firmware file %s has invalid size!\n",
314
			  priv->fname);
315
		goto corrupt;
316
	}
317

318 319 320
	memcpy(name, p, sizeof(name) - 1);
	name[sizeof(name) - 1] = 0;
	p += sizeof(name) - 1;
321

322
	priv->firm_version = get_unaligned_le16(p);
323 324
	p += 2;

325
	n_array = get_unaligned_le16(p);
326 327
	p += 2;

328
	tuner_info("Loading %d firmware images from %s, type: %s, ver %d.%d\n",
329
		   n_array, priv->fname, name,
330
		   priv->firm_version >> 8, priv->firm_version & 0xff);
331

332
	priv->firm = kcalloc(n_array, sizeof(*priv->firm), GFP_KERNEL);
333 334
	if (priv->firm == NULL) {
		tuner_err("Not enough memory to load firmware file.\n");
335
		rc = -ENOMEM;
336
		goto err;
337
	}
338
	priv->firm_size = n_array;
339

340 341
	n = -1;
	while (p < endp) {
342 343
		__u32 type, size;
		v4l2_std_id id;
344
		__u16 int_freq = 0;
345 346 347

		n++;
		if (n >= n_array) {
348 349
			tuner_err("More firmware images in file than "
				  "were expected!\n");
350 351 352 353
			goto corrupt;
		}

		/* Checks if there's enough bytes to read */
354 355
		if (endp - p < sizeof(type) + sizeof(id) + sizeof(size))
			goto header;
356

357
		type = get_unaligned_le32(p);
358 359
		p += sizeof(type);

360
		id = get_unaligned_le64(p);
361 362
		p += sizeof(id);

363
		if (type & HAS_IF) {
364
			int_freq = get_unaligned_le16(p);
365
			p += sizeof(int_freq);
366 367
			if (endp - p < sizeof(size))
				goto header;
368 369
		}

370
		size = get_unaligned_le32(p);
371 372
		p += sizeof(size);

373
		if (!size || size > endp - p) {
374
			tuner_err("Firmware type ");
375
			dump_firm_type(type);
376 377
			printk("(%x), id %llx is corrupted "
			       "(size=%d, expected %d)\n",
378
			       type, (unsigned long long)id,
379
			       (unsigned)(endp - p), size);
380 381 382
			goto corrupt;
		}

383
		priv->firm[n].ptr = kzalloc(size, GFP_KERNEL);
384 385
		if (priv->firm[n].ptr == NULL) {
			tuner_err("Not enough memory to load firmware file.\n");
386
			rc = -ENOMEM;
387 388
			goto err;
		}
389 390
		tuner_dbg("Reading firmware type ");
		if (debug) {
391
			dump_firm_type_and_int_freq(type, int_freq);
392
			printk("(%x), id %llx, size=%d.\n",
393
			       type, (unsigned long long)id, size);
394
		}
395 396 397 398 399

		memcpy(priv->firm[n].ptr, p, size);
		priv->firm[n].type = type;
		priv->firm[n].id   = id;
		priv->firm[n].size = size;
400
		priv->firm[n].int_freq = int_freq;
401 402 403 404

		p += size;
	}

405
	if (n + 1 != priv->firm_size) {
406
		tuner_err("Firmware file is incomplete!\n");
407 408 409 410 411
		goto corrupt;
	}

	goto done;

412 413
header:
	tuner_err("Firmware header is incomplete!\n");
414
corrupt:
415
	rc = -EINVAL;
416
	tuner_err("Error: firmware file is corrupted!\n");
417 418

err:
419
	tuner_info("Releasing partially loaded firmware file.\n");
420 421 422
	free_firmware(priv);

done:
423 424
	if (rc == 0)
		tuner_dbg("Firmware files loaded.\n");
425 426
	else
		priv->state = XC2028_NODEV;
427 428 429 430

	return rc;
}

431 432
static int seek_firmware(struct dvb_frontend *fe, unsigned int type,
			 v4l2_std_id *id)
433 434
{
	struct xc2028_data *priv = fe->tuner_priv;
435
	int                 i, best_i = -1, best_nr_matches = 0;
436
	unsigned int        type_mask = 0;
437

438
	tuner_dbg("%s called, want type=", __func__);
439 440 441 442
	if (debug) {
		dump_firm_type(type);
		printk("(%x), id %016llx.\n", type, (unsigned long long)*id);
	}
443 444

	if (!priv->firm) {
445
		tuner_err("Error! firmware not loaded\n");
446 447 448
		return -EINVAL;
	}

449
	if (((type & ~SCODE) == 0) && (*id == 0))
450
		*id = V4L2_STD_PAL;
451

452
	if (type & BASE)
453
		type_mask = BASE_TYPES;
454
	else if (type & SCODE) {
455
		type &= SCODE_TYPES;
456
		type_mask = SCODE_TYPES & ~HAS_IF;
457
	} else if (type & DTV_TYPES)
458
		type_mask = DTV_TYPES;
459
	else if (type & STD_SPECIFIC_TYPES)
460 461 462 463
		type_mask = STD_SPECIFIC_TYPES;

	type &= type_mask;

464
	if (!(type & SCODE))
465
		type_mask = ~0;
466

467
	/* Seek for exact match */
468
	for (i = 0; i < priv->firm_size; i++) {
469
		if ((type == (priv->firm[i].type & type_mask)) &&
470
		    (*id == priv->firm[i].id))
471 472 473 474
			goto found;
	}

	/* Seek for generic video standard match */
475
	for (i = 0; i < priv->firm_size; i++) {
476 477 478
		v4l2_std_id match_mask;
		int nr_matches;

479
		if (type != (priv->firm[i].type & type_mask))
480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502
			continue;

		match_mask = *id & priv->firm[i].id;
		if (!match_mask)
			continue;

		if ((*id & match_mask) == *id)
			goto found; /* Supports all the requested standards */

		nr_matches = hweight64(match_mask);
		if (nr_matches > best_nr_matches) {
			best_nr_matches = nr_matches;
			best_i = i;
		}
	}

	if (best_nr_matches > 0) {
		tuner_dbg("Selecting best matching firmware (%d bits) for "
			  "type=", best_nr_matches);
		dump_firm_type(type);
		printk("(%x), id %016llx:\n", type, (unsigned long long)*id);
		i = best_i;
		goto found;
503 504 505 506
	}

	/*FIXME: Would make sense to seek for type "hint" match ? */

507
	i = -ENOENT;
508
	goto ret;
509 510 511 512

found:
	*id = priv->firm[i].id;

513
ret:
514
	tuner_dbg("%s firmware for type=", (i < 0) ? "Can't find" : "Found");
515 516
	if (debug) {
		dump_firm_type(type);
517
		printk("(%x), id %016llx.\n", type, (unsigned long long)*id);
518
	}
519 520 521
	return i;
}

522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538
static inline int do_tuner_callback(struct dvb_frontend *fe, int cmd, int arg)
{
	struct xc2028_data *priv = fe->tuner_priv;

	/* analog side (tuner-core) uses i2c_adap->algo_data.
	 * digital side is not guaranteed to have algo_data defined.
	 *
	 * digital side will always have fe->dvb defined.
	 * analog side (tuner-core) doesn't (yet) define fe->dvb.
	 */

	return (!fe->callback) ? -EINVAL :
		fe->callback(((fe->dvb) && (fe->dvb->priv)) ?
				fe->dvb->priv : priv->i2c_props.adap->algo_data,
			     DVB_FRONTEND_COMPONENT_TUNER, cmd, arg);
}

539 540 541 542 543
static int load_firmware(struct dvb_frontend *fe, unsigned int type,
			 v4l2_std_id *id)
{
	struct xc2028_data *priv = fe->tuner_priv;
	int                pos, rc;
544 545 546 547
	unsigned char      *p, *endp, buf[MAX_XFER_SIZE];

	if (priv->ctrl.max_len > sizeof(buf))
		priv->ctrl.max_len = sizeof(buf);
548

549
	tuner_dbg("%s called\n", __func__);
550 551 552 553 554

	pos = seek_firmware(fe, type, id);
	if (pos < 0)
		return pos;

555
	tuner_info("Loading firmware for type=");
556 557 558
	dump_firm_type(priv->firm[pos].type);
	printk("(%x), id %016llx.\n", priv->firm[pos].type,
	       (unsigned long long)*id);
559

560 561
	p = priv->firm[pos].ptr;
	endp = p + priv->firm[pos].size;
562

563
	while (p < endp) {
564 565 566
		__u16 size;

		/* Checks if there's enough bytes to read */
567
		if (p + sizeof(size) > endp) {
568
			tuner_err("Firmware chunk size is wrong\n");
569 570 571
			return -EINVAL;
		}

572
		size = le16_to_cpu(*(__le16 *) p);
573 574 575 576 577 578
		p += sizeof(size);

		if (size == 0xffff)
			return 0;

		if (!size) {
579
			/* Special callback command received */
580
			rc = do_tuner_callback(fe, XC2028_TUNER_RESET, 0);
581
			if (rc < 0) {
582
				tuner_err("Error at RESET code %d\n",
583
					   (*p) & 0x7f);
584
				return -EINVAL;
585 586 587
			}
			continue;
		}
588 589 590
		if (size >= 0xff00) {
			switch (size) {
			case 0xff00:
591
				rc = do_tuner_callback(fe, XC2028_RESET_CLK, 0);
592 593 594 595 596
				if (rc < 0) {
					tuner_err("Error at RESET code %d\n",
						  (*p) & 0x7f);
					return -EINVAL;
				}
597
				break;
598 599 600 601 602 603
			default:
				tuner_info("Invalid RESET code %d\n",
					   size & 0x7f);
				return -EINVAL;

			}
604
			continue;
605
		}
606 607 608

		/* Checks for a sleep command */
		if (size & 0x8000) {
609
			msleep(size & 0x7fff);
610
			continue;
611 612
		}

613
		if ((size + p > endp)) {
614
			tuner_err("missing bytes: need %d, have %d\n",
615
				   size, (int)(endp - p));
616 617
			return -EINVAL;
		}
618

619
		buf[0] = *p;
620
		p++;
621
		size--;
622

623
		/* Sends message chunks */
624
		while (size > 0) {
625 626
			int len = (size < priv->ctrl.max_len - 1) ?
				   size : priv->ctrl.max_len - 1;
627

628
			memcpy(buf + 1, p, len);
629

630
			rc = i2c_send(priv, buf, len + 1);
631
			if (rc < 0) {
632
				tuner_err("%d returned from send\n", rc);
633 634 635 636 637 638
				return -EINVAL;
			}

			p += len;
			size -= len;
		}
639 640 641 642 643 644 645

		/* silently fail if the frontend doesn't support I2C flush */
		rc = do_tuner_callback(fe, XC2028_I2C_FLUSH, 0);
		if ((rc < 0) && (rc != -EINVAL)) {
			tuner_err("error executing flush: %d\n", rc);
			return rc;
		}
646
	}
647
	return 0;
648 649
}

650
static int load_scode(struct dvb_frontend *fe, unsigned int type,
651
			 v4l2_std_id *id, __u16 int_freq, int scode)
652 653 654 655 656
{
	struct xc2028_data *priv = fe->tuner_priv;
	int                pos, rc;
	unsigned char	   *p;

657
	tuner_dbg("%s called\n", __func__);
658

659 660 661 662 663 664 665
	if (!int_freq) {
		pos = seek_firmware(fe, type, id);
		if (pos < 0)
			return pos;
	} else {
		for (pos = 0; pos < priv->firm_size; pos++) {
			if ((priv->firm[pos].int_freq == int_freq) &&
666
			    (priv->firm[pos].type & HAS_IF))
667 668 669 670 671
				break;
		}
		if (pos == priv->firm_size)
			return -ENOENT;
	}
672 673 674

	p = priv->firm[pos].ptr;

675
	if (priv->firm[pos].type & HAS_IF) {
676 677 678 679 680 681 682
		if (priv->firm[pos].size != 12 * 16 || scode >= 16)
			return -EINVAL;
		p += 12 * scode;
	} else {
		/* 16 SCODE entries per file; each SCODE entry is 12 bytes and
		 * has a 2-byte size header in the firmware format. */
		if (priv->firm[pos].size != 14 * 16 || scode >= 16 ||
683
		    le16_to_cpu(*(__le16 *)(p + 14 * scode)) != 12)
684 685 686
			return -EINVAL;
		p += 14 * scode + 2;
	}
687

688
	tuner_info("Loading SCODE for type=");
689 690
	dump_firm_type_and_int_freq(priv->firm[pos].type,
				    priv->firm[pos].int_freq);
691 692 693
	printk("(%x), id %016llx.\n", priv->firm[pos].type,
	       (unsigned long long)*id);

694
	if (priv->firm_version < 0x0202)
695 696 697 698 699
		rc = send_seq(priv, {0x20, 0x00, 0x00, 0x00});
	else
		rc = send_seq(priv, {0xa0, 0x00, 0x00, 0x00});
	if (rc < 0)
		return -EIO;
700

701
	rc = i2c_send(priv, p, 12);
702 703
	if (rc < 0)
		return -EIO;
704

705 706 707
	rc = send_seq(priv, {0x00, 0x8c});
	if (rc < 0)
		return -EIO;
708 709 710 711

	return 0;
}

712 713
static int xc2028_sleep(struct dvb_frontend *fe);

714
static int check_firmware(struct dvb_frontend *fe, unsigned int type,
715
			  v4l2_std_id std, __u16 int_freq)
716
{
717
	struct xc2028_data         *priv = fe->tuner_priv;
718
	struct firmware_properties new_fw;
719
	int			   rc, retry_count = 0;
720 721
	u16			   version, hwmodel;
	v4l2_std_id		   std0;
722

723
	tuner_dbg("%s called\n", __func__);
724

725 726 727
	rc = check_device_status(priv);
	if (rc < 0)
		return rc;
728

729
	if (priv->ctrl.mts && !(type & FM))
730
		type |= MTS;
731

732
retry:
733 734 735 736 737
	new_fw.type = type;
	new_fw.id = std;
	new_fw.std_req = std;
	new_fw.scode_table = SCODE | priv->ctrl.scode_table;
	new_fw.scode_nr = 0;
738
	new_fw.int_freq = int_freq;
739 740 741 742

	tuner_dbg("checking firmware, user requested type=");
	if (debug) {
		dump_firm_type(new_fw.type);
743
		printk("(%x), id %016llx, ", new_fw.type,
744
		       (unsigned long long)new_fw.std_req);
745 746 747 748 749 750 751
		if (!int_freq) {
			printk("scode_tbl ");
			dump_firm_type(priv->ctrl.scode_table);
			printk("(%x), ", priv->ctrl.scode_table);
		} else
			printk("int_freq %d, ", new_fw.int_freq);
		printk("scode_nr %d\n", new_fw.scode_nr);
752 753
	}

754 755 756 757
	/*
	 * No need to reload base firmware if it matches and if the tuner
	 * is not at sleep mode
	 */
758
	if ((priv->state == XC2028_ACTIVE) &&
759 760
	    (((BASE | new_fw.type) & BASE_TYPES) ==
	    (priv->cur_fw.type & BASE_TYPES))) {
761 762 763 764 765 766 767 768
		tuner_dbg("BASE firmware not changed.\n");
		goto skip_base;
	}

	/* Updating BASE - forget about all currently loaded firmware */
	memset(&priv->cur_fw, 0, sizeof(priv->cur_fw));

	/* Reset is needed before loading firmware */
769
	rc = do_tuner_callback(fe, XC2028_TUNER_RESET, 0);
770 771 772
	if (rc < 0)
		goto fail;

773 774 775
	/* BASE firmwares are all std0 */
	std0 = 0;
	rc = load_firmware(fe, BASE | new_fw.type, &std0);
776 777 778 779 780
	if (rc < 0) {
		tuner_err("Error %d while loading base firmware\n",
			  rc);
		goto fail;
	}
781

782
	/* Load INIT1, if needed */
783
	tuner_dbg("Load init1 firmware, if exists\n");
784

785
	rc = load_firmware(fe, BASE | INIT1 | new_fw.type, &std0);
786 787 788
	if (rc == -ENOENT)
		rc = load_firmware(fe, (BASE | INIT1 | new_fw.type) & ~F8MHZ,
				   &std0);
789 790 791 792 793
	if (rc < 0 && rc != -ENOENT) {
		tuner_err("Error %d while loading init1 firmware\n",
			  rc);
		goto fail;
	}
794

795 796 797 798
skip_base:
	/*
	 * No need to reload standard specific firmware if base firmware
	 * was not reloaded and requested video standards have not changed.
799
	 */
800 801
	if (priv->cur_fw.type == (BASE | new_fw.type) &&
	    priv->cur_fw.std_req == std) {
802
		tuner_dbg("Std-specific firmware already loaded.\n");
803
		goto skip_std_specific;
804
	}
805

806 807 808 809
	/* Reloading std-specific firmware forces a SCODE update */
	priv->cur_fw.scode_table = 0;

	rc = load_firmware(fe, new_fw.type, &new_fw.id);
810 811 812
	if (rc == -ENOENT)
		rc = load_firmware(fe, new_fw.type & ~F8MHZ, &new_fw.id);

813
	if (rc < 0)
814 815 816 817 818 819 820 821
		goto fail;

skip_std_specific:
	if (priv->cur_fw.scode_table == new_fw.scode_table &&
	    priv->cur_fw.scode_nr == new_fw.scode_nr) {
		tuner_dbg("SCODE firmware already loaded.\n");
		goto check_device;
	}
822

823 824 825
	if (new_fw.type & FM)
		goto check_device;

826
	/* Load SCODE firmware, if exists */
827
	tuner_dbg("Trying to load scode %d\n", new_fw.scode_nr);
828

829 830
	rc = load_scode(fe, new_fw.type | new_fw.scode_table, &new_fw.id,
			new_fw.int_freq, new_fw.scode_nr);
831

832
check_device:
833 834 835 836 837
	if (xc2028_get_reg(priv, 0x0004, &version) < 0 ||
	    xc2028_get_reg(priv, 0x0008, &hwmodel) < 0) {
		tuner_err("Unable to read tuner registers.\n");
		goto fail;
	}
838

839 840 841 842
	tuner_dbg("Device is Xceive %d version %d.%d, "
		  "firmware version %d.%d\n",
		  hwmodel, (version & 0xf000) >> 12, (version & 0xf00) >> 8,
		  (version & 0xf0) >> 4, version & 0xf);
843

844 845 846 847

	if (priv->ctrl.read_not_reliable)
		goto read_not_reliable;

848 849
	/* Check firmware version against what we downloaded. */
	if (priv->firm_version != ((version & 0xf0) << 4 | (version & 0x0f))) {
850 851 852 853 854 855 856 857
		if (!priv->ctrl.read_not_reliable) {
			tuner_err("Incorrect readback of firmware version.\n");
			goto fail;
		} else {
			tuner_err("Returned an incorrect version. However, "
				  "read is not reliable enough. Ignoring it.\n");
			hwmodel = 3028;
		}
858 859 860 861 862 863 864 865 866 867 868 869 870
	}

	/* Check that the tuner hardware model remains consistent over time. */
	if (priv->hwmodel == 0 && (hwmodel == 2028 || hwmodel == 3028)) {
		priv->hwmodel = hwmodel;
		priv->hwvers  = version & 0xff00;
	} else if (priv->hwmodel == 0 || priv->hwmodel != hwmodel ||
		   priv->hwvers != (version & 0xff00)) {
		tuner_err("Read invalid device hardware information - tuner "
			  "hung?\n");
		goto fail;
	}

871
read_not_reliable:
872
	priv->cur_fw = new_fw;
873 874 875 876 877 878 879 880

	/*
	 * By setting BASE in cur_fw.type only after successfully loading all
	 * firmwares, we can:
	 * 1. Identify that BASE firmware with type=0 has been loaded;
	 * 2. Tell whether BASE firmware was just changed the next time through.
	 */
	priv->cur_fw.type |= BASE;
881
	priv->state = XC2028_ACTIVE;
882 883

	return 0;
884 885

fail:
886
	priv->state = XC2028_NO_FIRMWARE;
887

888
	memset(&priv->cur_fw, 0, sizeof(priv->cur_fw));
889
	if (retry_count < 8) {
890
		msleep(50);
891
		retry_count++;
892 893 894 895
		tuner_dbg("Retrying firmware load\n");
		goto retry;
	}

896 897 898
	/* Firmware didn't load. Put the device to sleep */
	xc2028_sleep(fe);

899 900 901
	if (rc == -ENOENT)
		rc = -EINVAL;
	return rc;
902 903
}

904
static int xc2028_signal(struct dvb_frontend *fe, u16 *strength)
905
{
906
	struct xc2028_data *priv = fe->tuner_priv;
907
	u16                 frq_lock, signal = 0;
908
	int                 rc, i;
909

910
	tuner_dbg("%s called\n", __func__);
911

912 913 914 915
	rc = check_device_status(priv);
	if (rc < 0)
		return rc;

916
	mutex_lock(&priv->lock);
917

918
	/* Sync Lock Indicator */
919 920 921 922 923 924 925 926 927
	for (i = 0; i < 3; i++) {
		rc = xc2028_get_reg(priv, XREG_LOCK, &frq_lock);
		if (rc < 0)
			goto ret;

		if (frq_lock)
			break;
		msleep(6);
	}
928

929
	/* Frequency didn't lock */
930 931
	if (frq_lock == 2)
		goto ret;
932

933
	/* Get SNR of the video signal */
934
	rc = xc2028_get_reg(priv, XREG_SNR, &signal);
935
	if (rc < 0)
936 937
		goto ret;

938 939 940
	/* Signal level is 3 bits only */

	signal = ((1 << 12) - 1) | ((signal & 0x07) << 12);
941 942

ret:
943 944 945
	mutex_unlock(&priv->lock);

	*strength = signal;
946

947 948
	tuner_dbg("signal strength is %d\n", signal);

949
	return rc;
950 951
}

952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982
static int xc2028_get_afc(struct dvb_frontend *fe, s32 *afc)
{
	struct xc2028_data *priv = fe->tuner_priv;
	int i, rc;
	u16 frq_lock = 0;
	s16 afc_reg = 0;

	rc = check_device_status(priv);
	if (rc < 0)
		return rc;

	mutex_lock(&priv->lock);

	/* Sync Lock Indicator */
	for (i = 0; i < 3; i++) {
		rc = xc2028_get_reg(priv, XREG_LOCK, &frq_lock);
		if (rc < 0)
			goto ret;

		if (frq_lock)
			break;
		msleep(6);
	}

	/* Frequency didn't lock */
	if (frq_lock == 2)
		goto ret;

	/* Get AFC */
	rc = xc2028_get_reg(priv, XREG_FREQ_ERROR, &afc_reg);
	if (rc < 0)
983
		goto ret;
984 985 986 987 988 989 990 991 992 993 994

	*afc = afc_reg * 15625; /* Hz */

	tuner_dbg("AFC is %d Hz\n", *afc);

ret:
	mutex_unlock(&priv->lock);

	return rc;
}

995 996
#define DIV 15625

997
static int generic_set_freq(struct dvb_frontend *fe, u32 freq /* in HZ */,
998
			    enum v4l2_tuner_type new_type,
999 1000 1001
			    unsigned int type,
			    v4l2_std_id std,
			    u16 int_freq)
1002
{
1003
	struct xc2028_data *priv = fe->tuner_priv;
1004
	int		   rc = -EINVAL;
1005
	unsigned char	   buf[4];
1006
	u32		   div, offset = 0;
1007

1008
	tuner_dbg("%s called\n", __func__);
1009

1010 1011
	mutex_lock(&priv->lock);

1012
	tuner_dbg("should set frequency %d kHz\n", freq / 1000);
1013

1014
	if (check_firmware(fe, type, std, int_freq) < 0)
1015
		goto ret;
1016

1017 1018 1019 1020 1021 1022 1023
	/* On some cases xc2028 can disable video output, if
	 * very weak signals are received. By sending a soft
	 * reset, this is re-enabled. So, it is better to always
	 * send a soft reset before changing channels, to be sure
	 * that xc2028 will be in a safe state.
	 * Maybe this might also be needed for DTV.
	 */
1024 1025
	switch (new_type) {
	case V4L2_TUNER_ANALOG_TV:
1026
		rc = send_seq(priv, {0x00, 0x00});
1027

1028 1029 1030 1031 1032 1033
		/* Analog mode requires offset = 0 */
		break;
	case V4L2_TUNER_RADIO:
		/* Radio mode requires offset = 0 */
		break;
	case V4L2_TUNER_DIGITAL_TV:
1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045
		/*
		 * Digital modes require an offset to adjust to the
		 * proper frequency. The offset depends on what
		 * firmware version is used.
		 */

		/*
		 * Adjust to the center frequency. This is calculated by the
		 * formula: offset = 1.25MHz - BW/2
		 * For DTV 7/8, the firmware uses BW = 8000, so it needs a
		 * further adjustment to get the frequency center on VHF
		 */
1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059

		/*
		 * The firmware DTV78 used to work fine in UHF band (8 MHz
		 * bandwidth) but not at all in VHF band (7 MHz bandwidth).
		 * The real problem was connected to the formula used to
		 * calculate the center frequency offset in VHF band.
		 * In fact, removing the 500KHz adjustment fixed the problem.
		 * This is coherent to what was implemented for the DTV7
		 * firmware.
		 * In the end, now the center frequency is the same for all 3
		 * firmwares (DTV7, DTV8, DTV78) and doesn't depend on channel
		 * bandwidth.
		 */

1060 1061
		if (priv->cur_fw.type & DTV6)
			offset = 1750000;
1062
		else	/* DTV7 or DTV8 or DTV78 */
1063 1064
			offset = 2750000;

1065
		/*
1066 1067 1068 1069 1070
		 * xc3028 additional "magic"
		 * Depending on the firmware version, it needs some adjustments
		 * to properly centralize the frequency. This seems to be
		 * needed to compensate the SCODE table adjustments made by
		 * newer firmwares
1071
		 */
1072 1073 1074 1075 1076 1077 1078

		/*
		 * The proper adjustment would be to do it at s-code table.
		 * However, this didn't work, as reported by
		 * Robert Lowery <rglowery@exemail.com.au>
		 */

1079
#if 0
1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096
		/*
		 * Still need tests for XC3028L (firmware 3.2 or upper)
		 * So, for now, let's just comment the per-firmware
		 * version of this change. Reports with xc3028l working
		 * with and without the lines bellow are welcome
		 */

		if (priv->firm_version < 0x0302) {
			if (priv->cur_fw.type & DTV7)
				offset += 500000;
		} else {
			if (priv->cur_fw.type & DTV7)
				offset -= 300000;
			else if (type != ATSC) /* DVB @6MHz, DTV 8 and DTV 7/8 */
				offset += 200000;
		}
#endif
1097
	}
1098

1099
	div = (freq - offset + DIV / 2) / DIV;
1100

1101
	/* CMD= Set frequency */
1102
	if (priv->firm_version < 0x0202)
1103
		rc = send_seq(priv, {0x00, XREG_RF_FREQ, 0x00, 0x00});
1104
	else
1105
		rc = send_seq(priv, {0x80, XREG_RF_FREQ, 0x00, 0x00});
1106 1107
	if (rc < 0)
		goto ret;
1108

1109 1110 1111 1112
	/* Return code shouldn't be checked.
	   The reset CLK is needed only with tm6000.
	   Driver should work fine even if this fails.
	 */
1113 1114
	if (priv->ctrl.msleep)
		msleep(priv->ctrl.msleep);
1115
	do_tuner_callback(fe, XC2028_RESET_CLK, 1);
1116 1117

	msleep(10);
1118

1119 1120 1121 1122
	buf[0] = 0xff & (div >> 24);
	buf[1] = 0xff & (div >> 16);
	buf[2] = 0xff & (div >> 8);
	buf[3] = 0xff & (div);
1123

1124
	rc = i2c_send(priv, buf, sizeof(buf));
1125
	if (rc < 0)
1126
		goto ret;
1127 1128
	msleep(100);

1129
	priv->frequency = freq;
1130

1131
	tuner_dbg("divisor= %*ph (freq=%d.%03d)\n", 4, buf,
1132
	       freq / 1000000, (freq % 1000000) / 1000);
1133

1134
	rc = 0;
1135

1136 1137
ret:
	mutex_unlock(&priv->lock);
1138

1139
	return rc;
1140 1141
}

1142
static int xc2028_set_analog_freq(struct dvb_frontend *fe,
1143
			      struct analog_parameters *p)
1144
{
1145
	struct xc2028_data *priv = fe->tuner_priv;
1146 1147
	unsigned int       type=0;

1148
	tuner_dbg("%s called\n", __func__);
1149

1150 1151 1152 1153 1154
	if (p->mode == V4L2_TUNER_RADIO) {
		type |= FM;
		if (priv->ctrl.input1)
			type |= INPUT1;
		return generic_set_freq(fe, (625l * p->frequency) / 10,
1155
				V4L2_TUNER_RADIO, type, 0, 0);
1156 1157
	}

1158 1159 1160 1161 1162
	/* if std is not defined, choose one */
	if (!p->std)
		p->std = V4L2_STD_MN;

	/* PAL/M, PAL/N, PAL/Nc and NTSC variants should use 6MHz firmware */
1163 1164
	if (!(p->std & V4L2_STD_MN))
		type |= F8MHZ;
1165

1166 1167
	/* Add audio hack to std mask */
	p->std |= parse_audio_std_option();
1168

1169
	return generic_set_freq(fe, 62500l * p->frequency,
1170
				V4L2_TUNER_ANALOG_TV, type, p->std, 0);
1171
}
1172

1173
static int xc2028_set_params(struct dvb_frontend *fe)
1174
{
1175 1176 1177
	struct dtv_frontend_properties *c = &fe->dtv_property_cache;
	u32 delsys = c->delivery_system;
	u32 bw = c->bandwidth_hz;
1178
	struct xc2028_data *priv = fe->tuner_priv;
1179 1180
	int rc;
	unsigned int       type = 0;
1181
	u16                demod = 0;
1182

1183
	tuner_dbg("%s called\n", __func__);
1184

1185 1186 1187 1188
	rc = check_device_status(priv);
	if (rc < 0)
		return rc;

1189 1190 1191
	switch (delsys) {
	case SYS_DVBT:
	case SYS_DVBT2:
1192 1193 1194 1195 1196
		/*
		 * The only countries with 6MHz seem to be Taiwan/Uruguay.
		 * Both seem to require QAM firmware for OFDM decoding
		 * Tested in Taiwan by Terry Wu <terrywu2009@gmail.com>
		 */
1197
		if (bw <= 6000000)
1198
			type |= QAM;
1199

1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214
		switch (priv->ctrl.type) {
		case XC2028_D2633:
			type |= D2633;
			break;
		case XC2028_D2620:
			type |= D2620;
			break;
		case XC2028_AUTO:
		default:
			/* Zarlink seems to need D2633 */
			if (priv->ctrl.demod == XC3028_FE_ZARLINK456)
				type |= D2633;
			else
				type |= D2620;
		}
1215 1216 1217 1218 1219 1220 1221 1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232 1233 1234 1235 1236 1237 1238 1239 1240 1241 1242
		break;
	case SYS_ATSC:
		/* The only ATSC firmware (at least on v2.7) is D2633 */
		type |= ATSC | D2633;
		break;
	/* DVB-S and pure QAM (FE_QAM) are not supported */
	default:
		return -EINVAL;
	}

	if (bw <= 6000000) {
		type |= DTV6;
		priv->ctrl.vhfbw7 = 0;
		priv->ctrl.uhfbw8 = 0;
	} else if (bw <= 7000000) {
		if (c->frequency < 470000000)
			priv->ctrl.vhfbw7 = 1;
		else
			priv->ctrl.uhfbw8 = 0;
		type |= (priv->ctrl.vhfbw7 && priv->ctrl.uhfbw8) ? DTV78 : DTV7;
		type |= F8MHZ;
	} else {
		if (c->frequency < 470000000)
			priv->ctrl.vhfbw7 = 0;
		else
			priv->ctrl.uhfbw8 = 1;
		type |= (priv->ctrl.vhfbw7 && priv->ctrl.uhfbw8) ? DTV78 : DTV8;
		type |= F8MHZ;
1243 1244
	}

1245
	/* All S-code tables need a 200kHz shift */
1246
	if (priv->ctrl.demod) {
1247 1248
		demod = priv->ctrl.demod;

1249 1250 1251 1252
		/*
		 * Newer firmwares require a 200 kHz offset only for ATSC
		 */
		if (type == ATSC || priv->firm_version < 0x0302)
1253
			demod += 200;
1254 1255 1256 1257 1258 1259
		/*
		 * The DTV7 S-code table needs a 700 kHz shift.
		 *
		 * DTV7 is only used in Australia.  Germany or Italy may also
		 * use this firmware after initialization, but a tune to a UHF
		 * channel should then cause DTV78 to be used.
1260 1261 1262 1263
		 *
		 * Unfortunately, on real-field tests, the s-code offset
		 * didn't work as expected, as reported by
		 * Robert Lowery <rglowery@exemail.com.au>
1264 1265
		 */
	}
1266

1267
	return generic_set_freq(fe, c->frequency,
1268
				V4L2_TUNER_DIGITAL_TV, type, 0, demod);
1269
}
1270

1271 1272 1273
static int xc2028_sleep(struct dvb_frontend *fe)
{
	struct xc2028_data *priv = fe->tuner_priv;
1274 1275 1276 1277 1278
	int rc;

	rc = check_device_status(priv);
	if (rc < 0)
		return rc;
1279

1280 1281
	/* Avoid firmware reload on slow devices or if PM disabled */
	if (no_poweroff || priv->ctrl.disable_power_mgmt)
1282
		return 0;
1283

1284 1285 1286 1287
	/* Device is already in sleep mode */
	if (priv->state == XC2028_SLEEP)
		return 0;

1288
	tuner_dbg("Putting xc2028/3028 into poweroff mode.\n");
1289 1290 1291 1292
	if (debug > 1) {
		tuner_dbg("Printing sleep stack trace:\n");
		dump_stack();
	}
1293 1294 1295 1296

	mutex_lock(&priv->lock);

	if (priv->firm_version < 0x0202)
1297
		rc = send_seq(priv, {0x00, XREG_POWER_DOWN, 0x00, 0x00});
1298
	else
1299
		rc = send_seq(priv, {0x80, XREG_POWER_DOWN, 0x00, 0x00});
1300

1301 1302
	if (rc >= 0)
		priv->state = XC2028_SLEEP;
1303 1304 1305 1306 1307

	mutex_unlock(&priv->lock);

	return rc;
}
1308

1309
static int xc2028_dvb_release(struct dvb_frontend *fe)
1310
{
1311 1312
	struct xc2028_data *priv = fe->tuner_priv;

1313
	tuner_dbg("%s called\n", __func__);
1314

1315 1316
	mutex_lock(&xc2028_list_mutex);

1317 1318
	/* only perform final cleanup if this is the last instance */
	if (hybrid_tuner_report_instance_count(priv) == 1) {
1319
		free_firmware(priv);
1320 1321
		kfree(priv->ctrl.fname);
		priv->ctrl.fname = NULL;
1322
	}
1323

1324 1325 1326
	if (priv)
		hybrid_tuner_release_state(priv);

1327 1328
	mutex_unlock(&xc2028_list_mutex);

1329 1330
	fe->tuner_priv = NULL;

1331 1332 1333
	return 0;
}

1334
static int xc2028_get_frequency(struct dvb_frontend *fe, u32 *frequency)
1335
{
1336
	struct xc2028_data *priv = fe->tuner_priv;
1337
	int rc;
1338

1339
	tuner_dbg("%s called\n", __func__);
1340

1341 1342 1343 1344
	rc = check_device_status(priv);
	if (rc < 0)
		return rc;

1345
	*frequency = priv->frequency;
1346 1347 1348 1349

	return 0;
}

1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369
static void load_firmware_cb(const struct firmware *fw,
			     void *context)
{
	struct dvb_frontend *fe = context;
	struct xc2028_data *priv = fe->tuner_priv;
	int rc;

	tuner_dbg("request_firmware_nowait(): %s\n", fw ? "OK" : "error");
	if (!fw) {
		tuner_err("Could not load firmware %s.\n", priv->fname);
		priv->state = XC2028_NODEV;
		return;
	}

	rc = load_all_firmwares(fe, fw);

	release_firmware(fw);

	if (rc < 0)
		return;
1370
	priv->state = XC2028_ACTIVE;
1371 1372
}

1373
static int xc2028_set_config(struct dvb_frontend *fe, void *priv_cfg)
1374 1375 1376
{
	struct xc2028_data *priv = fe->tuner_priv;
	struct xc2028_ctrl *p    = priv_cfg;
1377
	int                 rc   = 0;
1378

1379
	tuner_dbg("%s called\n", __func__);
1380

1381 1382
	mutex_lock(&priv->lock);

1383 1384 1385 1386 1387
	/*
	 * Copy the config data.
	 * For the firmware name, keep a local copy of the string,
	 * in order to avoid troubles during device release.
	 */
1388
	kfree(priv->ctrl.fname);
1389 1390 1391 1392 1393
	memcpy(&priv->ctrl, p, sizeof(priv->ctrl));
	if (p->fname) {
		priv->ctrl.fname = kstrdup(p->fname, GFP_KERNEL);
		if (priv->ctrl.fname == NULL)
			rc = -ENOMEM;
1394 1395
	}

1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421
	/*
	 * If firmware name changed, frees firmware. As free_firmware will
	 * reset the status to NO_FIRMWARE, this forces a new request_firmware
	 */
	if (!firmware_name[0] && p->fname &&
	    priv->fname && strcmp(p->fname, priv->fname))
		free_firmware(priv);

	if (priv->ctrl.max_len < 9)
		priv->ctrl.max_len = 13;

	if (priv->state == XC2028_NO_FIRMWARE) {
		if (!firmware_name[0])
			priv->fname = priv->ctrl.fname;
		else
			priv->fname = firmware_name;

		rc = request_firmware_nowait(THIS_MODULE, 1,
					     priv->fname,
					     priv->i2c_props.adap->dev.parent,
					     GFP_KERNEL,
					     fe, load_firmware_cb);
		if (rc < 0) {
			tuner_err("Failed to request firmware %s\n",
				  priv->fname);
			priv->state = XC2028_NODEV;
1422 1423
		} else
			priv->state = XC2028_WAITING_FIRMWARE;
1424
	}
1425 1426
	mutex_unlock(&priv->lock);

1427
	return rc;
1428 1429
}

1430
static const struct dvb_tuner_ops xc2028_dvb_tuner_ops = {
1431
	.info = {
1432 1433 1434 1435 1436
		 .name = "Xceive XC3028",
		 .frequency_min = 42000000,
		 .frequency_max = 864000000,
		 .frequency_step = 50000,
		 },
1437

1438
	.set_config	   = xc2028_set_config,
1439
	.set_analog_params = xc2028_set_analog_freq,
1440 1441 1442
	.release           = xc2028_dvb_release,
	.get_frequency     = xc2028_get_frequency,
	.get_rf_strength   = xc2028_signal,
1443
	.get_afc           = xc2028_get_afc,
1444
	.set_params        = xc2028_set_params,
1445
	.sleep             = xc2028_sleep,
1446 1447
};

1448 1449
struct dvb_frontend *xc2028_attach(struct dvb_frontend *fe,
				   struct xc2028_config *cfg)
1450
{
1451
	struct xc2028_data *priv;
1452
	int instance;
1453

1454
	if (debug)
1455
		printk(KERN_DEBUG "xc2028: Xcv2028/3028 init called!\n");
1456

1457
	if (NULL == cfg)
1458
		return NULL;
1459

1460
	if (!fe) {
1461
		printk(KERN_ERR "xc2028: No frontend!\n");
1462
		return NULL;
1463 1464
	}

1465 1466
	mutex_lock(&xc2028_list_mutex);

1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477
	instance = hybrid_tuner_request_state(struct xc2028_data, priv,
					      hybrid_tuner_instance_list,
					      cfg->i2c_adap, cfg->i2c_addr,
					      "xc2028");
	switch (instance) {
	case 0:
		/* memory allocation failure */
		goto fail;
		break;
	case 1:
		/* new tuner instance */
1478
		priv->ctrl.max_len = 13;
1479

1480 1481
		mutex_init(&priv->lock);

1482 1483 1484 1485 1486 1487 1488
		fe->tuner_priv = priv;
		break;
	case 2:
		/* existing tuner instance */
		fe->tuner_priv = priv;
		break;
	}
1489

1490
	memcpy(&fe->ops.tuner_ops, &xc2028_dvb_tuner_ops,
1491
	       sizeof(xc2028_dvb_tuner_ops));
1492 1493 1494

	tuner_info("type set to %s\n", "XCeive xc2028/xc3028 tuner");

1495 1496 1497
	if (cfg->ctrl)
		xc2028_set_config(fe, cfg->ctrl);

1498 1499
	mutex_unlock(&xc2028_list_mutex);

1500
	return fe;
1501 1502 1503 1504 1505
fail:
	mutex_unlock(&xc2028_list_mutex);

	xc2028_dvb_release(fe);
	return NULL;
1506
}
1507

1508 1509
EXPORT_SYMBOL(xc2028_attach);

1510
MODULE_DESCRIPTION("Xceive xc2028/xc3028 tuner driver");
1511
MODULE_AUTHOR("Michel Ludwig <michel.ludwig@gmail.com>");
1512 1513
MODULE_AUTHOR("Mauro Carvalho Chehab <mchehab@infradead.org>");
MODULE_LICENSE("GPL");
1514 1515
MODULE_FIRMWARE(XC2028_DEFAULT_FIRMWARE);
MODULE_FIRMWARE(XC3028L_DEFAULT_FIRMWARE);