xref: /linux/drivers/media/tuners/xc5000.c (revision bd628c1bed7902ec1f24ba0fe70758949146abbe)
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 
20 #include <linux/module.h>
21 #include <linux/moduleparam.h>
22 #include <linux/videodev2.h>
23 #include <linux/delay.h>
24 #include <linux/workqueue.h>
25 #include <linux/dvb/frontend.h>
26 #include <linux/i2c.h>
27 
28 #include <media/dvb_frontend.h>
29 
30 #include "xc5000.h"
31 #include "tuner-i2c.h"
32 
33 static int debug;
34 module_param(debug, int, 0644);
35 MODULE_PARM_DESC(debug, "Turn on/off debugging (default:off).");
36 
37 static int no_poweroff;
38 module_param(no_poweroff, int, 0644);
39 MODULE_PARM_DESC(no_poweroff, "0 (default) powers device off when not used.\n"
40 	"\t\t1 keep device energized and with tuner ready all the times.\n"
41 	"\t\tFaster, but consumes more power and keeps the device hotter");
42 
43 static DEFINE_MUTEX(xc5000_list_mutex);
44 static LIST_HEAD(hybrid_tuner_instance_list);
45 
46 #define dprintk(level, fmt, arg...) if (debug >= level) \
47 	printk(KERN_INFO "%s: " fmt, "xc5000", ## arg)
48 
49 struct xc5000_priv {
50 	struct tuner_i2c_props i2c_props;
51 	struct list_head hybrid_tuner_instance_list;
52 
53 	u32 if_khz;
54 	u16 xtal_khz;
55 	u32 freq_hz, freq_offset;
56 	u32 bandwidth;
57 	u8  video_standard;
58 	unsigned int mode;
59 	u8  rf_mode;
60 	u8  radio_input;
61 	u16  output_amp;
62 
63 	int chip_id;
64 	u16 pll_register_no;
65 	u8 init_status_supported;
66 	u8 fw_checksum_supported;
67 
68 	struct dvb_frontend *fe;
69 	struct delayed_work timer_sleep;
70 
71 	const struct firmware   *firmware;
72 };
73 
74 /* Misc Defines */
75 #define MAX_TV_STANDARD			24
76 #define XC_MAX_I2C_WRITE_LENGTH		64
77 
78 /* Time to suspend after the .sleep callback is called */
79 #define XC5000_SLEEP_TIME		5000 /* ms */
80 
81 /* Signal Types */
82 #define XC_RF_MODE_AIR			0
83 #define XC_RF_MODE_CABLE		1
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 audio_mode;
157 	u16 video_mode;
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_tuner_reset(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 -EREMOTEIO;
262 	}
263 	return 0;
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 0;
301 }
302 
303 static int xc5000_tuner_reset(struct dvb_frontend *fe)
304 {
305 	struct xc5000_priv *priv = fe->tuner_priv;
306 	int ret;
307 
308 	dprintk(1, "%s()\n", __func__);
309 
310 	if (fe->callback) {
311 		ret = fe->callback(((fe->dvb) && (fe->dvb->priv)) ?
312 					   fe->dvb->priv :
313 					   priv->i2c_props.adap->algo_data,
314 					   DVB_FRONTEND_COMPONENT_TUNER,
315 					   XC5000_TUNER_RESET, 0);
316 		if (ret) {
317 			printk(KERN_ERR "xc5000: reset failed\n");
318 			return ret;
319 		}
320 	} else {
321 		printk(KERN_ERR "xc5000: no tuner reset callback function, fatal\n");
322 		return -EINVAL;
323 	}
324 	return 0;
325 }
326 
327 static int xc_write_reg(struct xc5000_priv *priv, u16 reg_addr, u16 i2c_data)
328 {
329 	u8 buf[4];
330 	int watch_dog_timer = 100;
331 	int result;
332 
333 	buf[0] = (reg_addr >> 8) & 0xFF;
334 	buf[1] = reg_addr & 0xFF;
335 	buf[2] = (i2c_data >> 8) & 0xFF;
336 	buf[3] = i2c_data & 0xFF;
337 	result = xc_send_i2c_data(priv, buf, 4);
338 	if (result == 0) {
339 		/* wait for busy flag to clear */
340 		while ((watch_dog_timer > 0) && (result == 0)) {
341 			result = xc5000_readreg(priv, XREG_BUSY, (u16 *)buf);
342 			if (result == 0) {
343 				if ((buf[0] == 0) && (buf[1] == 0)) {
344 					/* busy flag cleared */
345 					break;
346 				} else {
347 					msleep(5); /* wait 5 ms */
348 					watch_dog_timer--;
349 				}
350 			}
351 		}
352 	}
353 	if (watch_dog_timer <= 0)
354 		result = -EREMOTEIO;
355 
356 	return result;
357 }
358 
359 static int xc_load_i2c_sequence(struct dvb_frontend *fe, const u8 *i2c_sequence)
360 {
361 	struct xc5000_priv *priv = fe->tuner_priv;
362 
363 	int i, nbytes_to_send, result;
364 	unsigned int len, pos, index;
365 	u8 buf[XC_MAX_I2C_WRITE_LENGTH];
366 
367 	index = 0;
368 	while ((i2c_sequence[index] != 0xFF) ||
369 		(i2c_sequence[index + 1] != 0xFF)) {
370 		len = i2c_sequence[index] * 256 + i2c_sequence[index+1];
371 		if (len == 0x0000) {
372 			/* RESET command */
373 			result = xc5000_tuner_reset(fe);
374 			index += 2;
375 			if (result != 0)
376 				return result;
377 		} else if (len & 0x8000) {
378 			/* WAIT command */
379 			msleep(len & 0x7FFF);
380 			index += 2;
381 		} else {
382 			/* Send i2c data whilst ensuring individual transactions
383 			 * do not exceed XC_MAX_I2C_WRITE_LENGTH bytes.
384 			 */
385 			index += 2;
386 			buf[0] = i2c_sequence[index];
387 			buf[1] = i2c_sequence[index + 1];
388 			pos = 2;
389 			while (pos < len) {
390 				if ((len - pos) > XC_MAX_I2C_WRITE_LENGTH - 2)
391 					nbytes_to_send =
392 						XC_MAX_I2C_WRITE_LENGTH;
393 				else
394 					nbytes_to_send = (len - pos + 2);
395 				for (i = 2; i < nbytes_to_send; i++) {
396 					buf[i] = i2c_sequence[index + pos +
397 						i - 2];
398 				}
399 				result = xc_send_i2c_data(priv, buf,
400 					nbytes_to_send);
401 
402 				if (result != 0)
403 					return result;
404 
405 				pos += nbytes_to_send - 2;
406 			}
407 			index += len;
408 		}
409 	}
410 	return 0;
411 }
412 
413 static int xc_initialize(struct xc5000_priv *priv)
414 {
415 	dprintk(1, "%s()\n", __func__);
416 	return xc_write_reg(priv, XREG_INIT, 0);
417 }
418 
419 static int xc_set_tv_standard(struct xc5000_priv *priv,
420 	u16 video_mode, u16 audio_mode, u8 radio_mode)
421 {
422 	int ret;
423 	dprintk(1, "%s(0x%04x,0x%04x)\n", __func__, video_mode, audio_mode);
424 	if (radio_mode) {
425 		dprintk(1, "%s() Standard = %s\n",
426 			__func__,
427 			xc5000_standard[radio_mode].name);
428 	} else {
429 		dprintk(1, "%s() Standard = %s\n",
430 			__func__,
431 			xc5000_standard[priv->video_standard].name);
432 	}
433 
434 	ret = xc_write_reg(priv, XREG_VIDEO_MODE, video_mode);
435 	if (ret == 0)
436 		ret = xc_write_reg(priv, XREG_AUDIO_MODE, audio_mode);
437 
438 	return ret;
439 }
440 
441 static int xc_set_signal_source(struct xc5000_priv *priv, u16 rf_mode)
442 {
443 	dprintk(1, "%s(%d) Source = %s\n", __func__, rf_mode,
444 		rf_mode == XC_RF_MODE_AIR ? "ANTENNA" : "CABLE");
445 
446 	if ((rf_mode != XC_RF_MODE_AIR) && (rf_mode != XC_RF_MODE_CABLE)) {
447 		rf_mode = XC_RF_MODE_CABLE;
448 		printk(KERN_ERR
449 			"%s(), Invalid mode, defaulting to CABLE",
450 			__func__);
451 	}
452 	return xc_write_reg(priv, XREG_SIGNALSOURCE, rf_mode);
453 }
454 
455 static const struct dvb_tuner_ops xc5000_tuner_ops;
456 
457 static int xc_set_rf_frequency(struct xc5000_priv *priv, u32 freq_hz)
458 {
459 	u16 freq_code;
460 
461 	dprintk(1, "%s(%u)\n", __func__, freq_hz);
462 
463 	if ((freq_hz > xc5000_tuner_ops.info.frequency_max_hz) ||
464 		(freq_hz < xc5000_tuner_ops.info.frequency_min_hz))
465 		return -EINVAL;
466 
467 	freq_code = (u16)(freq_hz / 15625);
468 
469 	/* Starting in firmware version 1.1.44, Xceive recommends using the
470 	   FINERFREQ for all normal tuning (the doc indicates reg 0x03 should
471 	   only be used for fast scanning for channel lock) */
472 	return xc_write_reg(priv, XREG_FINERFREQ, freq_code);
473 }
474 
475 
476 static int xc_set_IF_frequency(struct xc5000_priv *priv, u32 freq_khz)
477 {
478 	u32 freq_code = (freq_khz * 1024)/1000;
479 	dprintk(1, "%s(freq_khz = %d) freq_code = 0x%x\n",
480 		__func__, freq_khz, freq_code);
481 
482 	return xc_write_reg(priv, XREG_IF_OUT, freq_code);
483 }
484 
485 
486 static int xc_get_adc_envelope(struct xc5000_priv *priv, u16 *adc_envelope)
487 {
488 	return xc5000_readreg(priv, XREG_ADC_ENV, adc_envelope);
489 }
490 
491 static int xc_get_frequency_error(struct xc5000_priv *priv, u32 *freq_error_hz)
492 {
493 	int result;
494 	u16 reg_data;
495 	u32 tmp;
496 
497 	result = xc5000_readreg(priv, XREG_FREQ_ERROR, &reg_data);
498 	if (result != 0)
499 		return result;
500 
501 	tmp = (u32)reg_data;
502 	(*freq_error_hz) = (tmp * 15625) / 1000;
503 	return result;
504 }
505 
506 static int xc_get_lock_status(struct xc5000_priv *priv, u16 *lock_status)
507 {
508 	return xc5000_readreg(priv, XREG_LOCK, lock_status);
509 }
510 
511 static int xc_get_version(struct xc5000_priv *priv,
512 	u8 *hw_majorversion, u8 *hw_minorversion,
513 	u8 *fw_majorversion, u8 *fw_minorversion)
514 {
515 	u16 data;
516 	int result;
517 
518 	result = xc5000_readreg(priv, XREG_VERSION, &data);
519 	if (result != 0)
520 		return result;
521 
522 	(*hw_majorversion) = (data >> 12) & 0x0F;
523 	(*hw_minorversion) = (data >>  8) & 0x0F;
524 	(*fw_majorversion) = (data >>  4) & 0x0F;
525 	(*fw_minorversion) = data & 0x0F;
526 
527 	return 0;
528 }
529 
530 static int xc_get_buildversion(struct xc5000_priv *priv, u16 *buildrev)
531 {
532 	return xc5000_readreg(priv, XREG_BUILD, buildrev);
533 }
534 
535 static int xc_get_hsync_freq(struct xc5000_priv *priv, u32 *hsync_freq_hz)
536 {
537 	u16 reg_data;
538 	int result;
539 
540 	result = xc5000_readreg(priv, XREG_HSYNC_FREQ, &reg_data);
541 	if (result != 0)
542 		return result;
543 
544 	(*hsync_freq_hz) = ((reg_data & 0x0fff) * 763)/100;
545 	return result;
546 }
547 
548 static int xc_get_frame_lines(struct xc5000_priv *priv, u16 *frame_lines)
549 {
550 	return xc5000_readreg(priv, XREG_FRAME_LINES, frame_lines);
551 }
552 
553 static int xc_get_quality(struct xc5000_priv *priv, u16 *quality)
554 {
555 	return xc5000_readreg(priv, XREG_QUALITY, quality);
556 }
557 
558 static int xc_get_analogsnr(struct xc5000_priv *priv, u16 *snr)
559 {
560 	return xc5000_readreg(priv, XREG_SNR, snr);
561 }
562 
563 static int xc_get_totalgain(struct xc5000_priv *priv, u16 *totalgain)
564 {
565 	return xc5000_readreg(priv, XREG_TOTALGAIN, totalgain);
566 }
567 
568 #define XC_TUNE_ANALOG  0
569 #define XC_TUNE_DIGITAL 1
570 static int xc_tune_channel(struct xc5000_priv *priv, u32 freq_hz, int mode)
571 {
572 	dprintk(1, "%s(%u)\n", __func__, freq_hz);
573 
574 	if (xc_set_rf_frequency(priv, freq_hz) != 0)
575 		return -EREMOTEIO;
576 
577 	return 0;
578 }
579 
580 static int xc_set_xtal(struct dvb_frontend *fe)
581 {
582 	struct xc5000_priv *priv = fe->tuner_priv;
583 	int ret = 0;
584 
585 	switch (priv->chip_id) {
586 	default:
587 	case XC5000A:
588 		/* 32.000 MHz xtal is default */
589 		break;
590 	case XC5000C:
591 		switch (priv->xtal_khz) {
592 		default:
593 		case 32000:
594 			/* 32.000 MHz xtal is default */
595 			break;
596 		case 31875:
597 			/* 31.875 MHz xtal configuration */
598 			ret = xc_write_reg(priv, 0x000f, 0x8081);
599 			break;
600 		}
601 		break;
602 	}
603 	return ret;
604 }
605 
606 static int xc5000_fwupload(struct dvb_frontend *fe,
607 			   const struct xc5000_fw_cfg *desired_fw,
608 			   const struct firmware *fw)
609 {
610 	struct xc5000_priv *priv = fe->tuner_priv;
611 	int ret;
612 
613 	/* request the firmware, this will block and timeout */
614 	dprintk(1, "waiting for firmware upload (%s)...\n",
615 		desired_fw->name);
616 
617 	priv->pll_register_no = desired_fw->pll_reg;
618 	priv->init_status_supported = desired_fw->init_status_supported;
619 	priv->fw_checksum_supported = desired_fw->fw_checksum_supported;
620 
621 
622 	dprintk(1, "firmware uploading...\n");
623 	ret = xc_load_i2c_sequence(fe,  fw->data);
624 	if (!ret) {
625 		ret = xc_set_xtal(fe);
626 		dprintk(1, "Firmware upload complete...\n");
627 	} else
628 		printk(KERN_ERR "xc5000: firmware upload failed...\n");
629 
630 	return ret;
631 }
632 
633 static void xc_debug_dump(struct xc5000_priv *priv)
634 {
635 	u16 adc_envelope;
636 	u32 freq_error_hz = 0;
637 	u16 lock_status;
638 	u32 hsync_freq_hz = 0;
639 	u16 frame_lines;
640 	u16 quality;
641 	u16 snr;
642 	u16 totalgain;
643 	u8 hw_majorversion = 0, hw_minorversion = 0;
644 	u8 fw_majorversion = 0, fw_minorversion = 0;
645 	u16 fw_buildversion = 0;
646 	u16 regval;
647 
648 	/* Wait for stats to stabilize.
649 	 * Frame Lines needs two frame times after initial lock
650 	 * before it is valid.
651 	 */
652 	msleep(100);
653 
654 	xc_get_adc_envelope(priv,  &adc_envelope);
655 	dprintk(1, "*** ADC envelope (0-1023) = %d\n", adc_envelope);
656 
657 	xc_get_frequency_error(priv, &freq_error_hz);
658 	dprintk(1, "*** Frequency error = %d Hz\n", freq_error_hz);
659 
660 	xc_get_lock_status(priv,  &lock_status);
661 	dprintk(1, "*** Lock status (0-Wait, 1-Locked, 2-No-signal) = %d\n",
662 		lock_status);
663 
664 	xc_get_version(priv,  &hw_majorversion, &hw_minorversion,
665 		&fw_majorversion, &fw_minorversion);
666 	xc_get_buildversion(priv,  &fw_buildversion);
667 	dprintk(1, "*** HW: V%d.%d, FW: V %d.%d.%d\n",
668 		hw_majorversion, hw_minorversion,
669 		fw_majorversion, fw_minorversion, fw_buildversion);
670 
671 	xc_get_hsync_freq(priv,  &hsync_freq_hz);
672 	dprintk(1, "*** Horizontal sync frequency = %d Hz\n", hsync_freq_hz);
673 
674 	xc_get_frame_lines(priv,  &frame_lines);
675 	dprintk(1, "*** Frame lines = %d\n", frame_lines);
676 
677 	xc_get_quality(priv,  &quality);
678 	dprintk(1, "*** Quality (0:<8dB, 7:>56dB) = %d\n", quality & 0x07);
679 
680 	xc_get_analogsnr(priv,  &snr);
681 	dprintk(1, "*** Unweighted analog SNR = %d dB\n", snr & 0x3f);
682 
683 	xc_get_totalgain(priv,  &totalgain);
684 	dprintk(1, "*** Total gain = %d.%d dB\n", totalgain / 256,
685 		(totalgain % 256) * 100 / 256);
686 
687 	if (priv->pll_register_no) {
688 		if (!xc5000_readreg(priv, priv->pll_register_no, &regval))
689 			dprintk(1, "*** PLL lock status = 0x%04x\n", regval);
690 	}
691 }
692 
693 static int xc5000_tune_digital(struct dvb_frontend *fe)
694 {
695 	struct xc5000_priv *priv = fe->tuner_priv;
696 	int ret;
697 	u32 bw = fe->dtv_property_cache.bandwidth_hz;
698 
699 	ret = xc_set_signal_source(priv, priv->rf_mode);
700 	if (ret != 0) {
701 		printk(KERN_ERR
702 			"xc5000: xc_set_signal_source(%d) failed\n",
703 			priv->rf_mode);
704 		return -EREMOTEIO;
705 	}
706 
707 	ret = xc_set_tv_standard(priv,
708 		xc5000_standard[priv->video_standard].video_mode,
709 		xc5000_standard[priv->video_standard].audio_mode, 0);
710 	if (ret != 0) {
711 		printk(KERN_ERR "xc5000: xc_set_tv_standard failed\n");
712 		return -EREMOTEIO;
713 	}
714 
715 	ret = xc_set_IF_frequency(priv, priv->if_khz);
716 	if (ret != 0) {
717 		printk(KERN_ERR "xc5000: xc_Set_IF_frequency(%d) failed\n",
718 		       priv->if_khz);
719 		return -EIO;
720 	}
721 
722 	dprintk(1, "%s() setting OUTPUT_AMP to 0x%x\n",
723 		__func__, priv->output_amp);
724 	xc_write_reg(priv, XREG_OUTPUT_AMP, priv->output_amp);
725 
726 	xc_tune_channel(priv, priv->freq_hz, XC_TUNE_DIGITAL);
727 
728 	if (debug)
729 		xc_debug_dump(priv);
730 
731 	priv->bandwidth = bw;
732 
733 	return 0;
734 }
735 
736 static int xc5000_set_digital_params(struct dvb_frontend *fe)
737 {
738 	int b;
739 	struct xc5000_priv *priv = fe->tuner_priv;
740 	u32 bw = fe->dtv_property_cache.bandwidth_hz;
741 	u32 freq = fe->dtv_property_cache.frequency;
742 	u32 delsys  = fe->dtv_property_cache.delivery_system;
743 
744 	if (xc_load_fw_and_init_tuner(fe, 0) != 0) {
745 		dprintk(1, "Unable to load firmware and init tuner\n");
746 		return -EINVAL;
747 	}
748 
749 	dprintk(1, "%s() frequency=%d (Hz)\n", __func__, freq);
750 
751 	switch (delsys) {
752 	case SYS_ATSC:
753 		dprintk(1, "%s() VSB modulation\n", __func__);
754 		priv->rf_mode = XC_RF_MODE_AIR;
755 		priv->freq_offset = 1750000;
756 		priv->video_standard = DTV6;
757 		break;
758 	case SYS_DVBC_ANNEX_B:
759 		dprintk(1, "%s() QAM modulation\n", __func__);
760 		priv->rf_mode = XC_RF_MODE_CABLE;
761 		priv->freq_offset = 1750000;
762 		priv->video_standard = DTV6;
763 		break;
764 	case SYS_ISDBT:
765 		/* All ISDB-T are currently for 6 MHz bw */
766 		if (!bw)
767 			bw = 6000000;
768 		/* fall to OFDM handling */
769 		/* fall through */
770 	case SYS_DMBTH:
771 	case SYS_DVBT:
772 	case SYS_DVBT2:
773 		dprintk(1, "%s() OFDM\n", __func__);
774 		switch (bw) {
775 		case 6000000:
776 			priv->video_standard = DTV6;
777 			priv->freq_offset = 1750000;
778 			break;
779 		case 7000000:
780 			priv->video_standard = DTV7;
781 			priv->freq_offset = 2250000;
782 			break;
783 		case 8000000:
784 			priv->video_standard = DTV8;
785 			priv->freq_offset = 2750000;
786 			break;
787 		default:
788 			printk(KERN_ERR "xc5000 bandwidth not set!\n");
789 			return -EINVAL;
790 		}
791 		priv->rf_mode = XC_RF_MODE_AIR;
792 		break;
793 	case SYS_DVBC_ANNEX_A:
794 	case SYS_DVBC_ANNEX_C:
795 		dprintk(1, "%s() QAM modulation\n", __func__);
796 		priv->rf_mode = XC_RF_MODE_CABLE;
797 		if (bw <= 6000000) {
798 			priv->video_standard = DTV6;
799 			priv->freq_offset = 1750000;
800 			b = 6;
801 		} else if (bw <= 7000000) {
802 			priv->video_standard = DTV7;
803 			priv->freq_offset = 2250000;
804 			b = 7;
805 		} else {
806 			priv->video_standard = DTV7_8;
807 			priv->freq_offset = 2750000;
808 			b = 8;
809 		}
810 		dprintk(1, "%s() Bandwidth %dMHz (%d)\n", __func__,
811 			b, bw);
812 		break;
813 	default:
814 		printk(KERN_ERR "xc5000: delivery system is not supported!\n");
815 		return -EINVAL;
816 	}
817 
818 	priv->freq_hz = freq - priv->freq_offset;
819 	priv->mode = V4L2_TUNER_DIGITAL_TV;
820 
821 	dprintk(1, "%s() frequency=%d (compensated to %d)\n",
822 		__func__, freq, priv->freq_hz);
823 
824 	return xc5000_tune_digital(fe);
825 }
826 
827 static int xc5000_is_firmware_loaded(struct dvb_frontend *fe)
828 {
829 	struct xc5000_priv *priv = fe->tuner_priv;
830 	int ret;
831 	u16 id;
832 
833 	ret = xc5000_readreg(priv, XREG_PRODUCT_ID, &id);
834 	if (!ret) {
835 		if (id == XC_PRODUCT_ID_FW_NOT_LOADED)
836 			ret = -ENOENT;
837 		else
838 			ret = 0;
839 		dprintk(1, "%s() returns id = 0x%x\n", __func__, id);
840 	} else {
841 		dprintk(1, "%s() returns error %d\n", __func__, ret);
842 	}
843 
844 	return ret;
845 }
846 
847 static void xc5000_config_tv(struct dvb_frontend *fe,
848 			     struct analog_parameters *params)
849 {
850 	struct xc5000_priv *priv = fe->tuner_priv;
851 
852 	dprintk(1, "%s() frequency=%d (in units of 62.5khz)\n",
853 		__func__, params->frequency);
854 
855 	/* Fix me: it could be air. */
856 	priv->rf_mode = params->mode;
857 	if (params->mode > XC_RF_MODE_CABLE)
858 		priv->rf_mode = XC_RF_MODE_CABLE;
859 
860 	/* params->frequency is in units of 62.5khz */
861 	priv->freq_hz = params->frequency * 62500;
862 
863 	/* FIX ME: Some video standards may have several possible audio
864 		   standards. We simply default to one of them here.
865 	 */
866 	if (params->std & V4L2_STD_MN) {
867 		/* default to BTSC audio standard */
868 		priv->video_standard = MN_NTSC_PAL_BTSC;
869 		return;
870 	}
871 
872 	if (params->std & V4L2_STD_PAL_BG) {
873 		/* default to NICAM audio standard */
874 		priv->video_standard = BG_PAL_NICAM;
875 		return;
876 	}
877 
878 	if (params->std & V4L2_STD_PAL_I) {
879 		/* default to NICAM audio standard */
880 		priv->video_standard = I_PAL_NICAM;
881 		return;
882 	}
883 
884 	if (params->std & V4L2_STD_PAL_DK) {
885 		/* default to NICAM audio standard */
886 		priv->video_standard = DK_PAL_NICAM;
887 		return;
888 	}
889 
890 	if (params->std & V4L2_STD_SECAM_DK) {
891 		/* default to A2 DK1 audio standard */
892 		priv->video_standard = DK_SECAM_A2DK1;
893 		return;
894 	}
895 
896 	if (params->std & V4L2_STD_SECAM_L) {
897 		priv->video_standard = L_SECAM_NICAM;
898 		return;
899 	}
900 
901 	if (params->std & V4L2_STD_SECAM_LC) {
902 		priv->video_standard = LC_SECAM_NICAM;
903 		return;
904 	}
905 }
906 
907 static int xc5000_set_tv_freq(struct dvb_frontend *fe)
908 {
909 	struct xc5000_priv *priv = fe->tuner_priv;
910 	u16 pll_lock_status;
911 	int ret;
912 
913 tune_channel:
914 	ret = xc_set_signal_source(priv, priv->rf_mode);
915 	if (ret != 0) {
916 		printk(KERN_ERR
917 			"xc5000: xc_set_signal_source(%d) failed\n",
918 			priv->rf_mode);
919 		return -EREMOTEIO;
920 	}
921 
922 	ret = xc_set_tv_standard(priv,
923 		xc5000_standard[priv->video_standard].video_mode,
924 		xc5000_standard[priv->video_standard].audio_mode, 0);
925 	if (ret != 0) {
926 		printk(KERN_ERR "xc5000: xc_set_tv_standard failed\n");
927 		return -EREMOTEIO;
928 	}
929 
930 	xc_write_reg(priv, XREG_OUTPUT_AMP, 0x09);
931 
932 	xc_tune_channel(priv, priv->freq_hz, XC_TUNE_ANALOG);
933 
934 	if (debug)
935 		xc_debug_dump(priv);
936 
937 	if (priv->pll_register_no != 0) {
938 		msleep(20);
939 		ret = xc5000_readreg(priv, priv->pll_register_no,
940 				     &pll_lock_status);
941 		if (ret)
942 			return ret;
943 		if (pll_lock_status > 63) {
944 			/* PLL is unlocked, force reload of the firmware */
945 			dprintk(1, "xc5000: PLL not locked (0x%x).  Reloading...\n",
946 				pll_lock_status);
947 			if (xc_load_fw_and_init_tuner(fe, 1) != 0) {
948 				printk(KERN_ERR "xc5000: Unable to reload fw\n");
949 				return -EREMOTEIO;
950 			}
951 			goto tune_channel;
952 		}
953 	}
954 
955 	return 0;
956 }
957 
958 static int xc5000_config_radio(struct dvb_frontend *fe,
959 			       struct analog_parameters *params)
960 
961 {
962 	struct xc5000_priv *priv = fe->tuner_priv;
963 
964 	dprintk(1, "%s() frequency=%d (in units of khz)\n",
965 		__func__, params->frequency);
966 
967 	if (priv->radio_input == XC5000_RADIO_NOT_CONFIGURED) {
968 		dprintk(1, "%s() radio input not configured\n", __func__);
969 		return -EINVAL;
970 	}
971 
972 	priv->freq_hz = params->frequency * 125 / 2;
973 	priv->rf_mode = XC_RF_MODE_AIR;
974 
975 	return 0;
976 }
977 
978 static int xc5000_set_radio_freq(struct dvb_frontend *fe)
979 {
980 	struct xc5000_priv *priv = fe->tuner_priv;
981 	int ret;
982 	u8 radio_input;
983 
984 	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 	else {
991 		dprintk(1, "%s() unknown radio input %d\n", __func__,
992 			priv->radio_input);
993 		return -EINVAL;
994 	}
995 
996 	ret = xc_set_tv_standard(priv, xc5000_standard[radio_input].video_mode,
997 			       xc5000_standard[radio_input].audio_mode, radio_input);
998 
999 	if (ret != 0) {
1000 		printk(KERN_ERR "xc5000: xc_set_tv_standard failed\n");
1001 		return -EREMOTEIO;
1002 	}
1003 
1004 	ret = xc_set_signal_source(priv, priv->rf_mode);
1005 	if (ret != 0) {
1006 		printk(KERN_ERR
1007 			"xc5000: xc_set_signal_source(%d) failed\n",
1008 			priv->rf_mode);
1009 		return -EREMOTEIO;
1010 	}
1011 
1012 	if ((priv->radio_input == XC5000_RADIO_FM1) ||
1013 				(priv->radio_input == XC5000_RADIO_FM2))
1014 		xc_write_reg(priv, XREG_OUTPUT_AMP, 0x09);
1015 	else if  (priv->radio_input == XC5000_RADIO_FM1_MONO)
1016 		xc_write_reg(priv, XREG_OUTPUT_AMP, 0x06);
1017 
1018 	xc_tune_channel(priv, priv->freq_hz, XC_TUNE_ANALOG);
1019 
1020 	return 0;
1021 }
1022 
1023 static int xc5000_set_params(struct dvb_frontend *fe)
1024 {
1025 	struct xc5000_priv *priv = fe->tuner_priv;
1026 
1027 	if (xc_load_fw_and_init_tuner(fe, 0) != 0) {
1028 		dprintk(1, "Unable to load firmware and init tuner\n");
1029 		return -EINVAL;
1030 	}
1031 
1032 	switch (priv->mode) {
1033 	case V4L2_TUNER_RADIO:
1034 		return xc5000_set_radio_freq(fe);
1035 	case V4L2_TUNER_ANALOG_TV:
1036 		return xc5000_set_tv_freq(fe);
1037 	case V4L2_TUNER_DIGITAL_TV:
1038 		return xc5000_tune_digital(fe);
1039 	}
1040 
1041 	return 0;
1042 }
1043 
1044 static int xc5000_set_analog_params(struct dvb_frontend *fe,
1045 			     struct analog_parameters *params)
1046 {
1047 	struct xc5000_priv *priv = fe->tuner_priv;
1048 	int ret;
1049 
1050 	if (priv->i2c_props.adap == NULL)
1051 		return -EINVAL;
1052 
1053 	switch (params->mode) {
1054 	case V4L2_TUNER_RADIO:
1055 		ret = xc5000_config_radio(fe, params);
1056 		if (ret)
1057 			return ret;
1058 		break;
1059 	case V4L2_TUNER_ANALOG_TV:
1060 		xc5000_config_tv(fe, params);
1061 		break;
1062 	default:
1063 		break;
1064 	}
1065 	priv->mode = params->mode;
1066 
1067 	return xc5000_set_params(fe);
1068 }
1069 
1070 static int xc5000_get_frequency(struct dvb_frontend *fe, u32 *freq)
1071 {
1072 	struct xc5000_priv *priv = fe->tuner_priv;
1073 	dprintk(1, "%s()\n", __func__);
1074 	*freq = priv->freq_hz + priv->freq_offset;
1075 	return 0;
1076 }
1077 
1078 static int xc5000_get_if_frequency(struct dvb_frontend *fe, u32 *freq)
1079 {
1080 	struct xc5000_priv *priv = fe->tuner_priv;
1081 	dprintk(1, "%s()\n", __func__);
1082 	*freq = priv->if_khz * 1000;
1083 	return 0;
1084 }
1085 
1086 static int xc5000_get_bandwidth(struct dvb_frontend *fe, u32 *bw)
1087 {
1088 	struct xc5000_priv *priv = fe->tuner_priv;
1089 	dprintk(1, "%s()\n", __func__);
1090 
1091 	*bw = priv->bandwidth;
1092 	return 0;
1093 }
1094 
1095 static int xc5000_get_status(struct dvb_frontend *fe, u32 *status)
1096 {
1097 	struct xc5000_priv *priv = fe->tuner_priv;
1098 	u16 lock_status = 0;
1099 
1100 	xc_get_lock_status(priv, &lock_status);
1101 
1102 	dprintk(1, "%s() lock_status = 0x%08x\n", __func__, lock_status);
1103 
1104 	*status = lock_status;
1105 
1106 	return 0;
1107 }
1108 
1109 static int xc_load_fw_and_init_tuner(struct dvb_frontend *fe, int force)
1110 {
1111 	struct xc5000_priv *priv = fe->tuner_priv;
1112 	const struct xc5000_fw_cfg *desired_fw = xc5000_assign_firmware(priv->chip_id);
1113 	const struct firmware *fw;
1114 	int ret, i;
1115 	u16 pll_lock_status;
1116 	u16 fw_ck;
1117 
1118 	cancel_delayed_work(&priv->timer_sleep);
1119 
1120 	if (!force && xc5000_is_firmware_loaded(fe) == 0)
1121 		return 0;
1122 
1123 	if (!priv->firmware) {
1124 		ret = request_firmware(&fw, desired_fw->name,
1125 					priv->i2c_props.adap->dev.parent);
1126 		if (ret) {
1127 			pr_err("xc5000: Upload failed. rc %d\n", ret);
1128 			return ret;
1129 		}
1130 		dprintk(1, "firmware read %zu bytes.\n", fw->size);
1131 
1132 		if (fw->size != desired_fw->size) {
1133 			pr_err("xc5000: Firmware file with incorrect size\n");
1134 			release_firmware(fw);
1135 			return -EINVAL;
1136 		}
1137 		priv->firmware = fw;
1138 	} else
1139 		fw = priv->firmware;
1140 
1141 	/* Try up to 5 times to load firmware */
1142 	for (i = 0; i < 5; i++) {
1143 		if (i)
1144 			printk(KERN_CONT " - retrying to upload firmware.\n");
1145 
1146 		ret = xc5000_fwupload(fe, desired_fw, fw);
1147 		if (ret != 0)
1148 			goto err;
1149 
1150 		msleep(20);
1151 
1152 		if (priv->fw_checksum_supported) {
1153 			if (xc5000_readreg(priv, XREG_FW_CHECKSUM, &fw_ck)) {
1154 				printk(KERN_ERR
1155 				       "xc5000: FW checksum reading failed.");
1156 				continue;
1157 			}
1158 
1159 			if (!fw_ck) {
1160 				printk(KERN_ERR
1161 				       "xc5000: FW checksum failed = 0x%04x.",
1162 				       fw_ck);
1163 				continue;
1164 			}
1165 		}
1166 
1167 		/* Start the tuner self-calibration process */
1168 		ret = xc_initialize(priv);
1169 		if (ret) {
1170 			printk(KERN_ERR "xc5000: Can't request self-calibration.");
1171 			continue;
1172 		}
1173 
1174 		/* Wait for calibration to complete.
1175 		 * We could continue but XC5000 will clock stretch subsequent
1176 		 * I2C transactions until calibration is complete.  This way we
1177 		 * don't have to rely on clock stretching working.
1178 		 */
1179 		msleep(100);
1180 
1181 		if (priv->init_status_supported) {
1182 			if (xc5000_readreg(priv, XREG_INIT_STATUS, &fw_ck)) {
1183 				printk(KERN_ERR
1184 				       "xc5000: FW failed reading init status.");
1185 				continue;
1186 			}
1187 
1188 			if (!fw_ck) {
1189 				printk(KERN_ERR
1190 				       "xc5000: FW init status failed = 0x%04x.",
1191 				       fw_ck);
1192 				continue;
1193 			}
1194 		}
1195 
1196 		if (priv->pll_register_no) {
1197 			ret = xc5000_readreg(priv, priv->pll_register_no,
1198 					     &pll_lock_status);
1199 			if (ret)
1200 				continue;
1201 			if (pll_lock_status > 63) {
1202 				/* PLL is unlocked, force reload of the firmware */
1203 				printk(KERN_ERR
1204 				       "xc5000: PLL not running after fwload.");
1205 				continue;
1206 			}
1207 		}
1208 
1209 		/* Default to "CABLE" mode */
1210 		ret = xc_write_reg(priv, XREG_SIGNALSOURCE, XC_RF_MODE_CABLE);
1211 		if (!ret)
1212 			break;
1213 		printk(KERN_ERR "xc5000: can't set to cable mode.");
1214 	}
1215 
1216 err:
1217 	if (!ret)
1218 		printk(KERN_INFO "xc5000: Firmware %s loaded and running.\n",
1219 		       desired_fw->name);
1220 	else
1221 		printk(KERN_CONT " - too many retries. Giving up\n");
1222 
1223 	return ret;
1224 }
1225 
1226 static void xc5000_do_timer_sleep(struct work_struct *timer_sleep)
1227 {
1228 	struct xc5000_priv *priv =container_of(timer_sleep, struct xc5000_priv,
1229 					       timer_sleep.work);
1230 	struct dvb_frontend *fe = priv->fe;
1231 	int ret;
1232 
1233 	dprintk(1, "%s()\n", __func__);
1234 
1235 	/* According to Xceive technical support, the "powerdown" register
1236 	   was removed in newer versions of the firmware.  The "supported"
1237 	   way to sleep the tuner is to pull the reset pin low for 10ms */
1238 	ret = xc5000_tuner_reset(fe);
1239 	if (ret != 0)
1240 		printk(KERN_ERR
1241 			"xc5000: %s() unable to shutdown tuner\n",
1242 			__func__);
1243 }
1244 
1245 static int xc5000_sleep(struct dvb_frontend *fe)
1246 {
1247 	struct xc5000_priv *priv = fe->tuner_priv;
1248 
1249 	dprintk(1, "%s()\n", __func__);
1250 
1251 	/* Avoid firmware reload on slow devices */
1252 	if (no_poweroff)
1253 		return 0;
1254 
1255 	schedule_delayed_work(&priv->timer_sleep,
1256 			      msecs_to_jiffies(XC5000_SLEEP_TIME));
1257 
1258 	return 0;
1259 }
1260 
1261 static int xc5000_suspend(struct dvb_frontend *fe)
1262 {
1263 	struct xc5000_priv *priv = fe->tuner_priv;
1264 	int ret;
1265 
1266 	dprintk(1, "%s()\n", __func__);
1267 
1268 	cancel_delayed_work(&priv->timer_sleep);
1269 
1270 	ret = xc5000_tuner_reset(fe);
1271 	if (ret != 0)
1272 		printk(KERN_ERR
1273 			"xc5000: %s() unable to shutdown tuner\n",
1274 			__func__);
1275 
1276 	return 0;
1277 }
1278 
1279 static int xc5000_resume(struct dvb_frontend *fe)
1280 {
1281 	struct xc5000_priv *priv = fe->tuner_priv;
1282 
1283 	dprintk(1, "%s()\n", __func__);
1284 
1285 	/* suspended before firmware is loaded.
1286 	   Avoid firmware load in resume path. */
1287 	if (!priv->firmware)
1288 		return 0;
1289 
1290 	return xc5000_set_params(fe);
1291 }
1292 
1293 static int xc5000_init(struct dvb_frontend *fe)
1294 {
1295 	struct xc5000_priv *priv = fe->tuner_priv;
1296 	dprintk(1, "%s()\n", __func__);
1297 
1298 	if (xc_load_fw_and_init_tuner(fe, 0) != 0) {
1299 		printk(KERN_ERR "xc5000: Unable to initialise tuner\n");
1300 		return -EREMOTEIO;
1301 	}
1302 
1303 	if (debug)
1304 		xc_debug_dump(priv);
1305 
1306 	return 0;
1307 }
1308 
1309 static void xc5000_release(struct dvb_frontend *fe)
1310 {
1311 	struct xc5000_priv *priv = fe->tuner_priv;
1312 
1313 	dprintk(1, "%s()\n", __func__);
1314 
1315 	mutex_lock(&xc5000_list_mutex);
1316 
1317 	if (priv) {
1318 		cancel_delayed_work(&priv->timer_sleep);
1319 		if (priv->firmware) {
1320 			release_firmware(priv->firmware);
1321 			priv->firmware = NULL;
1322 		}
1323 		hybrid_tuner_release_state(priv);
1324 	}
1325 
1326 	mutex_unlock(&xc5000_list_mutex);
1327 
1328 	fe->tuner_priv = NULL;
1329 }
1330 
1331 static int xc5000_set_config(struct dvb_frontend *fe, void *priv_cfg)
1332 {
1333 	struct xc5000_priv *priv = fe->tuner_priv;
1334 	struct xc5000_config *p = priv_cfg;
1335 
1336 	dprintk(1, "%s()\n", __func__);
1337 
1338 	if (p->if_khz)
1339 		priv->if_khz = p->if_khz;
1340 
1341 	if (p->radio_input)
1342 		priv->radio_input = p->radio_input;
1343 
1344 	if (p->output_amp)
1345 		priv->output_amp = p->output_amp;
1346 
1347 	return 0;
1348 }
1349 
1350 
1351 static const struct dvb_tuner_ops xc5000_tuner_ops = {
1352 	.info = {
1353 		.name              = "Xceive XC5000",
1354 		.frequency_min_hz  =    1 * MHz,
1355 		.frequency_max_hz  = 1023 * MHz,
1356 		.frequency_step_hz =   50 * kHz,
1357 	},
1358 
1359 	.release	   = xc5000_release,
1360 	.init		   = xc5000_init,
1361 	.sleep		   = xc5000_sleep,
1362 	.suspend	   = xc5000_suspend,
1363 	.resume		   = xc5000_resume,
1364 
1365 	.set_config	   = xc5000_set_config,
1366 	.set_params	   = xc5000_set_digital_params,
1367 	.set_analog_params = xc5000_set_analog_params,
1368 	.get_frequency	   = xc5000_get_frequency,
1369 	.get_if_frequency  = xc5000_get_if_frequency,
1370 	.get_bandwidth	   = xc5000_get_bandwidth,
1371 	.get_status	   = xc5000_get_status
1372 };
1373 
1374 struct dvb_frontend *xc5000_attach(struct dvb_frontend *fe,
1375 				   struct i2c_adapter *i2c,
1376 				   const struct xc5000_config *cfg)
1377 {
1378 	struct xc5000_priv *priv = NULL;
1379 	int instance;
1380 	u16 id = 0;
1381 
1382 	dprintk(1, "%s(%d-%04x)\n", __func__,
1383 		i2c ? i2c_adapter_id(i2c) : -1,
1384 		cfg ? cfg->i2c_address : -1);
1385 
1386 	mutex_lock(&xc5000_list_mutex);
1387 
1388 	instance = hybrid_tuner_request_state(struct xc5000_priv, priv,
1389 					      hybrid_tuner_instance_list,
1390 					      i2c, cfg->i2c_address, "xc5000");
1391 	switch (instance) {
1392 	case 0:
1393 		goto fail;
1394 	case 1:
1395 		/* new tuner instance */
1396 		priv->bandwidth = 6000000;
1397 		fe->tuner_priv = priv;
1398 		priv->fe = fe;
1399 		INIT_DELAYED_WORK(&priv->timer_sleep, xc5000_do_timer_sleep);
1400 		break;
1401 	default:
1402 		/* existing tuner instance */
1403 		fe->tuner_priv = priv;
1404 		break;
1405 	}
1406 
1407 	if (priv->if_khz == 0) {
1408 		/* If the IF hasn't been set yet, use the value provided by
1409 		   the caller (occurs in hybrid devices where the analog
1410 		   call to xc5000_attach occurs before the digital side) */
1411 		priv->if_khz = cfg->if_khz;
1412 	}
1413 
1414 	if (priv->xtal_khz == 0)
1415 		priv->xtal_khz = cfg->xtal_khz;
1416 
1417 	if (priv->radio_input == 0)
1418 		priv->radio_input = cfg->radio_input;
1419 
1420 	/* don't override chip id if it's already been set
1421 	   unless explicitly specified */
1422 	if ((priv->chip_id == 0) || (cfg->chip_id))
1423 		/* use default chip id if none specified, set to 0 so
1424 		   it can be overridden if this is a hybrid driver */
1425 		priv->chip_id = (cfg->chip_id) ? cfg->chip_id : 0;
1426 
1427 	/* don't override output_amp if it's already been set
1428 	   unless explicitly specified */
1429 	if ((priv->output_amp == 0) || (cfg->output_amp))
1430 		/* use default output_amp value if none specified */
1431 		priv->output_amp = (cfg->output_amp) ? cfg->output_amp : 0x8a;
1432 
1433 	/* Check if firmware has been loaded. It is possible that another
1434 	   instance of the driver has loaded the firmware.
1435 	 */
1436 	if (xc5000_readreg(priv, XREG_PRODUCT_ID, &id) != 0)
1437 		goto fail;
1438 
1439 	switch (id) {
1440 	case XC_PRODUCT_ID_FW_LOADED:
1441 		printk(KERN_INFO
1442 			"xc5000: Successfully identified at address 0x%02x\n",
1443 			cfg->i2c_address);
1444 		printk(KERN_INFO
1445 			"xc5000: Firmware has been loaded previously\n");
1446 		break;
1447 	case XC_PRODUCT_ID_FW_NOT_LOADED:
1448 		printk(KERN_INFO
1449 			"xc5000: Successfully identified at address 0x%02x\n",
1450 			cfg->i2c_address);
1451 		printk(KERN_INFO
1452 			"xc5000: Firmware has not been loaded previously\n");
1453 		break;
1454 	default:
1455 		printk(KERN_ERR
1456 			"xc5000: Device not found at addr 0x%02x (0x%x)\n",
1457 			cfg->i2c_address, id);
1458 		goto fail;
1459 	}
1460 
1461 	mutex_unlock(&xc5000_list_mutex);
1462 
1463 	memcpy(&fe->ops.tuner_ops, &xc5000_tuner_ops,
1464 		sizeof(struct dvb_tuner_ops));
1465 
1466 	return fe;
1467 fail:
1468 	mutex_unlock(&xc5000_list_mutex);
1469 
1470 	xc5000_release(fe);
1471 	return NULL;
1472 }
1473 EXPORT_SYMBOL(xc5000_attach);
1474 
1475 MODULE_AUTHOR("Steven Toth");
1476 MODULE_DESCRIPTION("Xceive xc5000 silicon tuner driver");
1477 MODULE_LICENSE("GPL");
1478 MODULE_FIRMWARE(XC5000A_FIRMWARE);
1479 MODULE_FIRMWARE(XC5000C_FIRMWARE);
1480