xref: /openbmc/linux/drivers/media/tuners/xc5000.c (revision d0b73b48)
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)
426 {
427 	int ret;
428 	dprintk(1, "%s(0x%04x,0x%04x)\n", __func__, VideoMode, AudioMode);
429 	dprintk(1, "%s() Standard = %s\n",
430 		__func__,
431 		XC5000_Standard[priv->video_standard].Name);
432 
433 	ret = xc_write_reg(priv, XREG_VIDEO_MODE, VideoMode);
434 	if (ret == XC_RESULT_SUCCESS)
435 		ret = xc_write_reg(priv, XREG_AUDIO_MODE, AudioMode);
436 
437 	return ret;
438 }
439 
440 static int xc_SetSignalSource(struct xc5000_priv *priv, u16 rf_mode)
441 {
442 	dprintk(1, "%s(%d) Source = %s\n", __func__, rf_mode,
443 		rf_mode == XC_RF_MODE_AIR ? "ANTENNA" : "CABLE");
444 
445 	if ((rf_mode != XC_RF_MODE_AIR) && (rf_mode != XC_RF_MODE_CABLE)) {
446 		rf_mode = XC_RF_MODE_CABLE;
447 		printk(KERN_ERR
448 			"%s(), Invalid mode, defaulting to CABLE",
449 			__func__);
450 	}
451 	return xc_write_reg(priv, XREG_SIGNALSOURCE, rf_mode);
452 }
453 
454 static const struct dvb_tuner_ops xc5000_tuner_ops;
455 
456 static int xc_set_RF_frequency(struct xc5000_priv *priv, u32 freq_hz)
457 {
458 	u16 freq_code;
459 
460 	dprintk(1, "%s(%u)\n", __func__, freq_hz);
461 
462 	if ((freq_hz > xc5000_tuner_ops.info.frequency_max) ||
463 		(freq_hz < xc5000_tuner_ops.info.frequency_min))
464 		return XC_RESULT_OUT_OF_RANGE;
465 
466 	freq_code = (u16)(freq_hz / 15625);
467 
468 	/* Starting in firmware version 1.1.44, Xceive recommends using the
469 	   FINERFREQ for all normal tuning (the doc indicates reg 0x03 should
470 	   only be used for fast scanning for channel lock) */
471 	return xc_write_reg(priv, XREG_FINERFREQ, freq_code);
472 }
473 
474 
475 static int xc_set_IF_frequency(struct xc5000_priv *priv, u32 freq_khz)
476 {
477 	u32 freq_code = (freq_khz * 1024)/1000;
478 	dprintk(1, "%s(freq_khz = %d) freq_code = 0x%x\n",
479 		__func__, freq_khz, freq_code);
480 
481 	return xc_write_reg(priv, XREG_IF_OUT, freq_code);
482 }
483 
484 
485 static int xc_get_ADC_Envelope(struct xc5000_priv *priv, u16 *adc_envelope)
486 {
487 	return xc5000_readreg(priv, XREG_ADC_ENV, adc_envelope);
488 }
489 
490 static int xc_get_frequency_error(struct xc5000_priv *priv, u32 *freq_error_hz)
491 {
492 	int result;
493 	u16 regData;
494 	u32 tmp;
495 
496 	result = xc5000_readreg(priv, XREG_FREQ_ERROR, &regData);
497 	if (result != XC_RESULT_SUCCESS)
498 		return result;
499 
500 	tmp = (u32)regData;
501 	(*freq_error_hz) = (tmp * 15625) / 1000;
502 	return result;
503 }
504 
505 static int xc_get_lock_status(struct xc5000_priv *priv, u16 *lock_status)
506 {
507 	return xc5000_readreg(priv, XREG_LOCK, lock_status);
508 }
509 
510 static int xc_get_version(struct xc5000_priv *priv,
511 	u8 *hw_majorversion, u8 *hw_minorversion,
512 	u8 *fw_majorversion, u8 *fw_minorversion)
513 {
514 	u16 data;
515 	int result;
516 
517 	result = xc5000_readreg(priv, XREG_VERSION, &data);
518 	if (result != XC_RESULT_SUCCESS)
519 		return result;
520 
521 	(*hw_majorversion) = (data >> 12) & 0x0F;
522 	(*hw_minorversion) = (data >>  8) & 0x0F;
523 	(*fw_majorversion) = (data >>  4) & 0x0F;
524 	(*fw_minorversion) = data & 0x0F;
525 
526 	return 0;
527 }
528 
529 static int xc_get_buildversion(struct xc5000_priv *priv, u16 *buildrev)
530 {
531 	return xc5000_readreg(priv, XREG_BUILD, buildrev);
532 }
533 
534 static int xc_get_hsync_freq(struct xc5000_priv *priv, u32 *hsync_freq_hz)
535 {
536 	u16 regData;
537 	int result;
538 
539 	result = xc5000_readreg(priv, XREG_HSYNC_FREQ, &regData);
540 	if (result != XC_RESULT_SUCCESS)
541 		return result;
542 
543 	(*hsync_freq_hz) = ((regData & 0x0fff) * 763)/100;
544 	return result;
545 }
546 
547 static int xc_get_frame_lines(struct xc5000_priv *priv, u16 *frame_lines)
548 {
549 	return xc5000_readreg(priv, XREG_FRAME_LINES, frame_lines);
550 }
551 
552 static int xc_get_quality(struct xc5000_priv *priv, u16 *quality)
553 {
554 	return xc5000_readreg(priv, XREG_QUALITY, quality);
555 }
556 
557 static int xc_get_analogsnr(struct xc5000_priv *priv, u16 *snr)
558 {
559 	return xc5000_readreg(priv, XREG_SNR, snr);
560 }
561 
562 static int xc_get_totalgain(struct xc5000_priv *priv, u16 *totalgain)
563 {
564 	return xc5000_readreg(priv, XREG_TOTALGAIN, totalgain);
565 }
566 
567 static u16 WaitForLock(struct xc5000_priv *priv)
568 {
569 	u16 lockState = 0;
570 	int watchDogCount = 40;
571 
572 	while ((lockState == 0) && (watchDogCount > 0)) {
573 		xc_get_lock_status(priv, &lockState);
574 		if (lockState != 1) {
575 			xc_wait(5);
576 			watchDogCount--;
577 		}
578 	}
579 	return lockState;
580 }
581 
582 #define XC_TUNE_ANALOG  0
583 #define XC_TUNE_DIGITAL 1
584 static int xc_tune_channel(struct xc5000_priv *priv, u32 freq_hz, int mode)
585 {
586 	int found = 0;
587 
588 	dprintk(1, "%s(%u)\n", __func__, freq_hz);
589 
590 	if (xc_set_RF_frequency(priv, freq_hz) != XC_RESULT_SUCCESS)
591 		return 0;
592 
593 	if (mode == XC_TUNE_ANALOG) {
594 		if (WaitForLock(priv) == 1)
595 			found = 1;
596 	}
597 
598 	return found;
599 }
600 
601 static int xc_set_xtal(struct dvb_frontend *fe)
602 {
603 	struct xc5000_priv *priv = fe->tuner_priv;
604 	int ret = XC_RESULT_SUCCESS;
605 
606 	switch (priv->chip_id) {
607 	default:
608 	case XC5000A:
609 		/* 32.000 MHz xtal is default */
610 		break;
611 	case XC5000C:
612 		switch (priv->xtal_khz) {
613 		default:
614 		case 32000:
615 			/* 32.000 MHz xtal is default */
616 			break;
617 		case 31875:
618 			/* 31.875 MHz xtal configuration */
619 			ret = xc_write_reg(priv, 0x000f, 0x8081);
620 			break;
621 		}
622 		break;
623 	}
624 	return ret;
625 }
626 
627 static int xc5000_fwupload(struct dvb_frontend *fe)
628 {
629 	struct xc5000_priv *priv = fe->tuner_priv;
630 	const struct firmware *fw;
631 	int ret;
632 	const struct xc5000_fw_cfg *desired_fw =
633 		xc5000_assign_firmware(priv->chip_id);
634 	priv->pll_register_no = desired_fw->pll_reg;
635 	priv->init_status_supported = desired_fw->init_status_supported;
636 	priv->fw_checksum_supported = desired_fw->fw_checksum_supported;
637 
638 	/* request the firmware, this will block and timeout */
639 	printk(KERN_INFO "xc5000: waiting for firmware upload (%s)...\n",
640 		desired_fw->name);
641 
642 	ret = request_firmware(&fw, desired_fw->name,
643 		priv->i2c_props.adap->dev.parent);
644 	if (ret) {
645 		printk(KERN_ERR "xc5000: Upload failed. (file not found?)\n");
646 		ret = XC_RESULT_RESET_FAILURE;
647 		goto out;
648 	} else {
649 		printk(KERN_DEBUG "xc5000: firmware read %Zu bytes.\n",
650 		       fw->size);
651 		ret = XC_RESULT_SUCCESS;
652 	}
653 
654 	if (fw->size != desired_fw->size) {
655 		printk(KERN_ERR "xc5000: firmware incorrect size\n");
656 		ret = XC_RESULT_RESET_FAILURE;
657 	} else {
658 		printk(KERN_INFO "xc5000: firmware uploading...\n");
659 		ret = xc_load_i2c_sequence(fe,  fw->data);
660 		if (XC_RESULT_SUCCESS == ret)
661 			ret = xc_set_xtal(fe);
662 		if (XC_RESULT_SUCCESS == ret)
663 			printk(KERN_INFO "xc5000: firmware upload complete...\n");
664 		else
665 			printk(KERN_ERR "xc5000: firmware upload failed...\n");
666 	}
667 
668 out:
669 	release_firmware(fw);
670 	return ret;
671 }
672 
673 static void xc_debug_dump(struct xc5000_priv *priv)
674 {
675 	u16 adc_envelope;
676 	u32 freq_error_hz = 0;
677 	u16 lock_status;
678 	u32 hsync_freq_hz = 0;
679 	u16 frame_lines;
680 	u16 quality;
681 	u16 snr;
682 	u16 totalgain;
683 	u8 hw_majorversion = 0, hw_minorversion = 0;
684 	u8 fw_majorversion = 0, fw_minorversion = 0;
685 	u16 fw_buildversion = 0;
686 	u16 regval;
687 
688 	/* Wait for stats to stabilize.
689 	 * Frame Lines needs two frame times after initial lock
690 	 * before it is valid.
691 	 */
692 	xc_wait(100);
693 
694 	xc_get_ADC_Envelope(priv,  &adc_envelope);
695 	dprintk(1, "*** ADC envelope (0-1023) = %d\n", adc_envelope);
696 
697 	xc_get_frequency_error(priv, &freq_error_hz);
698 	dprintk(1, "*** Frequency error = %d Hz\n", freq_error_hz);
699 
700 	xc_get_lock_status(priv,  &lock_status);
701 	dprintk(1, "*** Lock status (0-Wait, 1-Locked, 2-No-signal) = %d\n",
702 		lock_status);
703 
704 	xc_get_version(priv,  &hw_majorversion, &hw_minorversion,
705 		&fw_majorversion, &fw_minorversion);
706 	xc_get_buildversion(priv,  &fw_buildversion);
707 	dprintk(1, "*** HW: V%d.%d, FW: V %d.%d.%d\n",
708 		hw_majorversion, hw_minorversion,
709 		fw_majorversion, fw_minorversion, fw_buildversion);
710 
711 	xc_get_hsync_freq(priv,  &hsync_freq_hz);
712 	dprintk(1, "*** Horizontal sync frequency = %d Hz\n", hsync_freq_hz);
713 
714 	xc_get_frame_lines(priv,  &frame_lines);
715 	dprintk(1, "*** Frame lines = %d\n", frame_lines);
716 
717 	xc_get_quality(priv,  &quality);
718 	dprintk(1, "*** Quality (0:<8dB, 7:>56dB) = %d\n", quality & 0x07);
719 
720 	xc_get_analogsnr(priv,  &snr);
721 	dprintk(1, "*** Unweighted analog SNR = %d dB\n", snr & 0x3f);
722 
723 	xc_get_totalgain(priv,  &totalgain);
724 	dprintk(1, "*** Total gain = %d.%d dB\n", totalgain / 256,
725 		(totalgain % 256) * 100 / 256);
726 
727 	if (priv->pll_register_no) {
728 		xc5000_readreg(priv, priv->pll_register_no, &regval);
729 		dprintk(1, "*** PLL lock status = 0x%04x\n", regval);
730 	}
731 }
732 
733 static int xc5000_set_params(struct dvb_frontend *fe)
734 {
735 	int ret, b;
736 	struct xc5000_priv *priv = fe->tuner_priv;
737 	u32 bw = fe->dtv_property_cache.bandwidth_hz;
738 	u32 freq = fe->dtv_property_cache.frequency;
739 	u32 delsys  = fe->dtv_property_cache.delivery_system;
740 
741 	if (xc_load_fw_and_init_tuner(fe, 0) != XC_RESULT_SUCCESS) {
742 		dprintk(1, "Unable to load firmware and init tuner\n");
743 		return -EINVAL;
744 	}
745 
746 	dprintk(1, "%s() frequency=%d (Hz)\n", __func__, freq);
747 
748 	switch (delsys) {
749 	case SYS_ATSC:
750 		dprintk(1, "%s() VSB modulation\n", __func__);
751 		priv->rf_mode = XC_RF_MODE_AIR;
752 		priv->freq_hz = freq - 1750000;
753 		priv->video_standard = DTV6;
754 		break;
755 	case SYS_DVBC_ANNEX_B:
756 		dprintk(1, "%s() QAM modulation\n", __func__);
757 		priv->rf_mode = XC_RF_MODE_CABLE;
758 		priv->freq_hz = freq - 1750000;
759 		priv->video_standard = DTV6;
760 		break;
761 	case SYS_ISDBT:
762 		/* All ISDB-T are currently for 6 MHz bw */
763 		if (!bw)
764 			bw = 6000000;
765 		/* fall to OFDM handling */
766 	case SYS_DMBTH:
767 	case SYS_DVBT:
768 	case SYS_DVBT2:
769 		dprintk(1, "%s() OFDM\n", __func__);
770 		switch (bw) {
771 		case 6000000:
772 			priv->video_standard = DTV6;
773 			priv->freq_hz = freq - 1750000;
774 			break;
775 		case 7000000:
776 			priv->video_standard = DTV7;
777 			priv->freq_hz = freq - 2250000;
778 			break;
779 		case 8000000:
780 			priv->video_standard = DTV8;
781 			priv->freq_hz = freq - 2750000;
782 			break;
783 		default:
784 			printk(KERN_ERR "xc5000 bandwidth not set!\n");
785 			return -EINVAL;
786 		}
787 		priv->rf_mode = XC_RF_MODE_AIR;
788 	case SYS_DVBC_ANNEX_A:
789 	case SYS_DVBC_ANNEX_C:
790 		dprintk(1, "%s() QAM modulation\n", __func__);
791 		priv->rf_mode = XC_RF_MODE_CABLE;
792 		if (bw <= 6000000) {
793 			priv->video_standard = DTV6;
794 			priv->freq_hz = freq - 1750000;
795 			b = 6;
796 		} else if (bw <= 7000000) {
797 			priv->video_standard = DTV7;
798 			priv->freq_hz = freq - 2250000;
799 			b = 7;
800 		} else {
801 			priv->video_standard = DTV7_8;
802 			priv->freq_hz = freq - 2750000;
803 			b = 8;
804 		}
805 		dprintk(1, "%s() Bandwidth %dMHz (%d)\n", __func__,
806 			b, bw);
807 		break;
808 	default:
809 		printk(KERN_ERR "xc5000: delivery system is not supported!\n");
810 		return -EINVAL;
811 	}
812 
813 	dprintk(1, "%s() frequency=%d (compensated to %d)\n",
814 		__func__, freq, priv->freq_hz);
815 
816 	ret = xc_SetSignalSource(priv, priv->rf_mode);
817 	if (ret != XC_RESULT_SUCCESS) {
818 		printk(KERN_ERR
819 			"xc5000: xc_SetSignalSource(%d) failed\n",
820 			priv->rf_mode);
821 		return -EREMOTEIO;
822 	}
823 
824 	ret = xc_SetTVStandard(priv,
825 		XC5000_Standard[priv->video_standard].VideoMode,
826 		XC5000_Standard[priv->video_standard].AudioMode);
827 	if (ret != XC_RESULT_SUCCESS) {
828 		printk(KERN_ERR "xc5000: xc_SetTVStandard failed\n");
829 		return -EREMOTEIO;
830 	}
831 
832 	ret = xc_set_IF_frequency(priv, priv->if_khz);
833 	if (ret != XC_RESULT_SUCCESS) {
834 		printk(KERN_ERR "xc5000: xc_Set_IF_frequency(%d) failed\n",
835 		       priv->if_khz);
836 		return -EIO;
837 	}
838 
839 	xc_write_reg(priv, XREG_OUTPUT_AMP, 0x8a);
840 
841 	xc_tune_channel(priv, priv->freq_hz, XC_TUNE_DIGITAL);
842 
843 	if (debug)
844 		xc_debug_dump(priv);
845 
846 	priv->bandwidth = bw;
847 
848 	return 0;
849 }
850 
851 static int xc5000_is_firmware_loaded(struct dvb_frontend *fe)
852 {
853 	struct xc5000_priv *priv = fe->tuner_priv;
854 	int ret;
855 	u16 id;
856 
857 	ret = xc5000_readreg(priv, XREG_PRODUCT_ID, &id);
858 	if (ret == XC_RESULT_SUCCESS) {
859 		if (id == XC_PRODUCT_ID_FW_NOT_LOADED)
860 			ret = XC_RESULT_RESET_FAILURE;
861 		else
862 			ret = XC_RESULT_SUCCESS;
863 	}
864 
865 	dprintk(1, "%s() returns %s id = 0x%x\n", __func__,
866 		ret == XC_RESULT_SUCCESS ? "True" : "False", id);
867 	return ret;
868 }
869 
870 static int xc5000_set_tv_freq(struct dvb_frontend *fe,
871 	struct analog_parameters *params)
872 {
873 	struct xc5000_priv *priv = fe->tuner_priv;
874 	u16 pll_lock_status;
875 	int ret;
876 
877 	dprintk(1, "%s() frequency=%d (in units of 62.5khz)\n",
878 		__func__, params->frequency);
879 
880 	/* Fix me: it could be air. */
881 	priv->rf_mode = params->mode;
882 	if (params->mode > XC_RF_MODE_CABLE)
883 		priv->rf_mode = XC_RF_MODE_CABLE;
884 
885 	/* params->frequency is in units of 62.5khz */
886 	priv->freq_hz = params->frequency * 62500;
887 
888 	/* FIX ME: Some video standards may have several possible audio
889 		   standards. We simply default to one of them here.
890 	 */
891 	if (params->std & V4L2_STD_MN) {
892 		/* default to BTSC audio standard */
893 		priv->video_standard = MN_NTSC_PAL_BTSC;
894 		goto tune_channel;
895 	}
896 
897 	if (params->std & V4L2_STD_PAL_BG) {
898 		/* default to NICAM audio standard */
899 		priv->video_standard = BG_PAL_NICAM;
900 		goto tune_channel;
901 	}
902 
903 	if (params->std & V4L2_STD_PAL_I) {
904 		/* default to NICAM audio standard */
905 		priv->video_standard = I_PAL_NICAM;
906 		goto tune_channel;
907 	}
908 
909 	if (params->std & V4L2_STD_PAL_DK) {
910 		/* default to NICAM audio standard */
911 		priv->video_standard = DK_PAL_NICAM;
912 		goto tune_channel;
913 	}
914 
915 	if (params->std & V4L2_STD_SECAM_DK) {
916 		/* default to A2 DK1 audio standard */
917 		priv->video_standard = DK_SECAM_A2DK1;
918 		goto tune_channel;
919 	}
920 
921 	if (params->std & V4L2_STD_SECAM_L) {
922 		priv->video_standard = L_SECAM_NICAM;
923 		goto tune_channel;
924 	}
925 
926 	if (params->std & V4L2_STD_SECAM_LC) {
927 		priv->video_standard = LC_SECAM_NICAM;
928 		goto tune_channel;
929 	}
930 
931 tune_channel:
932 	ret = xc_SetSignalSource(priv, priv->rf_mode);
933 	if (ret != XC_RESULT_SUCCESS) {
934 		printk(KERN_ERR
935 			"xc5000: xc_SetSignalSource(%d) failed\n",
936 			priv->rf_mode);
937 		return -EREMOTEIO;
938 	}
939 
940 	ret = xc_SetTVStandard(priv,
941 		XC5000_Standard[priv->video_standard].VideoMode,
942 		XC5000_Standard[priv->video_standard].AudioMode);
943 	if (ret != XC_RESULT_SUCCESS) {
944 		printk(KERN_ERR "xc5000: xc_SetTVStandard failed\n");
945 		return -EREMOTEIO;
946 	}
947 
948 	xc_write_reg(priv, XREG_OUTPUT_AMP, 0x09);
949 
950 	xc_tune_channel(priv, priv->freq_hz, XC_TUNE_ANALOG);
951 
952 	if (debug)
953 		xc_debug_dump(priv);
954 
955 	if (priv->pll_register_no != 0) {
956 		msleep(20);
957 		xc5000_readreg(priv, priv->pll_register_no, &pll_lock_status);
958 		if (pll_lock_status > 63) {
959 			/* PLL is unlocked, force reload of the firmware */
960 			dprintk(1, "xc5000: PLL not locked (0x%x).  Reloading...\n",
961 				pll_lock_status);
962 			if (xc_load_fw_and_init_tuner(fe, 1) != XC_RESULT_SUCCESS) {
963 				printk(KERN_ERR "xc5000: Unable to reload fw\n");
964 				return -EREMOTEIO;
965 			}
966 			goto tune_channel;
967 		}
968 	}
969 
970 	return 0;
971 }
972 
973 static int xc5000_set_radio_freq(struct dvb_frontend *fe,
974 	struct analog_parameters *params)
975 {
976 	struct xc5000_priv *priv = fe->tuner_priv;
977 	int ret = -EINVAL;
978 	u8 radio_input;
979 
980 	dprintk(1, "%s() frequency=%d (in units of khz)\n",
981 		__func__, params->frequency);
982 
983 	if (priv->radio_input == XC5000_RADIO_NOT_CONFIGURED) {
984 		dprintk(1, "%s() radio input not configured\n", __func__);
985 		return -EINVAL;
986 	}
987 
988 	if (priv->radio_input == XC5000_RADIO_FM1)
989 		radio_input = FM_Radio_INPUT1;
990 	else if  (priv->radio_input == XC5000_RADIO_FM2)
991 		radio_input = FM_Radio_INPUT2;
992 	else if  (priv->radio_input == XC5000_RADIO_FM1_MONO)
993 		radio_input = FM_Radio_INPUT1_MONO;
994 	else {
995 		dprintk(1, "%s() unknown radio input %d\n", __func__,
996 			priv->radio_input);
997 		return -EINVAL;
998 	}
999 
1000 	priv->freq_hz = params->frequency * 125 / 2;
1001 
1002 	priv->rf_mode = XC_RF_MODE_AIR;
1003 
1004 	ret = xc_SetTVStandard(priv, XC5000_Standard[radio_input].VideoMode,
1005 			       XC5000_Standard[radio_input].AudioMode);
1006 
1007 	if (ret != XC_RESULT_SUCCESS) {
1008 		printk(KERN_ERR "xc5000: xc_SetTVStandard failed\n");
1009 		return -EREMOTEIO;
1010 	}
1011 
1012 	ret = xc_SetSignalSource(priv, priv->rf_mode);
1013 	if (ret != XC_RESULT_SUCCESS) {
1014 		printk(KERN_ERR
1015 			"xc5000: xc_SetSignalSource(%d) failed\n",
1016 			priv->rf_mode);
1017 		return -EREMOTEIO;
1018 	}
1019 
1020 	if ((priv->radio_input == XC5000_RADIO_FM1) ||
1021 				(priv->radio_input == XC5000_RADIO_FM2))
1022 		xc_write_reg(priv, XREG_OUTPUT_AMP, 0x09);
1023 	else if  (priv->radio_input == XC5000_RADIO_FM1_MONO)
1024 		xc_write_reg(priv, XREG_OUTPUT_AMP, 0x06);
1025 
1026 	xc_tune_channel(priv, priv->freq_hz, XC_TUNE_ANALOG);
1027 
1028 	return 0;
1029 }
1030 
1031 static int xc5000_set_analog_params(struct dvb_frontend *fe,
1032 			     struct analog_parameters *params)
1033 {
1034 	struct xc5000_priv *priv = fe->tuner_priv;
1035 	int ret = -EINVAL;
1036 
1037 	if (priv->i2c_props.adap == NULL)
1038 		return -EINVAL;
1039 
1040 	if (xc_load_fw_and_init_tuner(fe, 0) != XC_RESULT_SUCCESS) {
1041 		dprintk(1, "Unable to load firmware and init tuner\n");
1042 		return -EINVAL;
1043 	}
1044 
1045 	switch (params->mode) {
1046 	case V4L2_TUNER_RADIO:
1047 		ret = xc5000_set_radio_freq(fe, params);
1048 		break;
1049 	case V4L2_TUNER_ANALOG_TV:
1050 	case V4L2_TUNER_DIGITAL_TV:
1051 		ret = xc5000_set_tv_freq(fe, params);
1052 		break;
1053 	}
1054 
1055 	return ret;
1056 }
1057 
1058 
1059 static int xc5000_get_frequency(struct dvb_frontend *fe, u32 *freq)
1060 {
1061 	struct xc5000_priv *priv = fe->tuner_priv;
1062 	dprintk(1, "%s()\n", __func__);
1063 	*freq = priv->freq_hz;
1064 	return 0;
1065 }
1066 
1067 static int xc5000_get_if_frequency(struct dvb_frontend *fe, u32 *freq)
1068 {
1069 	struct xc5000_priv *priv = fe->tuner_priv;
1070 	dprintk(1, "%s()\n", __func__);
1071 	*freq = priv->if_khz * 1000;
1072 	return 0;
1073 }
1074 
1075 static int xc5000_get_bandwidth(struct dvb_frontend *fe, u32 *bw)
1076 {
1077 	struct xc5000_priv *priv = fe->tuner_priv;
1078 	dprintk(1, "%s()\n", __func__);
1079 
1080 	*bw = priv->bandwidth;
1081 	return 0;
1082 }
1083 
1084 static int xc5000_get_status(struct dvb_frontend *fe, u32 *status)
1085 {
1086 	struct xc5000_priv *priv = fe->tuner_priv;
1087 	u16 lock_status = 0;
1088 
1089 	xc_get_lock_status(priv, &lock_status);
1090 
1091 	dprintk(1, "%s() lock_status = 0x%08x\n", __func__, lock_status);
1092 
1093 	*status = lock_status;
1094 
1095 	return 0;
1096 }
1097 
1098 static int xc_load_fw_and_init_tuner(struct dvb_frontend *fe, int force)
1099 {
1100 	struct xc5000_priv *priv = fe->tuner_priv;
1101 	int ret = XC_RESULT_SUCCESS;
1102 	u16 pll_lock_status;
1103 	u16 fw_ck;
1104 
1105 	if (force || xc5000_is_firmware_loaded(fe) != XC_RESULT_SUCCESS) {
1106 
1107 fw_retry:
1108 
1109 		ret = xc5000_fwupload(fe);
1110 		if (ret != XC_RESULT_SUCCESS)
1111 			return ret;
1112 
1113 		msleep(20);
1114 
1115 		if (priv->fw_checksum_supported) {
1116 			if (xc5000_readreg(priv, XREG_FW_CHECKSUM, &fw_ck)
1117 			    != XC_RESULT_SUCCESS) {
1118 				dprintk(1, "%s() FW checksum reading failed.\n",
1119 					__func__);
1120 				goto fw_retry;
1121 			}
1122 
1123 			if (fw_ck == 0) {
1124 				dprintk(1, "%s() FW checksum failed = 0x%04x\n",
1125 					__func__, fw_ck);
1126 				goto fw_retry;
1127 			}
1128 		}
1129 
1130 		/* Start the tuner self-calibration process */
1131 		ret |= xc_initialize(priv);
1132 
1133 		if (ret != XC_RESULT_SUCCESS)
1134 			goto fw_retry;
1135 
1136 		/* Wait for calibration to complete.
1137 		 * We could continue but XC5000 will clock stretch subsequent
1138 		 * I2C transactions until calibration is complete.  This way we
1139 		 * don't have to rely on clock stretching working.
1140 		 */
1141 		xc_wait(100);
1142 
1143 		if (priv->init_status_supported) {
1144 			if (xc5000_readreg(priv, XREG_INIT_STATUS, &fw_ck) != XC_RESULT_SUCCESS) {
1145 				dprintk(1, "%s() FW failed reading init status.\n",
1146 					__func__);
1147 				goto fw_retry;
1148 			}
1149 
1150 			if (fw_ck == 0) {
1151 				dprintk(1, "%s() FW init status failed = 0x%04x\n", __func__, fw_ck);
1152 				goto fw_retry;
1153 			}
1154 		}
1155 
1156 		if (priv->pll_register_no) {
1157 			xc5000_readreg(priv, priv->pll_register_no,
1158 				       &pll_lock_status);
1159 			if (pll_lock_status > 63) {
1160 				/* PLL is unlocked, force reload of the firmware */
1161 				printk(KERN_ERR "xc5000: PLL not running after fwload.\n");
1162 				goto fw_retry;
1163 			}
1164 		}
1165 
1166 		/* Default to "CABLE" mode */
1167 		ret |= xc_write_reg(priv, XREG_SIGNALSOURCE, XC_RF_MODE_CABLE);
1168 	}
1169 
1170 	return ret;
1171 }
1172 
1173 static int xc5000_sleep(struct dvb_frontend *fe)
1174 {
1175 	int ret;
1176 
1177 	dprintk(1, "%s()\n", __func__);
1178 
1179 	/* Avoid firmware reload on slow devices */
1180 	if (no_poweroff)
1181 		return 0;
1182 
1183 	/* According to Xceive technical support, the "powerdown" register
1184 	   was removed in newer versions of the firmware.  The "supported"
1185 	   way to sleep the tuner is to pull the reset pin low for 10ms */
1186 	ret = xc5000_TunerReset(fe);
1187 	if (ret != XC_RESULT_SUCCESS) {
1188 		printk(KERN_ERR
1189 			"xc5000: %s() unable to shutdown tuner\n",
1190 			__func__);
1191 		return -EREMOTEIO;
1192 	} else
1193 		return XC_RESULT_SUCCESS;
1194 }
1195 
1196 static int xc5000_init(struct dvb_frontend *fe)
1197 {
1198 	struct xc5000_priv *priv = fe->tuner_priv;
1199 	dprintk(1, "%s()\n", __func__);
1200 
1201 	if (xc_load_fw_and_init_tuner(fe, 0) != XC_RESULT_SUCCESS) {
1202 		printk(KERN_ERR "xc5000: Unable to initialise tuner\n");
1203 		return -EREMOTEIO;
1204 	}
1205 
1206 	if (debug)
1207 		xc_debug_dump(priv);
1208 
1209 	return 0;
1210 }
1211 
1212 static int xc5000_release(struct dvb_frontend *fe)
1213 {
1214 	struct xc5000_priv *priv = fe->tuner_priv;
1215 
1216 	dprintk(1, "%s()\n", __func__);
1217 
1218 	mutex_lock(&xc5000_list_mutex);
1219 
1220 	if (priv)
1221 		hybrid_tuner_release_state(priv);
1222 
1223 	mutex_unlock(&xc5000_list_mutex);
1224 
1225 	fe->tuner_priv = NULL;
1226 
1227 	return 0;
1228 }
1229 
1230 static int xc5000_set_config(struct dvb_frontend *fe, void *priv_cfg)
1231 {
1232 	struct xc5000_priv *priv = fe->tuner_priv;
1233 	struct xc5000_config *p = priv_cfg;
1234 
1235 	dprintk(1, "%s()\n", __func__);
1236 
1237 	if (p->if_khz)
1238 		priv->if_khz = p->if_khz;
1239 
1240 	if (p->radio_input)
1241 		priv->radio_input = p->radio_input;
1242 
1243 	return 0;
1244 }
1245 
1246 
1247 static const struct dvb_tuner_ops xc5000_tuner_ops = {
1248 	.info = {
1249 		.name           = "Xceive XC5000",
1250 		.frequency_min  =    1000000,
1251 		.frequency_max  = 1023000000,
1252 		.frequency_step =      50000,
1253 	},
1254 
1255 	.release	   = xc5000_release,
1256 	.init		   = xc5000_init,
1257 	.sleep		   = xc5000_sleep,
1258 
1259 	.set_config	   = xc5000_set_config,
1260 	.set_params	   = xc5000_set_params,
1261 	.set_analog_params = xc5000_set_analog_params,
1262 	.get_frequency	   = xc5000_get_frequency,
1263 	.get_if_frequency  = xc5000_get_if_frequency,
1264 	.get_bandwidth	   = xc5000_get_bandwidth,
1265 	.get_status	   = xc5000_get_status
1266 };
1267 
1268 struct dvb_frontend *xc5000_attach(struct dvb_frontend *fe,
1269 				   struct i2c_adapter *i2c,
1270 				   const struct xc5000_config *cfg)
1271 {
1272 	struct xc5000_priv *priv = NULL;
1273 	int instance;
1274 	u16 id = 0;
1275 
1276 	dprintk(1, "%s(%d-%04x)\n", __func__,
1277 		i2c ? i2c_adapter_id(i2c) : -1,
1278 		cfg ? cfg->i2c_address : -1);
1279 
1280 	mutex_lock(&xc5000_list_mutex);
1281 
1282 	instance = hybrid_tuner_request_state(struct xc5000_priv, priv,
1283 					      hybrid_tuner_instance_list,
1284 					      i2c, cfg->i2c_address, "xc5000");
1285 	switch (instance) {
1286 	case 0:
1287 		goto fail;
1288 		break;
1289 	case 1:
1290 		/* new tuner instance */
1291 		priv->bandwidth = 6000000;
1292 		fe->tuner_priv = priv;
1293 		break;
1294 	default:
1295 		/* existing tuner instance */
1296 		fe->tuner_priv = priv;
1297 		break;
1298 	}
1299 
1300 	if (priv->if_khz == 0) {
1301 		/* If the IF hasn't been set yet, use the value provided by
1302 		   the caller (occurs in hybrid devices where the analog
1303 		   call to xc5000_attach occurs before the digital side) */
1304 		priv->if_khz = cfg->if_khz;
1305 	}
1306 
1307 	if (priv->xtal_khz == 0)
1308 		priv->xtal_khz = cfg->xtal_khz;
1309 
1310 	if (priv->radio_input == 0)
1311 		priv->radio_input = cfg->radio_input;
1312 
1313 	/* don't override chip id if it's already been set
1314 	   unless explicitly specified */
1315 	if ((priv->chip_id == 0) || (cfg->chip_id))
1316 		/* use default chip id if none specified, set to 0 so
1317 		   it can be overridden if this is a hybrid driver */
1318 		priv->chip_id = (cfg->chip_id) ? cfg->chip_id : 0;
1319 
1320 	/* Check if firmware has been loaded. It is possible that another
1321 	   instance of the driver has loaded the firmware.
1322 	 */
1323 	if (xc5000_readreg(priv, XREG_PRODUCT_ID, &id) != XC_RESULT_SUCCESS)
1324 		goto fail;
1325 
1326 	switch (id) {
1327 	case XC_PRODUCT_ID_FW_LOADED:
1328 		printk(KERN_INFO
1329 			"xc5000: Successfully identified at address 0x%02x\n",
1330 			cfg->i2c_address);
1331 		printk(KERN_INFO
1332 			"xc5000: Firmware has been loaded previously\n");
1333 		break;
1334 	case XC_PRODUCT_ID_FW_NOT_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 not been loaded previously\n");
1340 		break;
1341 	default:
1342 		printk(KERN_ERR
1343 			"xc5000: Device not found at addr 0x%02x (0x%x)\n",
1344 			cfg->i2c_address, id);
1345 		goto fail;
1346 	}
1347 
1348 	mutex_unlock(&xc5000_list_mutex);
1349 
1350 	memcpy(&fe->ops.tuner_ops, &xc5000_tuner_ops,
1351 		sizeof(struct dvb_tuner_ops));
1352 
1353 	return fe;
1354 fail:
1355 	mutex_unlock(&xc5000_list_mutex);
1356 
1357 	xc5000_release(fe);
1358 	return NULL;
1359 }
1360 EXPORT_SYMBOL(xc5000_attach);
1361 
1362 MODULE_AUTHOR("Steven Toth");
1363 MODULE_DESCRIPTION("Xceive xc5000 silicon tuner driver");
1364 MODULE_LICENSE("GPL");
1365 MODULE_FIRMWARE(XC5000A_FIRMWARE);
1366 MODULE_FIRMWARE(XC5000C_FIRMWARE);
1367