xc5000.c 35.3 KB
Newer Older
1 2 3 4
/*
 *  Driver for Xceive XC5000 "QAM/8VSB single chip tuner"
 *
 *  Copyright (c) 2007 Xceive Corporation
5
 *  Copyright (c) 2007 Steven Toth <stoth@linuxtv.org>
6
 *  Copyright (c) 2009 Devin Heitmueller <dheitmueller@kernellabs.com>
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
 *
 *  This program is free software; you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation; either version 2 of the License, or
 *  (at your option) any later version.
 *
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with this program; if not, write to the Free Software
 *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 */

#include <linux/module.h>
#include <linux/moduleparam.h>
26
#include <linux/videodev2.h>
27
#include <linux/delay.h>
28
#include <linux/workqueue.h>
29 30 31 32 33 34
#include <linux/dvb/frontend.h>
#include <linux/i2c.h>

#include "dvb_frontend.h"

#include "xc5000.h"
35
#include "tuner-i2c.h"
36 37 38 39 40

static int debug;
module_param(debug, int, 0644);
MODULE_PARM_DESC(debug, "Turn on/off debugging (default:off).");

41 42 43 44 45 46
static int no_poweroff;
module_param(no_poweroff, int, 0644);
MODULE_PARM_DESC(no_poweroff, "0 (default) powers device off when not used.\n"
	"\t\t1 keep device energized and with tuner ready all the times.\n"
	"\t\tFaster, but consumes more power and keeps the device hotter");

47 48 49
static DEFINE_MUTEX(xc5000_list_mutex);
static LIST_HEAD(hybrid_tuner_instance_list);

