2 * Driver for Xceive XC4000 "QAM/8VSB single chip tuner"
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 * Copyright (c) 2009 Davide Ferri <d.ferri@zero11.it>
9 * This program is free software; you can redistribute it and/or modify
10 * it under the terms of the GNU General Public License as published by
11 * the Free Software Foundation; either version 2 of the License, or
12 * (at your option) any later version.
14 * This program is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
20 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, write to the Free Software
22 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
25 #include <linux/module.h>
26 #include <linux/moduleparam.h>
27 #include <linux/videodev2.h>
28 #include <linux/delay.h>
29 #include <linux/dvb/frontend.h>
30 #include <linux/i2c.h>
31 #include <linux/mutex.h>
32 #include <asm/unaligned.h>
34 #include "dvb_frontend.h"
37 #include "tuner-i2c.h"
38 #include "tuner-xc2028-types.h"
41 module_param(debug, int, 0644);
42 MODULE_PARM_DESC(debug, "\n\t\tDebugging level (0 to 2, default: 0 (off)).");
44 static int no_poweroff;
45 module_param(no_poweroff, int, 0644);
46 MODULE_PARM_DESC(no_poweroff, "\n\t\t1: keep device energized and with tuner "
47 "ready all the times.\n"
48 "\t\tFaster, but consumes more power and keeps the device hotter.\n"
49 "\t\t2: powers device off when not used.\n"
50 "\t\t0 (default): use device-specific default mode.");
52 #define XC4000_AUDIO_STD_B 1
53 #define XC4000_AUDIO_STD_A2 2
54 #define XC4000_AUDIO_STD_K3 4
55 #define XC4000_AUDIO_STD_L 8
56 #define XC4000_AUDIO_STD_INPUT1 16
57 #define XC4000_AUDIO_STD_MONO 32
60 module_param(audio_std, int, 0644);
61 MODULE_PARM_DESC(audio_std, "\n\t\tAudio standard. XC4000 audio decoder "
62 "explicitly needs to know\n"
63 "\t\twhat audio standard is needed for some video standards with\n"
64 "\t\taudio A2 or NICAM.\n"
65 "\t\tThe valid settings are a sum of:\n"
66 "\t\t 1: use NICAM/B or A2/B instead of NICAM/A or A2/A\n"
67 "\t\t 2: use A2 instead of NICAM or BTSC\n"
68 "\t\t 4: use SECAM/K3 instead of K1\n"
69 "\t\t 8: use PAL-D/K audio for SECAM-D/K\n"
70 "\t\t16: use FM radio input 1 instead of input 2\n"
71 "\t\t32: use mono audio (the lower three bits are ignored)");
73 #define XC4000_DEFAULT_FIRMWARE "xc4000.fw"
75 static char firmware_name[30];
76 module_param_string(firmware_name, firmware_name, sizeof(firmware_name), 0);
77 MODULE_PARM_DESC(firmware_name, "\n\t\tFirmware file name. Allows overriding "
78 "the default firmware\n"
81 static DEFINE_MUTEX(xc4000_list_mutex);
82 static LIST_HEAD(hybrid_tuner_instance_list);
84 #define dprintk(level, fmt, arg...) if (debug >= level) \
85 printk(KERN_INFO "%s: " fmt, "xc4000", ## arg)
87 /* struct for storing firmware table */
88 struct firmware_description {
96 struct firmware_properties {
101 unsigned int scode_table;
106 struct tuner_i2c_props i2c_props;
107 struct list_head hybrid_tuner_instance_list;
108 struct firmware_description *firm;
117 u8 ignore_i2c_write_errors;
118 /* struct xc2028_ctrl ctrl; */
119 struct firmware_properties cur_fw;
126 #define MAX_TV_STANDARD 24
127 #define XC_MAX_I2C_WRITE_LENGTH 64
128 #define XC_POWERED_DOWN 0x80000000U
131 #define XC_RF_MODE_AIR 0
132 #define XC_RF_MODE_CABLE 1
135 #define XC_RESULT_SUCCESS 0
136 #define XC_RESULT_RESET_FAILURE 1
137 #define XC_RESULT_I2C_WRITE_FAILURE 2
138 #define XC_RESULT_I2C_READ_FAILURE 3
139 #define XC_RESULT_OUT_OF_RANGE 5
142 #define XC_PRODUCT_ID_FW_NOT_LOADED 0x2000
143 #define XC_PRODUCT_ID_FW_LOADED 0x0FA0
145 /* Registers (Write-only) */
146 #define XREG_INIT 0x00
147 #define XREG_VIDEO_MODE 0x01
148 #define XREG_AUDIO_MODE 0x02
149 #define XREG_RF_FREQ 0x03
150 #define XREG_D_CODE 0x04
151 #define XREG_DIRECTSITTING_MODE 0x05
152 #define XREG_SEEK_MODE 0x06
153 #define XREG_POWER_DOWN 0x08
154 #define XREG_SIGNALSOURCE 0x0A
155 #define XREG_SMOOTHEDCVBS 0x0E
156 #define XREG_AMPLITUDE 0x10
158 /* Registers (Read-only) */
159 #define XREG_ADC_ENV 0x00
160 #define XREG_QUALITY 0x01
161 #define XREG_FRAME_LINES 0x02
162 #define XREG_HSYNC_FREQ 0x03
163 #define XREG_LOCK 0x04
164 #define XREG_FREQ_ERROR 0x05
165 #define XREG_SNR 0x06
166 #define XREG_VERSION 0x07
167 #define XREG_PRODUCT_ID 0x08
170 Basic firmware description. This will remain with
171 the driver for documentation purposes.
173 This represents an I2C firmware file encoded as a
174 string of unsigned char. Format is as follows:
176 char[0 ]=len0_MSB -> len = len_MSB * 256 + len_LSB
177 char[1 ]=len0_LSB -> length of first write transaction
178 char[2 ]=data0 -> first byte to be sent
182 char[M ]=dataN -> last byte to be sent
183 char[M+1]=len1_MSB -> len = len_MSB * 256 + len_LSB
184 char[M+2]=len1_LSB -> length of second write transaction
190 The [len] value should be interpreted as follows:
192 len= len_MSB _ len_LSB
193 len=1111_1111_1111_1111 : End of I2C_SEQUENCE
194 len=0000_0000_0000_0000 : Reset command: Do hardware reset
195 len=0NNN_NNNN_NNNN_NNNN : Normal transaction: number of bytes = {1:32767)
196 len=1WWW_WWWW_WWWW_WWWW : Wait command: wait for {1:32767} ms
198 For the RESET and WAIT commands, the two following bytes will contain
199 immediately the length of the following transaction.
202 struct XC_TV_STANDARD {
209 /* Tuner standards */
210 #define XC4000_MN_NTSC_PAL_BTSC 0
211 #define XC4000_MN_NTSC_PAL_A2 1
212 #define XC4000_MN_NTSC_PAL_EIAJ 2
213 #define XC4000_MN_NTSC_PAL_Mono 3
214 #define XC4000_BG_PAL_A2 4
215 #define XC4000_BG_PAL_NICAM 5
216 #define XC4000_BG_PAL_MONO 6
217 #define XC4000_I_PAL_NICAM 7
218 #define XC4000_I_PAL_NICAM_MONO 8
219 #define XC4000_DK_PAL_A2 9
220 #define XC4000_DK_PAL_NICAM 10
221 #define XC4000_DK_PAL_MONO 11
222 #define XC4000_DK_SECAM_A2DK1 12
223 #define XC4000_DK_SECAM_A2LDK3 13
224 #define XC4000_DK_SECAM_A2MONO 14
225 #define XC4000_DK_SECAM_NICAM 15
226 #define XC4000_L_SECAM_NICAM 16
227 #define XC4000_LC_SECAM_NICAM 17
228 #define XC4000_DTV6 18
229 #define XC4000_DTV8 19
230 #define XC4000_DTV7_8 20
231 #define XC4000_DTV7 21
232 #define XC4000_FM_Radio_INPUT2 22
233 #define XC4000_FM_Radio_INPUT1 23
235 static struct XC_TV_STANDARD XC4000_Standard[MAX_TV_STANDARD] = {
236 {"M/N-NTSC/PAL-BTSC", 0x0000, 0x80A0, 4500},
237 {"M/N-NTSC/PAL-A2", 0x0000, 0x80A0, 4600},
238 {"M/N-NTSC/PAL-EIAJ", 0x0040, 0x80A0, 4500},
239 {"M/N-NTSC/PAL-Mono", 0x0078, 0x80A0, 4500},
240 {"B/G-PAL-A2", 0x0000, 0x8159, 5640},
241 {"B/G-PAL-NICAM", 0x0004, 0x8159, 5740},
242 {"B/G-PAL-MONO", 0x0078, 0x8159, 5500},
243 {"I-PAL-NICAM", 0x0080, 0x8049, 6240},
244 {"I-PAL-NICAM-MONO", 0x0078, 0x8049, 6000},
245 {"D/K-PAL-A2", 0x0000, 0x8049, 6380},
246 {"D/K-PAL-NICAM", 0x0080, 0x8049, 6200},
247 {"D/K-PAL-MONO", 0x0078, 0x8049, 6500},
248 {"D/K-SECAM-A2 DK1", 0x0000, 0x8049, 6340},
249 {"D/K-SECAM-A2 L/DK3", 0x0000, 0x8049, 6000},
250 {"D/K-SECAM-A2 MONO", 0x0078, 0x8049, 6500},
251 {"D/K-SECAM-NICAM", 0x0080, 0x8049, 6200},
252 {"L-SECAM-NICAM", 0x8080, 0x0009, 6200},
253 {"L'-SECAM-NICAM", 0x8080, 0x4009, 6200},
254 {"DTV6", 0x00C0, 0x8002, 0},
255 {"DTV8", 0x00C0, 0x800B, 0},
256 {"DTV7/8", 0x00C0, 0x801B, 0},
257 {"DTV7", 0x00C0, 0x8007, 0},
258 {"FM Radio-INPUT2", 0x0008, 0x9800,10700},
259 {"FM Radio-INPUT1", 0x0008, 0x9000,10700}
262 static int xc4000_readreg(struct xc4000_priv *priv, u16 reg, u16 *val);
263 static int xc4000_TunerReset(struct dvb_frontend *fe);
264 static void xc_debug_dump(struct xc4000_priv *priv);
266 static int xc_send_i2c_data(struct xc4000_priv *priv, u8 *buf, int len)
268 struct i2c_msg msg = { .addr = priv->i2c_props.addr,
269 .flags = 0, .buf = buf, .len = len };
270 if (i2c_transfer(priv->i2c_props.adap, &msg, 1) != 1) {
271 if (priv->ignore_i2c_write_errors == 0) {
272 printk(KERN_ERR "xc4000: I2C write failed (len=%i)\n",
275 printk("bytes %02x %02x %02x %02x\n", buf[0],
276 buf[1], buf[2], buf[3]);
278 return XC_RESULT_I2C_WRITE_FAILURE;
281 return XC_RESULT_SUCCESS;
284 static void xc_wait(int wait_ms)
289 static int xc4000_TunerReset(struct dvb_frontend *fe)
291 struct xc4000_priv *priv = fe->tuner_priv;
294 dprintk(1, "%s()\n", __func__);
297 ret = fe->callback(((fe->dvb) && (fe->dvb->priv)) ?
299 priv->i2c_props.adap->algo_data,
300 DVB_FRONTEND_COMPONENT_TUNER,
301 XC4000_TUNER_RESET, 0);
303 printk(KERN_ERR "xc4000: reset failed\n");
304 return XC_RESULT_RESET_FAILURE;
307 printk(KERN_ERR "xc4000: no tuner reset callback function, fatal\n");
308 return XC_RESULT_RESET_FAILURE;
310 return XC_RESULT_SUCCESS;
313 static int xc_write_reg(struct xc4000_priv *priv, u16 regAddr, u16 i2cData)
318 buf[0] = (regAddr >> 8) & 0xFF;
319 buf[1] = regAddr & 0xFF;
320 buf[2] = (i2cData >> 8) & 0xFF;
321 buf[3] = i2cData & 0xFF;
322 result = xc_send_i2c_data(priv, buf, 4);
327 static int xc_load_i2c_sequence(struct dvb_frontend *fe, const u8 *i2c_sequence)
329 struct xc4000_priv *priv = fe->tuner_priv;
331 int i, nbytes_to_send, result;
332 unsigned int len, pos, index;
333 u8 buf[XC_MAX_I2C_WRITE_LENGTH];
336 while ((i2c_sequence[index] != 0xFF) ||
337 (i2c_sequence[index + 1] != 0xFF)) {
338 len = i2c_sequence[index] * 256 + i2c_sequence[index+1];
342 #if 0 /* not needed, as already called by check_firmware() */
343 result = xc4000_TunerReset(fe);
344 if (result != XC_RESULT_SUCCESS)
347 } else if (len & 0x8000) {
349 xc_wait(len & 0x7FFF);
352 /* Send i2c data whilst ensuring individual transactions
353 * do not exceed XC_MAX_I2C_WRITE_LENGTH bytes.
356 buf[0] = i2c_sequence[index];
357 buf[1] = i2c_sequence[index + 1];
360 if ((len - pos) > XC_MAX_I2C_WRITE_LENGTH - 2)
362 XC_MAX_I2C_WRITE_LENGTH;
364 nbytes_to_send = (len - pos + 2);
365 for (i = 2; i < nbytes_to_send; i++) {
366 buf[i] = i2c_sequence[index + pos +
369 result = xc_send_i2c_data(priv, buf,
372 if (result != XC_RESULT_SUCCESS)
375 pos += nbytes_to_send - 2;
380 return XC_RESULT_SUCCESS;
383 static int xc_SetTVStandard(struct xc4000_priv *priv,
384 u16 VideoMode, u16 AudioMode)
387 dprintk(1, "%s(0x%04x,0x%04x)\n", __func__, VideoMode, AudioMode);
388 dprintk(1, "%s() Standard = %s\n",
390 XC4000_Standard[priv->video_standard].Name);
392 /* Don't complain when the request fails because of i2c stretching */
393 priv->ignore_i2c_write_errors = 1;
395 ret = xc_write_reg(priv, XREG_VIDEO_MODE, VideoMode);
396 if (ret == XC_RESULT_SUCCESS)
397 ret = xc_write_reg(priv, XREG_AUDIO_MODE, AudioMode);
399 priv->ignore_i2c_write_errors = 0;
404 static int xc_SetSignalSource(struct xc4000_priv *priv, u16 rf_mode)
406 dprintk(1, "%s(%d) Source = %s\n", __func__, rf_mode,
407 rf_mode == XC_RF_MODE_AIR ? "ANTENNA" : "CABLE");
409 if ((rf_mode != XC_RF_MODE_AIR) && (rf_mode != XC_RF_MODE_CABLE)) {
410 rf_mode = XC_RF_MODE_CABLE;
412 "%s(), Invalid mode, defaulting to CABLE",
415 return xc_write_reg(priv, XREG_SIGNALSOURCE, rf_mode);
418 static const struct dvb_tuner_ops xc4000_tuner_ops;
420 static int xc_set_RF_frequency(struct xc4000_priv *priv, u32 freq_hz)
424 dprintk(1, "%s(%u)\n", __func__, freq_hz);
426 if ((freq_hz > xc4000_tuner_ops.info.frequency_max) ||
427 (freq_hz < xc4000_tuner_ops.info.frequency_min))
428 return XC_RESULT_OUT_OF_RANGE;
430 freq_code = (u16)(freq_hz / 15625);
432 /* WAS: Starting in firmware version 1.1.44, Xceive recommends using the
433 FINERFREQ for all normal tuning (the doc indicates reg 0x03 should
434 only be used for fast scanning for channel lock) */
435 return xc_write_reg(priv, XREG_RF_FREQ, freq_code); /* WAS: XREG_FINERFREQ */
438 static int xc_get_ADC_Envelope(struct xc4000_priv *priv, u16 *adc_envelope)
440 return xc4000_readreg(priv, XREG_ADC_ENV, adc_envelope);
443 static int xc_get_frequency_error(struct xc4000_priv *priv, u32 *freq_error_hz)
449 result = xc4000_readreg(priv, XREG_FREQ_ERROR, ®Data);
450 if (result != XC_RESULT_SUCCESS)
453 tmp = (u32)regData & 0xFFFFU;
454 tmp = (tmp < 0x8000U ? tmp : 0x10000U - tmp);
455 (*freq_error_hz) = tmp * 15625;
459 static int xc_get_lock_status(struct xc4000_priv *priv, u16 *lock_status)
461 return xc4000_readreg(priv, XREG_LOCK, lock_status);
464 static int xc_get_version(struct xc4000_priv *priv,
465 u8 *hw_majorversion, u8 *hw_minorversion,
466 u8 *fw_majorversion, u8 *fw_minorversion)
471 result = xc4000_readreg(priv, XREG_VERSION, &data);
472 if (result != XC_RESULT_SUCCESS)
475 (*hw_majorversion) = (data >> 12) & 0x0F;
476 (*hw_minorversion) = (data >> 8) & 0x0F;
477 (*fw_majorversion) = (data >> 4) & 0x0F;
478 (*fw_minorversion) = data & 0x0F;
483 static int xc_get_hsync_freq(struct xc4000_priv *priv, u32 *hsync_freq_hz)
488 result = xc4000_readreg(priv, XREG_HSYNC_FREQ, ®Data);
489 if (result != XC_RESULT_SUCCESS)
492 (*hsync_freq_hz) = ((regData & 0x0fff) * 763)/100;
496 static int xc_get_frame_lines(struct xc4000_priv *priv, u16 *frame_lines)
498 return xc4000_readreg(priv, XREG_FRAME_LINES, frame_lines);
501 static int xc_get_quality(struct xc4000_priv *priv, u16 *quality)
503 return xc4000_readreg(priv, XREG_QUALITY, quality);
506 static u16 WaitForLock(struct xc4000_priv *priv)
509 int watchDogCount = 40;
511 while ((lockState == 0) && (watchDogCount > 0)) {
512 xc_get_lock_status(priv, &lockState);
513 if (lockState != 1) {
521 static int xc_tune_channel(struct xc4000_priv *priv, u32 freq_hz)
526 dprintk(1, "%s(%u)\n", __func__, freq_hz);
528 /* Don't complain when the request fails because of i2c stretching */
529 priv->ignore_i2c_write_errors = 1;
530 result = xc_set_RF_frequency(priv, freq_hz);
531 priv->ignore_i2c_write_errors = 0;
533 if (result != XC_RESULT_SUCCESS)
536 /* wait for lock only in analog TV mode */
537 if ((priv->cur_fw.type & (FM | DTV6 | DTV7 | DTV78 | DTV8)) == 0) {
538 if (WaitForLock(priv) != 1)
542 /* Wait for stats to stabilize.
543 * Frame Lines needs two frame times after initial lock
544 * before it is valid.
546 xc_wait(debug ? 100 : 10);
554 static int xc4000_readreg(struct xc4000_priv *priv, u16 reg, u16 *val)
556 u8 buf[2] = { reg >> 8, reg & 0xff };
557 u8 bval[2] = { 0, 0 };
558 struct i2c_msg msg[2] = {
559 { .addr = priv->i2c_props.addr,
560 .flags = 0, .buf = &buf[0], .len = 2 },
561 { .addr = priv->i2c_props.addr,
562 .flags = I2C_M_RD, .buf = &bval[0], .len = 2 },
565 if (i2c_transfer(priv->i2c_props.adap, msg, 2) != 2) {
566 printk(KERN_WARNING "xc4000: I2C read failed\n");
570 *val = (bval[0] << 8) | bval[1];
571 return XC_RESULT_SUCCESS;
574 #define dump_firm_type(t) dump_firm_type_and_int_freq(t, 0)
575 static void dump_firm_type_and_int_freq(unsigned int type, u16 int_freq)
621 if (type & TOYOTA388)
622 printk("TOYOTA388 ");
623 if (type & TOYOTA794)
624 printk("TOYOTA794 ");
627 if (type & ZARLINK456)
628 printk("ZARLINK456 ");
638 printk("HAS_IF_%d ", int_freq);
641 static int seek_firmware(struct dvb_frontend *fe, unsigned int type,
644 struct xc4000_priv *priv = fe->tuner_priv;
646 unsigned int best_nr_diffs = 255U;
649 printk("Error! firmware not loaded\n");
653 if (((type & ~SCODE) == 0) && (*id == 0))
656 /* Seek for generic video standard match */
657 for (i = 0; i < priv->firm_size; i++) {
658 v4l2_std_id id_diff_mask =
659 (priv->firm[i].id ^ (*id)) & (*id);
660 unsigned int type_diff_mask =
661 (priv->firm[i].type ^ type)
662 & (BASE_TYPES | DTV_TYPES | LCD | NOGD | MONO | SCODE);
663 unsigned int nr_diffs;
666 & (BASE | INIT1 | FM | DTV6 | DTV7 | DTV78 | DTV8 | SCODE))
669 nr_diffs = hweight64(id_diff_mask) + hweight32(type_diff_mask);
670 if (!nr_diffs) /* Supports all the requested standards */
673 if (nr_diffs < best_nr_diffs) {
674 best_nr_diffs = nr_diffs;
679 /* FIXME: Would make sense to seek for type "hint" match ? */
685 if (best_nr_diffs > 0U) {
686 printk("Selecting best matching firmware (%u bits differ) for "
687 "type=", best_nr_diffs);
688 printk("(%x), id %016llx:\n", type, (unsigned long long)*id);
693 *id = priv->firm[i].id;
697 printk("%s firmware for type=", (i < 0) ? "Can't find" :
699 dump_firm_type(type);
700 printk("(%x), id %016llx.\n", type, (unsigned long long)*id);
705 static int load_firmware(struct dvb_frontend *fe, unsigned int type,
708 struct xc4000_priv *priv = fe->tuner_priv;
712 pos = seek_firmware(fe, type, id);
716 p = priv->firm[pos].ptr;
718 /* Don't complain when the request fails because of i2c stretching */
719 priv->ignore_i2c_write_errors = 1;
721 rc = xc_load_i2c_sequence(fe, p);
723 priv->ignore_i2c_write_errors = 0;
728 static int xc4000_fwupload(struct dvb_frontend *fe)
730 struct xc4000_priv *priv = fe->tuner_priv;
731 const struct firmware *fw = NULL;
732 const unsigned char *p, *endp;
738 if (firmware_name[0] != '\0')
739 fname = firmware_name;
741 fname = XC4000_DEFAULT_FIRMWARE;
743 printk("Reading firmware %s\n", fname);
744 rc = request_firmware(&fw, fname, priv->i2c_props.adap->dev.parent);
747 printk("Error: firmware %s not found.\n",
750 printk("Error %d while requesting firmware %s \n",
758 if (fw->size < sizeof(name) - 1 + 2 + 2) {
759 printk("Error: firmware file %s has invalid size!\n",
764 memcpy(name, p, sizeof(name) - 1);
765 name[sizeof(name) - 1] = 0;
766 p += sizeof(name) - 1;
768 priv->firm_version = get_unaligned_le16(p);
771 n_array = get_unaligned_le16(p);
774 dprintk(1, "Loading %d firmware images from %s, type: %s, ver %d.%d\n",
775 n_array, fname, name,
776 priv->firm_version >> 8, priv->firm_version & 0xff);
778 priv->firm = kzalloc(sizeof(*priv->firm) * n_array, GFP_KERNEL);
779 if (priv->firm == NULL) {
780 printk("Not enough memory to load firmware file.\n");
784 priv->firm_size = n_array;
794 printk("More firmware images in file than "
799 /* Checks if there's enough bytes to read */
800 if (endp - p < sizeof(type) + sizeof(id) + sizeof(size))
803 type = get_unaligned_le32(p);
806 id = get_unaligned_le64(p);
810 int_freq = get_unaligned_le16(p);
811 p += sizeof(int_freq);
812 if (endp - p < sizeof(size))
816 size = get_unaligned_le32(p);
819 if (!size || size > endp - p) {
820 printk("Firmware type (%x), id %llx is corrupted "
821 "(size=%d, expected %d)\n",
822 type, (unsigned long long)id,
823 (unsigned)(endp - p), size);
827 priv->firm[n].ptr = kzalloc(size, GFP_KERNEL);
828 if (priv->firm[n].ptr == NULL) {
829 printk("Not enough memory to load firmware file.\n");
835 printk("Reading firmware type ");
836 dump_firm_type_and_int_freq(type, int_freq);
837 printk("(%x), id %llx, size=%d.\n",
838 type, (unsigned long long)id, size);
841 memcpy(priv->firm[n].ptr, p, size);
842 priv->firm[n].type = type;
843 priv->firm[n].id = id;
844 priv->firm[n].size = size;
845 priv->firm[n].int_freq = int_freq;
850 if (n + 1 != priv->firm_size) {
851 printk("Firmware file is incomplete!\n");
858 printk("Firmware header is incomplete!\n");
861 printk("Error: firmware file is corrupted!\n");
864 printk("Releasing partially loaded firmware file.\n");
867 release_firmware(fw);
869 dprintk(1, "Firmware files loaded.\n");
874 static int load_scode(struct dvb_frontend *fe, unsigned int type,
875 v4l2_std_id *id, __u16 int_freq, int scode)
877 struct xc4000_priv *priv = fe->tuner_priv;
883 dprintk(1, "%s called int_freq=%d\n", __func__, int_freq);
886 pos = seek_firmware(fe, type, id);
890 for (pos = 0; pos < priv->firm_size; pos++) {
891 if ((priv->firm[pos].int_freq == int_freq) &&
892 (priv->firm[pos].type & HAS_IF))
895 if (pos == priv->firm_size)
899 p = priv->firm[pos].ptr;
901 if (priv->firm[pos].size != 12 * 16 || scode >= 16)
905 tuner_info("Loading SCODE for type=");
906 dump_firm_type_and_int_freq(priv->firm[pos].type,
907 priv->firm[pos].int_freq);
908 printk("(%x), id %016llx.\n", priv->firm[pos].type,
909 (unsigned long long)*id);
912 memcpy(&scode_buf[1], p, 12);
914 /* Enter direct-mode */
915 rc = xc_write_reg(priv, XREG_DIRECTSITTING_MODE, 0);
917 printk("failed to put device into direct mode!\n");
921 rc = xc_send_i2c_data(priv, scode_buf, 13);
922 if (rc != XC_RESULT_SUCCESS) {
923 /* Even if the send failed, make sure we set back to indirect
925 printk("Failed to set scode %d\n", rc);
928 /* Switch back to indirect-mode */
929 memset(indirect_mode, 0, sizeof(indirect_mode));
930 indirect_mode[4] = 0x88;
931 xc_send_i2c_data(priv, indirect_mode, sizeof(indirect_mode));
937 static int check_firmware(struct dvb_frontend *fe, unsigned int type,
938 v4l2_std_id std, __u16 int_freq)
940 struct xc4000_priv *priv = fe->tuner_priv;
941 struct firmware_properties new_fw;
942 int rc = 0, is_retry = 0;
943 u16 version = 0, hwmodel;
945 u8 hw_major, hw_minor, fw_major, fw_minor;
947 dprintk(1, "%s called\n", __func__);
950 rc = xc4000_fwupload(fe);
956 if (priv->ctrl.mts && !(type & FM))
963 new_fw.std_req = std;
964 new_fw.scode_table = SCODE /* | priv->ctrl.scode_table */;
966 new_fw.int_freq = int_freq;
968 dprintk(1, "checking firmware, user requested type=");
970 dump_firm_type(new_fw.type);
971 printk("(%x), id %016llx, ", new_fw.type,
972 (unsigned long long)new_fw.std_req);
974 printk("scode_tbl ");
976 dump_firm_type(priv->ctrl.scode_table);
977 printk("(%x), ", priv->ctrl.scode_table);
980 printk("int_freq %d, ", new_fw.int_freq);
981 printk("scode_nr %d\n", new_fw.scode_nr);
984 /* No need to reload base firmware if it matches */
985 if (priv->cur_fw.type & BASE) {
986 dprintk(1, "BASE firmware not changed.\n");
990 /* Updating BASE - forget about all currently loaded firmware */
991 memset(&priv->cur_fw, 0, sizeof(priv->cur_fw));
993 /* Reset is needed before loading firmware */
994 rc = xc4000_TunerReset(fe);
998 /* BASE firmwares are all std0 */
1000 rc = load_firmware(fe, BASE, &std0);
1002 printk("Error %d while loading base firmware\n", rc);
1006 /* Load INIT1, if needed */
1007 dprintk(1, "Load init1 firmware, if exists\n");
1009 rc = load_firmware(fe, BASE | INIT1, &std0);
1011 rc = load_firmware(fe, BASE | INIT1, &std0);
1012 if (rc < 0 && rc != -ENOENT) {
1013 tuner_err("Error %d while loading init1 firmware\n",
1020 * No need to reload standard specific firmware if base firmware
1021 * was not reloaded and requested video standards have not changed.
1023 if (priv->cur_fw.type == (BASE | new_fw.type) &&
1024 priv->cur_fw.std_req == std) {
1025 dprintk(1, "Std-specific firmware already loaded.\n");
1026 goto skip_std_specific;
1029 /* Reloading std-specific firmware forces a SCODE update */
1030 priv->cur_fw.scode_table = 0;
1032 /* Load the standard firmware */
1033 rc = load_firmware(fe, new_fw.type, &new_fw.id);
1039 if (priv->cur_fw.scode_table == new_fw.scode_table &&
1040 priv->cur_fw.scode_nr == new_fw.scode_nr) {
1041 dprintk(1, "SCODE firmware already loaded.\n");
1045 /* Load SCODE firmware, if exists */
1046 rc = load_scode(fe, new_fw.type | new_fw.scode_table, &new_fw.id,
1047 new_fw.int_freq, new_fw.scode_nr);
1048 if (rc != XC_RESULT_SUCCESS)
1049 dprintk(1, "load scode failed %d\n", rc);
1052 rc = xc4000_readreg(priv, XREG_PRODUCT_ID, &hwmodel);
1054 if (xc_get_version(priv, &hw_major, &hw_minor, &fw_major,
1055 &fw_minor) != XC_RESULT_SUCCESS) {
1056 printk("Unable to read tuner registers.\n");
1060 dprintk(1, "Device is Xceive %d version %d.%d, "
1061 "firmware version %d.%d\n",
1062 hwmodel, hw_major, hw_minor, fw_major, fw_minor);
1064 /* Check firmware version against what we downloaded. */
1066 if (priv->firm_version != ((version & 0xf0) << 4 | (version & 0x0f))) {
1067 printk("Incorrect readback of firmware version %x.\n",
1073 /* Check that the tuner hardware model remains consistent over time. */
1074 if (priv->hwmodel == 0 && hwmodel == 4000) {
1075 priv->hwmodel = hwmodel;
1076 priv->hwvers = version & 0xff00;
1077 } else if (priv->hwmodel == 0 || priv->hwmodel != hwmodel ||
1078 priv->hwvers != (version & 0xff00)) {
1079 printk("Read invalid device hardware information - tuner "
1084 memcpy(&priv->cur_fw, &new_fw, sizeof(priv->cur_fw));
1087 * By setting BASE in cur_fw.type only after successfully loading all
1088 * firmwares, we can:
1089 * 1. Identify that BASE firmware with type=0 has been loaded;
1090 * 2. Tell whether BASE firmware was just changed the next time through.
1092 priv->cur_fw.type |= BASE;
1097 memset(&priv->cur_fw, 0, sizeof(priv->cur_fw));
1101 dprintk(1, "Retrying firmware load\n");
1110 static void xc_debug_dump(struct xc4000_priv *priv)
1113 u32 freq_error_hz = 0;
1115 u32 hsync_freq_hz = 0;
1118 u8 hw_majorversion = 0, hw_minorversion = 0;
1119 u8 fw_majorversion = 0, fw_minorversion = 0;
1121 xc_get_ADC_Envelope(priv, &adc_envelope);
1122 dprintk(1, "*** ADC envelope (0-1023) = %d\n", adc_envelope);
1124 xc_get_frequency_error(priv, &freq_error_hz);
1125 dprintk(1, "*** Frequency error = %d Hz\n", freq_error_hz);
1127 xc_get_lock_status(priv, &lock_status);
1128 dprintk(1, "*** Lock status (0-Wait, 1-Locked, 2-No-signal) = %d\n",
1131 xc_get_version(priv, &hw_majorversion, &hw_minorversion,
1132 &fw_majorversion, &fw_minorversion);
1133 dprintk(1, "*** HW: V%02x.%02x, FW: V%02x.%02x\n",
1134 hw_majorversion, hw_minorversion,
1135 fw_majorversion, fw_minorversion);
1137 if (priv->video_standard < XC4000_DTV6) {
1138 xc_get_hsync_freq(priv, &hsync_freq_hz);
1139 dprintk(1, "*** Horizontal sync frequency = %d Hz\n",
1142 xc_get_frame_lines(priv, &frame_lines);
1143 dprintk(1, "*** Frame lines = %d\n", frame_lines);
1146 xc_get_quality(priv, &quality);
1147 dprintk(1, "*** Quality (0:<8dB, 7:>56dB) = %d\n", quality);
1150 static int xc4000_set_params(struct dvb_frontend *fe,
1151 struct dvb_frontend_parameters *params)
1153 struct xc4000_priv *priv = fe->tuner_priv;
1155 int ret = -EREMOTEIO;
1157 dprintk(1, "%s() frequency=%d (Hz)\n", __func__, params->frequency);
1159 mutex_lock(&priv->lock);
1161 if (fe->ops.info.type == FE_ATSC) {
1162 dprintk(1, "%s() ATSC\n", __func__);
1163 switch (params->u.vsb.modulation) {
1166 dprintk(1, "%s() VSB modulation\n", __func__);
1167 priv->rf_mode = XC_RF_MODE_AIR;
1168 priv->freq_hz = params->frequency - 1750000;
1169 priv->bandwidth = BANDWIDTH_6_MHZ;
1170 priv->video_standard = XC4000_DTV6;
1176 dprintk(1, "%s() QAM modulation\n", __func__);
1177 priv->rf_mode = XC_RF_MODE_CABLE;
1178 priv->freq_hz = params->frequency - 1750000;
1179 priv->bandwidth = BANDWIDTH_6_MHZ;
1180 priv->video_standard = XC4000_DTV6;
1187 } else if (fe->ops.info.type == FE_OFDM) {
1188 dprintk(1, "%s() OFDM\n", __func__);
1189 switch (params->u.ofdm.bandwidth) {
1190 case BANDWIDTH_6_MHZ:
1191 priv->bandwidth = BANDWIDTH_6_MHZ;
1192 priv->video_standard = XC4000_DTV6;
1193 priv->freq_hz = params->frequency - 1750000;
1196 case BANDWIDTH_7_MHZ:
1197 priv->bandwidth = BANDWIDTH_7_MHZ;
1198 priv->video_standard = XC4000_DTV7;
1199 priv->freq_hz = params->frequency - 2250000;
1202 case BANDWIDTH_8_MHZ:
1203 priv->bandwidth = BANDWIDTH_8_MHZ;
1204 priv->video_standard = XC4000_DTV8;
1205 priv->freq_hz = params->frequency - 2750000;
1208 case BANDWIDTH_AUTO:
1209 if (params->frequency < 400000000) {
1210 priv->bandwidth = BANDWIDTH_7_MHZ;
1211 priv->freq_hz = params->frequency - 2250000;
1213 priv->bandwidth = BANDWIDTH_8_MHZ;
1214 priv->freq_hz = params->frequency - 2750000;
1216 priv->video_standard = XC4000_DTV7_8;
1220 printk(KERN_ERR "xc4000 bandwidth not set!\n");
1224 priv->rf_mode = XC_RF_MODE_AIR;
1226 printk(KERN_ERR "xc4000 modulation type not supported!\n");
1231 dprintk(1, "%s() frequency=%d (compensated)\n",
1232 __func__, priv->freq_hz);
1234 /* Make sure the correct firmware type is loaded */
1235 if (check_firmware(fe, type, 0, priv->if_khz) != XC_RESULT_SUCCESS)
1238 ret = xc_SetSignalSource(priv, priv->rf_mode);
1239 if (ret != XC_RESULT_SUCCESS) {
1241 "xc4000: xc_SetSignalSource(%d) failed\n",
1245 u16 video_mode, audio_mode;
1246 video_mode = XC4000_Standard[priv->video_standard].VideoMode;
1247 audio_mode = XC4000_Standard[priv->video_standard].AudioMode;
1248 if (type == DTV6 && priv->firm_version != 0x0102)
1249 video_mode |= 0x0001;
1250 ret = xc_SetTVStandard(priv, video_mode, audio_mode);
1251 if (ret != XC_RESULT_SUCCESS) {
1252 printk(KERN_ERR "xc4000: xc_SetTVStandard failed\n");
1253 /* DJH - do not return when it fails... */
1258 if (priv->card_type == XC4000_CARD_WINFAST_CX88) {
1259 if (xc_write_reg(priv, XREG_D_CODE, 0) == 0)
1261 if (xc_write_reg(priv, XREG_AMPLITUDE,
1262 (priv->firm_version == 0x0102 ? 132 : 134))
1265 if (xc_write_reg(priv, XREG_SMOOTHEDCVBS, 1) != 0)
1268 printk(KERN_ERR "xc4000: setting registers failed\n");
1273 xc_tune_channel(priv, priv->freq_hz);
1278 mutex_unlock(&priv->lock);
1283 static int xc4000_set_analog_params(struct dvb_frontend *fe,
1284 struct analog_parameters *params)
1286 struct xc4000_priv *priv = fe->tuner_priv;
1287 unsigned int type = 0;
1288 int ret = -EREMOTEIO;
1290 if (params->mode == V4L2_TUNER_RADIO) {
1291 dprintk(1, "%s() frequency=%d (in units of 62.5Hz)\n",
1292 __func__, params->frequency);
1294 mutex_lock(&priv->lock);
1297 priv->freq_hz = params->frequency * 125L / 2;
1299 if (audio_std & XC4000_AUDIO_STD_INPUT1) {
1300 priv->video_standard = XC4000_FM_Radio_INPUT1;
1303 priv->video_standard = XC4000_FM_Radio_INPUT2;
1310 dprintk(1, "%s() frequency=%d (in units of 62.5khz)\n",
1311 __func__, params->frequency);
1313 mutex_lock(&priv->lock);
1315 /* params->frequency is in units of 62.5khz */
1316 priv->freq_hz = params->frequency * 62500;
1318 params->std &= V4L2_STD_ALL;
1319 /* if std is not defined, choose one */
1321 params->std = V4L2_STD_PAL_BG;
1323 if (audio_std & XC4000_AUDIO_STD_MONO)
1326 if (params->std & V4L2_STD_MN) {
1327 params->std = V4L2_STD_MN;
1328 if (audio_std & XC4000_AUDIO_STD_MONO) {
1329 priv->video_standard = XC4000_MN_NTSC_PAL_Mono;
1330 } else if (audio_std & XC4000_AUDIO_STD_A2) {
1331 params->std |= V4L2_STD_A2;
1332 priv->video_standard = XC4000_MN_NTSC_PAL_A2;
1334 params->std |= V4L2_STD_BTSC;
1335 priv->video_standard = XC4000_MN_NTSC_PAL_BTSC;
1340 if (params->std & V4L2_STD_PAL_BG) {
1341 params->std = V4L2_STD_PAL_BG;
1342 if (audio_std & XC4000_AUDIO_STD_MONO) {
1343 priv->video_standard = XC4000_BG_PAL_MONO;
1344 } else if (!(audio_std & XC4000_AUDIO_STD_A2)) {
1345 if (!(audio_std & XC4000_AUDIO_STD_B)) {
1346 params->std |= V4L2_STD_NICAM_A;
1347 priv->video_standard = XC4000_BG_PAL_NICAM;
1349 params->std |= V4L2_STD_NICAM_B;
1350 priv->video_standard = XC4000_BG_PAL_NICAM;
1353 if (!(audio_std & XC4000_AUDIO_STD_B)) {
1354 params->std |= V4L2_STD_A2_A;
1355 priv->video_standard = XC4000_BG_PAL_A2;
1357 params->std |= V4L2_STD_A2_B;
1358 priv->video_standard = XC4000_BG_PAL_A2;
1364 if (params->std & V4L2_STD_PAL_I) {
1365 /* default to NICAM audio standard */
1366 params->std = V4L2_STD_PAL_I | V4L2_STD_NICAM;
1367 if (audio_std & XC4000_AUDIO_STD_MONO) {
1368 priv->video_standard = XC4000_I_PAL_NICAM_MONO;
1370 priv->video_standard = XC4000_I_PAL_NICAM;
1375 if (params->std & V4L2_STD_PAL_DK) {
1376 params->std = V4L2_STD_PAL_DK;
1377 if (audio_std & XC4000_AUDIO_STD_MONO) {
1378 priv->video_standard = XC4000_DK_PAL_MONO;
1379 } else if (audio_std & XC4000_AUDIO_STD_A2) {
1380 params->std |= V4L2_STD_A2;
1381 priv->video_standard = XC4000_DK_PAL_A2;
1383 params->std |= V4L2_STD_NICAM;
1384 priv->video_standard = XC4000_DK_PAL_NICAM;
1389 if (params->std & V4L2_STD_SECAM_DK) {
1390 /* default to A2 audio standard */
1391 params->std = V4L2_STD_SECAM_DK | V4L2_STD_A2;
1392 if (audio_std & XC4000_AUDIO_STD_L) {
1394 priv->video_standard = XC4000_DK_SECAM_NICAM;
1395 } else if (audio_std & XC4000_AUDIO_STD_MONO) {
1396 priv->video_standard = XC4000_DK_SECAM_A2MONO;
1397 } else if (audio_std & XC4000_AUDIO_STD_K3) {
1398 params->std |= V4L2_STD_SECAM_K3;
1399 priv->video_standard = XC4000_DK_SECAM_A2LDK3;
1401 priv->video_standard = XC4000_DK_SECAM_A2DK1;
1406 if (params->std & V4L2_STD_SECAM_L) {
1407 /* default to NICAM audio standard */
1409 params->std = V4L2_STD_SECAM_L | V4L2_STD_NICAM;
1410 priv->video_standard = XC4000_L_SECAM_NICAM;
1414 if (params->std & V4L2_STD_SECAM_LC) {
1415 /* default to NICAM audio standard */
1417 params->std = V4L2_STD_SECAM_LC | V4L2_STD_NICAM;
1418 priv->video_standard = XC4000_LC_SECAM_NICAM;
1423 /* Fix me: it could be air. */
1424 priv->rf_mode = XC_RF_MODE_CABLE;
1426 if (check_firmware(fe, type, params->std,
1427 XC4000_Standard[priv->video_standard].int_freq)
1428 != XC_RESULT_SUCCESS) {
1432 ret = xc_SetSignalSource(priv, priv->rf_mode);
1433 if (ret != XC_RESULT_SUCCESS) {
1435 "xc4000: xc_SetSignalSource(%d) failed\n",
1439 u16 video_mode, audio_mode;
1440 video_mode = XC4000_Standard[priv->video_standard].VideoMode;
1441 audio_mode = XC4000_Standard[priv->video_standard].AudioMode;
1442 if (priv->video_standard < XC4000_BG_PAL_A2) {
1443 if (0 /*type & NOGD*/)
1444 video_mode &= 0xFF7F;
1445 } else if (priv->video_standard < XC4000_I_PAL_NICAM) {
1446 if (priv->card_type == XC4000_CARD_WINFAST_CX88 &&
1447 priv->firm_version == 0x0102)
1448 video_mode &= 0xFEFF;
1449 if (audio_std & XC4000_AUDIO_STD_B)
1450 video_mode |= 0x0080;
1452 ret = xc_SetTVStandard(priv, video_mode, audio_mode);
1453 if (ret != XC_RESULT_SUCCESS) {
1454 printk(KERN_ERR "xc4000: xc_SetTVStandard failed\n");
1459 if (priv->card_type == XC4000_CARD_WINFAST_CX88) {
1460 if (xc_write_reg(priv, XREG_D_CODE, 0) == 0)
1462 if (xc_write_reg(priv, XREG_AMPLITUDE, 1) != 0)
1464 if (xc_write_reg(priv, XREG_SMOOTHEDCVBS, 1) != 0)
1467 printk(KERN_ERR "xc4000: setting registers failed\n");
1472 xc_tune_channel(priv, priv->freq_hz);
1477 mutex_unlock(&priv->lock);
1482 static int xc4000_get_frequency(struct dvb_frontend *fe, u32 *freq)
1484 struct xc4000_priv *priv = fe->tuner_priv;
1486 *freq = priv->freq_hz;
1489 mutex_lock(&priv->lock);
1490 if ((priv->cur_fw.type
1491 & (BASE | FM | DTV6 | DTV7 | DTV78 | DTV8)) == BASE) {
1493 if (xc4000_readreg(priv, XREG_SNR, &snr) == 0) {
1494 mutex_unlock(&priv->lock);
1495 dprintk(1, "%s() freq = %u, SNR = %d\n",
1496 __func__, *freq, snr);
1500 mutex_unlock(&priv->lock);
1503 dprintk(1, "%s()\n", __func__);
1508 static int xc4000_get_bandwidth(struct dvb_frontend *fe, u32 *bw)
1510 struct xc4000_priv *priv = fe->tuner_priv;
1511 dprintk(1, "%s()\n", __func__);
1513 *bw = priv->bandwidth;
1517 static int xc4000_get_status(struct dvb_frontend *fe, u32 *status)
1519 struct xc4000_priv *priv = fe->tuner_priv;
1520 u16 lock_status = 0;
1522 mutex_lock(&priv->lock);
1524 if (priv->cur_fw.type & BASE)
1525 xc_get_lock_status(priv, &lock_status);
1527 *status = (lock_status == 1 ?
1528 TUNER_STATUS_LOCKED | TUNER_STATUS_STEREO : 0);
1529 if (priv->cur_fw.type & (DTV6 | DTV7 | DTV78 | DTV8))
1530 *status &= (~TUNER_STATUS_STEREO);
1532 mutex_unlock(&priv->lock);
1534 dprintk(2, "%s() lock_status = %d\n", __func__, lock_status);
1539 static int xc4000_sleep(struct dvb_frontend *fe)
1541 struct xc4000_priv *priv = fe->tuner_priv;
1542 int ret = XC_RESULT_SUCCESS;
1544 dprintk(1, "%s()\n", __func__);
1546 mutex_lock(&priv->lock);
1548 /* Avoid firmware reload on slow devices */
1549 if ((no_poweroff == 2 ||
1550 (no_poweroff == 0 &&
1551 priv->card_type != XC4000_CARD_WINFAST_CX88)) &&
1552 (priv->cur_fw.type & BASE) != 0) {
1553 /* force reset and firmware reload */
1554 priv->cur_fw.type = XC_POWERED_DOWN;
1556 if (xc_write_reg(priv, XREG_POWER_DOWN, 0)
1557 != XC_RESULT_SUCCESS) {
1559 "xc4000: %s() unable to shutdown tuner\n",
1566 mutex_unlock(&priv->lock);
1571 static int xc4000_init(struct dvb_frontend *fe)
1573 dprintk(1, "%s()\n", __func__);
1578 static int xc4000_release(struct dvb_frontend *fe)
1580 struct xc4000_priv *priv = fe->tuner_priv;
1582 dprintk(1, "%s()\n", __func__);
1584 mutex_lock(&xc4000_list_mutex);
1587 hybrid_tuner_release_state(priv);
1589 mutex_unlock(&xc4000_list_mutex);
1591 fe->tuner_priv = NULL;
1596 static const struct dvb_tuner_ops xc4000_tuner_ops = {
1598 .name = "Xceive XC4000",
1599 .frequency_min = 1000000,
1600 .frequency_max = 1023000000,
1601 .frequency_step = 50000,
1604 .release = xc4000_release,
1605 .init = xc4000_init,
1606 .sleep = xc4000_sleep,
1608 .set_params = xc4000_set_params,
1609 .set_analog_params = xc4000_set_analog_params,
1610 .get_frequency = xc4000_get_frequency,
1611 .get_bandwidth = xc4000_get_bandwidth,
1612 .get_status = xc4000_get_status
1615 struct dvb_frontend *xc4000_attach(struct dvb_frontend *fe,
1616 struct i2c_adapter *i2c,
1617 struct xc4000_config *cfg)
1619 struct xc4000_priv *priv = NULL;
1623 if (cfg->card_type != XC4000_CARD_GENERIC) {
1624 if (cfg->card_type == XC4000_CARD_WINFAST_CX88) {
1625 cfg->i2c_address = 0x61;
1627 } else { /* default to PCTV 340E */
1628 cfg->i2c_address = 0x61;
1633 dprintk(1, "%s(%d-%04x)\n", __func__,
1634 i2c ? i2c_adapter_id(i2c) : -1,
1635 cfg ? cfg->i2c_address : -1);
1637 mutex_lock(&xc4000_list_mutex);
1639 instance = hybrid_tuner_request_state(struct xc4000_priv, priv,
1640 hybrid_tuner_instance_list,
1641 i2c, cfg->i2c_address, "xc4000");
1642 if (cfg->card_type != XC4000_CARD_GENERIC)
1643 priv->card_type = cfg->card_type;
1649 /* new tuner instance */
1650 priv->bandwidth = BANDWIDTH_6_MHZ;
1651 mutex_init(&priv->lock);
1652 fe->tuner_priv = priv;
1655 /* existing tuner instance */
1656 fe->tuner_priv = priv;
1660 if (cfg->if_khz != 0) {
1661 /* If the IF hasn't been set yet, use the value provided by
1662 the caller (occurs in hybrid devices where the analog
1663 call to xc4000_attach occurs before the digital side) */
1664 priv->if_khz = cfg->if_khz;
1667 /* Check if firmware has been loaded. It is possible that another
1668 instance of the driver has loaded the firmware.
1671 if (instance == 1) {
1672 if (xc4000_readreg(priv, XREG_PRODUCT_ID, &id)
1673 != XC_RESULT_SUCCESS)
1676 id = ((priv->cur_fw.type & BASE) != 0 ?
1677 priv->hwmodel : XC_PRODUCT_ID_FW_NOT_LOADED);
1681 case XC_PRODUCT_ID_FW_LOADED:
1683 "xc4000: Successfully identified at address 0x%02x\n",
1686 "xc4000: Firmware has been loaded previously\n");
1688 case XC_PRODUCT_ID_FW_NOT_LOADED:
1690 "xc4000: Successfully identified at address 0x%02x\n",
1693 "xc4000: Firmware has not been loaded previously\n");
1697 "xc4000: Device not found at addr 0x%02x (0x%x)\n",
1698 cfg->i2c_address, id);
1702 mutex_unlock(&xc4000_list_mutex);
1704 memcpy(&fe->ops.tuner_ops, &xc4000_tuner_ops,
1705 sizeof(struct dvb_tuner_ops));
1707 if (instance == 1) {
1709 mutex_lock(&priv->lock);
1710 ret = xc4000_fwupload(fe);
1711 mutex_unlock(&priv->lock);
1712 if (ret != XC_RESULT_SUCCESS)
1718 mutex_unlock(&xc4000_list_mutex);
1723 EXPORT_SYMBOL(xc4000_attach);
1725 MODULE_AUTHOR("Steven Toth, Davide Ferri");
1726 MODULE_DESCRIPTION("Xceive xc4000 silicon tuner driver");
1727 MODULE_LICENSE("GPL");