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
, "Turn on/off debugging (default: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_DEFAULT_FIRMWARE "xc4000.fw"
54 static char firmware_name
[30];
55 module_param_string(firmware_name
, firmware_name
, sizeof(firmware_name
), 0);
56 MODULE_PARM_DESC(firmware_name
, "\n\t\tFirmware file name. Allows overriding "
57 "the default firmware\n"
60 static DEFINE_MUTEX(xc4000_list_mutex
);
61 static LIST_HEAD(hybrid_tuner_instance_list
);
63 #define dprintk(level, fmt, arg...) if (debug >= level) \
64 printk(KERN_INFO "%s: " fmt, "xc4000", ## arg)
66 /* struct for storing firmware table */
67 struct firmware_description
{
75 struct firmware_properties
{
80 unsigned int scode_table
;
85 struct tuner_i2c_props i2c_props
;
86 struct list_head hybrid_tuner_instance_list
;
87 struct firmware_description
*firm
;
96 u8 ignore_i2c_write_errors
;
97 /* struct xc2028_ctrl ctrl; */
98 struct firmware_properties cur_fw
;
105 #define MAX_TV_STANDARD 24
106 #define XC_MAX_I2C_WRITE_LENGTH 64
107 #define XC_POWERED_DOWN 0x80000000U
110 #define XC_RF_MODE_AIR 0
111 #define XC_RF_MODE_CABLE 1
114 #define XC_RESULT_SUCCESS 0
115 #define XC_RESULT_RESET_FAILURE 1
116 #define XC_RESULT_I2C_WRITE_FAILURE 2
117 #define XC_RESULT_I2C_READ_FAILURE 3
118 #define XC_RESULT_OUT_OF_RANGE 5
121 #define XC_PRODUCT_ID_FW_NOT_LOADED 0x2000
122 #define XC_PRODUCT_ID_FW_LOADED 0x0FA0
124 /* Registers (Write-only) */
125 #define XREG_INIT 0x00
126 #define XREG_VIDEO_MODE 0x01
127 #define XREG_AUDIO_MODE 0x02
128 #define XREG_RF_FREQ 0x03
129 #define XREG_D_CODE 0x04
130 #define XREG_DIRECTSITTING_MODE 0x05
131 #define XREG_SEEK_MODE 0x06
132 #define XREG_POWER_DOWN 0x08
133 #define XREG_SIGNALSOURCE 0x0A
134 #define XREG_AMPLITUDE 0x10
136 /* Registers (Read-only) */
137 #define XREG_ADC_ENV 0x00
138 #define XREG_QUALITY 0x01
139 #define XREG_FRAME_LINES 0x02
140 #define XREG_HSYNC_FREQ 0x03
141 #define XREG_LOCK 0x04
142 #define XREG_FREQ_ERROR 0x05
143 #define XREG_SNR 0x06
144 #define XREG_VERSION 0x07
145 #define XREG_PRODUCT_ID 0x08
148 Basic firmware description. This will remain with
149 the driver for documentation purposes.
151 This represents an I2C firmware file encoded as a
152 string of unsigned char. Format is as follows:
154 char[0 ]=len0_MSB -> len = len_MSB * 256 + len_LSB
155 char[1 ]=len0_LSB -> length of first write transaction
156 char[2 ]=data0 -> first byte to be sent
160 char[M ]=dataN -> last byte to be sent
161 char[M+1]=len1_MSB -> len = len_MSB * 256 + len_LSB
162 char[M+2]=len1_LSB -> length of second write transaction
168 The [len] value should be interpreted as follows:
170 len= len_MSB _ len_LSB
171 len=1111_1111_1111_1111 : End of I2C_SEQUENCE
172 len=0000_0000_0000_0000 : Reset command: Do hardware reset
173 len=0NNN_NNNN_NNNN_NNNN : Normal transaction: number of bytes = {1:32767)
174 len=1WWW_WWWW_WWWW_WWWW : Wait command: wait for {1:32767} ms
176 For the RESET and WAIT commands, the two following bytes will contain
177 immediately the length of the following transaction.
180 struct XC_TV_STANDARD
{
187 /* Tuner standards */
188 #define XC4000_MN_NTSC_PAL_BTSC 0
189 #define XC4000_MN_NTSC_PAL_A2 1
190 #define XC4000_MN_NTSC_PAL_EIAJ 2
191 #define XC4000_MN_NTSC_PAL_Mono 3
192 #define XC4000_BG_PAL_A2 4
193 #define XC4000_BG_PAL_NICAM 5
194 #define XC4000_BG_PAL_MONO 6
195 #define XC4000_I_PAL_NICAM 7
196 #define XC4000_I_PAL_NICAM_MONO 8
197 #define XC4000_DK_PAL_A2 9
198 #define XC4000_DK_PAL_NICAM 10
199 #define XC4000_DK_PAL_MONO 11
200 #define XC4000_DK_SECAM_A2DK1 12
201 #define XC4000_DK_SECAM_A2LDK3 13
202 #define XC4000_DK_SECAM_A2MONO 14
203 #define XC4000_DK_SECAM_NICAM 15
204 #define XC4000_L_SECAM_NICAM 16
205 #define XC4000_LC_SECAM_NICAM 17
206 #define XC4000_DTV6 18
207 #define XC4000_DTV8 19
208 #define XC4000_DTV7_8 20
209 #define XC4000_DTV7 21
210 #define XC4000_FM_Radio_INPUT2 22
211 #define XC4000_FM_Radio_INPUT1 23
213 static struct XC_TV_STANDARD XC4000_Standard
[MAX_TV_STANDARD
] = {
214 {"M/N-NTSC/PAL-BTSC", 0x0000, 0x80A0, 4500},
215 {"M/N-NTSC/PAL-A2", 0x0000, 0x80A0, 4600},
216 {"M/N-NTSC/PAL-EIAJ", 0x0040, 0x80A0, 4500},
217 {"M/N-NTSC/PAL-Mono", 0x0078, 0x80A0, 4500},
218 {"B/G-PAL-A2", 0x0000, 0x8159, 5640},
219 {"B/G-PAL-NICAM", 0x0004, 0x8159, 5740},
220 {"B/G-PAL-MONO", 0x0078, 0x8159, 5500},
221 {"I-PAL-NICAM", 0x0080, 0x8049, 6240},
222 {"I-PAL-NICAM-MONO", 0x0078, 0x8049, 6000},
223 {"D/K-PAL-A2", 0x0000, 0x8049, 6380},
224 {"D/K-PAL-NICAM", 0x0080, 0x8049, 6200},
225 {"D/K-PAL-MONO", 0x0078, 0x8049, 6500},
226 {"D/K-SECAM-A2 DK1", 0x0000, 0x8049, 6340},
227 {"D/K-SECAM-A2 L/DK3", 0x0000, 0x8049, 6000},
228 {"D/K-SECAM-A2 MONO", 0x0078, 0x8049, 6500},
229 {"D/K-SECAM-NICAM", 0x0080, 0x8049, 6200},
230 {"L-SECAM-NICAM", 0x8080, 0x0009, 6200},
231 {"L'-SECAM-NICAM", 0x8080, 0x4009, 6200},
232 {"DTV6", 0x00C0, 0x8002, 0},
233 {"DTV8", 0x00C0, 0x800B, 0},
234 {"DTV7/8", 0x00C0, 0x801B, 0},
235 {"DTV7", 0x00C0, 0x8007, 0},
236 {"FM Radio-INPUT2", 0x0008, 0x9800,10700},
237 {"FM Radio-INPUT1", 0x0008, 0x9000,10700}
240 static int xc4000_readreg(struct xc4000_priv
*priv
, u16 reg
, u16
*val
);
241 static int xc4000_TunerReset(struct dvb_frontend
*fe
);
243 static int xc_send_i2c_data(struct xc4000_priv
*priv
, u8
*buf
, int len
)
245 struct i2c_msg msg
= { .addr
= priv
->i2c_props
.addr
,
246 .flags
= 0, .buf
= buf
, .len
= len
};
247 if (i2c_transfer(priv
->i2c_props
.adap
, &msg
, 1) != 1) {
248 if (priv
->ignore_i2c_write_errors
== 0) {
249 printk(KERN_ERR
"xc4000: I2C write failed (len=%i)\n",
252 printk("bytes %02x %02x %02x %02x\n", buf
[0],
253 buf
[1], buf
[2], buf
[3]);
255 return XC_RESULT_I2C_WRITE_FAILURE
;
258 return XC_RESULT_SUCCESS
;
261 static void xc_wait(int wait_ms
)
266 static int xc4000_TunerReset(struct dvb_frontend
*fe
)
268 struct xc4000_priv
*priv
= fe
->tuner_priv
;
271 dprintk(1, "%s()\n", __func__
);
274 ret
= fe
->callback(((fe
->dvb
) && (fe
->dvb
->priv
)) ?
276 priv
->i2c_props
.adap
->algo_data
,
277 DVB_FRONTEND_COMPONENT_TUNER
,
278 XC4000_TUNER_RESET
, 0);
280 printk(KERN_ERR
"xc4000: reset failed\n");
281 return XC_RESULT_RESET_FAILURE
;
284 printk(KERN_ERR
"xc4000: no tuner reset callback function, fatal\n");
285 return XC_RESULT_RESET_FAILURE
;
287 return XC_RESULT_SUCCESS
;
290 static int xc_write_reg(struct xc4000_priv
*priv
, u16 regAddr
, u16 i2cData
)
295 buf
[0] = (regAddr
>> 8) & 0xFF;
296 buf
[1] = regAddr
& 0xFF;
297 buf
[2] = (i2cData
>> 8) & 0xFF;
298 buf
[3] = i2cData
& 0xFF;
299 result
= xc_send_i2c_data(priv
, buf
, 4);
304 static int xc_load_i2c_sequence(struct dvb_frontend
*fe
, const u8
*i2c_sequence
)
306 struct xc4000_priv
*priv
= fe
->tuner_priv
;
308 int i
, nbytes_to_send
, result
;
309 unsigned int len
, pos
, index
;
310 u8 buf
[XC_MAX_I2C_WRITE_LENGTH
];
313 while ((i2c_sequence
[index
] != 0xFF) ||
314 (i2c_sequence
[index
+ 1] != 0xFF)) {
315 len
= i2c_sequence
[index
] * 256 + i2c_sequence
[index
+1];
318 result
= xc4000_TunerReset(fe
);
320 if (result
!= XC_RESULT_SUCCESS
)
322 } else if (len
& 0x8000) {
324 xc_wait(len
& 0x7FFF);
327 /* Send i2c data whilst ensuring individual transactions
328 * do not exceed XC_MAX_I2C_WRITE_LENGTH bytes.
331 buf
[0] = i2c_sequence
[index
];
332 buf
[1] = i2c_sequence
[index
+ 1];
335 if ((len
- pos
) > XC_MAX_I2C_WRITE_LENGTH
- 2)
337 XC_MAX_I2C_WRITE_LENGTH
;
339 nbytes_to_send
= (len
- pos
+ 2);
340 for (i
= 2; i
< nbytes_to_send
; i
++) {
341 buf
[i
] = i2c_sequence
[index
+ pos
+
344 result
= xc_send_i2c_data(priv
, buf
,
347 if (result
!= XC_RESULT_SUCCESS
)
350 pos
+= nbytes_to_send
- 2;
355 return XC_RESULT_SUCCESS
;
358 static int xc_SetTVStandard(struct xc4000_priv
*priv
,
359 u16 VideoMode
, u16 AudioMode
)
362 dprintk(1, "%s(0x%04x,0x%04x)\n", __func__
, VideoMode
, AudioMode
);
363 dprintk(1, "%s() Standard = %s\n",
365 XC4000_Standard
[priv
->video_standard
].Name
);
367 /* Don't complain when the request fails because of i2c stretching */
368 priv
->ignore_i2c_write_errors
= 1;
370 ret
= xc_write_reg(priv
, XREG_VIDEO_MODE
, VideoMode
);
371 if (ret
== XC_RESULT_SUCCESS
)
372 ret
= xc_write_reg(priv
, XREG_AUDIO_MODE
, AudioMode
);
374 priv
->ignore_i2c_write_errors
= 0;
379 static int xc_SetSignalSource(struct xc4000_priv
*priv
, u16 rf_mode
)
381 dprintk(1, "%s(%d) Source = %s\n", __func__
, rf_mode
,
382 rf_mode
== XC_RF_MODE_AIR
? "ANTENNA" : "CABLE");
384 if ((rf_mode
!= XC_RF_MODE_AIR
) && (rf_mode
!= XC_RF_MODE_CABLE
)) {
385 rf_mode
= XC_RF_MODE_CABLE
;
387 "%s(), Invalid mode, defaulting to CABLE",
390 return xc_write_reg(priv
, XREG_SIGNALSOURCE
, rf_mode
);
393 static const struct dvb_tuner_ops xc4000_tuner_ops
;
395 static int xc_set_RF_frequency(struct xc4000_priv
*priv
, u32 freq_hz
)
399 dprintk(1, "%s(%u)\n", __func__
, freq_hz
);
401 if ((freq_hz
> xc4000_tuner_ops
.info
.frequency_max
) ||
402 (freq_hz
< xc4000_tuner_ops
.info
.frequency_min
))
403 return XC_RESULT_OUT_OF_RANGE
;
405 freq_code
= (u16
)(freq_hz
/ 15625);
407 /* WAS: Starting in firmware version 1.1.44, Xceive recommends using the
408 FINERFREQ for all normal tuning (the doc indicates reg 0x03 should
409 only be used for fast scanning for channel lock) */
410 return xc_write_reg(priv
, XREG_RF_FREQ
, freq_code
); /* WAS: XREG_FINERFREQ */
413 static int xc_get_ADC_Envelope(struct xc4000_priv
*priv
, u16
*adc_envelope
)
415 return xc4000_readreg(priv
, XREG_ADC_ENV
, adc_envelope
);
418 static int xc_get_frequency_error(struct xc4000_priv
*priv
, u32
*freq_error_hz
)
424 result
= xc4000_readreg(priv
, XREG_FREQ_ERROR
, ®Data
);
425 if (result
!= XC_RESULT_SUCCESS
)
428 tmp
= (u32
)regData
& 0xFFFFU
;
429 tmp
= (tmp
< 0x8000U
? tmp
: 0x10000U
- tmp
);
430 (*freq_error_hz
) = tmp
* 15625;
434 static int xc_get_lock_status(struct xc4000_priv
*priv
, u16
*lock_status
)
436 return xc4000_readreg(priv
, XREG_LOCK
, lock_status
);
439 static int xc_get_version(struct xc4000_priv
*priv
,
440 u8
*hw_majorversion
, u8
*hw_minorversion
,
441 u8
*fw_majorversion
, u8
*fw_minorversion
)
446 result
= xc4000_readreg(priv
, XREG_VERSION
, &data
);
447 if (result
!= XC_RESULT_SUCCESS
)
450 (*hw_majorversion
) = (data
>> 12) & 0x0F;
451 (*hw_minorversion
) = (data
>> 8) & 0x0F;
452 (*fw_majorversion
) = (data
>> 4) & 0x0F;
453 (*fw_minorversion
) = data
& 0x0F;
458 static int xc_get_hsync_freq(struct xc4000_priv
*priv
, u32
*hsync_freq_hz
)
463 result
= xc4000_readreg(priv
, XREG_HSYNC_FREQ
, ®Data
);
464 if (result
!= XC_RESULT_SUCCESS
)
467 (*hsync_freq_hz
) = ((regData
& 0x0fff) * 763)/100;
471 static int xc_get_frame_lines(struct xc4000_priv
*priv
, u16
*frame_lines
)
473 return xc4000_readreg(priv
, XREG_FRAME_LINES
, frame_lines
);
476 static int xc_get_quality(struct xc4000_priv
*priv
, u16
*quality
)
478 return xc4000_readreg(priv
, XREG_QUALITY
, quality
);
481 static u16
WaitForLock(struct xc4000_priv
*priv
)
484 int watchDogCount
= 40;
486 while ((lockState
== 0) && (watchDogCount
> 0)) {
487 xc_get_lock_status(priv
, &lockState
);
488 if (lockState
!= 1) {
496 #define XC_TUNE_ANALOG 0
497 #define XC_TUNE_DIGITAL 1
498 static int xc_tune_channel(struct xc4000_priv
*priv
, u32 freq_hz
, int mode
)
503 dprintk(1, "%s(%u)\n", __func__
, freq_hz
);
505 /* Don't complain when the request fails because of i2c stretching */
506 priv
->ignore_i2c_write_errors
= 1;
507 result
= xc_set_RF_frequency(priv
, freq_hz
);
508 priv
->ignore_i2c_write_errors
= 0;
510 if (result
!= XC_RESULT_SUCCESS
)
513 if (mode
== XC_TUNE_ANALOG
) {
514 if (WaitForLock(priv
) == 1)
521 static int xc4000_readreg(struct xc4000_priv
*priv
, u16 reg
, u16
*val
)
523 u8 buf
[2] = { reg
>> 8, reg
& 0xff };
524 u8 bval
[2] = { 0, 0 };
525 struct i2c_msg msg
[2] = {
526 { .addr
= priv
->i2c_props
.addr
,
527 .flags
= 0, .buf
= &buf
[0], .len
= 2 },
528 { .addr
= priv
->i2c_props
.addr
,
529 .flags
= I2C_M_RD
, .buf
= &bval
[0], .len
= 2 },
532 if (i2c_transfer(priv
->i2c_props
.adap
, msg
, 2) != 2) {
533 printk(KERN_WARNING
"xc4000: I2C read failed\n");
537 *val
= (bval
[0] << 8) | bval
[1];
538 return XC_RESULT_SUCCESS
;
541 #define dump_firm_type(t) dump_firm_type_and_int_freq(t, 0)
542 static void dump_firm_type_and_int_freq(unsigned int type
, u16 int_freq
)
588 if (type
& TOYOTA388
)
589 printk("TOYOTA388 ");
590 if (type
& TOYOTA794
)
591 printk("TOYOTA794 ");
594 if (type
& ZARLINK456
)
595 printk("ZARLINK456 ");
605 printk("HAS_IF_%d ", int_freq
);
608 static int seek_firmware(struct dvb_frontend
*fe
, unsigned int type
,
611 struct xc4000_priv
*priv
= fe
->tuner_priv
;
613 unsigned int best_nr_diffs
= 255U;
616 printk("Error! firmware not loaded\n");
620 if (((type
& ~SCODE
) == 0) && (*id
== 0))
623 /* Seek for generic video standard match */
624 for (i
= 0; i
< priv
->firm_size
; i
++) {
625 v4l2_std_id id_diff_mask
=
626 (priv
->firm
[i
].id
^ (*id
)) & (*id
);
627 unsigned int type_diff_mask
=
628 (priv
->firm
[i
].type
^ type
)
629 & (BASE_TYPES
| DTV_TYPES
| LCD
| NOGD
| MONO
| SCODE
);
630 unsigned int nr_diffs
;
633 & (BASE
| INIT1
| FM
| DTV6
| DTV7
| DTV78
| DTV8
| SCODE
))
636 nr_diffs
= hweight64(id_diff_mask
) + hweight32(type_diff_mask
);
637 if (!nr_diffs
) /* Supports all the requested standards */
640 if (nr_diffs
< best_nr_diffs
) {
641 best_nr_diffs
= nr_diffs
;
646 /* FIXME: Would make sense to seek for type "hint" match ? */
652 if (best_nr_diffs
> 0U) {
653 printk("Selecting best matching firmware (%u bits differ) for "
654 "type=", best_nr_diffs
);
655 printk("(%x), id %016llx:\n", type
, (unsigned long long)*id
);
660 *id
= priv
->firm
[i
].id
;
664 printk("%s firmware for type=", (i
< 0) ? "Can't find" :
666 dump_firm_type(type
);
667 printk("(%x), id %016llx.\n", type
, (unsigned long long)*id
);
672 static int load_firmware(struct dvb_frontend
*fe
, unsigned int type
,
675 struct xc4000_priv
*priv
= fe
->tuner_priv
;
679 pos
= seek_firmware(fe
, type
, id
);
683 p
= priv
->firm
[pos
].ptr
;
685 /* Don't complain when the request fails because of i2c stretching */
686 priv
->ignore_i2c_write_errors
= 1;
688 rc
= xc_load_i2c_sequence(fe
, p
);
690 priv
->ignore_i2c_write_errors
= 0;
695 static int xc4000_fwupload(struct dvb_frontend
*fe
)
697 struct xc4000_priv
*priv
= fe
->tuner_priv
;
698 const struct firmware
*fw
= NULL
;
699 const unsigned char *p
, *endp
;
705 if (firmware_name
[0] != '\0')
706 fname
= firmware_name
;
708 fname
= XC4000_DEFAULT_FIRMWARE
;
710 printk("Reading firmware %s\n", fname
);
711 rc
= request_firmware(&fw
, fname
, priv
->i2c_props
.adap
->dev
.parent
);
714 printk("Error: firmware %s not found.\n",
717 printk("Error %d while requesting firmware %s \n",
725 if (fw
->size
< sizeof(name
) - 1 + 2 + 2) {
726 printk("Error: firmware file %s has invalid size!\n",
731 memcpy(name
, p
, sizeof(name
) - 1);
732 name
[sizeof(name
) - 1] = 0;
733 p
+= sizeof(name
) - 1;
735 priv
->firm_version
= get_unaligned_le16(p
);
738 n_array
= get_unaligned_le16(p
);
741 dprintk(1, "Loading %d firmware images from %s, type: %s, ver %d.%d\n",
742 n_array
, fname
, name
,
743 priv
->firm_version
>> 8, priv
->firm_version
& 0xff);
745 priv
->firm
= kzalloc(sizeof(*priv
->firm
) * n_array
, GFP_KERNEL
);
746 if (priv
->firm
== NULL
) {
747 printk("Not enough memory to load firmware file.\n");
751 priv
->firm_size
= n_array
;
761 printk("More firmware images in file than "
766 /* Checks if there's enough bytes to read */
767 if (endp
- p
< sizeof(type
) + sizeof(id
) + sizeof(size
))
770 type
= get_unaligned_le32(p
);
773 id
= get_unaligned_le64(p
);
777 int_freq
= get_unaligned_le16(p
);
778 p
+= sizeof(int_freq
);
779 if (endp
- p
< sizeof(size
))
783 size
= get_unaligned_le32(p
);
786 if (!size
|| size
> endp
- p
) {
787 printk("Firmware type (%x), id %llx is corrupted "
788 "(size=%d, expected %d)\n",
789 type
, (unsigned long long)id
,
790 (unsigned)(endp
- p
), size
);
794 priv
->firm
[n
].ptr
= kzalloc(size
, GFP_KERNEL
);
795 if (priv
->firm
[n
].ptr
== NULL
) {
796 printk("Not enough memory to load firmware file.\n");
802 printk("Reading firmware type ");
803 dump_firm_type_and_int_freq(type
, int_freq
);
804 printk("(%x), id %llx, size=%d.\n",
805 type
, (unsigned long long)id
, size
);
808 memcpy(priv
->firm
[n
].ptr
, p
, size
);
809 priv
->firm
[n
].type
= type
;
810 priv
->firm
[n
].id
= id
;
811 priv
->firm
[n
].size
= size
;
812 priv
->firm
[n
].int_freq
= int_freq
;
817 if (n
+ 1 != priv
->firm_size
) {
818 printk("Firmware file is incomplete!\n");
825 printk("Firmware header is incomplete!\n");
828 printk("Error: firmware file is corrupted!\n");
831 printk("Releasing partially loaded firmware file.\n");
834 release_firmware(fw
);
836 dprintk(1, "Firmware files loaded.\n");
841 static int load_scode(struct dvb_frontend
*fe
, unsigned int type
,
842 v4l2_std_id
*id
, __u16 int_freq
, int scode
)
844 struct xc4000_priv
*priv
= fe
->tuner_priv
;
850 dprintk(1, "%s called int_freq=%d\n", __func__
, int_freq
);
853 pos
= seek_firmware(fe
, type
, id
);
857 for (pos
= 0; pos
< priv
->firm_size
; pos
++) {
858 if ((priv
->firm
[pos
].int_freq
== int_freq
) &&
859 (priv
->firm
[pos
].type
& HAS_IF
))
862 if (pos
== priv
->firm_size
)
866 p
= priv
->firm
[pos
].ptr
;
868 if (priv
->firm
[pos
].size
!= 12 * 16 || scode
>= 16)
872 tuner_info("Loading SCODE for type=");
873 dump_firm_type_and_int_freq(priv
->firm
[pos
].type
,
874 priv
->firm
[pos
].int_freq
);
875 printk("(%x), id %016llx.\n", priv
->firm
[pos
].type
,
876 (unsigned long long)*id
);
879 memcpy(&scode_buf
[1], p
, 12);
881 /* Enter direct-mode */
882 rc
= xc_write_reg(priv
, XREG_DIRECTSITTING_MODE
, 0);
884 printk("failed to put device into direct mode!\n");
888 rc
= xc_send_i2c_data(priv
, scode_buf
, 13);
889 if (rc
!= XC_RESULT_SUCCESS
) {
890 /* Even if the send failed, make sure we set back to indirect
892 printk("Failed to set scode %d\n", rc
);
895 /* Switch back to indirect-mode */
896 memset(indirect_mode
, 0, sizeof(indirect_mode
));
897 indirect_mode
[4] = 0x88;
898 xc_send_i2c_data(priv
, indirect_mode
, sizeof(indirect_mode
));
904 static int check_firmware(struct dvb_frontend
*fe
, unsigned int type
,
905 v4l2_std_id std
, __u16 int_freq
)
907 struct xc4000_priv
*priv
= fe
->tuner_priv
;
908 struct firmware_properties new_fw
;
909 int rc
= 0, is_retry
= 0;
910 u16 version
= 0, hwmodel
;
912 u8 hw_major
, hw_minor
, fw_major
, fw_minor
;
914 dprintk(1, "%s called\n", __func__
);
917 rc
= xc4000_fwupload(fe
);
923 if (priv
->ctrl
.mts
&& !(type
& FM
))
930 new_fw
.std_req
= std
;
931 new_fw
.scode_table
= SCODE
/* | priv->ctrl.scode_table */;
933 new_fw
.int_freq
= int_freq
;
935 dprintk(1, "checking firmware, user requested type=");
937 dump_firm_type(new_fw
.type
);
938 printk("(%x), id %016llx, ", new_fw
.type
,
939 (unsigned long long)new_fw
.std_req
);
941 printk("scode_tbl ");
943 dump_firm_type(priv
->ctrl
.scode_table
);
944 printk("(%x), ", priv
->ctrl
.scode_table
);
947 printk("int_freq %d, ", new_fw
.int_freq
);
948 printk("scode_nr %d\n", new_fw
.scode_nr
);
951 /* No need to reload base firmware if it matches */
952 if (priv
->cur_fw
.type
& BASE
) {
953 dprintk(1, "BASE firmware not changed.\n");
957 /* Updating BASE - forget about all currently loaded firmware */
958 memset(&priv
->cur_fw
, 0, sizeof(priv
->cur_fw
));
960 /* Reset is needed before loading firmware */
961 rc
= xc4000_TunerReset(fe
);
965 /* BASE firmwares are all std0 */
967 rc
= load_firmware(fe
, BASE
, &std0
);
969 printk("Error %d while loading base firmware\n", rc
);
973 /* Load INIT1, if needed */
974 dprintk(1, "Load init1 firmware, if exists\n");
976 rc
= load_firmware(fe
, BASE
| INIT1
, &std0
);
978 rc
= load_firmware(fe
, BASE
| INIT1
, &std0
);
979 if (rc
< 0 && rc
!= -ENOENT
) {
980 tuner_err("Error %d while loading init1 firmware\n",
987 * No need to reload standard specific firmware if base firmware
988 * was not reloaded and requested video standards have not changed.
990 if (priv
->cur_fw
.type
== (BASE
| new_fw
.type
) &&
991 priv
->cur_fw
.std_req
== std
) {
992 dprintk(1, "Std-specific firmware already loaded.\n");
993 goto skip_std_specific
;
996 /* Reloading std-specific firmware forces a SCODE update */
997 priv
->cur_fw
.scode_table
= 0;
999 /* Load the standard firmware */
1000 rc
= load_firmware(fe
, new_fw
.type
, &new_fw
.id
);
1006 if (priv
->cur_fw
.scode_table
== new_fw
.scode_table
&&
1007 priv
->cur_fw
.scode_nr
== new_fw
.scode_nr
) {
1008 dprintk(1, "SCODE firmware already loaded.\n");
1012 /* Load SCODE firmware, if exists */
1013 rc
= load_scode(fe
, new_fw
.type
| new_fw
.scode_table
, &new_fw
.id
,
1014 new_fw
.int_freq
, new_fw
.scode_nr
);
1015 if (rc
!= XC_RESULT_SUCCESS
)
1016 dprintk(1, "load scode failed %d\n", rc
);
1019 rc
= xc4000_readreg(priv
, XREG_PRODUCT_ID
, &hwmodel
);
1021 if (xc_get_version(priv
, &hw_major
, &hw_minor
, &fw_major
,
1022 &fw_minor
) != XC_RESULT_SUCCESS
) {
1023 printk("Unable to read tuner registers.\n");
1027 dprintk(1, "Device is Xceive %d version %d.%d, "
1028 "firmware version %d.%d\n",
1029 hwmodel
, hw_major
, hw_minor
, fw_major
, fw_minor
);
1031 /* Check firmware version against what we downloaded. */
1033 if (priv
->firm_version
!= ((version
& 0xf0) << 4 | (version
& 0x0f))) {
1034 printk("Incorrect readback of firmware version %x.\n",
1040 /* Check that the tuner hardware model remains consistent over time. */
1041 if (priv
->hwmodel
== 0 && hwmodel
== 4000) {
1042 priv
->hwmodel
= hwmodel
;
1043 priv
->hwvers
= version
& 0xff00;
1044 } else if (priv
->hwmodel
== 0 || priv
->hwmodel
!= hwmodel
||
1045 priv
->hwvers
!= (version
& 0xff00)) {
1046 printk("Read invalid device hardware information - tuner "
1051 memcpy(&priv
->cur_fw
, &new_fw
, sizeof(priv
->cur_fw
));
1054 * By setting BASE in cur_fw.type only after successfully loading all
1055 * firmwares, we can:
1056 * 1. Identify that BASE firmware with type=0 has been loaded;
1057 * 2. Tell whether BASE firmware was just changed the next time through.
1059 priv
->cur_fw
.type
|= BASE
;
1064 memset(&priv
->cur_fw
, 0, sizeof(priv
->cur_fw
));
1068 dprintk(1, "Retrying firmware load\n");
1077 static void xc_debug_dump(struct xc4000_priv
*priv
)
1080 u32 freq_error_hz
= 0;
1082 u32 hsync_freq_hz
= 0;
1085 u8 hw_majorversion
= 0, hw_minorversion
= 0;
1086 u8 fw_majorversion
= 0, fw_minorversion
= 0;
1088 /* Wait for stats to stabilize.
1089 * Frame Lines needs two frame times after initial lock
1090 * before it is valid.
1094 xc_get_ADC_Envelope(priv
, &adc_envelope
);
1095 dprintk(1, "*** ADC envelope (0-1023) = %d\n", adc_envelope
);
1097 xc_get_frequency_error(priv
, &freq_error_hz
);
1098 dprintk(1, "*** Frequency error = %d Hz\n", freq_error_hz
);
1100 xc_get_lock_status(priv
, &lock_status
);
1101 dprintk(1, "*** Lock status (0-Wait, 1-Locked, 2-No-signal) = %d\n",
1104 xc_get_version(priv
, &hw_majorversion
, &hw_minorversion
,
1105 &fw_majorversion
, &fw_minorversion
);
1107 dprintk(1, "*** HW: V%02x.%02x, FW: V%02x.%02x\n",
1108 hw_majorversion
, hw_minorversion
,
1109 fw_majorversion
, fw_minorversion
);
1111 xc_get_hsync_freq(priv
, &hsync_freq_hz
);
1112 dprintk(1, "*** Horizontal sync frequency = %d Hz\n", hsync_freq_hz
);
1114 xc_get_frame_lines(priv
, &frame_lines
);
1115 dprintk(1, "*** Frame lines = %d\n", frame_lines
);
1117 xc_get_quality(priv
, &quality
);
1118 dprintk(1, "*** Quality (0:<8dB, 7:>56dB) = %d\n", quality
);
1121 static int xc4000_set_params(struct dvb_frontend
*fe
,
1122 struct dvb_frontend_parameters
*params
)
1124 struct xc4000_priv
*priv
= fe
->tuner_priv
;
1126 int ret
= -EREMOTEIO
;
1128 dprintk(1, "%s() frequency=%d (Hz)\n", __func__
, params
->frequency
);
1130 mutex_lock(&priv
->lock
);
1132 if (fe
->ops
.info
.type
== FE_ATSC
) {
1133 dprintk(1, "%s() ATSC\n", __func__
);
1134 switch (params
->u
.vsb
.modulation
) {
1137 dprintk(1, "%s() VSB modulation\n", __func__
);
1138 priv
->rf_mode
= XC_RF_MODE_AIR
;
1139 priv
->freq_hz
= params
->frequency
- 1750000;
1140 priv
->bandwidth
= BANDWIDTH_6_MHZ
;
1141 priv
->video_standard
= XC4000_DTV6
;
1147 dprintk(1, "%s() QAM modulation\n", __func__
);
1148 priv
->rf_mode
= XC_RF_MODE_CABLE
;
1149 priv
->freq_hz
= params
->frequency
- 1750000;
1150 priv
->bandwidth
= BANDWIDTH_6_MHZ
;
1151 priv
->video_standard
= XC4000_DTV6
;
1158 } else if (fe
->ops
.info
.type
== FE_OFDM
) {
1159 dprintk(1, "%s() OFDM\n", __func__
);
1160 switch (params
->u
.ofdm
.bandwidth
) {
1161 case BANDWIDTH_6_MHZ
:
1162 priv
->bandwidth
= BANDWIDTH_6_MHZ
;
1163 priv
->video_standard
= XC4000_DTV6
;
1164 priv
->freq_hz
= params
->frequency
- 1750000;
1167 case BANDWIDTH_7_MHZ
:
1168 priv
->bandwidth
= BANDWIDTH_7_MHZ
;
1169 priv
->video_standard
= XC4000_DTV7
;
1170 priv
->freq_hz
= params
->frequency
- 2250000;
1173 case BANDWIDTH_8_MHZ
:
1174 priv
->bandwidth
= BANDWIDTH_8_MHZ
;
1175 priv
->video_standard
= XC4000_DTV8
;
1176 priv
->freq_hz
= params
->frequency
- 2750000;
1179 case BANDWIDTH_AUTO
:
1180 if (params
->frequency
< 400000000) {
1181 priv
->bandwidth
= BANDWIDTH_7_MHZ
;
1182 priv
->freq_hz
= params
->frequency
- 2250000;
1184 priv
->bandwidth
= BANDWIDTH_8_MHZ
;
1185 priv
->freq_hz
= params
->frequency
- 2750000;
1187 priv
->video_standard
= XC4000_DTV7_8
;
1191 printk(KERN_ERR
"xc4000 bandwidth not set!\n");
1195 priv
->rf_mode
= XC_RF_MODE_AIR
;
1197 printk(KERN_ERR
"xc4000 modulation type not supported!\n");
1202 dprintk(1, "%s() frequency=%d (compensated)\n",
1203 __func__
, priv
->freq_hz
);
1205 /* Make sure the correct firmware type is loaded */
1206 if (check_firmware(fe
, type
, 0, priv
->if_khz
) != XC_RESULT_SUCCESS
)
1209 ret
= xc_SetSignalSource(priv
, priv
->rf_mode
);
1210 if (ret
!= XC_RESULT_SUCCESS
) {
1212 "xc4000: xc_SetSignalSource(%d) failed\n",
1217 ret
= xc_SetTVStandard(priv
,
1218 XC4000_Standard
[priv
->video_standard
].VideoMode
,
1219 XC4000_Standard
[priv
->video_standard
].AudioMode
);
1220 if (ret
!= XC_RESULT_SUCCESS
) {
1221 printk(KERN_ERR
"xc4000: xc_SetTVStandard failed\n");
1224 xc_tune_channel(priv
, priv
->freq_hz
, XC_TUNE_DIGITAL
);
1227 xc_debug_dump(priv
);
1232 mutex_unlock(&priv
->lock
);
1237 static int xc4000_set_analog_params(struct dvb_frontend
*fe
,
1238 struct analog_parameters
*params
)
1240 struct xc4000_priv
*priv
= fe
->tuner_priv
;
1241 int ret
= -EREMOTEIO
;
1243 dprintk(1, "%s() frequency=%d (in units of 62.5khz)\n",
1244 __func__
, params
->frequency
);
1246 mutex_lock(&priv
->lock
);
1248 /* Fix me: it could be air. */
1249 priv
->rf_mode
= params
->mode
;
1250 if (params
->mode
> XC_RF_MODE_CABLE
)
1251 priv
->rf_mode
= XC_RF_MODE_CABLE
;
1253 /* params->frequency is in units of 62.5khz */
1254 priv
->freq_hz
= params
->frequency
* 62500;
1256 /* FIX ME: Some video standards may have several possible audio
1257 standards. We simply default to one of them here.
1259 if (params
->std
& V4L2_STD_MN
) {
1260 /* default to BTSC audio standard */
1261 priv
->video_standard
= XC4000_MN_NTSC_PAL_BTSC
;
1265 if (params
->std
& V4L2_STD_PAL_BG
) {
1266 /* default to NICAM audio standard */
1267 priv
->video_standard
= XC4000_BG_PAL_NICAM
;
1271 if (params
->std
& V4L2_STD_PAL_I
) {
1272 /* default to NICAM audio standard */
1273 priv
->video_standard
= XC4000_I_PAL_NICAM
;
1277 if (params
->std
& V4L2_STD_PAL_DK
) {
1278 /* default to NICAM audio standard */
1279 priv
->video_standard
= XC4000_DK_PAL_NICAM
;
1283 if (params
->std
& V4L2_STD_SECAM_DK
) {
1284 /* default to A2 DK1 audio standard */
1285 priv
->video_standard
= XC4000_DK_SECAM_A2DK1
;
1289 if (params
->std
& V4L2_STD_SECAM_L
) {
1290 priv
->video_standard
= XC4000_L_SECAM_NICAM
;
1294 if (params
->std
& V4L2_STD_SECAM_LC
) {
1295 priv
->video_standard
= XC4000_LC_SECAM_NICAM
;
1301 /* FIXME - firmware type not being set properly */
1302 if (check_firmware(fe
, DTV8
, 0, priv
->if_khz
) != XC_RESULT_SUCCESS
)
1305 ret
= xc_SetSignalSource(priv
, priv
->rf_mode
);
1306 if (ret
!= XC_RESULT_SUCCESS
) {
1308 "xc4000: xc_SetSignalSource(%d) failed\n",
1313 ret
= xc_SetTVStandard(priv
,
1314 XC4000_Standard
[priv
->video_standard
].VideoMode
,
1315 XC4000_Standard
[priv
->video_standard
].AudioMode
);
1316 if (ret
!= XC_RESULT_SUCCESS
) {
1317 printk(KERN_ERR
"xc4000: xc_SetTVStandard failed\n");
1321 xc_tune_channel(priv
, priv
->freq_hz
, XC_TUNE_ANALOG
);
1324 xc_debug_dump(priv
);
1329 mutex_unlock(&priv
->lock
);
1334 static int xc4000_get_frequency(struct dvb_frontend
*fe
, u32
*freq
)
1336 struct xc4000_priv
*priv
= fe
->tuner_priv
;
1337 dprintk(1, "%s()\n", __func__
);
1338 *freq
= priv
->freq_hz
;
1342 static int xc4000_get_bandwidth(struct dvb_frontend
*fe
, u32
*bw
)
1344 struct xc4000_priv
*priv
= fe
->tuner_priv
;
1345 dprintk(1, "%s()\n", __func__
);
1347 *bw
= priv
->bandwidth
;
1351 static int xc4000_get_status(struct dvb_frontend
*fe
, u32
*status
)
1353 struct xc4000_priv
*priv
= fe
->tuner_priv
;
1354 u16 lock_status
= 0;
1356 mutex_lock(&priv
->lock
);
1358 xc_get_lock_status(priv
, &lock_status
);
1360 mutex_unlock(&priv
->lock
);
1362 dprintk(1, "%s() lock_status = 0x%08x\n", __func__
, lock_status
);
1364 *status
= lock_status
;
1369 static int xc4000_sleep(struct dvb_frontend
*fe
)
1371 struct xc4000_priv
*priv
= fe
->tuner_priv
;
1372 int ret
= XC_RESULT_SUCCESS
;
1374 dprintk(1, "%s()\n", __func__
);
1376 mutex_lock(&priv
->lock
);
1378 /* Avoid firmware reload on slow devices */
1379 if ((no_poweroff
== 2 ||
1380 (no_poweroff
== 0 &&
1381 priv
->card_type
!= XC4000_CARD_WINFAST_CX88
)) &&
1382 (priv
->cur_fw
.type
& BASE
) != 0) {
1383 /* force reset and firmware reload */
1384 priv
->cur_fw
.type
= XC_POWERED_DOWN
;
1386 if (xc_write_reg(priv
, XREG_POWER_DOWN
, 0)
1387 != XC_RESULT_SUCCESS
) {
1389 "xc4000: %s() unable to shutdown tuner\n",
1396 mutex_unlock(&priv
->lock
);
1401 static int xc4000_init(struct dvb_frontend
*fe
)
1403 dprintk(1, "%s()\n", __func__
);
1408 static int xc4000_release(struct dvb_frontend
*fe
)
1410 struct xc4000_priv
*priv
= fe
->tuner_priv
;
1412 dprintk(1, "%s()\n", __func__
);
1414 mutex_lock(&xc4000_list_mutex
);
1417 hybrid_tuner_release_state(priv
);
1419 mutex_unlock(&xc4000_list_mutex
);
1421 fe
->tuner_priv
= NULL
;
1426 static const struct dvb_tuner_ops xc4000_tuner_ops
= {
1428 .name
= "Xceive XC4000",
1429 .frequency_min
= 1000000,
1430 .frequency_max
= 1023000000,
1431 .frequency_step
= 50000,
1434 .release
= xc4000_release
,
1435 .init
= xc4000_init
,
1436 .sleep
= xc4000_sleep
,
1438 .set_params
= xc4000_set_params
,
1439 .set_analog_params
= xc4000_set_analog_params
,
1440 .get_frequency
= xc4000_get_frequency
,
1441 .get_bandwidth
= xc4000_get_bandwidth
,
1442 .get_status
= xc4000_get_status
1445 struct dvb_frontend
*xc4000_attach(struct dvb_frontend
*fe
,
1446 struct i2c_adapter
*i2c
,
1447 struct xc4000_config
*cfg
)
1449 struct xc4000_priv
*priv
= NULL
;
1453 if (cfg
->card_type
!= XC4000_CARD_GENERIC
) {
1454 if (cfg
->card_type
== XC4000_CARD_WINFAST_CX88
) {
1455 cfg
->i2c_address
= 0x61;
1457 } else { /* default to PCTV 340E */
1458 cfg
->i2c_address
= 0x61;
1463 dprintk(1, "%s(%d-%04x)\n", __func__
,
1464 i2c
? i2c_adapter_id(i2c
) : -1,
1465 cfg
? cfg
->i2c_address
: -1);
1467 mutex_lock(&xc4000_list_mutex
);
1469 instance
= hybrid_tuner_request_state(struct xc4000_priv
, priv
,
1470 hybrid_tuner_instance_list
,
1471 i2c
, cfg
->i2c_address
, "xc4000");
1472 if (cfg
->card_type
!= XC4000_CARD_GENERIC
)
1473 priv
->card_type
= cfg
->card_type
;
1479 /* new tuner instance */
1480 priv
->bandwidth
= BANDWIDTH_6_MHZ
;
1481 mutex_init(&priv
->lock
);
1482 fe
->tuner_priv
= priv
;
1485 /* existing tuner instance */
1486 fe
->tuner_priv
= priv
;
1490 if (cfg
->if_khz
!= 0) {
1491 /* If the IF hasn't been set yet, use the value provided by
1492 the caller (occurs in hybrid devices where the analog
1493 call to xc4000_attach occurs before the digital side) */
1494 priv
->if_khz
= cfg
->if_khz
;
1497 /* Check if firmware has been loaded. It is possible that another
1498 instance of the driver has loaded the firmware.
1501 if (instance
== 1) {
1502 if (xc4000_readreg(priv
, XREG_PRODUCT_ID
, &id
)
1503 != XC_RESULT_SUCCESS
)
1506 id
= ((priv
->cur_fw
.type
& BASE
) != 0 ?
1507 priv
->hwmodel
: XC_PRODUCT_ID_FW_NOT_LOADED
);
1511 case XC_PRODUCT_ID_FW_LOADED
:
1513 "xc4000: Successfully identified at address 0x%02x\n",
1516 "xc4000: Firmware has been loaded previously\n");
1518 case XC_PRODUCT_ID_FW_NOT_LOADED
:
1520 "xc4000: Successfully identified at address 0x%02x\n",
1523 "xc4000: Firmware has not been loaded previously\n");
1527 "xc4000: Device not found at addr 0x%02x (0x%x)\n",
1528 cfg
->i2c_address
, id
);
1532 mutex_unlock(&xc4000_list_mutex
);
1534 memcpy(&fe
->ops
.tuner_ops
, &xc4000_tuner_ops
,
1535 sizeof(struct dvb_tuner_ops
));
1537 if (instance
== 1) {
1539 mutex_lock(&priv
->lock
);
1540 ret
= xc4000_fwupload(fe
);
1541 mutex_unlock(&priv
->lock
);
1542 if (ret
!= XC_RESULT_SUCCESS
)
1548 mutex_unlock(&xc4000_list_mutex
);
1553 EXPORT_SYMBOL(xc4000_attach
);
1555 MODULE_AUTHOR("Steven Toth, Davide Ferri");
1556 MODULE_DESCRIPTION("Xceive xc4000 silicon tuner driver");
1557 MODULE_LICENSE("GPL");