50
#define dprintk(level, fmt, arg...) if (debug >= level) \
51 52
	printk(KERN_INFO "%s: " fmt, "xc5000", ## arg)

53
struct xc5000_priv {
54 55
	struct tuner_i2c_props i2c_props;
	struct list_head hybrid_tuner_instance_list;
56

57
	u32 if_khz;
58
	u16 xtal_khz;
59
	u32 freq_hz, freq_offset;
60 61
	u32 bandwidth;
	u8  video_standard;
62
	unsigned int mode;
63
	u8  rf_mode;
64
	u8  radio_input;
65

66
	int chip_id;
67
	u16 pll_register_no;
68 69
	u8 init_status_supported;
	u8 fw_checksum_supported;
70 71 72

	struct dvb_frontend *fe;
	struct delayed_work timer_sleep;
73 74
};

75
/* Misc Defines */
76
#define MAX_TV_STANDARD			24
77 78
#define XC_MAX_I2C_WRITE_LENGTH		64

79 80 81
/* Time to suspend after the .sleep callback is called */
#define XC5000_SLEEP_TIME		5000 /* ms */

82 83 84 85
/* Signal Types */
#define XC_RF_MODE_AIR			0
#define XC_RF_MODE_CABLE		1

86 87
/* Product id */
#define XC_PRODUCT_ID_FW_NOT_LOADED	0x2000
88
#define XC_PRODUCT_ID_FW_LOADED	0x1388
89

90 91 92 93 94 95 96 97
/* Registers */
#define XREG_INIT         0x00
#define XREG_VIDEO_MODE   0x01
#define XREG_AUDIO_MODE   0x02
#define XREG_RF_FREQ      0x03
#define XREG_D_CODE       0x04
#define XREG_IF_OUT       0x05
#define XREG_SEEK_MODE    0x07
98
#define XREG_POWER_DOWN   0x0A /* Obsolete */
99 100
/* Set the output amplitude - SIF for analog, DTVP/DTVN for digital */
#define XREG_OUTPUT_AMP   0x0B
101 102 103
#define XREG_SIGNALSOURCE 0x0D /* 0=Air, 1=Cable */
#define XREG_SMOOTHEDCVBS 0x0E
#define XREG_XTALFREQ     0x0F
104
#define XREG_FINERFREQ    0x10
105 106 107 108 109 110 111 112 113 114 115 116
#define XREG_DDIMODE      0x11

#define XREG_ADC_ENV      0x00
#define XREG_QUALITY      0x01
#define XREG_FRAME_LINES  0x02
#define XREG_HSYNC_FREQ   0x03
#define XREG_LOCK         0x04
#define XREG_FREQ_ERROR   0x05
#define XREG_SNR          0x06
#define XREG_VERSION      0x07
#define XREG_PRODUCT_ID   0x08
#define XREG_BUSY         0x09
117
#define XREG_BUILD        0x0D
118
#define XREG_TOTALGAIN    0x0F
119 120
#define XREG_FW_CHECKSUM  0x12
#define XREG_INIT_STATUS  0x13
121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154

/*
   Basic firmware description. This will remain with
   the driver for documentation purposes.

   This represents an I2C firmware file encoded as a
   string of unsigned char. Format is as follows:

   char[0  ]=len0_MSB  -> len = len_MSB * 256 + len_LSB
   char[1  ]=len0_LSB  -> length of first write transaction
   char[2  ]=data0 -> first byte to be sent
   char[3  ]=data1
   char[4  ]=data2
   char[   ]=...
   char[M  ]=dataN  -> last byte to be sent
   char[M+1]=len1_MSB  -> len = len_MSB * 256 + len_LSB
   char[M+2]=len1_LSB  -> length of second write transaction
   char[M+3]=data0
   char[M+4]=data1
   ...
   etc.

   The [len] value should be interpreted as follows:

   len= len_MSB _ len_LSB
   len=1111_1111_1111_1111   : End of I2C_SEQUENCE
   len=0000_0000_0000_0000   : Reset command: Do hardware reset
   len=0NNN_NNNN_NNNN_NNNN   : Normal transaction: number of bytes = {1:32767)
   len=1WWW_WWWW_WWWW_WWWW   : Wait command: wait for {1:32767} ms

   For the RESET and WAIT commands, the two following bytes will contain
   immediately the length of the following transaction.

*/
155
struct XC_TV_STANDARD {
156 157 158
	char *name;
	u16 audio_mode;
	u16 video_mode;
159
};
160 161

/* Tuner standards */
162 163 164
#define MN_NTSC_PAL_BTSC	0
#define MN_NTSC_PAL_A2		1
#define MN_NTSC_PAL_EIAJ	2
165
#define MN_NTSC_PAL_MONO	3
166 167 168 169 170 171 172 173 174
#define BG_PAL_A2		4
#define BG_PAL_NICAM		5
#define BG_PAL_MONO		6
#define I_PAL_NICAM		7
#define I_PAL_NICAM_MONO	8
#define DK_PAL_A2		9
#define DK_PAL_NICAM		10
#define DK_PAL_MONO		11
#define DK_SECAM_A2DK1		12
175 176
#define DK_SECAM_A2LDK3		13
#define DK_SECAM_A2MONO		14
177 178 179 180 181 182
#define L_SECAM_NICAM		15
#define LC_SECAM_NICAM		16
#define DTV6			17
#define DTV8			18
#define DTV7_8			19
#define DTV7			20
183 184
#define FM_RADIO_INPUT2		21
#define FM_RADIO_INPUT1		22
185
#define FM_RADIO_INPUT1_MONO	23
186

187
static struct XC_TV_STANDARD xc5000_standard[MAX_TV_STANDARD] = {
188 189 190 191 192 193 194 195 196 197 198 199 200
	{"M/N-NTSC/PAL-BTSC", 0x0400, 0x8020},
	{"M/N-NTSC/PAL-A2",   0x0600, 0x8020},
	{"M/N-NTSC/PAL-EIAJ", 0x0440, 0x8020},
	{"M/N-NTSC/PAL-Mono", 0x0478, 0x8020},
	{"B/G-PAL-A2",        0x0A00, 0x8049},
	{"B/G-PAL-NICAM",     0x0C04, 0x8049},
	{"B/G-PAL-MONO",      0x0878, 0x8059},
	{"I-PAL-NICAM",       0x1080, 0x8009},
	{"I-PAL-NICAM-MONO",  0x0E78, 0x8009},
	{"D/K-PAL-A2",        0x1600, 0x8009},
	{"D/K-PAL-NICAM",     0x0E80, 0x8009},
	{"D/K-PAL-MONO",      0x1478, 0x8009},
	{"D/K-SECAM-A2 DK1",  0x1200, 0x8009},
201
	{"D/K-SECAM-A2 L/DK3", 0x0E00, 0x8009},
202 203 204 205 206 207 208 209
	{"D/K-SECAM-A2 MONO", 0x1478, 0x8009},
	{"L-SECAM-NICAM",     0x8E82, 0x0009},
	{"L'-SECAM-NICAM",    0x8E82, 0x4009},
	{"DTV6",              0x00C0, 0x8002},
	{"DTV8",              0x00C0, 0x800B},
	{"DTV7/8",            0x00C0, 0x801B},
	{"DTV7",              0x00C0, 0x8007},
	{"FM Radio-INPUT2",   0x9802, 0x9002},
210 211
	{"FM Radio-INPUT1",   0x0208, 0x9002},
	{"FM Radio-INPUT1_MONO", 0x0278, 0x9002}
212 213
};

214 215 216 217

struct xc5000_fw_cfg {
	char *name;
	u16 size;
218
	u16 pll_reg;
219 220
	u8 init_status_supported;
	u8 fw_checksum_supported;
221 222
};

223
#define XC5000A_FIRMWARE "dvb-fe-xc5000-1.6.114.fw"
224
static const struct xc5000_fw_cfg xc5000a_1_6_114 = {
225
	.name = XC5000A_FIRMWARE,
226
	.size = 12401,
227
	.pll_reg = 0x806c,
228 229
};

230
#define XC5000C_FIRMWARE "dvb-fe-xc5000c-4.1.30.7.fw"
231
static const struct xc5000_fw_cfg xc5000c_41_024_5 = {
232
	.name = XC5000C_FIRMWARE,
233
	.size = 16497,
234
	.pll_reg = 0x13,
235 236
	.init_status_supported = 1,
	.fw_checksum_supported = 1,
237 238
};

239
static inline const struct xc5000_fw_cfg *xc5000_assign_firmware(int chip_id)
240
{
241
	switch (chip_id) {
242
	default:
243
	case XC5000A:
244
		return &xc5000a_1_6_114;
245
	case XC5000C:
246
		return &xc5000c_41_024_5;
247 248 249
	}
}

250
static int xc_load_fw_and_init_tuner(struct dvb_frontend *fe, int force);
251
static int xc5000_is_firmware_loaded(struct dvb_frontend *fe);
252
static int xc5000_readreg(struct xc5000_priv *priv, u16 reg, u16 *val);
253
static int xc5000_tuner_reset(struct dvb_frontend *fe);
254

255
static int xc_send_i2c_data(struct xc5000_priv *priv, u8 *buf, int len)
256
{
257 258 259 260 261
	struct i2c_msg msg = { .addr = priv->i2c_props.addr,
			       .flags = 0, .buf = buf, .len = len };

	if (i2c_transfer(priv->i2c_props.adap, &msg, 1) != 1) {
		printk(KERN_ERR "xc5000: I2C write failed (len=%i)\n", len);
262
		return -EREMOTEIO;
263
	}
264
	return 0;
265 266
}

267
#if 0
268 269 270
/* This routine is never used because the only time we read data from the
   i2c bus is when we read registers, and we want that to be an atomic i2c
   transaction in case we are on a multi-master bus */
271
static int xc_read_i2c_data(struct xc5000_priv *priv, u8 *buf, int len)
272
{
273 274 275 276 277 278 279 280
	struct i2c_msg msg = { .addr = priv->i2c_props.addr,
		.flags = I2C_M_RD, .buf = buf, .len = len };

	if (i2c_transfer(priv->i2c_props.adap, &msg, 1) != 1) {
		printk(KERN_ERR "xc5000 I2C read failed (len=%i)\n", len);
		return -EREMOTEIO;
	}
	return 0;
281
}
282
#endif
283

284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300
static int xc5000_readreg(struct xc5000_priv *priv, u16 reg, u16 *val)
{
	u8 buf[2] = { reg >> 8, reg & 0xff };
	u8 bval[2] = { 0, 0 };
	struct i2c_msg msg[2] = {
		{ .addr = priv->i2c_props.addr,
			.flags = 0, .buf = &buf[0], .len = 2 },
		{ .addr = priv->i2c_props.addr,
			.flags = I2C_M_RD, .buf = &bval[0], .len = 2 },
	};

	if (i2c_transfer(priv->i2c_props.adap, msg, 2) != 2) {
		printk(KERN_WARNING "xc5000: I2C read failed\n");
		return -EREMOTEIO;
	}

	*val = (bval[0] << 8) | bval[1];
301
	return 0;
302 303
}

304
static int xc5000_tuner_reset(struct dvb_frontend *fe)
305 306 307 308
{
	struct xc5000_priv *priv = fe->tuner_priv;
	int ret;

309
	dprintk(1, "%s()\n", __func__);
310

311 312
	if (fe->callback) {
		ret = fe->callback(((fe->dvb) && (fe->dvb->priv)) ?
313 314
					   fe->dvb->priv :
					   priv->i2c_props.adap->algo_data,
315
					   DVB_FRONTEND_COMPONENT_TUNER,
316
					   XC5000_TUNER_RESET, 0);
317
		if (ret) {
318
			printk(KERN_ERR "xc5000: reset failed\n");
319
			return ret;
320 321
		}
	} else {
322
		printk(KERN_ERR "xc5000: no tuner reset callback function, fatal\n");
323
		return -EINVAL;
324
	}
325
	return 0;
326 327
}

328
static int xc_write_reg(struct xc5000_priv *priv, u16 reg_addr, u16 i2c_data)
329
{
330
	u8 buf[4];
331
	int watch_dog_timer = 100;
332 333
	int result;

334 335 336 337
	buf[0] = (reg_addr >> 8) & 0xFF;
	buf[1] = reg_addr & 0xFF;
	buf[2] = (i2c_data >> 8) & 0xFF;
	buf[3] = i2c_data & 0xFF;
338
	result = xc_send_i2c_data(priv, buf, 4);
339
	if (result == 0) {
340
		/* wait for busy flag to clear */
341
		while ((watch_dog_timer > 0) && (result == 0)) {
342
			result = xc5000_readreg(priv, XREG_BUSY, (u16 *)buf);
343
			if (result == 0) {
344 345
				if ((buf[0] == 0) && (buf[1] == 0)) {
					/* busy flag cleared */
346
					break;
347
				} else {
348
					msleep(5); /* wait 5 ms */
349
					watch_dog_timer--;
350 351 352 353
				}
			}
		}
	}
354
	if (watch_dog_timer <= 0)
355
		result = -EREMOTEIO;
356 357 358 359

	return result;
}

360
static int xc_load_i2c_sequence(struct dvb_frontend *fe, const u8 *i2c_sequence)
361 362 363 364 365
{
	struct xc5000_priv *priv = fe->tuner_priv;

	int i, nbytes_to_send, result;
	unsigned int len, pos, index;
366
	u8 buf[XC_MAX_I2C_WRITE_LENGTH];
367

368 369 370 371
	index = 0;
	while ((i2c_sequence[index] != 0xFF) ||
		(i2c_sequence[index + 1] != 0xFF)) {
		len = i2c_sequence[index] * 256 + i2c_sequence[index+1];
372
		if (len == 0x0000) {
373
			/* RESET command */
374
			result = xc5000_tuner_reset(fe);
375
			index += 2;
376
			if (result != 0)
377 378 379
				return result;
		} else if (len & 0x8000) {
			/* WAIT command */
380
			msleep(len & 0x7FFF);
381 382 383 384 385 386 387 388 389 390
			index += 2;
		} else {
			/* Send i2c data whilst ensuring individual transactions
			 * do not exceed XC_MAX_I2C_WRITE_LENGTH bytes.
			 */
			index += 2;
			buf[0] = i2c_sequence[index];
			buf[1] = i2c_sequence[index + 1];
			pos = 2;
			while (pos < len) {
391 392 393 394
				if ((len - pos) > XC_MAX_I2C_WRITE_LENGTH - 2)
					nbytes_to_send =
						XC_MAX_I2C_WRITE_LENGTH;
				else
395
					nbytes_to_send = (len - pos + 2);
396 397 398
				for (i = 2; i < nbytes_to_send; i++) {
					buf[i] = i2c_sequence[index + pos +
						i - 2];
399
				}
400 401
				result = xc_send_i2c_data(priv, buf,
					nbytes_to_send);
402

403
				if (result != 0)
404 405 406 407 408 409 410
					return result;

				pos += nbytes_to_send - 2;
			}
			index += len;
		}
	}
411
	return 0;
412 413
}

414
static int xc_initialize(struct xc5000_priv *priv)
415
{
416
	dprintk(1, "%s()\n", __func__);
417 418 419
	return xc_write_reg(priv, XREG_INIT, 0);
}

420 421
static int xc_set_tv_standard(struct xc5000_priv *priv,
	u16 video_mode, u16 audio_mode, u8 radio_mode)
422 423
{
	int ret;
424 425
	dprintk(1, "%s(0x%04x,0x%04x)\n", __func__, video_mode, audio_mode);
	if (radio_mode) {
426 427
		dprintk(1, "%s() Standard = %s\n",
			__func__,
428
			xc5000_standard[radio_mode].name);
429 430 431
	} else {
		dprintk(1, "%s() Standard = %s\n",
			__func__,
432
			xc5000_standard[priv->video_standard].name);
433
	}
434

435
	ret = xc_write_reg(priv, XREG_VIDEO_MODE, video_mode);
436
	if (ret == 0)
437
		ret = xc_write_reg(priv, XREG_AUDIO_MODE, audio_mode);
438 439 440 441

	return ret;
}

442
static int xc_set_signal_source(struct xc5000_priv *priv, u16 rf_mode)
443
{
444
	dprintk(1, "%s(%d) Source = %s\n", __func__, rf_mode,
445 446
		rf_mode == XC_RF_MODE_AIR ? "ANTENNA" : "CABLE");

447
	if ((rf_mode != XC_RF_MODE_AIR) && (rf_mode != XC_RF_MODE_CABLE)) {
448 449 450
		rf_mode = XC_RF_MODE_CABLE;
		printk(KERN_ERR
			"%s(), Invalid mode, defaulting to CABLE",
451
			__func__);
452 453 454 455
	}
	return xc_write_reg(priv, XREG_SIGNALSOURCE, rf_mode);
}

456
static const struct dvb_tuner_ops xc5000_tuner_ops;
457

458
static int xc_set_rf_frequency(struct xc5000_priv *priv, u32 freq_hz)
459 460
{
	u16 freq_code;
461

462
	dprintk(1, "%s(%u)\n", __func__, freq_hz);
463

464 465
	if ((freq_hz > xc5000_tuner_ops.info.frequency_max) ||
		(freq_hz < xc5000_tuner_ops.info.frequency_min))
466
		return -EINVAL;
467

468 469
	freq_code = (u16)(freq_hz / 15625);

470 471 472 473
	/* Starting in firmware version 1.1.44, Xceive recommends using the
	   FINERFREQ for all normal tuning (the doc indicates reg 0x03 should
	   only be used for fast scanning for channel lock) */
	return xc_write_reg(priv, XREG_FINERFREQ, freq_code);
474 475 476
}


477 478 479 480
static int xc_set_IF_frequency(struct xc5000_priv *priv, u32 freq_khz)
{
	u32 freq_code = (freq_khz * 1024)/1000;
	dprintk(1, "%s(freq_khz = %d) freq_code = 0x%x\n",
481
		__func__, freq_khz, freq_code);
482

483
	return xc_write_reg(priv, XREG_IF_OUT, freq_code);
484 485 486
}


487
static int xc_get_adc_envelope(struct xc5000_priv *priv, u16 *adc_envelope)
488
{
489
	return xc5000_readreg(priv, XREG_ADC_ENV, adc_envelope);
490 491
}

492
static int xc_get_frequency_error(struct xc5000_priv *priv, u32 *freq_error_hz)
493 494
{
	int result;
495
	u16 reg_data;
496 497
	u32 tmp;

498
	result = xc5000_readreg(priv, XREG_FREQ_ERROR, &reg_data);
499
	if (result != 0)
500 501
		return result;

502
	tmp = (u32)reg_data;
503
	(*freq_error_hz) = (tmp * 15625) / 1000;
504 505 506
	return result;
}

507
static int xc_get_lock_status(struct xc5000_priv *priv, u16 *lock_status)
508
{
509
	return xc5000_readreg(priv, XREG_LOCK, lock_status);
510 511
}

512 513 514
static int xc_get_version(struct xc5000_priv *priv,
	u8 *hw_majorversion, u8 *hw_minorversion,
	u8 *fw_majorversion, u8 *fw_minorversion)
515
{
516
	u16 data;
517 518
	int result;

519
	result = xc5000_readreg(priv, XREG_VERSION, &data);
520
	if (result != 0)
521 522
		return result;

523 524 525 526
	(*hw_majorversion) = (data >> 12) & 0x0F;
	(*hw_minorversion) = (data >>  8) & 0x0F;
	(*fw_majorversion) = (data >>  4) & 0x0F;
	(*fw_minorversion) = data & 0x0F;
527 528 529 530

	return 0;
}

531 532 533 534 535
static int xc_get_buildversion(struct xc5000_priv *priv, u16 *buildrev)
{
	return xc5000_readreg(priv, XREG_BUILD, buildrev);
}

536
static int xc_get_hsync_freq(struct xc5000_priv *priv, u32 *hsync_freq_hz)
537
{
538
	u16 reg_data;
539 540
	int result;

541
	result = xc5000_readreg(priv, XREG_HSYNC_FREQ, &reg_data);
542
	if (result != 0)
543 544
		return result;

545
	(*hsync_freq_hz) = ((reg_data & 0x0fff) * 763)/100;
546 547 548
	return result;
}

549
static int xc_get_frame_lines(struct xc5000_priv *priv, u16 *frame_lines)
550
{
551
	return xc5000_readreg(priv, XREG_FRAME_LINES, frame_lines);
552 553
}

554
static int xc_get_quality(struct xc5000_priv *priv, u16 *quality)
555
{
556
	return xc5000_readreg(priv, XREG_QUALITY, quality);
557 558
}

559 560 561 562 563 564 565 566 567 568
static int xc_get_analogsnr(struct xc5000_priv *priv, u16 *snr)
{
	return xc5000_readreg(priv, XREG_SNR, snr);
}

static int xc_get_totalgain(struct xc5000_priv *priv, u16 *totalgain)
{
	return xc5000_readreg(priv, XREG_TOTALGAIN, totalgain);
}

569
static u16 wait_for_lock(struct xc5000_priv *priv)
570
{
571 572
	u16 lock_state = 0;
	int watch_dog_count = 40;
573

574 575 576
	while ((lock_state == 0) && (watch_dog_count > 0)) {
		xc_get_lock_status(priv, &lock_state);
		if (lock_state != 1) {
577
			msleep(5);
578
			watch_dog_count--;
579 580
		}
	}
581
	return lock_state;
582 583
}

584 585 586
#define XC_TUNE_ANALOG  0
#define XC_TUNE_DIGITAL 1
static int xc_tune_channel(struct xc5000_priv *priv, u32 freq_hz, int mode)
587 588 589
{
	int found = 0;

590
	dprintk(1, "%s(%u)\n", __func__, freq_hz);
591

592
	if (xc_set_rf_frequency(priv, freq_hz) != 0)
593 594
		return 0;

595
	if (mode == XC_TUNE_ANALOG) {
596
		if (wait_for_lock(priv) == 1)
597 598
			found = 1;
	}
599 600 601 602

	return found;
}

603 604 605
static int xc_set_xtal(struct dvb_frontend *fe)
{
	struct xc5000_priv *priv = fe->tuner_priv;
606
	int ret = 0;
607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627

	switch (priv->chip_id) {
	default:
	case XC5000A:
		/* 32.000 MHz xtal is default */
		break;
	case XC5000C:
		switch (priv->xtal_khz) {
		default:
		case 32000:
			/* 32.000 MHz xtal is default */
			break;
		case 31875:
			/* 31.875 MHz xtal configuration */
			ret = xc_write_reg(priv, 0x000f, 0x8081);
			break;
		}
		break;
	}
	return ret;
}
628

629 630 631
static int xc5000_fwupload(struct dvb_frontend *fe,
			   const struct xc5000_fw_cfg *desired_fw,
			   const struct firmware *fw)
632 633 634 635
{
	struct xc5000_priv *priv = fe->tuner_priv;
	int ret;

636
	/* request the firmware, this will block and timeout */
637
	dprintk(1, "waiting for firmware upload (%s)...\n",
638
		desired_fw->name);
639

640 641 642
	priv->pll_register_no = desired_fw->pll_reg;
	priv->init_status_supported = desired_fw->init_status_supported;
	priv->fw_checksum_supported = desired_fw->fw_checksum_supported;
643 644


645 646 647 648 649 650 651 652
	dprintk(1, "firmware uploading...\n");
	ret = xc_load_i2c_sequence(fe,  fw->data);
	if (!ret) {
		ret = xc_set_xtal(fe);
		dprintk(1, "Firmware upload complete...\n");
	} else
		printk(KERN_ERR "xc5000: firmware upload failed...\n");

653 654 655
	return ret;
}

656
static void xc_debug_dump(struct xc5000_priv *priv)
657
{
658 659 660 661 662 663
	u16 adc_envelope;
	u32 freq_error_hz = 0;
	u16 lock_status;
	u32 hsync_freq_hz = 0;
	u16 frame_lines;
	u16 quality;
664 665
	u16 snr;
	u16 totalgain;
666 667
	u8 hw_majorversion = 0, hw_minorversion = 0;
	u8 fw_majorversion = 0, fw_minorversion = 0;
668
	u16 fw_buildversion = 0;
669
	u16 regval;
670 671 672 673 674

	/* Wait for stats to stabilize.
	 * Frame Lines needs two frame times after initial lock
	 * before it is valid.
	 */
675
	msleep(100);
676

677
	xc_get_adc_envelope(priv,  &adc_envelope);
678
	dprintk(1, "*** ADC envelope (0-1023) = %d\n", adc_envelope);
679

680 681
	xc_get_frequency_error(priv, &freq_error_hz);
	dprintk(1, "*** Frequency error = %d Hz\n", freq_error_hz);
682

683 684
	xc_get_lock_status(priv,  &lock_status);
	dprintk(1, "*** Lock status (0-Wait, 1-Locked, 2-No-signal) = %d\n",
685 686 687
		lock_status);

	xc_get_version(priv,  &hw_majorversion, &hw_minorversion,
688
		&fw_majorversion, &fw_minorversion);
689
	xc_get_buildversion(priv,  &fw_buildversion);
690
	dprintk(1, "*** HW: V%d.%d, FW: V %d.%d.%d\n",
691
		hw_majorversion, hw_minorversion,
692
		fw_majorversion, fw_minorversion, fw_buildversion);
693

694 695
	xc_get_hsync_freq(priv,  &hsync_freq_hz);
	dprintk(1, "*** Horizontal sync frequency = %d Hz\n", hsync_freq_hz);
696

697 698
	xc_get_frame_lines(priv,  &frame_lines);
	dprintk(1, "*** Frame lines = %d\n", frame_lines);
699

700
	xc_get_quality(priv,  &quality);
701
	dprintk(1, "*** Quality (0:<8dB, 7:>56dB) = %d\n", quality & 0x07);
702 703 704 705 706 707 708

	xc_get_analogsnr(priv,  &snr);
	dprintk(1, "*** Unweighted analog SNR = %d dB\n", snr & 0x3f);

	xc_get_totalgain(priv,  &totalgain);
	dprintk(1, "*** Total gain = %d.%d dB\n", totalgain / 256,
		(totalgain % 256) * 100 / 256);
709 710 711 712 713

	if (priv->pll_register_no) {
		xc5000_readreg(priv, priv->pll_register_no, &regval);
		dprintk(1, "*** PLL lock status = 0x%04x\n", regval);
	}
714 715
}

716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756
static int xc5000_tune_digital(struct dvb_frontend *fe)
{
	struct xc5000_priv *priv = fe->tuner_priv;
	int ret;
	u32 bw = fe->dtv_property_cache.bandwidth_hz;

	ret = xc_set_signal_source(priv, priv->rf_mode);
	if (ret != 0) {
		printk(KERN_ERR
			"xc5000: xc_set_signal_source(%d) failed\n",
			priv->rf_mode);
		return -EREMOTEIO;
	}

	ret = xc_set_tv_standard(priv,
		xc5000_standard[priv->video_standard].video_mode,
		xc5000_standard[priv->video_standard].audio_mode, 0);
	if (ret != 0) {
		printk(KERN_ERR "xc5000: xc_set_tv_standard failed\n");
		return -EREMOTEIO;
	}

	ret = xc_set_IF_frequency(priv, priv->if_khz);
	if (ret != 0) {
		printk(KERN_ERR "xc5000: xc_Set_IF_frequency(%d) failed\n",
		       priv->if_khz);
		return -EIO;
	}

	xc_write_reg(priv, XREG_OUTPUT_AMP, 0x8a);

	xc_tune_channel(priv, priv->freq_hz, XC_TUNE_DIGITAL);

	if (debug)
		xc_debug_dump(priv);

	priv->bandwidth = bw;

	return 0;
}

757
static int xc5000_set_params(struct dvb_frontend *fe)
758
{
759
	int b;
760
	struct xc5000_priv *priv = fe->tuner_priv;
761 762 763
	u32 bw = fe->dtv_property_cache.bandwidth_hz;
	u32 freq = fe->dtv_property_cache.frequency;
	u32 delsys  = fe->dtv_property_cache.delivery_system;
764

765
	if (xc_load_fw_and_init_tuner(fe, 0) != 0) {
766 767
		dprintk(1, "Unable to load firmware and init tuner\n");
		return -EINVAL;
768
	}
769

770
	dprintk(1, "%s() frequency=%d (Hz)\n", __func__, freq);
771

772 773 774 775
	switch (delsys) {
	case SYS_ATSC:
		dprintk(1, "%s() VSB modulation\n", __func__);
		priv->rf_mode = XC_RF_MODE_AIR;
776
		priv->freq_offset = 1750000;
777 778 779 780 781
		priv->video_standard = DTV6;
		break;
	case SYS_DVBC_ANNEX_B:
		dprintk(1, "%s() QAM modulation\n", __func__);
		priv->rf_mode = XC_RF_MODE_CABLE;
782
		priv->freq_offset = 1750000;
783 784
		priv->video_standard = DTV6;
		break;
785 786 787 788 789 790
	case SYS_ISDBT:
		/* All ISDB-T are currently for 6 MHz bw */
		if (!bw)
			bw = 6000000;
		/* fall to OFDM handling */
	case SYS_DMBTH:
791 792
	case SYS_DVBT:
	case SYS_DVBT2:
793
		dprintk(1, "%s() OFDM\n", __func__);
794 795
		switch (bw) {
		case 6000000:
796
			priv->video_standard = DTV6;
797
			priv->freq_offset = 1750000;
798
			break;
799
		case 7000000:
800
			priv->video_standard = DTV7;
801
			priv->freq_offset = 2250000;
802
			break;
803
		case 8000000:
804
			priv->video_standard = DTV8;
805
			priv->freq_offset = 2750000;
806 807 808 809 810
			break;
		default:
			printk(KERN_ERR "xc5000 bandwidth not set!\n");
			return -EINVAL;
		}
811
		priv->rf_mode = XC_RF_MODE_AIR;
812
		break;
813 814 815 816 817 818
	case SYS_DVBC_ANNEX_A:
	case SYS_DVBC_ANNEX_C:
		dprintk(1, "%s() QAM modulation\n", __func__);
		priv->rf_mode = XC_RF_MODE_CABLE;
		if (bw <= 6000000) {
			priv->video_standard = DTV6;
819
			priv->freq_offset = 1750000;
820 821 822
			b = 6;
		} else if (bw <= 7000000) {
			priv->video_standard = DTV7;
823
			priv->freq_offset = 2250000;
824 825 826
			b = 7;
		} else {
			priv->video_standard = DTV7_8;
827
			priv->freq_offset = 2750000;
828
			b = 8;
829
		}
830 831 832 833 834
		dprintk(1, "%s() Bandwidth %dMHz (%d)\n", __func__,
			b, bw);
		break;
	default:
		printk(KERN_ERR "xc5000: delivery system is not supported!\n");
835 836 837
		return -EINVAL;
	}

838
	priv->freq_hz = freq - priv->freq_offset;
839
	priv->mode = V4L2_TUNER_DIGITAL_TV;
840

841 842
	dprintk(1, "%s() frequency=%d (compensated to %d)\n",
		__func__, freq, priv->freq_hz);
843

844
	return xc5000_tune_digital(fe);
845 846
}

847 848 849 850 851 852 853
static int xc5000_is_firmware_loaded(struct dvb_frontend *fe)
{
	struct xc5000_priv *priv = fe->tuner_priv;
	int ret;
	u16 id;

	ret = xc5000_readreg(priv, XREG_PRODUCT_ID, &id);
854
	if (ret == 0) {
855
		if (id == XC_PRODUCT_ID_FW_NOT_LOADED)
856
			ret = -ENOENT;
857
		else
858
			ret = 0;
859 860 861
	}

	dprintk(1, "%s() returns %s id = 0x%x\n", __func__,
862
		ret == 0 ? "True" : "False", id);
863 864 865
	return ret;
}

866
static int xc5000_set_tv_freq(struct dvb_frontend *fe,
867 868 869
	struct analog_parameters *params)
{
	struct xc5000_priv *priv = fe->tuner_priv;
870
	u16 pll_lock_status;
871 872 873
	int ret;

	dprintk(1, "%s() frequency=%d (in units of 62.5khz)\n",
874
		__func__, params->frequency);
875

876 877 878 879
	/* Fix me: it could be air. */
	priv->rf_mode = params->mode;
	if (params->mode > XC_RF_MODE_CABLE)
		priv->rf_mode = XC_RF_MODE_CABLE;
880 881 882 883 884 885 886

	/* params->frequency is in units of 62.5khz */
	priv->freq_hz = params->frequency * 62500;

	/* FIX ME: Some video standards may have several possible audio
		   standards. We simply default to one of them here.
	 */
887
	if (params->std & V4L2_STD_MN) {
888 889 890 891 892
		/* default to BTSC audio standard */
		priv->video_standard = MN_NTSC_PAL_BTSC;
		goto tune_channel;
	}

893
	if (params->std & V4L2_STD_PAL_BG) {
894 895 896 897 898
		/* default to NICAM audio standard */
		priv->video_standard = BG_PAL_NICAM;
		goto tune_channel;
	}

899
	if (params->std & V4L2_STD_PAL_I) {
900 901 902 903 904
		/* default to NICAM audio standard */
		priv->video_standard = I_PAL_NICAM;
		goto tune_channel;
	}

905
	if (params->std & V4L2_STD_PAL_DK) {
906 907 908 909 910
		/* default to NICAM audio standard */
		priv->video_standard = DK_PAL_NICAM;
		goto tune_channel;
	}

911
	if (params->std & V4L2_STD_SECAM_DK) {
912 913 914 915 916
		/* default to A2 DK1 audio standard */
		priv->video_standard = DK_SECAM_A2DK1;
		goto tune_channel;
	}

917
	if (params->std & V4L2_STD_SECAM_L) {
918 919 920 921
		priv->video_standard = L_SECAM_NICAM;
		goto tune_channel;
	}

922
	if (params->std & V4L2_STD_SECAM_LC) {
923 924 925 926 927
		priv->video_standard = LC_SECAM_NICAM;
		goto tune_channel;
	}

tune_channel:
928
	ret = xc_set_signal_source(priv, priv->rf_mode);
929
	if (ret != 0) {
930
		printk(KERN_ERR
931
			"xc5000: xc_set_signal_source(%d) failed\n",
932 933 934 935
			priv->rf_mode);
		return -EREMOTEIO;
	}

936 937 938
	ret = xc_set_tv_standard(priv,
		xc5000_standard[priv->video_standard].video_mode,
		xc5000_standard[priv->video_standard].audio_mode, 0);
939
	if (ret != 0) {
940
		printk(KERN_ERR "xc5000: xc_set_tv_standard failed\n");
941 942 943
		return -EREMOTEIO;
	}

944 945
	xc_write_reg(priv, XREG_OUTPUT_AMP, 0x09);

946
	xc_tune_channel(priv, priv->freq_hz, XC_TUNE_ANALOG);
947 948 949 950

	if (debug)
		xc_debug_dump(priv);

951 952 953 954 955 956 957
	if (priv->pll_register_no != 0) {
		msleep(20);
		xc5000_readreg(priv, priv->pll_register_no, &pll_lock_status);
		if (pll_lock_status > 63) {
			/* PLL is unlocked, force reload of the firmware */
			dprintk(1, "xc5000: PLL not locked (0x%x).  Reloading...\n",
				pll_lock_status);
958
			if (xc_load_fw_and_init_tuner(fe, 1) != 0) {
959 960 961 962 963 964 965
				printk(KERN_ERR "xc5000: Unable to reload fw\n");
				return -EREMOTEIO;
			}
			goto tune_channel;
		}
	}

966 967 968
	return 0;
}

969 970 971 972 973
static int xc5000_set_radio_freq(struct dvb_frontend *fe,
	struct analog_parameters *params)
{
	struct xc5000_priv *priv = fe->tuner_priv;
	int ret = -EINVAL;
974
	u8 radio_input;
975 976 977 978

	dprintk(1, "%s() frequency=%d (in units of khz)\n",
		__func__, params->frequency);

979 980 981 982 983 984
	if (priv->radio_input == XC5000_RADIO_NOT_CONFIGURED) {
		dprintk(1, "%s() radio input not configured\n", __func__);
		return -EINVAL;
	}

	if (priv->radio_input == XC5000_RADIO_FM1)
985
		radio_input = FM_RADIO_INPUT1;
986
	else if  (priv->radio_input == XC5000_RADIO_FM2)
987
		radio_input = FM_RADIO_INPUT2;
988
	else if  (priv->radio_input == XC5000_RADIO_FM1_MONO)
989
		radio_input = FM_RADIO_INPUT1_MONO;
990 991 992 993 994 995
	else {
		dprintk(1, "%s() unknown radio input %d\n", __func__,
			priv->radio_input);
		return -EINVAL;
	}

996 997 998 999
	priv->freq_hz = params->frequency * 125 / 2;

	priv->rf_mode = XC_RF_MODE_AIR;

1000 1001
	ret = xc_set_tv_standard(priv, xc5000_standard[radio_input].video_mode,
			       xc5000_standard[radio_input].audio_mode, radio_input);
1002

1003
	if (ret != 0) {
1004
		printk(KERN_ERR "xc5000: xc_set_tv_standard failed\n");
1005 1006 1007
		return -EREMOTEIO;
	}

1008
	ret = xc_set_signal_source(priv, priv->rf_mode);
1009
	if (ret != 0) {
1010
		printk(KERN_ERR
1011
			"xc5000: xc_set_signal_source(%d) failed\n",
1012 1013 1014 1015
			priv->rf_mode);
		return -EREMOTEIO;
	}

1016 1017 1018 1019 1020 1021
	if ((priv->radio_input == XC5000_RADIO_FM1) ||
				(priv->radio_input == XC5000_RADIO_FM2))
		xc_write_reg(priv, XREG_OUTPUT_AMP, 0x09);
	else if  (priv->radio_input == XC5000_RADIO_FM1_MONO)
		xc_write_reg(priv, XREG_OUTPUT_AMP, 0x06);

1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035
	xc_tune_channel(priv, priv->freq_hz, XC_TUNE_ANALOG);

	return 0;
}

static int xc5000_set_analog_params(struct dvb_frontend *fe,
			     struct analog_parameters *params)
{
	struct xc5000_priv *priv = fe->tuner_priv;
	int ret = -EINVAL;

	if (priv->i2c_props.adap == NULL)
		return -EINVAL;

1036
	if (xc_load_fw_and_init_tuner(fe, 0) != 0) {
1037 1038
		dprintk(1, "Unable to load firmware and init tuner\n");
		return -EINVAL;
1039
	}
1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054

	switch (params->mode) {
	case V4L2_TUNER_RADIO:
		ret = xc5000_set_radio_freq(fe, params);
		break;
	case V4L2_TUNER_ANALOG_TV:
	case V4L2_TUNER_DIGITAL_TV:
		ret = xc5000_set_tv_freq(fe, params);
		break;
	}

	return ret;
}


1055 1056 1057
static int xc5000_get_frequency(struct dvb_frontend *fe, u32 *freq)
{
	struct xc5000_priv *priv = fe->tuner_priv;
1058
	dprintk(1, "%s()\n", __func__);
1059
	*freq = priv->freq_hz + priv->freq_offset;
1060 1061 1062
	return 0;
}

1063 1064 1065 1066 1067 1068 1069 1070
static int xc5000_get_if_frequency(struct dvb_frontend *fe, u32 *freq)
{
	struct xc5000_priv *priv = fe->tuner_priv;
	dprintk(1, "%s()\n", __func__);
	*freq = priv->if_khz * 1000;
	return 0;
}

1071 1072 1073
static int xc5000_get_bandwidth(struct dvb_frontend *fe, u32 *bw)
{
	struct xc5000_priv *priv = fe->tuner_priv;
1074
	dprintk(1, "%s()\n", __func__);
1075

1076 1077 1078 1079 1080 1081 1082
	*bw = priv->bandwidth;
	return 0;
}

static int xc5000_get_status(struct dvb_frontend *fe, u32 *status)
{
	struct xc5000_priv *priv = fe->tuner_priv;
1083
	u16 lock_status = 0;
1084 1085 1086

	xc_get_lock_status(priv, &lock_status);

1087
	dprintk(1, "%s() lock_status = 0x%08x\n", __func__, lock_status);
1088 1089 1090 1091 1092 1093

	*status = lock_status;

	return 0;
}

1094
static int xc_load_fw_and_init_tuner(struct dvb_frontend *fe, int force)
1095 1096
{
	struct xc5000_priv *priv = fe->tuner_priv;
1097 1098
	const struct xc5000_fw_cfg *desired_fw = xc5000_assign_firmware(priv->chip_id);
	const struct firmware *fw;
1099
	int ret, i;
1100
	u16 pll_lock_status;
1101
	u16 fw_ck;
1102

1103 1104
	cancel_delayed_work(&priv->timer_sleep);

1105 1106
	if (!force && xc5000_is_firmware_loaded(fe) == 0)
		return 0;
1107

1108 1109 1110 1111 1112 1113 1114 1115 1116 1117
	ret = request_firmware(&fw, desired_fw->name,
			       priv->i2c_props.adap->dev.parent);
	if (ret) {
		printk(KERN_ERR "xc5000: Upload failed. (file not found?)\n");
		return ret;
	}

	dprintk(1, "firmware read %Zu bytes.\n", fw->size);

	if (fw->size != desired_fw->size) {
1118
		printk(KERN_ERR "xc5000: Firmware file with incorrect size\n");
1119 1120 1121 1122
		ret = -EINVAL;
		goto err;
	}

1123 1124
	/* Try up to 5 times to load firmware */
	for (i = 0; i < 5; i++) {
1125 1126 1127
		if (i)
			printk(KERN_CONT " - retrying to upload firmware.\n");

1128
		ret = xc5000_fwupload(fe, desired_fw, fw);
1129
		if (ret != 0)
1130
			goto err;
1131

1132 1133
		msleep(20);

1134
		if (priv->fw_checksum_supported) {
1135
			if (xc5000_readreg(priv, XREG_FW_CHECKSUM, &fw_ck)) {
1136 1137
				printk(KERN_ERR
				       "xc5000: FW checksum reading failed.");
1138
				continue;
1139 1140
			}

1141
			if (!fw_ck) {
1142 1143 1144
				printk(KERN_ERR
				       "xc5000: FW checksum failed = 0x%04x.",
				       fw_ck);
1145
				continue;
1146 1147 1148
			}
		}

1149
		/* Start the tuner self-calibration process */
1150 1151
		ret = xc_initialize(priv);
		if (ret) {
1152 1153
			printk(KERN_ERR
			       "xc5000: Can't request Self-callibration.");
1154 1155
			continue;
		}
1156

1157 1158 1159 1160 1161
		/* Wait for calibration to complete.
		 * We could continue but XC5000 will clock stretch subsequent
		 * I2C transactions until calibration is complete.  This way we
		 * don't have to rely on clock stretching working.
		 */
1162
		msleep(100);
1163

1164
		if (priv->init_status_supported) {
1165
			if (xc5000_readreg(priv, XREG_INIT_STATUS, &fw_ck)) {
1166 1167
				printk(KERN_ERR
				       "xc5000: FW failed reading init status.");
1168
				continue;
1169 1170
			}

1171
			if (!fw_ck) {
1172 1173 1174
				printk(KERN_ERR
				       "xc5000: FW init status failed = 0x%04x.",
				       fw_ck);
1175
				continue;
1176 1177 1178
			}
		}

1179 1180 1181 1182 1183
		if (priv->pll_register_no) {
			xc5000_readreg(priv, priv->pll_register_no,
				       &pll_lock_status);
			if (pll_lock_status > 63) {
				/* PLL is unlocked, force reload of the firmware */
1184 1185
				printk(KERN_ERR
				       "xc5000: PLL not running after fwload.");
1186
				continue;
1187 1188 1189
			}
		}

1190
		/* Default to "CABLE" mode */
1191
		ret = xc_write_reg(priv, XREG_SIGNALSOURCE, XC_RF_MODE_CABLE);
1192 1193 1194
		if (!ret)
			break;
		printk(KERN_ERR "xc5000: can't set to cable mode.");
1195
	}
1196

1197
err:
1198 1199 1200 1201 1202 1203
	if (!ret)
		printk(KERN_INFO "xc5000: Firmware %s loaded and running.\n",
		       desired_fw->name);
	else
		printk(KERN_CONT " - too many retries. Giving up\n");

1204
	release_firmware(fw);
1205 1206 1207
	return ret;
}

1208
static void xc5000_do_timer_sleep(struct work_struct *timer_sleep)
1209
{
1210 1211 1212
	struct xc5000_priv *priv =container_of(timer_sleep, struct xc5000_priv,
					       timer_sleep.work);
	struct dvb_frontend *fe = priv->fe;
1213 1214
	int ret;

1215
	dprintk(1, "%s()\n", __func__);
1216

1217 1218 1219
	/* According to Xceive technical support, the "powerdown" register
	   was removed in newer versions of the firmware.  The "supported"
	   way to sleep the tuner is to pull the reset pin low for 10ms */
1220
	ret = xc5000_tuner_reset(fe);
1221
	if (ret != 0)
1222 1223
		printk(KERN_ERR
			"xc5000: %s() unable to shutdown tuner\n",
1224
			__func__);
1225 1226 1227 1228 1229 1230 1231 1232 1233 1234
}

static int xc5000_sleep(struct dvb_frontend *fe)
{
	struct xc5000_priv *priv = fe->tuner_priv;

	dprintk(1, "%s()\n", __func__);

	/* Avoid firmware reload on slow devices */
	if (no_poweroff)
1235
		return 0;
1236 1237 1238 1239 1240

	schedule_delayed_work(&priv->timer_sleep,
			      msecs_to_jiffies(XC5000_SLEEP_TIME));

	return 0;
1241 1242
}

1243 1244 1245 1246 1247 1248 1249 1250 1251 1252 1253 1254 1255 1256 1257 1258 1259 1260
static int xc5000_suspend(struct dvb_frontend *fe)
{
	struct xc5000_priv *priv = fe->tuner_priv;
	int ret;

	dprintk(1, "%s()\n", __func__);

	cancel_delayed_work(&priv->timer_sleep);

	ret = xc5000_tuner_reset(fe);
	if (ret != 0)
		printk(KERN_ERR
			"xc5000: %s() unable to shutdown tuner\n",
			__func__);

	return 0;
}

1261 1262 1263
static int xc5000_init(struct dvb_frontend *fe)
{
	struct xc5000_priv *priv = fe->tuner_priv;
1264
	dprintk(1, "%s()\n", __func__);
1265

1266
	if (xc_load_fw_and_init_tuner(fe, 0) != 0) {
1267 1268 1269 1270 1271 1272
		printk(KERN_ERR "xc5000: Unable to initialise tuner\n");
		return -EREMOTEIO;
	}

	if (debug)
		xc_debug_dump(priv);
1273 1274 1275 1276 1277 1278

	return 0;
}

static int xc5000_release(struct dvb_frontend *fe)
{
1279 1280
	struct xc5000_priv *priv = fe->tuner_priv;

1281
	dprintk(1, "%s()\n", __func__);
1282 1283 1284

	mutex_lock(&xc5000_list_mutex);

1285 1286
	if (priv) {
		cancel_delayed_work(&priv->timer_sleep);
1287
		hybrid_tuner_release_state(priv);
1288
	}
1289 1290 1291

	mutex_unlock(&xc5000_list_mutex);

1292
	fe->tuner_priv = NULL;
1293

1294 1295 1296
	return 0;
}

1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313
static int xc5000_set_config(struct dvb_frontend *fe, void *priv_cfg)
{
	struct xc5000_priv *priv = fe->tuner_priv;
	struct xc5000_config *p = priv_cfg;

	dprintk(1, "%s()\n", __func__);

	if (p->if_khz)
		priv->if_khz = p->if_khz;

	if (p->radio_input)
		priv->radio_input = p->radio_input;

	return 0;
}


1314 1315 1316 1317 1318 1319 1320 1321
static const struct dvb_tuner_ops xc5000_tuner_ops = {
	.info = {
		.name           = "Xceive XC5000",
		.frequency_min  =    1000000,
		.frequency_max  = 1023000000,
		.frequency_step =      50000,
	},

1322 1323 1324
	.release	   = xc5000_release,
	.init		   = xc5000_init,
	.sleep		   = xc5000_sleep,
1325
	.suspend	   = xc5000_suspend,
1326

1327
	.set_config	   = xc5000_set_config,
1328 1329 1330
	.set_params	   = xc5000_set_params,
	.set_analog_params = xc5000_set_analog_params,
	.get_frequency	   = xc5000_get_frequency,
1331
	.get_if_frequency  = xc5000_get_if_frequency,
1332 1333
	.get_bandwidth	   = xc5000_get_bandwidth,
	.get_status	   = xc5000_get_status
1334 1335
};

1336 1337
struct dvb_frontend *xc5000_attach(struct dvb_frontend *fe,
				   struct i2c_adapter *i2c,
1338
				   const struct xc5000_config *cfg)
1339 1340
{
	struct xc5000_priv *priv = NULL;
1341
	int instance;
1342 1343
	u16 id = 0;

1344 1345 1346
	dprintk(1, "%s(%d-%04x)\n", __func__,
		i2c ? i2c_adapter_id(i2c) : -1,
		cfg ? cfg->i2c_address : -1);
1347

1348
	mutex_lock(&xc5000_list_mutex);
1349

1350 1351 1352 1353 1354 1355 1356 1357
	instance = hybrid_tuner_request_state(struct xc5000_priv, priv,
					      hybrid_tuner_instance_list,
					      i2c, cfg->i2c_address, "xc5000");
	switch (instance) {
	case 0:
		goto fail;
	case 1:
		/* new tuner instance */
1358
		priv->bandwidth = 6000000;
1359
		fe->tuner_priv = priv;
1360 1361
		priv->fe = fe;
		INIT_DELAYED_WORK(&priv->timer_sleep, xc5000_do_timer_sleep);
1362 1363 1364 1365 1366 1367
		break;
	default:
		/* existing tuner instance */
		fe->tuner_priv = priv;
		break;
	}
1368

1369 1370 1371 1372 1373 1374 1375
	if (priv->if_khz == 0) {
		/* If the IF hasn't been set yet, use the value provided by
		   the caller (occurs in hybrid devices where the analog
		   call to xc5000_attach occurs before the digital side) */
		priv->if_khz = cfg->if_khz;
	}

1376 1377 1378
	if (priv->xtal_khz == 0)
		priv->xtal_khz = cfg->xtal_khz;

1379 1380 1381
	if (priv->radio_input == 0)
		priv->radio_input = cfg->radio_input;

1382
	/* don't override chip id if it's already been set
1383
	   unless explicitly specified */
1384 1385 1386 1387
	if ((priv->chip_id == 0) || (cfg->chip_id))
		/* use default chip id if none specified, set to 0 so
		   it can be overridden if this is a hybrid driver */
		priv->chip_id = (cfg->chip_id) ? cfg->chip_id : 0;
1388

1389 1390 1391
	/* Check if firmware has been loaded. It is possible that another
	   instance of the driver has loaded the firmware.
	 */
1392
	if (xc5000_readreg(priv, XREG_PRODUCT_ID, &id) != 0)
1393
		goto fail;
1394

1395
	switch (id) {
1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410
	case XC_PRODUCT_ID_FW_LOADED:
		printk(KERN_INFO
			"xc5000: Successfully identified at address 0x%02x\n",
			cfg->i2c_address);
		printk(KERN_INFO
			"xc5000: Firmware has been loaded previously\n");
		break;
	case XC_PRODUCT_ID_FW_NOT_LOADED:
		printk(KERN_INFO
			"xc5000: Successfully identified at address 0x%02x\n",
			cfg->i2c_address);
		printk(KERN_INFO
			"xc5000: Firmware has not been loaded previously\n");
		break;
	default:
1411 1412 1413
		printk(KERN_ERR
			"xc5000: Device not found at addr 0x%02x (0x%x)\n",
			cfg->i2c_address, id);
1414
		goto fail;
1415 1416
	}

1417 1418
	mutex_unlock(&xc5000_list_mutex);

1419 1420 1421 1422
	memcpy(&fe->ops.tuner_ops, &xc5000_tuner_ops,
		sizeof(struct dvb_tuner_ops));

	return fe;
1423 1424 1425 1426 1427
fail:
	mutex_unlock(&xc5000_list_mutex);

	xc5000_release(fe);
	return NULL;
1428 1429 1430 1431
}
EXPORT_SYMBOL(xc5000_attach);

MODULE_AUTHOR("Steven Toth");
1432
MODULE_DESCRIPTION("Xceive xc5000 silicon tuner driver");
1433
MODULE_LICENSE("GPL");
1434 1435
MODULE_FIRMWARE(XC5000A_FIRMWARE);
MODULE_FIRMWARE(XC5000C_FIRMWARE);