xref: /openbmc/linux/drivers/media/tuners/xc5000.c (revision f7018c21)
1 /*
2  *  Driver for Xceive XC5000 "QAM/8VSB single chip tuner"
3  *
4  *  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  *  This program is free software; you can redistribute it and/or modify
9  *  it under the terms of the GNU General Public License as published by
10  *  the Free Software Foundation; either version 2 of the License, or
11  *  (at your option) any later version.
12  *
13  *  This program is distributed in the hope that it will be useful,
14  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
15  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16  *
17  *  GNU General Public License for more details.
18  *
19  *  You should have received a copy of the GNU General Public License
20  *  along with this program; if not, write to the Free Software
21  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
22  */
23 
24 #include <linux/module.h>
25 #include <linux/moduleparam.h>
26 #include <linux/videodev2.h>
27 #include <linux/delay.h>
28 #include <linux/dvb/frontend.h>
29 #include <linux/i2c.h>
30 
31 #include "dvb_frontend.h"
32 
33 #include "xc5000.h"
34 #include "tuner-i2c.h"
35 
36 static int debug;
37 module_param(debug, int, 0644);
38 MODULE_PARM_DESC(debug, "Turn on/off debugging (default:off).");
39 
40 static int no_poweroff;
41 module_param(no_poweroff, int, 0644);
42 MODULE_PARM_DESC(no_poweroff, "0 (default) powers device off when not used.\n"
43 	"\t\t1 keep device energized and with tuner ready all the times.\n"
44 	"\t\tFaster, but consumes more power and keeps the device hotter");
45 
46 static DEFINE_MUTEX(xc5000_list_mutex);
47 static LIST_HEAD(hybrid_tuner_instance_list);
48 
49 #define dprintk(level, fmt, arg...) if (debug >= level) \
50 	printk(KERN_INFO "%s: " fmt, "xc5000", ## arg)
51 
52 struct xc5000_priv {
53 	struct tuner_i2c_props i2c_props;
54 	struct list_head hybrid_tuner_instance_list;
55 
56 	u32 if_khz;
57 	u16 xtal_khz;
58 	u32 freq_hz;
59 	u32 bandwidth;
60 	u8  video_standard;
61 	u8  rf_mode;
62 	u8  radio_input;
63 
64 	int chip_id;
65 	u16 pll_register_no;
66 	u8 init_status_supported;
67 	u8 fw_checksum_supported;
68 };
69 
70 /* Misc Defines */
71 #define MAX_TV_STANDARD			24
72 #define XC_MAX_I2C_WRITE_LENGTH		64
73 
74 /* Signal Types */
75 #define XC_RF_MODE_AIR			0
76 #define XC_RF_MODE_CABLE		1
77 
78 /* Result codes */
79 #define XC_RESULT_SUCCESS		0
80 #define XC_RESULT_RESET_FAILURE		1
81 #define XC_RESULT_I2C_WRITE_FAILURE	2
82 #define XC_RESULT_I2C_READ_FAILURE	3
83 #define XC_RESULT_OUT_OF_RANGE		5
84 
85 /* Product id */
86 #define XC_PRODUCT_ID_FW_NOT_LOADED	0x2000
87 #define XC_PRODUCT_ID_FW_LOADED 	0x1388
88 
89 /* Registers */
90 #define XREG_INIT         0x00
91 #define XREG_VIDEO_MODE   0x01
92 #define XREG_AUDIO_MODE   0x02
93 #define XREG_RF_FREQ      0x03
94 #define XREG_D_CODE       0x04
95 #define XREG_IF_OUT       0x05
96 #define XREG_SEEK_MODE    0x07
97 #define XREG_POWER_DOWN   0x0A /* Obsolete */
98 /* Set the output amplitude - SIF for analog, DTVP/DTVN for digital */
99 #define XREG_OUTPUT_AMP   0x0B
100 #define XREG_SIGNALSOURCE 0x0D /* 0=Air, 1=Cable */
101 #define XREG_SMOOTHEDCVBS 0x0E
102 #define XREG_XTALFREQ     0x0F
103 #define XREG_FINERFREQ    0x10
104 #define XREG_DDIMODE      0x11
105 
106 #define XREG_ADC_ENV      0x00
107 #define XREG_QUALITY      0x01
108 #define XREG_FRAME_LINES  0x02
109 #define XREG_HSYNC_FREQ   0x03
110 #define XREG_LOCK         0x04
111 #define XREG_FREQ_ERROR   0x05
112 #define XREG_SNR          0x06
113 #define XREG_VERSION      0x07
114 #define XREG_PRODUCT_ID   0x08
115 #define XREG_BUSY         0x09
116 #define XREG_BUILD        0x0D
117 #define XREG_TOTALGAIN    0x0F
118 #define XREG_FW_CHECKSUM  0x12
119 #define XREG_INIT_STATUS  0x13
120 
121 /*
122    Basic firmware description. This will remain with
123    the driver for documentation purposes.
124 
125    This represents an I2C firmware file encoded as a
126    string of unsigned char. Format is as follows:
127 
128    char[0  ]=len0_MSB  -> len = len_MSB * 256 + len_LSB
129    char[1  ]=len0_LSB  -> length of first write transaction
130    char[2  ]=data0 -> first byte to be sent
131    char[3  ]=data1
132    char[4  ]=data2
133    char[   ]=...
134    char[M  ]=dataN  -> last byte to be sent
135    char[M+1]=len1_MSB  -> len = len_MSB * 256 + len_LSB
136    char[M+2]=len1_LSB  -> length of second write transaction
137    char[M+3]=data0
138    char[M+4]=data1
139    ...
140    etc.
141 
142    The [len] value should be interpreted as follows:
143 
144    len= len_MSB _ len_LSB
145    len=1111_1111_1111_1111   : End of I2C_SEQUENCE
146    len=0000_0000_0000_0000   : Reset command: Do hardware reset
147    len=0NNN_NNNN_NNNN_NNNN   : Normal transaction: number of bytes = {1:32767)
148    len=1WWW_WWWW_WWWW_WWWW   : Wait command: wait for {1:32767} ms
149 
150    For the RESET and WAIT commands, the two following bytes will contain
151    immediately the length of the following transaction.
152 
153 */
154 struct XC_TV_STANDARD {
155 	char *Name;
156 	u16 AudioMode;
157 	u16 VideoMode;
158 };
159 
160 /* Tuner standards */
161 #define MN_NTSC_PAL_BTSC	0
162 #define MN_NTSC_PAL_A2		1
163 #define MN_NTSC_PAL_EIAJ	2
164 #define MN_NTSC_PAL_Mono	3
165 #define BG_PAL_A2		4
166 #define BG_PAL_NICAM		5
167 #define BG_PAL_MONO		6
168 #define I_PAL_NICAM		7
169 #define I_PAL_NICAM_MONO	8
170 #define DK_PAL_A2		9
171 #define DK_PAL_NICAM		10
172 #define DK_PAL_MONO		11
173 #define DK_SECAM_A2DK1		12
174 #define DK_SECAM_A2LDK3 	13
175 #define DK_SECAM_A2MONO 	14
176 #define L_SECAM_NICAM		15
177 #define LC_SECAM_NICAM		16
178 #define DTV6			17
179 #define DTV8			18
180 #define DTV7_8			19
181 #define DTV7			20
182 #define FM_Radio_INPUT2 	21
183 #define FM_Radio_INPUT1 	22
184 #define FM_Radio_INPUT1_MONO	23
185 
186 static struct XC_TV_STANDARD XC5000_Standard[MAX_TV_STANDARD] = {
187 	{"M/N-NTSC/PAL-BTSC", 0x0400, 0x8020},
188 	{"M/N-NTSC/PAL-A2",   0x0600, 0x8020},
189 	{"M/N-NTSC/PAL-EIAJ", 0x0440, 0x8020},
190 	{"M/N-NTSC/PAL-Mono", 0x0478, 0x8020},
191 	{"B/G-PAL-A2",        0x0A00, 0x8049},
192 	{"B/G-PAL-NICAM",     0x0C04, 0x8049},
193 	{"B/G-PAL-MONO",      0x0878, 0x8059},
194 	{"I-PAL-NICAM",       0x1080, 0x8009},
195 	{"I-PAL-NICAM-MONO",  0x0E78, 0x8009},
196 	{"D/K-PAL-A2",        0x1600, 0x8009},
197 	{"D/K-PAL-NICAM",     0x0E80, 0x8009},
198 	{"D/K-PAL-MONO",      0x1478, 0x8009},
199 	{"D/K-SECAM-A2 DK1",  0x1200, 0x8009},
200 	{"D/K-SECAM-A2 L/DK3", 0x0E00, 0x8009},
201 	{"D/K-SECAM-A2 MONO", 0x1478, 0x8009},
202 	{"L-SECAM-NICAM",     0x8E82, 0x0009},
203 	{"L'-SECAM-NICAM",    0x8E82, 0x4009},
204 	{"DTV6",              0x00C0, 0x8002},
205 	{"DTV8",              0x00C0, 0x800B},
206 	{"DTV7/8",            0x00C0, 0x801B},
207 	{"DTV7",              0x00C0, 0x8007},
208 	{"FM Radio-INPUT2",   0x9802, 0x9002},
209 	{"FM Radio-INPUT1",   0x0208, 0x9002},
210 	{"FM Radio-INPUT1_MONO", 0x0278, 0x9002}
211 };
212 
213 
214 struct xc5000_fw_cfg {
215 	char *name;
216 	u16 size;
217 	u16 pll_reg;
218 	u8 init_status_supported;
219 	u8 fw_checksum_supported;
220 };
221 
222 #define XC5000A_FIRMWARE "dvb-fe-xc5000-1.6.114.fw"
223 static const struct xc5000_fw_cfg xc5000a_1_6_114 = {
224 	.name = XC5000A_FIRMWARE,
225 	.size = 12401,
226 	.pll_reg = 0x806c,
227 };
228 
229 #define XC5000C_FIRMWARE "dvb-fe-xc5000c-4.1.30.7.fw"
230 static const struct xc5000_fw_cfg xc5000c_41_024_5 = {
231 	.name = XC5000C_FIRMWARE,
232 	.size = 16497,
233 	.pll_reg = 0x13,
234 	.init_status_supported = 1,
235 	.fw_checksum_supported = 1,
236 };
237 
238 static inline const struct xc5000_fw_cfg *xc5000_assign_firmware(int chip_id)
239 {
240 	switch (chip_id) {
241 	default:
242 	case XC5000A:
243 		return &xc5000a_1_6_114;
244 	case XC5000C:
245 		return &xc5000c_41_024_5;
246 	}
247 }
248 
249 static int xc_load_fw_and_init_tuner(struct dvb_frontend *fe, int force);
250 static int xc5000_is_firmware_loaded(struct dvb_frontend *fe);
251 static int xc5000_readreg(struct xc5000_priv *priv, u16 reg, u16 *val);
252 static int xc5000_TunerReset(struct dvb_frontend *fe);
253 
254 static int xc_send_i2c_data(struct xc5000_priv *priv, u8 *buf, int len)
255 {
256 	struct i2c_msg msg = { .addr = priv->i2c_props.addr,
257 			       .flags = 0, .buf = buf, .len = len };
258 
259 	if (i2c_transfer(priv->i2c_props.adap, &msg, 1) != 1) {
260 		printk(KERN_ERR "xc5000: I2C write failed (len=%i)\n", len);
261 		return XC_RESULT_I2C_WRITE_FAILURE;
262 	}
263 	return XC_RESULT_SUCCESS;
264 }
265 
266 #if 0
267 /* This routine is never used because the only time we read data from the
268    i2c bus is when we read registers, and we want that to be an atomic i2c
269    transaction in case we are on a multi-master bus */
270 static int xc_read_i2c_data(struct xc5000_priv *priv, u8 *buf, int len)
271 {
272 	struct i2c_msg msg = { .addr = priv->i2c_props.addr,
273 		.flags = I2C_M_RD, .buf = buf, .len = len };
274 
275 	if (i2c_transfer(priv->i2c_props.adap, &msg, 1) != 1) {
276 		printk(KERN_ERR "xc5000 I2C read failed (len=%i)\n", len);
277 		return -EREMOTEIO;
278 	}
279 	return 0;
280 }
281 #endif
282 
283 static int xc5000_readreg(struct xc5000_priv *priv, u16 reg, u16 *val)
284 {
285 	u8 buf[2] = { reg >> 8, reg & 0xff };
286 	u8 bval[2] = { 0, 0 };
287 	struct i2c_msg msg[2] = {
288 		{ .addr = priv->i2c_props.addr,
289 			.flags = 0, .buf = &buf[0], .len = 2 },
290 		{ .addr = priv->i2c_props.addr,
291 			.flags = I2C_M_RD, .buf = &bval[0], .len = 2 },
292 	};
293 
294 	if (i2c_transfer(priv->i2c_props.adap, msg, 2) != 2) {
295 		printk(KERN_WARNING "xc5000: I2C read failed\n");
296 		return -EREMOTEIO;
297 	}
298 
299 	*val = (bval[0] << 8) | bval[1];
300 	return XC_RESULT_SUCCESS;
301 }
302 
303 static void xc_wait(int wait_ms)
304 {
305 	msleep(wait_ms);
306 }
307 
308 static int xc5000_TunerReset(struct dvb_frontend *fe)
309 {
310 	struct xc5000_priv *priv = fe->tuner_priv;
311 	int ret;
312 
313 	dprintk(1, "%s()\n", __func__);
314 
315 	if (fe->callback) {
316 		ret = fe->callback(((fe->dvb) && (fe->dvb->priv)) ?
317 					   fe->dvb->priv :
318 					   priv->i2c_props.adap->algo_data,
319 					   DVB_FRONTEND_COMPONENT_TUNER,
320 					   XC5000_TUNER_RESET, 0);
321 		if (ret) {
322 			printk(KERN_ERR "xc5000: reset failed\n");
323 			return XC_RESULT_RESET_FAILURE;
324 		}
325 	} else {
326 		printk(KERN_ERR "xc5000: no tuner reset callback function, fatal\n");
327 		return XC_RESULT_RESET_FAILURE;
328 	}
329 	return XC_RESULT_SUCCESS;
330 }
331 
332 static int xc_write_reg(struct xc5000_priv *priv, u16 regAddr, u16 i2cData)
333 {
334 	u8 buf[4];
335 	int WatchDogTimer = 100;
336 	int result;
337 
338 	buf[0] = (regAddr >> 8) & 0xFF;
339 	buf[1] = regAddr & 0xFF;
340 	buf[2] = (i2cData >> 8) & 0xFF;
341 	buf[3] = i2cData & 0xFF;
342 	result = xc_send_i2c_data(priv, buf, 4);
343 	if (result == XC_RESULT_SUCCESS) {
344 		/* wait for busy flag to clear */
345 		while ((WatchDogTimer > 0) && (result == XC_RESULT_SUCCESS)) {
346 			result = xc5000_readreg(priv, XREG_BUSY, (u16 *)buf);
347 			if (result == XC_RESULT_SUCCESS) {
348 				if ((buf[0] == 0) && (buf[1] == 0)) {
349 					/* busy flag cleared */
350 					break;
351 				} else {
352 					xc_wait(5); /* wait 5 ms */
353 					WatchDogTimer--;
354 				}
355 			}
356 		}
357 	}
358 	if (WatchDogTimer <= 0)
359 		result = XC_RESULT_I2C_WRITE_FAILURE;
360 
361 	return result;
362 }
363 
364 static int xc_load_i2c_sequence(struct dvb_frontend *fe, const u8 *i2c_sequence)
365 {
366 	struct xc5000_priv *priv = fe->tuner_priv;
367 
368 	int i, nbytes_to_send, result;
369 	unsigned int len, pos, index;
370 	u8 buf[XC_MAX_I2C_WRITE_LENGTH];
371 
372 	index = 0;
373 	while ((i2c_sequence[index] != 0xFF) ||
374 		(i2c_sequence[index + 1] != 0xFF)) {
375 		len = i2c_sequence[index] * 256 + i2c_sequence[index+1];
376 		if (len == 0x0000) {
377 			/* RESET command */
378 			result = xc5000_TunerReset(fe);
379 			index += 2;
380 			if (result != XC_RESULT_SUCCESS)
381 				return result;
382 		} else if (len & 0x8000) {
383 			/* WAIT command */
384 			xc_wait(len & 0x7FFF);
385 			index += 2;
386 		} else {
387 			/* Send i2c data whilst ensuring individual transactions
388 			 * do not exceed XC_MAX_I2C_WRITE_LENGTH bytes.
389 			 */
390 			index += 2;
391 			buf[0] = i2c_sequence[index];
392 			buf[1] = i2c_sequence[index + 1];
393 			pos = 2;
394 			while (pos < len) {
395 				if ((len - pos) > XC_MAX_I2C_WRITE_LENGTH - 2)
396 					nbytes_to_send =
397 						XC_MAX_I2C_WRITE_LENGTH;
398 				else
399 					nbytes_to_send = (len - pos + 2);
400 				for (i = 2; i < nbytes_to_send; i++) {
401 					buf[i] = i2c_sequence[index + pos +
402 						i - 2];
403 				}
404 				result = xc_send_i2c_data(priv, buf,
405 					nbytes_to_send);
406 
407 				if (result != XC_RESULT_SUCCESS)
408 					return result;
409 
410 				pos += nbytes_to_send - 2;
411 			}
412 			index += len;
413 		}
414 	}
415 	return XC_RESULT_SUCCESS;
416 }
417 
418 static int xc_initialize(struct xc5000_priv *priv)
419 {
420 	dprintk(1, "%s()\n", __func__);
421 	return xc_write_reg(priv, XREG_INIT, 0);
422 }
423 
424 static int xc_SetTVStandard(struct xc5000_priv *priv,
425 	u16 VideoMode, u16 AudioMode, u8 RadioMode)
426 {
427 	int ret;
428 	dprintk(1, "%s(0x%04x,0x%04x)\n", __func__, VideoMode, AudioMode);
429 	if (RadioMode) {
430 		dprintk(1, "%s() Standard = %s\n",
431 			__func__,
432 			XC5000_Standard[RadioMode].Name);
433 	} else {
434 		dprintk(1, "%s() Standard = %s\n",
435 			__func__,
436 			XC5000_Standard[priv->video_standard].Name);
437 	}
438 
439 	ret = xc_write_reg(priv, XREG_VIDEO_MODE, VideoMode);
440 	if (ret == XC_RESULT_SUCCESS)
441 		ret = xc_write_reg(priv, XREG_AUDIO_MODE, AudioMode);
442 
443 	return ret;
444 }
445 
446 static int xc_SetSignalSource(struct xc5000_priv *priv, u16 rf_mode)
447 {
448 	dprintk(1, "%s(%d) Source = %s\n", __func__, rf_mode,
449 		rf_mode == XC_RF_MODE_AIR ? "ANTENNA" : "CABLE");
450 
451 	if ((rf_mode != XC_RF_MODE_AIR) && (rf_mode != XC_RF_MODE_CABLE)) {
452 		rf_mode = XC_RF_MODE_CABLE;
453 		printk(KERN_ERR
454 			"%s(), Invalid mode, defaulting to CABLE",
455 			__func__);
456 	}
457 	return xc_write_reg(priv, XREG_SIGNALSOURCE, rf_mode);
458 }
459 
460 static const struct dvb_tuner_ops xc5000_tuner_ops;
461 
462 static int xc_set_RF_frequency(struct xc5000_priv *priv, u32 freq_hz)
463 {
464 	u16 freq_code;
465 
466 	dprintk(1, "%s(%u)\n", __func__, freq_hz);
467 
468 	if ((freq_hz > xc5000_tuner_ops.info.frequency_max) ||
469 		(freq_hz < xc5000_tuner_ops.info.frequency_min))
470 		return XC_RESULT_OUT_OF_RANGE;
471 
472 	freq_code = (u16)(freq_hz / 15625);
473 
474 	/* Starting in firmware version 1.1.44, Xceive recommends using the
475 	   FINERFREQ for all normal tuning (the doc indicates reg 0x03 should
476 	   only be used for fast scanning for channel lock) */
477 	return xc_write_reg(priv, XREG_FINERFREQ, freq_code);
478 }
479 
480 
481 static int xc_set_IF_frequency(struct xc5000_priv *priv, u32 freq_khz)
482 {
483 	u32 freq_code = (freq_khz * 1024)/1000;
484 	dprintk(1, "%s(freq_khz = %d) freq_code = 0x%x\n",
485 		__func__, freq_khz, freq_code);
486 
487 	return xc_write_reg(priv, XREG_IF_OUT, freq_code);
488 }
489 
490 
491 static int xc_get_ADC_Envelope(struct xc5000_priv *priv, u16 *adc_envelope)
492 {
493 	return xc5000_readreg(priv, XREG_ADC_ENV, adc_envelope);
494 }
495 
496 static int xc_get_frequency_error(struct xc5000_priv *priv, u32 *freq_error_hz)
497 {
498 	int result;
499 	u16 regData;
500 	u32 tmp;
501 
502 	result = xc5000_readreg(priv, XREG_FREQ_ERROR, &regData);
503 	if (result != XC_RESULT_SUCCESS)
504 		return result;
505 
506 	tmp = (u32)regData;
507 	(*freq_error_hz) = (tmp * 15625) / 1000;
508 	return result;
509 }
510 
511 static int xc_get_lock_status(struct xc5000_priv *priv, u16 *lock_status)
512 {
513 	return xc5000_readreg(priv, XREG_LOCK, lock_status);
514 }
515 
516 static int xc_get_version(struct xc5000_priv *priv,
517 	u8 *hw_majorversion, u8 *hw_minorversion,
518 	u8 *fw_majorversion, u8 *fw_minorversion)
519 {
520 	u16 data;
521 	int result;
522 
523 	result = xc5000_readreg(priv, XREG_VERSION, &data);
524 	if (result != XC_RESULT_SUCCESS)
525 		return result;
526 
527 	(*hw_majorversion) = (data >> 12) & 0x0F;
528 	(*hw_minorversion) = (data >>  8) & 0x0F;
529 	(*fw_majorversion) = (data >>  4) & 0x0F;
530 	(*fw_minorversion) = data & 0x0F;
531 
532 	return 0;
533 }
534 
535 static int xc_get_buildversion(struct xc5000_priv *priv, u16 *buildrev)
536 {
537 	return xc5000_readreg(priv, XREG_BUILD, buildrev);
538 }
539 
540 static int xc_get_hsync_freq(struct xc5000_priv *priv, u32 *hsync_freq_hz)
541 {
542 	u16 regData;
543 	int result;
544 
545 	result = xc5000_readreg(priv, XREG_HSYNC_FREQ, &regData);
546 	if (result != XC_RESULT_SUCCESS)
547 		return result;
548 
549 	(*hsync_freq_hz) = ((regData & 0x0fff) * 763)/100;
550 	return result;
551 }
552 
553 static int xc_get_frame_lines(struct xc5000_priv *priv, u16 *frame_lines)
554 {
555 	return xc5000_readreg(priv, XREG_FRAME_LINES, frame_lines);
556 }
557 
558 static int xc_get_quality(struct xc5000_priv *priv, u16 *quality)
559 {
560 	return xc5000_readreg(priv, XREG_QUALITY, quality);
561 }
562 
563 static int xc_get_analogsnr(struct xc5000_priv *priv, u16 *snr)
564 {
565 	return xc5000_readreg(priv, XREG_SNR, snr);
566 }
567 
568 static int xc_get_totalgain(struct xc5000_priv *priv, u16 *totalgain)
569 {
570 	return xc5000_readreg(priv, XREG_TOTALGAIN, totalgain);
571 }
572 
573 static u16 WaitForLock(struct xc5000_priv *priv)
574 {
575 	u16 lockState = 0;
576 	int watchDogCount = 40;
577 
578 	while ((lockState == 0) && (watchDogCount > 0)) {
579 		xc_get_lock_status(priv, &lockState);
580 		if (lockState != 1) {
581 			xc_wait(5);
582 			watchDogCount--;
583 		}
584 	}
585 	return lockState;
586 }
587 
588 #define XC_TUNE_ANALOG  0
589 #define XC_TUNE_DIGITAL 1
590 static int xc_tune_channel(struct xc5000_priv *priv, u32 freq_hz, int mode)
591 {
592 	int found = 0;
593 
594 	dprintk(1, "%s(%u)\n", __func__, freq_hz);
595 
596 	if (xc_set_RF_frequency(priv, freq_hz) != XC_RESULT_SUCCESS)
597 		return 0;
598 
599 	if (mode == XC_TUNE_ANALOG) {
600 		if (WaitForLock(priv) == 1)
601 			found = 1;
602 	}
603 
604 	return found;
605 }
606 
607 static int xc_set_xtal(struct dvb_frontend *fe)
608 {
609 	struct xc5000_priv *priv = fe->tuner_priv;
610 	int ret = XC_RESULT_SUCCESS;
611 
612 	switch (priv->chip_id) {
613 	default:
614 	case XC5000A:
615 		/* 32.000 MHz xtal is default */
616 		break;
617 	case XC5000C:
618 		switch (priv->xtal_khz) {
619 		default:
620 		case 32000:
621 			/* 32.000 MHz xtal is default */
622 			break;
623 		case 31875:
624 			/* 31.875 MHz xtal configuration */
625 			ret = xc_write_reg(priv, 0x000f, 0x8081);
626 			break;
627 		}
628 		break;
629 	}
630 	return ret;
631 }
632 
633 static int xc5000_fwupload(struct dvb_frontend *fe)
634 {
635 	struct xc5000_priv *priv = fe->tuner_priv;
636 	const struct firmware *fw;
637 	int ret;
638 	const struct xc5000_fw_cfg *desired_fw =
639 		xc5000_assign_firmware(priv->chip_id);
640 	priv->pll_register_no = desired_fw->pll_reg;
641 	priv->init_status_supported = desired_fw->init_status_supported;
642 	priv->fw_checksum_supported = desired_fw->fw_checksum_supported;
643 
644 	/* request the firmware, this will block and timeout */
645 	printk(KERN_INFO "xc5000: waiting for firmware upload (%s)...\n",
646 		desired_fw->name);
647 
648 	ret = request_firmware(&fw, desired_fw->name,
649 		priv->i2c_props.adap->dev.parent);
650 	if (ret) {
651 		printk(KERN_ERR "xc5000: Upload failed. (file not found?)\n");
652 		ret = XC_RESULT_RESET_FAILURE;
653 		goto out;
654 	} else {
655 		printk(KERN_DEBUG "xc5000: firmware read %Zu bytes.\n",
656 		       fw->size);
657 		ret = XC_RESULT_SUCCESS;
658 	}
659 
660 	if (fw->size != desired_fw->size) {
661 		printk(KERN_ERR "xc5000: firmware incorrect size\n");
662 		ret = XC_RESULT_RESET_FAILURE;
663 	} else {
664 		printk(KERN_INFO "xc5000: firmware uploading...\n");
665 		ret = xc_load_i2c_sequence(fe,  fw->data);
666 		if (XC_RESULT_SUCCESS == ret)
667 			ret = xc_set_xtal(fe);
668 		if (XC_RESULT_SUCCESS == ret)
669 			printk(KERN_INFO "xc5000: firmware upload complete...\n");
670 		else
671 			printk(KERN_ERR "xc5000: firmware upload failed...\n");
672 	}
673 
674 out:
675 	release_firmware(fw);
676 	return ret;
677 }
678 
679 static void xc_debug_dump(struct xc5000_priv *priv)
680 {
681 	u16 adc_envelope;
682 	u32 freq_error_hz = 0;
683 	u16 lock_status;
684 	u32 hsync_freq_hz = 0;
685 	u16 frame_lines;
686 	u16 quality;
687 	u16 snr;
688 	u16 totalgain;
689 	u8 hw_majorversion = 0, hw_minorversion = 0;
690 	u8 fw_majorversion = 0, fw_minorversion = 0;
691 	u16 fw_buildversion = 0;
692 	u16 regval;
693 
694 	/* Wait for stats to stabilize.
695 	 * Frame Lines needs two frame times after initial lock
696 	 * before it is valid.
697 	 */
698 	xc_wait(100);
699 
700 	xc_get_ADC_Envelope(priv,  &adc_envelope);
701 	dprintk(1, "*** ADC envelope (0-1023) = %d\n", adc_envelope);
702 
703 	xc_get_frequency_error(priv, &freq_error_hz);
704 	dprintk(1, "*** Frequency error = %d Hz\n", freq_error_hz);
705 
706 	xc_get_lock_status(priv,  &lock_status);
707 	dprintk(1, "*** Lock status (0-Wait, 1-Locked, 2-No-signal) = %d\n",
708 		lock_status);
709 
710 	xc_get_version(priv,  &hw_majorversion, &hw_minorversion,
711 		&fw_majorversion, &fw_minorversion);
712 	xc_get_buildversion(priv,  &fw_buildversion);
713 	dprintk(1, "*** HW: V%d.%d, FW: V %d.%d.%d\n",
714 		hw_majorversion, hw_minorversion,
715 		fw_majorversion, fw_minorversion, fw_buildversion);
716 
717 	xc_get_hsync_freq(priv,  &hsync_freq_hz);
718 	dprintk(1, "*** Horizontal sync frequency = %d Hz\n", hsync_freq_hz);
719 
720 	xc_get_frame_lines(priv,  &frame_lines);
721 	dprintk(1, "*** Frame lines = %d\n", frame_lines);
722 
723 	xc_get_quality(priv,  &quality);
724 	dprintk(1, "*** Quality (0:<8dB, 7:>56dB) = %d\n", quality & 0x07);
725 
726 	xc_get_analogsnr(priv,  &snr);
727 	dprintk(1, "*** Unweighted analog SNR = %d dB\n", snr & 0x3f);
728 
729 	xc_get_totalgain(priv,  &totalgain);
730 	dprintk(1, "*** Total gain = %d.%d dB\n", totalgain / 256,
731 		(totalgain % 256) * 100 / 256);
732 
733 	if (priv->pll_register_no) {
734 		xc5000_readreg(priv, priv->pll_register_no, &regval);
735 		dprintk(1, "*** PLL lock status = 0x%04x\n", regval);
736 	}
737 }
738 
739 static int xc5000_set_params(struct dvb_frontend *fe)
740 {
741 	int ret, b;
742 	struct xc5000_priv *priv = fe->tuner_priv;
743 	u32 bw = fe->dtv_property_cache.bandwidth_hz;
744 	u32 freq = fe->dtv_property_cache.frequency;
745 	u32 delsys  = fe->dtv_property_cache.delivery_system;
746 
747 	if (xc_load_fw_and_init_tuner(fe, 0) != XC_RESULT_SUCCESS) {
748 		dprintk(1, "Unable to load firmware and init tuner\n");
749 		return -EINVAL;
750 	}
751 
752 	dprintk(1, "%s() frequency=%d (Hz)\n", __func__, freq);
753 
754 	switch (delsys) {
755 	case SYS_ATSC:
756 		dprintk(1, "%s() VSB modulation\n", __func__);
757 		priv->rf_mode = XC_RF_MODE_AIR;
758 		priv->freq_hz = freq - 1750000;
759 		priv->video_standard = DTV6;
760 		break;
761 	case SYS_DVBC_ANNEX_B:
762 		dprintk(1, "%s() QAM modulation\n", __func__);
763 		priv->rf_mode = XC_RF_MODE_CABLE;
764 		priv->freq_hz = freq - 1750000;
765 		priv->video_standard = DTV6;
766 		break;
767 	case SYS_ISDBT:
768 		/* All ISDB-T are currently for 6 MHz bw */
769 		if (!bw)
770 			bw = 6000000;
771 		/* fall to OFDM handling */
772 	case SYS_DMBTH:
773 	case SYS_DVBT:
774 	case SYS_DVBT2:
775 		dprintk(1, "%s() OFDM\n", __func__);
776 		switch (bw) {
777 		case 6000000:
778 			priv->video_standard = DTV6;
779 			priv->freq_hz = freq - 1750000;
780 			break;
781 		case 7000000:
782 			priv->video_standard = DTV7;
783 			priv->freq_hz = freq - 2250000;
784 			break;
785 		case 8000000:
786 			priv->video_standard = DTV8;
787 			priv->freq_hz = freq - 2750000;
788 			break;
789 		default:
790 			printk(KERN_ERR "xc5000 bandwidth not set!\n");
791 			return -EINVAL;
792 		}
793 		priv->rf_mode = XC_RF_MODE_AIR;
794 		break;
795 	case SYS_DVBC_ANNEX_A:
796 	case SYS_DVBC_ANNEX_C:
797 		dprintk(1, "%s() QAM modulation\n", __func__);
798 		priv->rf_mode = XC_RF_MODE_CABLE;
799 		if (bw <= 6000000) {
800 			priv->video_standard = DTV6;
801 			priv->freq_hz = freq - 1750000;
802 			b = 6;
803 		} else if (bw <= 7000000) {
804 			priv->video_standard = DTV7;
805 			priv->freq_hz = freq - 2250000;
806 			b = 7;
807 		} else {
808 			priv->video_standard = DTV7_8;
809 			priv->freq_hz = freq - 2750000;
810 			b = 8;
811 		}
812 		dprintk(1, "%s() Bandwidth %dMHz (%d)\n", __func__,
813 			b, bw);
814 		break;
815 	default:
816 		printk(KERN_ERR "xc5000: delivery system is not supported!\n");
817 		return -EINVAL;
818 	}
819 
820 	dprintk(1, "%s() frequency=%d (compensated to %d)\n",
821 		__func__, freq, priv->freq_hz);
822 
823 	ret = xc_SetSignalSource(priv, priv->rf_mode);
824 	if (ret != XC_RESULT_SUCCESS) {
825 		printk(KERN_ERR
826 			"xc5000: xc_SetSignalSource(%d) failed\n",
827 			priv->rf_mode);
828 		return -EREMOTEIO;
829 	}
830 
831 	ret = xc_SetTVStandard(priv,
832 		XC5000_Standard[priv->video_standard].VideoMode,
833 		XC5000_Standard[priv->video_standard].AudioMode, 0);
834 	if (ret != XC_RESULT_SUCCESS) {
835 		printk(KERN_ERR "xc5000: xc_SetTVStandard failed\n");
836 		return -EREMOTEIO;
837 	}
838 
839 	ret = xc_set_IF_frequency(priv, priv->if_khz);
840 	if (ret != XC_RESULT_SUCCESS) {
841 		printk(KERN_ERR "xc5000: xc_Set_IF_frequency(%d) failed\n",
842 		       priv->if_khz);
843 		return -EIO;
844 	}
845 
846 	xc_write_reg(priv, XREG_OUTPUT_AMP, 0x8a);
847 
848 	xc_tune_channel(priv, priv->freq_hz, XC_TUNE_DIGITAL);
849 
850 	if (debug)
851 		xc_debug_dump(priv);
852 
853 	priv->bandwidth = bw;
854 
855 	return 0;
856 }
857 
858 static int xc5000_is_firmware_loaded(struct dvb_frontend *fe)
859 {
860 	struct xc5000_priv *priv = fe->tuner_priv;
861 	int ret;
862 	u16 id;
863 
864 	ret = xc5000_readreg(priv, XREG_PRODUCT_ID, &id);
865 	if (ret == XC_RESULT_SUCCESS) {
866 		if (id == XC_PRODUCT_ID_FW_NOT_LOADED)
867 			ret = XC_RESULT_RESET_FAILURE;
868 		else
869 			ret = XC_RESULT_SUCCESS;
870 	}
871 
872 	dprintk(1, "%s() returns %s id = 0x%x\n", __func__,
873 		ret == XC_RESULT_SUCCESS ? "True" : "False", id);
874 	return ret;
875 }
876 
877 static int xc5000_set_tv_freq(struct dvb_frontend *fe,
878 	struct analog_parameters *params)
879 {
880 	struct xc5000_priv *priv = fe->tuner_priv;
881 	u16 pll_lock_status;
882 	int ret;
883 
884 	dprintk(1, "%s() frequency=%d (in units of 62.5khz)\n",
885 		__func__, params->frequency);
886 
887 	/* Fix me: it could be air. */
888 	priv->rf_mode = params->mode;
889 	if (params->mode > XC_RF_MODE_CABLE)
890 		priv->rf_mode = XC_RF_MODE_CABLE;
891 
892 	/* params->frequency is in units of 62.5khz */
893 	priv->freq_hz = params->frequency * 62500;
894 
895 	/* FIX ME: Some video standards may have several possible audio
896 		   standards. We simply default to one of them here.
897 	 */
898 	if (params->std & V4L2_STD_MN) {
899 		/* default to BTSC audio standard */
900 		priv->video_standard = MN_NTSC_PAL_BTSC;
901 		goto tune_channel;
902 	}
903 
904 	if (params->std & V4L2_STD_PAL_BG) {
905 		/* default to NICAM audio standard */
906 		priv->video_standard = BG_PAL_NICAM;
907 		goto tune_channel;
908 	}
909 
910 	if (params->std & V4L2_STD_PAL_I) {
911 		/* default to NICAM audio standard */
912 		priv->video_standard = I_PAL_NICAM;
913 		goto tune_channel;
914 	}
915 
916 	if (params->std & V4L2_STD_PAL_DK) {
917 		/* default to NICAM audio standard */
918 		priv->video_standard = DK_PAL_NICAM;
919 		goto tune_channel;
920 	}
921 
922 	if (params->std & V4L2_STD_SECAM_DK) {
923 		/* default to A2 DK1 audio standard */
924 		priv->video_standard = DK_SECAM_A2DK1;
925 		goto tune_channel;
926 	}
927 
928 	if (params->std & V4L2_STD_SECAM_L) {
929 		priv->video_standard = L_SECAM_NICAM;
930 		goto tune_channel;
931 	}
932 
933 	if (params->std & V4L2_STD_SECAM_LC) {
934 		priv->video_standard = LC_SECAM_NICAM;
935 		goto tune_channel;
936 	}
937 
938 tune_channel:
939 	ret = xc_SetSignalSource(priv, priv->rf_mode);
940 	if (ret != XC_RESULT_SUCCESS) {
941 		printk(KERN_ERR
942 			"xc5000: xc_SetSignalSource(%d) failed\n",
943 			priv->rf_mode);
944 		return -EREMOTEIO;
945 	}
946 
947 	ret = xc_SetTVStandard(priv,
948 		XC5000_Standard[priv->video_standard].VideoMode,
949 		XC5000_Standard[priv->video_standard].AudioMode, 0);
950 	if (ret != XC_RESULT_SUCCESS) {
951 		printk(KERN_ERR "xc5000: xc_SetTVStandard failed\n");
952 		return -EREMOTEIO;
953 	}
954 
955 	xc_write_reg(priv, XREG_OUTPUT_AMP, 0x09);
956 
957 	xc_tune_channel(priv, priv->freq_hz, XC_TUNE_ANALOG);
958 
959 	if (debug)
960 		xc_debug_dump(priv);
961 
962 	if (priv->pll_register_no != 0) {
963 		msleep(20);
964 		xc5000_readreg(priv, priv->pll_register_no, &pll_lock_status);
965 		if (pll_lock_status > 63) {
966 			/* PLL is unlocked, force reload of the firmware */
967 			dprintk(1, "xc5000: PLL not locked (0x%x).  Reloading...\n",
968 				pll_lock_status);
969 			if (xc_load_fw_and_init_tuner(fe, 1) != XC_RESULT_SUCCESS) {
970 				printk(KERN_ERR "xc5000: Unable to reload fw\n");
971 				return -EREMOTEIO;
972 			}
973 			goto tune_channel;
974 		}
975 	}
976 
977 	return 0;
978 }
979 
980 static int xc5000_set_radio_freq(struct dvb_frontend *fe,
981 	struct analog_parameters *params)
982 {
983 	struct xc5000_priv *priv = fe->tuner_priv;
984 	int ret = -EINVAL;
985 	u8 radio_input;
986 
987 	dprintk(1, "%s() frequency=%d (in units of khz)\n",
988 		__func__, params->frequency);
989 
990 	if (priv->radio_input == XC5000_RADIO_NOT_CONFIGURED) {
991 		dprintk(1, "%s() radio input not configured\n", __func__);
992 		return -EINVAL;
993 	}
994 
995 	if (priv->radio_input == XC5000_RADIO_FM1)
996 		radio_input = FM_Radio_INPUT1;
997 	else if  (priv->radio_input == XC5000_RADIO_FM2)
998 		radio_input = FM_Radio_INPUT2;
999 	else if  (priv->radio_input == XC5000_RADIO_FM1_MONO)
1000 		radio_input = FM_Radio_INPUT1_MONO;
1001 	else {
1002 		dprintk(1, "%s() unknown radio input %d\n", __func__,
1003 			priv->radio_input);
1004 		return -EINVAL;
1005 	}
1006 
1007 	priv->freq_hz = params->frequency * 125 / 2;
1008 
1009 	priv->rf_mode = XC_RF_MODE_AIR;
1010 
1011 	ret = xc_SetTVStandard(priv, XC5000_Standard[radio_input].VideoMode,
1012 			       XC5000_Standard[radio_input].AudioMode, radio_input);
1013 
1014 	if (ret != XC_RESULT_SUCCESS) {
1015 		printk(KERN_ERR "xc5000: xc_SetTVStandard failed\n");
1016 		return -EREMOTEIO;
1017 	}
1018 
1019 	ret = xc_SetSignalSource(priv, priv->rf_mode);
1020 	if (ret != XC_RESULT_SUCCESS) {
1021 		printk(KERN_ERR
1022 			"xc5000: xc_SetSignalSource(%d) failed\n",
1023 			priv->rf_mode);
1024 		return -EREMOTEIO;
1025 	}
1026 
1027 	if ((priv->radio_input == XC5000_RADIO_FM1) ||
1028 				(priv->radio_input == XC5000_RADIO_FM2))
1029 		xc_write_reg(priv, XREG_OUTPUT_AMP, 0x09);
1030 	else if  (priv->radio_input == XC5000_RADIO_FM1_MONO)
1031 		xc_write_reg(priv, XREG_OUTPUT_AMP, 0x06);
1032 
1033 	xc_tune_channel(priv, priv->freq_hz, XC_TUNE_ANALOG);
1034 
1035 	return 0;
1036 }
1037 
1038 static int xc5000_set_analog_params(struct dvb_frontend *fe,
1039 			     struct analog_parameters *params)
1040 {
1041 	struct xc5000_priv *priv = fe->tuner_priv;
1042 	int ret = -EINVAL;
1043 
1044 	if (priv->i2c_props.adap == NULL)
1045 		return -EINVAL;
1046 
1047 	if (xc_load_fw_and_init_tuner(fe, 0) != XC_RESULT_SUCCESS) {
1048 		dprintk(1, "Unable to load firmware and init tuner\n");
1049 		return -EINVAL;
1050 	}
1051 
1052 	switch (params->mode) {
1053 	case V4L2_TUNER_RADIO:
1054 		ret = xc5000_set_radio_freq(fe, params);
1055 		break;
1056 	case V4L2_TUNER_ANALOG_TV:
1057 	case V4L2_TUNER_DIGITAL_TV:
1058 		ret = xc5000_set_tv_freq(fe, params);
1059 		break;
1060 	}
1061 
1062 	return ret;
1063 }
1064 
1065 
1066 static int xc5000_get_frequency(struct dvb_frontend *fe, u32 *freq)
1067 {
1068 	struct xc5000_priv *priv = fe->tuner_priv;
1069 	dprintk(1, "%s()\n", __func__);
1070 	*freq = priv->freq_hz;
1071 	return 0;
1072 }
1073 
1074 static int xc5000_get_if_frequency(struct dvb_frontend *fe, u32 *freq)
1075 {
1076 	struct xc5000_priv *priv = fe->tuner_priv;
1077 	dprintk(1, "%s()\n", __func__);
1078 	*freq = priv->if_khz * 1000;
1079 	return 0;
1080 }
1081 
1082 static int xc5000_get_bandwidth(struct dvb_frontend *fe, u32 *bw)
1083 {
1084 	struct xc5000_priv *priv = fe->tuner_priv;
1085 	dprintk(1, "%s()\n", __func__);
1086 
1087 	*bw = priv->bandwidth;
1088 	return 0;
1089 }
1090 
1091 static int xc5000_get_status(struct dvb_frontend *fe, u32 *status)
1092 {
1093 	struct xc5000_priv *priv = fe->tuner_priv;
1094 	u16 lock_status = 0;
1095 
1096 	xc_get_lock_status(priv, &lock_status);
1097 
1098 	dprintk(1, "%s() lock_status = 0x%08x\n", __func__, lock_status);
1099 
1100 	*status = lock_status;
1101 
1102 	return 0;
1103 }
1104 
1105 static int xc_load_fw_and_init_tuner(struct dvb_frontend *fe, int force)
1106 {
1107 	struct xc5000_priv *priv = fe->tuner_priv;
1108 	int ret = XC_RESULT_SUCCESS;
1109 	u16 pll_lock_status;
1110 	u16 fw_ck;
1111 
1112 	if (force || xc5000_is_firmware_loaded(fe) != XC_RESULT_SUCCESS) {
1113 
1114 fw_retry:
1115 
1116 		ret = xc5000_fwupload(fe);
1117 		if (ret != XC_RESULT_SUCCESS)
1118 			return ret;
1119 
1120 		msleep(20);
1121 
1122 		if (priv->fw_checksum_supported) {
1123 			if (xc5000_readreg(priv, XREG_FW_CHECKSUM, &fw_ck)
1124 			    != XC_RESULT_SUCCESS) {
1125 				dprintk(1, "%s() FW checksum reading failed.\n",
1126 					__func__);
1127 				goto fw_retry;
1128 			}
1129 
1130 			if (fw_ck == 0) {
1131 				dprintk(1, "%s() FW checksum failed = 0x%04x\n",
1132 					__func__, fw_ck);
1133 				goto fw_retry;
1134 			}
1135 		}
1136 
1137 		/* Start the tuner self-calibration process */
1138 		ret |= xc_initialize(priv);
1139 
1140 		if (ret != XC_RESULT_SUCCESS)
1141 			goto fw_retry;
1142 
1143 		/* Wait for calibration to complete.
1144 		 * We could continue but XC5000 will clock stretch subsequent
1145 		 * I2C transactions until calibration is complete.  This way we
1146 		 * don't have to rely on clock stretching working.
1147 		 */
1148 		xc_wait(100);
1149 
1150 		if (priv->init_status_supported) {
1151 			if (xc5000_readreg(priv, XREG_INIT_STATUS, &fw_ck) != XC_RESULT_SUCCESS) {
1152 				dprintk(1, "%s() FW failed reading init status.\n",
1153 					__func__);
1154 				goto fw_retry;
1155 			}
1156 
1157 			if (fw_ck == 0) {
1158 				dprintk(1, "%s() FW init status failed = 0x%04x\n", __func__, fw_ck);
1159 				goto fw_retry;
1160 			}
1161 		}
1162 
1163 		if (priv->pll_register_no) {
1164 			xc5000_readreg(priv, priv->pll_register_no,
1165 				       &pll_lock_status);
1166 			if (pll_lock_status > 63) {
1167 				/* PLL is unlocked, force reload of the firmware */
1168 				printk(KERN_ERR "xc5000: PLL not running after fwload.\n");
1169 				goto fw_retry;
1170 			}
1171 		}
1172 
1173 		/* Default to "CABLE" mode */
1174 		ret |= xc_write_reg(priv, XREG_SIGNALSOURCE, XC_RF_MODE_CABLE);
1175 	}
1176 
1177 	return ret;
1178 }
1179 
1180 static int xc5000_sleep(struct dvb_frontend *fe)
1181 {
1182 	int ret;
1183 
1184 	dprintk(1, "%s()\n", __func__);
1185 
1186 	/* Avoid firmware reload on slow devices */
1187 	if (no_poweroff)
1188 		return 0;
1189 
1190 	/* According to Xceive technical support, the "powerdown" register
1191 	   was removed in newer versions of the firmware.  The "supported"
1192 	   way to sleep the tuner is to pull the reset pin low for 10ms */
1193 	ret = xc5000_TunerReset(fe);
1194 	if (ret != XC_RESULT_SUCCESS) {
1195 		printk(KERN_ERR
1196 			"xc5000: %s() unable to shutdown tuner\n",
1197 			__func__);
1198 		return -EREMOTEIO;
1199 	} else
1200 		return XC_RESULT_SUCCESS;
1201 }
1202 
1203 static int xc5000_init(struct dvb_frontend *fe)
1204 {
1205 	struct xc5000_priv *priv = fe->tuner_priv;
1206 	dprintk(1, "%s()\n", __func__);
1207 
1208 	if (xc_load_fw_and_init_tuner(fe, 0) != XC_RESULT_SUCCESS) {
1209 		printk(KERN_ERR "xc5000: Unable to initialise tuner\n");
1210 		return -EREMOTEIO;
1211 	}
1212 
1213 	if (debug)
1214 		xc_debug_dump(priv);
1215 
1216 	return 0;
1217 }
1218 
1219 static int xc5000_release(struct dvb_frontend *fe)
1220 {
1221 	struct xc5000_priv *priv = fe->tuner_priv;
1222 
1223 	dprintk(1, "%s()\n", __func__);
1224 
1225 	mutex_lock(&xc5000_list_mutex);
1226 
1227 	if (priv)
1228 		hybrid_tuner_release_state(priv);
1229 
1230 	mutex_unlock(&xc5000_list_mutex);
1231 
1232 	fe->tuner_priv = NULL;
1233 
1234 	return 0;
1235 }
1236 
1237 static int xc5000_set_config(struct dvb_frontend *fe, void *priv_cfg)
1238 {
1239 	struct xc5000_priv *priv = fe->tuner_priv;
1240 	struct xc5000_config *p = priv_cfg;
1241 
1242 	dprintk(1, "%s()\n", __func__);
1243 
1244 	if (p->if_khz)
1245 		priv->if_khz = p->if_khz;
1246 
1247 	if (p->radio_input)
1248 		priv->radio_input = p->radio_input;
1249 
1250 	return 0;
1251 }
1252 
1253 
1254 static const struct dvb_tuner_ops xc5000_tuner_ops = {
1255 	.info = {
1256 		.name           = "Xceive XC5000",
1257 		.frequency_min  =    1000000,
1258 		.frequency_max  = 1023000000,
1259 		.frequency_step =      50000,
1260 	},
1261 
1262 	.release	   = xc5000_release,
1263 	.init		   = xc5000_init,
1264 	.sleep		   = xc5000_sleep,
1265 
1266 	.set_config	   = xc5000_set_config,
1267 	.set_params	   = xc5000_set_params,
1268 	.set_analog_params = xc5000_set_analog_params,
1269 	.get_frequency	   = xc5000_get_frequency,
1270 	.get_if_frequency  = xc5000_get_if_frequency,
1271 	.get_bandwidth	   = xc5000_get_bandwidth,
1272 	.get_status	   = xc5000_get_status
1273 };
1274 
1275 struct dvb_frontend *xc5000_attach(struct dvb_frontend *fe,
1276 				   struct i2c_adapter *i2c,
1277 				   const struct xc5000_config *cfg)
1278 {
1279 	struct xc5000_priv *priv = NULL;
1280 	int instance;
1281 	u16 id = 0;
1282 
1283 	dprintk(1, "%s(%d-%04x)\n", __func__,
1284 		i2c ? i2c_adapter_id(i2c) : -1,
1285 		cfg ? cfg->i2c_address : -1);
1286 
1287 	mutex_lock(&xc5000_list_mutex);
1288 
1289 	instance = hybrid_tuner_request_state(struct xc5000_priv, priv,
1290 					      hybrid_tuner_instance_list,
1291 					      i2c, cfg->i2c_address, "xc5000");
1292 	switch (instance) {
1293 	case 0:
1294 		goto fail;
1295 		break;
1296 	case 1:
1297 		/* new tuner instance */
1298 		priv->bandwidth = 6000000;
1299 		fe->tuner_priv = priv;
1300 		break;
1301 	default:
1302 		/* existing tuner instance */
1303 		fe->tuner_priv = priv;
1304 		break;
1305 	}
1306 
1307 	if (priv->if_khz == 0) {
1308 		/* If the IF hasn't been set yet, use the value provided by
1309 		   the caller (occurs in hybrid devices where the analog
1310 		   call to xc5000_attach occurs before the digital side) */
1311 		priv->if_khz = cfg->if_khz;
1312 	}
1313 
1314 	if (priv->xtal_khz == 0)
1315 		priv->xtal_khz = cfg->xtal_khz;
1316 
1317 	if (priv->radio_input == 0)
1318 		priv->radio_input = cfg->radio_input;
1319 
1320 	/* don't override chip id if it's already been set
1321 	   unless explicitly specified */
1322 	if ((priv->chip_id == 0) || (cfg->chip_id))
1323 		/* use default chip id if none specified, set to 0 so
1324 		   it can be overridden if this is a hybrid driver */
1325 		priv->chip_id = (cfg->chip_id) ? cfg->chip_id : 0;
1326 
1327 	/* Check if firmware has been loaded. It is possible that another
1328 	   instance of the driver has loaded the firmware.
1329 	 */
1330 	if (xc5000_readreg(priv, XREG_PRODUCT_ID, &id) != XC_RESULT_SUCCESS)
1331 		goto fail;
1332 
1333 	switch (id) {
1334 	case XC_PRODUCT_ID_FW_LOADED:
1335 		printk(KERN_INFO
1336 			"xc5000: Successfully identified at address 0x%02x\n",
1337 			cfg->i2c_address);
1338 		printk(KERN_INFO
1339 			"xc5000: Firmware has been loaded previously\n");
1340 		break;
1341 	case XC_PRODUCT_ID_FW_NOT_LOADED:
1342 		printk(KERN_INFO
1343 			"xc5000: Successfully identified at address 0x%02x\n",
1344 			cfg->i2c_address);
1345 		printk(KERN_INFO
1346 			"xc5000: Firmware has not been loaded previously\n");
1347 		break;
1348 	default:
1349 		printk(KERN_ERR
1350 			"xc5000: Device not found at addr 0x%02x (0x%x)\n",
1351 			cfg->i2c_address, id);
1352 		goto fail;
1353 	}
1354 
1355 	mutex_unlock(&xc5000_list_mutex);
1356 
1357 	memcpy(&fe->ops.tuner_ops, &xc5000_tuner_ops,
1358 		sizeof(struct dvb_tuner_ops));
1359 
1360 	return fe;
1361 fail:
1362 	mutex_unlock(&xc5000_list_mutex);
1363 
1364 	xc5000_release(fe);
1365 	return NULL;
1366 }
1367 EXPORT_SYMBOL(xc5000_attach);
1368 
1369 MODULE_AUTHOR("Steven Toth");
1370 MODULE_DESCRIPTION("Xceive xc5000 silicon tuner driver");
1371 MODULE_LICENSE("GPL");
1372 MODULE_FIRMWARE(XC5000A_FIRMWARE);
1373 MODULE_FIRMWARE(XC5000C_FIRMWARE);
1374