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>
8 * Copyright (c) 2010 Istvan Varga <istvan_v@mailbox.hu>
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * 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
, "Debugging 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
, "Power management (1: disabled, 2: enabled, "
47 "0 (default): use device-specific default mode).");
50 module_param(audio_std
, int, 0644);
51 MODULE_PARM_DESC(audio_std
, "Audio standard. XC4000 audio decoder explicitly "
52 "needs to know what audio standard is needed for some video standards "
53 "with audio A2 or NICAM. The valid settings are a sum of:\n"
54 " 1: use NICAM/B or A2/B instead of NICAM/A or A2/A\n"
55 " 2: use A2 instead of NICAM or BTSC\n"
56 " 4: use SECAM/K3 instead of K1\n"
57 " 8: use PAL-D/K audio for SECAM-D/K\n"
58 "16: use FM radio input 1 instead of input 2\n"
59 "32: use mono audio (the lower three bits are ignored)");
61 static char firmware_name
[30];
62 module_param_string(firmware_name
, firmware_name
, sizeof(firmware_name
), 0);
63 MODULE_PARM_DESC(firmware_name
, "Firmware file name. Allows overriding the "
64 "default firmware name.");
66 static DEFINE_MUTEX(xc4000_list_mutex
);
67 static LIST_HEAD(hybrid_tuner_instance_list
);
69 #define dprintk(level, fmt, arg...) if (debug >= level) \
70 printk(KERN_INFO "%s: " fmt, "xc4000", ## arg)
72 /* struct for storing firmware table */
73 struct firmware_description
{
81 struct firmware_properties
{
86 unsigned int scode_table
;
91 struct tuner_i2c_props i2c_props
;
92 struct list_head hybrid_tuner_instance_list
;
93 struct firmware_description
*firm
;
103 u8 ignore_i2c_write_errors
;
105 struct firmware_properties cur_fw
;
111 #define XC4000_AUDIO_STD_B 1
112 #define XC4000_AUDIO_STD_A2 2
113 #define XC4000_AUDIO_STD_K3 4
114 #define XC4000_AUDIO_STD_L 8
115 #define XC4000_AUDIO_STD_INPUT1 16
116 #define XC4000_AUDIO_STD_MONO 32
118 #define XC4000_DEFAULT_FIRMWARE "dvb-fe-xc4000-1.4.fw"
121 #define MAX_TV_STANDARD 24
122 #define XC_MAX_I2C_WRITE_LENGTH 64
123 #define XC_POWERED_DOWN 0x80000000U
126 #define XC_RF_MODE_AIR 0
127 #define XC_RF_MODE_CABLE 1
130 #define XC_PRODUCT_ID_FW_NOT_LOADED 0x2000
131 #define XC_PRODUCT_ID_XC4000 0x0FA0
132 #define XC_PRODUCT_ID_XC4100 0x1004
134 /* Registers (Write-only) */
135 #define XREG_INIT 0x00
136 #define XREG_VIDEO_MODE 0x01
137 #define XREG_AUDIO_MODE 0x02
138 #define XREG_RF_FREQ 0x03
139 #define XREG_D_CODE 0x04
140 #define XREG_DIRECTSITTING_MODE 0x05
141 #define XREG_SEEK_MODE 0x06
142 #define XREG_POWER_DOWN 0x08
143 #define XREG_SIGNALSOURCE 0x0A
144 #define XREG_SMOOTHEDCVBS 0x0E
145 #define XREG_AMPLITUDE 0x10
147 /* Registers (Read-only) */
148 #define XREG_ADC_ENV 0x00
149 #define XREG_QUALITY 0x01
150 #define XREG_FRAME_LINES 0x02
151 #define XREG_HSYNC_FREQ 0x03
152 #define XREG_LOCK 0x04
153 #define XREG_FREQ_ERROR 0x05
154 #define XREG_SNR 0x06
155 #define XREG_VERSION 0x07
156 #define XREG_PRODUCT_ID 0x08
159 Basic firmware description. This will remain with
160 the driver for documentation purposes.
162 This represents an I2C firmware file encoded as a
163 string of unsigned char. Format is as follows:
165 char[0 ]=len0_MSB -> len = len_MSB * 256 + len_LSB
166 char[1 ]=len0_LSB -> length of first write transaction
167 char[2 ]=data0 -> first byte to be sent
171 char[M ]=dataN -> last byte to be sent
172 char[M+1]=len1_MSB -> len = len_MSB * 256 + len_LSB
173 char[M+2]=len1_LSB -> length of second write transaction
179 The [len] value should be interpreted as follows:
181 len= len_MSB _ len_LSB
182 len=1111_1111_1111_1111 : End of I2C_SEQUENCE
183 len=0000_0000_0000_0000 : Reset command: Do hardware reset
184 len=0NNN_NNNN_NNNN_NNNN : Normal transaction: number of bytes = {1:32767)
185 len=1WWW_WWWW_WWWW_WWWW : Wait command: wait for {1:32767} ms
187 For the RESET and WAIT commands, the two following bytes will contain
188 immediately the length of the following transaction.
191 struct XC_TV_STANDARD
{
198 /* Tuner standards */
199 #define XC4000_MN_NTSC_PAL_BTSC 0
200 #define XC4000_MN_NTSC_PAL_A2 1
201 #define XC4000_MN_NTSC_PAL_EIAJ 2
202 #define XC4000_MN_NTSC_PAL_Mono 3
203 #define XC4000_BG_PAL_A2 4
204 #define XC4000_BG_PAL_NICAM 5
205 #define XC4000_BG_PAL_MONO 6
206 #define XC4000_I_PAL_NICAM 7
207 #define XC4000_I_PAL_NICAM_MONO 8
208 #define XC4000_DK_PAL_A2 9
209 #define XC4000_DK_PAL_NICAM 10
210 #define XC4000_DK_PAL_MONO 11
211 #define XC4000_DK_SECAM_A2DK1 12
212 #define XC4000_DK_SECAM_A2LDK3 13
213 #define XC4000_DK_SECAM_A2MONO 14
214 #define XC4000_DK_SECAM_NICAM 15
215 #define XC4000_L_SECAM_NICAM 16
216 #define XC4000_LC_SECAM_NICAM 17
217 #define XC4000_DTV6 18
218 #define XC4000_DTV8 19
219 #define XC4000_DTV7_8 20
220 #define XC4000_DTV7 21
221 #define XC4000_FM_Radio_INPUT2 22
222 #define XC4000_FM_Radio_INPUT1 23
224 static struct XC_TV_STANDARD xc4000_standard
[MAX_TV_STANDARD
] = {
225 {"M/N-NTSC/PAL-BTSC", 0x0000, 0x80A0, 4500},
226 {"M/N-NTSC/PAL-A2", 0x0000, 0x80A0, 4600},
227 {"M/N-NTSC/PAL-EIAJ", 0x0040, 0x80A0, 4500},
228 {"M/N-NTSC/PAL-Mono", 0x0078, 0x80A0, 4500},
229 {"B/G-PAL-A2", 0x0000, 0x8159, 5640},
230 {"B/G-PAL-NICAM", 0x0004, 0x8159, 5740},
231 {"B/G-PAL-MONO", 0x0078, 0x8159, 5500},
232 {"I-PAL-NICAM", 0x0080, 0x8049, 6240},
233 {"I-PAL-NICAM-MONO", 0x0078, 0x8049, 6000},
234 {"D/K-PAL-A2", 0x0000, 0x8049, 6380},
235 {"D/K-PAL-NICAM", 0x0080, 0x8049, 6200},
236 {"D/K-PAL-MONO", 0x0078, 0x8049, 6500},
237 {"D/K-SECAM-A2 DK1", 0x0000, 0x8049, 6340},
238 {"D/K-SECAM-A2 L/DK3", 0x0000, 0x8049, 6000},
239 {"D/K-SECAM-A2 MONO", 0x0078, 0x8049, 6500},
240 {"D/K-SECAM-NICAM", 0x0080, 0x8049, 6200},
241 {"L-SECAM-NICAM", 0x8080, 0x0009, 6200},
242 {"L'-SECAM-NICAM", 0x8080, 0x4009, 6200},
243 {"DTV6", 0x00C0, 0x8002, 0},
244 {"DTV8", 0x00C0, 0x800B, 0},
245 {"DTV7/8", 0x00C0, 0x801B, 0},
246 {"DTV7", 0x00C0, 0x8007, 0},
247 {"FM Radio-INPUT2", 0x0008, 0x9800, 10700},
248 {"FM Radio-INPUT1", 0x0008, 0x9000, 10700}
251 static int xc4000_readreg(struct xc4000_priv
*priv
, u16 reg
, u16
*val
);
252 static int xc4000_tuner_reset(struct dvb_frontend
*fe
);
253 static void xc_debug_dump(struct xc4000_priv
*priv
);
255 static int xc_send_i2c_data(struct xc4000_priv
*priv
, u8
*buf
, int len
)
257 struct i2c_msg msg
= { .addr
= priv
->i2c_props
.addr
,
258 .flags
= 0, .buf
= buf
, .len
= len
};
259 if (i2c_transfer(priv
->i2c_props
.adap
, &msg
, 1) != 1) {
260 if (priv
->ignore_i2c_write_errors
== 0) {
261 printk(KERN_ERR
"xc4000: I2C write failed (len=%i)\n",
264 printk(KERN_ERR
"bytes %02x %02x %02x %02x\n", buf
[0],
265 buf
[1], buf
[2], buf
[3]);
273 static int xc4000_tuner_reset(struct dvb_frontend
*fe
)
275 struct xc4000_priv
*priv
= fe
->tuner_priv
;
278 dprintk(1, "%s()\n", __func__
);
281 ret
= fe
->callback(((fe
->dvb
) && (fe
->dvb
->priv
)) ?
283 priv
->i2c_props
.adap
->algo_data
,
284 DVB_FRONTEND_COMPONENT_TUNER
,
285 XC4000_TUNER_RESET
, 0);
287 printk(KERN_ERR
"xc4000: reset failed\n");
291 printk(KERN_ERR
"xc4000: no tuner reset callback function, "
298 static int xc_write_reg(struct xc4000_priv
*priv
, u16 regAddr
, u16 i2cData
)
303 buf
[0] = (regAddr
>> 8) & 0xFF;
304 buf
[1] = regAddr
& 0xFF;
305 buf
[2] = (i2cData
>> 8) & 0xFF;
306 buf
[3] = i2cData
& 0xFF;
307 result
= xc_send_i2c_data(priv
, buf
, 4);
312 static int xc_load_i2c_sequence(struct dvb_frontend
*fe
, const u8
*i2c_sequence
)
314 struct xc4000_priv
*priv
= fe
->tuner_priv
;
316 int i
, nbytes_to_send
, result
;
317 unsigned int len
, pos
, index
;
318 u8 buf
[XC_MAX_I2C_WRITE_LENGTH
];
321 while ((i2c_sequence
[index
] != 0xFF) ||
322 (i2c_sequence
[index
+ 1] != 0xFF)) {
323 len
= i2c_sequence
[index
] * 256 + i2c_sequence
[index
+1];
326 /* NOTE: this is ignored, as the reset callback was */
327 /* already called by check_firmware() */
329 } else if (len
& 0x8000) {
331 msleep(len
& 0x7FFF);
334 /* Send i2c data whilst ensuring individual transactions
335 * do not exceed XC_MAX_I2C_WRITE_LENGTH bytes.
338 buf
[0] = i2c_sequence
[index
];
339 buf
[1] = i2c_sequence
[index
+ 1];
342 if ((len
- pos
) > XC_MAX_I2C_WRITE_LENGTH
- 2)
344 XC_MAX_I2C_WRITE_LENGTH
;
346 nbytes_to_send
= (len
- pos
+ 2);
347 for (i
= 2; i
< nbytes_to_send
; i
++) {
348 buf
[i
] = i2c_sequence
[index
+ pos
+
351 result
= xc_send_i2c_data(priv
, buf
,
357 pos
+= nbytes_to_send
- 2;
365 static int xc_set_tv_standard(struct xc4000_priv
*priv
,
366 u16 video_mode
, u16 audio_mode
)
369 dprintk(1, "%s(0x%04x,0x%04x)\n", __func__
, video_mode
, audio_mode
);
370 dprintk(1, "%s() Standard = %s\n",
372 xc4000_standard
[priv
->video_standard
].Name
);
374 /* Don't complain when the request fails because of i2c stretching */
375 priv
->ignore_i2c_write_errors
= 1;
377 ret
= xc_write_reg(priv
, XREG_VIDEO_MODE
, video_mode
);
379 ret
= xc_write_reg(priv
, XREG_AUDIO_MODE
, audio_mode
);
381 priv
->ignore_i2c_write_errors
= 0;
386 static int xc_set_signal_source(struct xc4000_priv
*priv
, u16 rf_mode
)
388 dprintk(1, "%s(%d) Source = %s\n", __func__
, rf_mode
,
389 rf_mode
== XC_RF_MODE_AIR
? "ANTENNA" : "CABLE");
391 if ((rf_mode
!= XC_RF_MODE_AIR
) && (rf_mode
!= XC_RF_MODE_CABLE
)) {
392 rf_mode
= XC_RF_MODE_CABLE
;
394 "%s(), Invalid mode, defaulting to CABLE",
397 return xc_write_reg(priv
, XREG_SIGNALSOURCE
, rf_mode
);
400 static const struct dvb_tuner_ops xc4000_tuner_ops
;
402 static int xc_set_rf_frequency(struct xc4000_priv
*priv
, u32 freq_hz
)
406 dprintk(1, "%s(%u)\n", __func__
, freq_hz
);
408 if ((freq_hz
> xc4000_tuner_ops
.info
.frequency_max
) ||
409 (freq_hz
< xc4000_tuner_ops
.info
.frequency_min
))
412 freq_code
= (u16
)(freq_hz
/ 15625);
414 /* WAS: Starting in firmware version 1.1.44, Xceive recommends using the
415 FINERFREQ for all normal tuning (the doc indicates reg 0x03 should
416 only be used for fast scanning for channel lock) */
417 /* WAS: XREG_FINERFREQ */
418 return xc_write_reg(priv
, XREG_RF_FREQ
, freq_code
);
421 static int xc_get_adc_envelope(struct xc4000_priv
*priv
, u16
*adc_envelope
)
423 return xc4000_readreg(priv
, XREG_ADC_ENV
, adc_envelope
);
426 static int xc_get_frequency_error(struct xc4000_priv
*priv
, u32
*freq_error_hz
)
432 result
= xc4000_readreg(priv
, XREG_FREQ_ERROR
, ®Data
);
436 tmp
= (u32
)regData
& 0xFFFFU
;
437 tmp
= (tmp
< 0x8000U
? tmp
: 0x10000U
- tmp
);
438 (*freq_error_hz
) = tmp
* 15625;
442 static int xc_get_lock_status(struct xc4000_priv
*priv
, u16
*lock_status
)
444 return xc4000_readreg(priv
, XREG_LOCK
, lock_status
);
447 static int xc_get_version(struct xc4000_priv
*priv
,
448 u8
*hw_majorversion
, u8
*hw_minorversion
,
449 u8
*fw_majorversion
, u8
*fw_minorversion
)
454 result
= xc4000_readreg(priv
, XREG_VERSION
, &data
);
458 (*hw_majorversion
) = (data
>> 12) & 0x0F;
459 (*hw_minorversion
) = (data
>> 8) & 0x0F;
460 (*fw_majorversion
) = (data
>> 4) & 0x0F;
461 (*fw_minorversion
) = data
& 0x0F;
466 static int xc_get_hsync_freq(struct xc4000_priv
*priv
, u32
*hsync_freq_hz
)
471 result
= xc4000_readreg(priv
, XREG_HSYNC_FREQ
, ®Data
);
475 (*hsync_freq_hz
) = ((regData
& 0x0fff) * 763)/100;
479 static int xc_get_frame_lines(struct xc4000_priv
*priv
, u16
*frame_lines
)
481 return xc4000_readreg(priv
, XREG_FRAME_LINES
, frame_lines
);
484 static int xc_get_quality(struct xc4000_priv
*priv
, u16
*quality
)
486 return xc4000_readreg(priv
, XREG_QUALITY
, quality
);
489 static u16
xc_wait_for_lock(struct xc4000_priv
*priv
)
492 int watchdog_count
= 40;
494 while ((lock_state
== 0) && (watchdog_count
> 0)) {
495 xc_get_lock_status(priv
, &lock_state
);
496 if (lock_state
!= 1) {
504 static int xc_tune_channel(struct xc4000_priv
*priv
, u32 freq_hz
)
509 dprintk(1, "%s(%u)\n", __func__
, freq_hz
);
511 /* Don't complain when the request fails because of i2c stretching */
512 priv
->ignore_i2c_write_errors
= 1;
513 result
= xc_set_rf_frequency(priv
, freq_hz
);
514 priv
->ignore_i2c_write_errors
= 0;
519 /* wait for lock only in analog TV mode */
520 if ((priv
->cur_fw
.type
& (FM
| DTV6
| DTV7
| DTV78
| DTV8
)) == 0) {
521 if (xc_wait_for_lock(priv
) != 1)
525 /* Wait for stats to stabilize.
526 * Frame Lines needs two frame times after initial lock
527 * before it is valid.
529 msleep(debug
? 100 : 10);
537 static int xc4000_readreg(struct xc4000_priv
*priv
, u16 reg
, u16
*val
)
539 u8 buf
[2] = { reg
>> 8, reg
& 0xff };
540 u8 bval
[2] = { 0, 0 };
541 struct i2c_msg msg
[2] = {
542 { .addr
= priv
->i2c_props
.addr
,
543 .flags
= 0, .buf
= &buf
[0], .len
= 2 },
544 { .addr
= priv
->i2c_props
.addr
,
545 .flags
= I2C_M_RD
, .buf
= &bval
[0], .len
= 2 },
548 if (i2c_transfer(priv
->i2c_props
.adap
, msg
, 2) != 2) {
549 printk(KERN_ERR
"xc4000: I2C read failed\n");
553 *val
= (bval
[0] << 8) | bval
[1];
557 #define dump_firm_type(t) dump_firm_type_and_int_freq(t, 0)
558 static void dump_firm_type_and_int_freq(unsigned int type
, u16 int_freq
)
561 printk(KERN_CONT
"BASE ");
563 printk(KERN_CONT
"INIT1 ");
565 printk(KERN_CONT
"F8MHZ ");
567 printk(KERN_CONT
"MTS ");
569 printk(KERN_CONT
"D2620 ");
571 printk(KERN_CONT
"D2633 ");
573 printk(KERN_CONT
"DTV6 ");
575 printk(KERN_CONT
"QAM ");
577 printk(KERN_CONT
"DTV7 ");
579 printk(KERN_CONT
"DTV78 ");
581 printk(KERN_CONT
"DTV8 ");
583 printk(KERN_CONT
"FM ");
585 printk(KERN_CONT
"INPUT1 ");
587 printk(KERN_CONT
"LCD ");
589 printk(KERN_CONT
"NOGD ");
591 printk(KERN_CONT
"MONO ");
593 printk(KERN_CONT
"ATSC ");
595 printk(KERN_CONT
"IF ");
597 printk(KERN_CONT
"LG60 ");
599 printk(KERN_CONT
"ATI638 ");
601 printk(KERN_CONT
"OREN538 ");
603 printk(KERN_CONT
"OREN36 ");
604 if (type
& TOYOTA388
)
605 printk(KERN_CONT
"TOYOTA388 ");
606 if (type
& TOYOTA794
)
607 printk(KERN_CONT
"TOYOTA794 ");
609 printk(KERN_CONT
"DIBCOM52 ");
610 if (type
& ZARLINK456
)
611 printk(KERN_CONT
"ZARLINK456 ");
613 printk(KERN_CONT
"CHINA ");
615 printk(KERN_CONT
"F6MHZ ");
617 printk(KERN_CONT
"INPUT2 ");
619 printk(KERN_CONT
"SCODE ");
621 printk(KERN_CONT
"HAS_IF_%d ", int_freq
);
624 static int seek_firmware(struct dvb_frontend
*fe
, unsigned int type
,
627 struct xc4000_priv
*priv
= fe
->tuner_priv
;
629 unsigned int best_nr_diffs
= 255U;
632 printk(KERN_ERR
"Error! firmware not loaded\n");
636 if (((type
& ~SCODE
) == 0) && (*id
== 0))
639 /* Seek for generic video standard match */
640 for (i
= 0; i
< priv
->firm_size
; i
++) {
641 v4l2_std_id id_diff_mask
=
642 (priv
->firm
[i
].id
^ (*id
)) & (*id
);
643 unsigned int type_diff_mask
=
644 (priv
->firm
[i
].type
^ type
)
645 & (BASE_TYPES
| DTV_TYPES
| LCD
| NOGD
| MONO
| SCODE
);
646 unsigned int nr_diffs
;
649 & (BASE
| INIT1
| FM
| DTV6
| DTV7
| DTV78
| DTV8
| SCODE
))
652 nr_diffs
= hweight64(id_diff_mask
) + hweight32(type_diff_mask
);
653 if (!nr_diffs
) /* Supports all the requested standards */
656 if (nr_diffs
< best_nr_diffs
) {
657 best_nr_diffs
= nr_diffs
;
662 /* FIXME: Would make sense to seek for type "hint" match ? */
668 if (best_nr_diffs
> 0U) {
670 "Selecting best matching firmware (%u bits differ) for "
671 "type=(%x), id %016llx:\n",
672 best_nr_diffs
, type
, (unsigned long long)*id
);
677 *id
= priv
->firm
[i
].id
;
681 printk(KERN_DEBUG
"%s firmware for type=",
682 (i
< 0) ? "Can't find" : "Found");
683 dump_firm_type(type
);
684 printk(KERN_DEBUG
"(%x), id %016llx.\n", type
, (unsigned long long)*id
);
689 static int load_firmware(struct dvb_frontend
*fe
, unsigned int type
,
692 struct xc4000_priv
*priv
= fe
->tuner_priv
;
696 pos
= seek_firmware(fe
, type
, id
);
700 p
= priv
->firm
[pos
].ptr
;
702 /* Don't complain when the request fails because of i2c stretching */
703 priv
->ignore_i2c_write_errors
= 1;
705 rc
= xc_load_i2c_sequence(fe
, p
);
707 priv
->ignore_i2c_write_errors
= 0;
712 static int xc4000_fwupload(struct dvb_frontend
*fe
)
714 struct xc4000_priv
*priv
= fe
->tuner_priv
;
715 const struct firmware
*fw
= NULL
;
716 const unsigned char *p
, *endp
;
722 if (firmware_name
[0] != '\0')
723 fname
= firmware_name
;
725 fname
= XC4000_DEFAULT_FIRMWARE
;
727 dprintk(1, "Reading firmware %s\n", fname
);
728 rc
= request_firmware(&fw
, fname
, priv
->i2c_props
.adap
->dev
.parent
);
731 printk(KERN_ERR
"Error: firmware %s not found.\n", fname
);
733 printk(KERN_ERR
"Error %d while requesting firmware %s\n",
741 if (fw
->size
< sizeof(name
) - 1 + 2 + 2) {
742 printk(KERN_ERR
"Error: firmware file %s has invalid size!\n",
747 memcpy(name
, p
, sizeof(name
) - 1);
748 name
[sizeof(name
) - 1] = '\0';
749 p
+= sizeof(name
) - 1;
751 priv
->firm_version
= get_unaligned_le16(p
);
754 n_array
= get_unaligned_le16(p
);
757 dprintk(1, "Loading %d firmware images from %s, type: %s, ver %d.%d\n",
758 n_array
, fname
, name
,
759 priv
->firm_version
>> 8, priv
->firm_version
& 0xff);
761 priv
->firm
= kcalloc(n_array
, sizeof(*priv
->firm
), GFP_KERNEL
);
762 if (priv
->firm
== NULL
) {
763 printk(KERN_ERR
"Not enough memory to load firmware file.\n");
767 priv
->firm_size
= n_array
;
777 printk(KERN_ERR
"More firmware images in file than "
782 /* Checks if there's enough bytes to read */
783 if (endp
- p
< sizeof(type
) + sizeof(id
) + sizeof(size
))
786 type
= get_unaligned_le32(p
);
789 id
= get_unaligned_le64(p
);
793 int_freq
= get_unaligned_le16(p
);
794 p
+= sizeof(int_freq
);
795 if (endp
- p
< sizeof(size
))
799 size
= get_unaligned_le32(p
);
802 if (!size
|| size
> endp
- p
) {
803 printk(KERN_ERR
"Firmware type (%x), id %llx is corrupted (size=%d, expected %d)\n",
804 type
, (unsigned long long)id
,
805 (unsigned)(endp
- p
), size
);
809 priv
->firm
[n
].ptr
= kzalloc(size
, GFP_KERNEL
);
810 if (priv
->firm
[n
].ptr
== NULL
) {
811 printk(KERN_ERR
"Not enough memory to load firmware file.\n");
817 printk(KERN_DEBUG
"Reading firmware type ");
818 dump_firm_type_and_int_freq(type
, int_freq
);
819 printk(KERN_DEBUG
"(%x), id %llx, size=%d.\n",
820 type
, (unsigned long long)id
, size
);
823 memcpy(priv
->firm
[n
].ptr
, p
, size
);
824 priv
->firm
[n
].type
= type
;
825 priv
->firm
[n
].id
= id
;
826 priv
->firm
[n
].size
= size
;
827 priv
->firm
[n
].int_freq
= int_freq
;
832 if (n
+ 1 != priv
->firm_size
) {
833 printk(KERN_ERR
"Firmware file is incomplete!\n");
840 printk(KERN_ERR
"Firmware header is incomplete!\n");
843 printk(KERN_ERR
"Error: firmware file is corrupted!\n");
846 release_firmware(fw
);
848 dprintk(1, "Firmware files loaded.\n");
853 static int load_scode(struct dvb_frontend
*fe
, unsigned int type
,
854 v4l2_std_id
*id
, __u16 int_freq
, int scode
)
856 struct xc4000_priv
*priv
= fe
->tuner_priv
;
862 dprintk(1, "%s called int_freq=%d\n", __func__
, int_freq
);
865 pos
= seek_firmware(fe
, type
, id
);
869 for (pos
= 0; pos
< priv
->firm_size
; pos
++) {
870 if ((priv
->firm
[pos
].int_freq
== int_freq
) &&
871 (priv
->firm
[pos
].type
& HAS_IF
))
874 if (pos
== priv
->firm_size
)
878 p
= priv
->firm
[pos
].ptr
;
880 if (priv
->firm
[pos
].size
!= 12 * 16 || scode
>= 16)
885 tuner_info("Loading SCODE for type=");
886 dump_firm_type_and_int_freq(priv
->firm
[pos
].type
,
887 priv
->firm
[pos
].int_freq
);
888 printk(KERN_CONT
"(%x), id %016llx.\n", priv
->firm
[pos
].type
,
889 (unsigned long long)*id
);
893 memcpy(&scode_buf
[1], p
, 12);
895 /* Enter direct-mode */
896 rc
= xc_write_reg(priv
, XREG_DIRECTSITTING_MODE
, 0);
898 printk(KERN_ERR
"failed to put device into direct mode!\n");
902 rc
= xc_send_i2c_data(priv
, scode_buf
, 13);
904 /* Even if the send failed, make sure we set back to indirect
906 printk(KERN_ERR
"Failed to set scode %d\n", rc
);
909 /* Switch back to indirect-mode */
910 memset(indirect_mode
, 0, sizeof(indirect_mode
));
911 indirect_mode
[4] = 0x88;
912 xc_send_i2c_data(priv
, indirect_mode
, sizeof(indirect_mode
));
918 static int check_firmware(struct dvb_frontend
*fe
, unsigned int type
,
919 v4l2_std_id std
, __u16 int_freq
)
921 struct xc4000_priv
*priv
= fe
->tuner_priv
;
922 struct firmware_properties new_fw
;
923 int rc
= 0, is_retry
= 0;
926 u8 hw_major
, hw_minor
, fw_major
, fw_minor
;
928 dprintk(1, "%s called\n", __func__
);
931 rc
= xc4000_fwupload(fe
);
939 new_fw
.std_req
= std
;
940 new_fw
.scode_table
= SCODE
;
942 new_fw
.int_freq
= int_freq
;
944 dprintk(1, "checking firmware, user requested type=");
946 dump_firm_type(new_fw
.type
);
947 printk(KERN_CONT
"(%x), id %016llx, ", new_fw
.type
,
948 (unsigned long long)new_fw
.std_req
);
950 printk(KERN_CONT
"scode_tbl ");
952 printk(KERN_CONT
"int_freq %d, ", new_fw
.int_freq
);
953 printk(KERN_CONT
"scode_nr %d\n", new_fw
.scode_nr
);
956 /* No need to reload base firmware if it matches */
957 if (priv
->cur_fw
.type
& BASE
) {
958 dprintk(1, "BASE firmware not changed.\n");
962 /* Updating BASE - forget about all currently loaded firmware */
963 memset(&priv
->cur_fw
, 0, sizeof(priv
->cur_fw
));
965 /* Reset is needed before loading firmware */
966 rc
= xc4000_tuner_reset(fe
);
970 /* BASE firmwares are all std0 */
972 rc
= load_firmware(fe
, BASE
, &std0
);
974 printk(KERN_ERR
"Error %d while loading base firmware\n", rc
);
978 /* Load INIT1, if needed */
979 dprintk(1, "Load init1 firmware, if exists\n");
981 rc
= load_firmware(fe
, BASE
| INIT1
, &std0
);
983 rc
= load_firmware(fe
, BASE
| INIT1
, &std0
);
984 if (rc
< 0 && rc
!= -ENOENT
) {
985 tuner_err("Error %d while loading init1 firmware\n",
992 * No need to reload standard specific firmware if base firmware
993 * was not reloaded and requested video standards have not changed.
995 if (priv
->cur_fw
.type
== (BASE
| new_fw
.type
) &&
996 priv
->cur_fw
.std_req
== std
) {
997 dprintk(1, "Std-specific firmware already loaded.\n");
998 goto skip_std_specific
;
1001 /* Reloading std-specific firmware forces a SCODE update */
1002 priv
->cur_fw
.scode_table
= 0;
1004 /* Load the standard firmware */
1005 rc
= load_firmware(fe
, new_fw
.type
, &new_fw
.id
);
1011 if (priv
->cur_fw
.scode_table
== new_fw
.scode_table
&&
1012 priv
->cur_fw
.scode_nr
== new_fw
.scode_nr
) {
1013 dprintk(1, "SCODE firmware already loaded.\n");
1017 /* Load SCODE firmware, if exists */
1018 rc
= load_scode(fe
, new_fw
.type
| new_fw
.scode_table
, &new_fw
.id
,
1019 new_fw
.int_freq
, new_fw
.scode_nr
);
1021 dprintk(1, "load scode failed %d\n", rc
);
1024 rc
= xc4000_readreg(priv
, XREG_PRODUCT_ID
, &hwmodel
);
1026 if (xc_get_version(priv
, &hw_major
, &hw_minor
, &fw_major
,
1028 printk(KERN_ERR
"Unable to read tuner registers.\n");
1032 dprintk(1, "Device is Xceive %d version %d.%d, "
1033 "firmware version %d.%d\n",
1034 hwmodel
, hw_major
, hw_minor
, fw_major
, fw_minor
);
1036 /* Check firmware version against what we downloaded. */
1037 if (priv
->firm_version
!= ((fw_major
<< 8) | fw_minor
)) {
1039 "Incorrect readback of firmware version %d.%d.\n",
1040 fw_major
, fw_minor
);
1044 /* Check that the tuner hardware model remains consistent over time. */
1045 if (priv
->hwmodel
== 0 &&
1046 (hwmodel
== XC_PRODUCT_ID_XC4000
||
1047 hwmodel
== XC_PRODUCT_ID_XC4100
)) {
1048 priv
->hwmodel
= hwmodel
;
1049 priv
->hwvers
= (hw_major
<< 8) | hw_minor
;
1050 } else if (priv
->hwmodel
== 0 || priv
->hwmodel
!= hwmodel
||
1051 priv
->hwvers
!= ((hw_major
<< 8) | hw_minor
)) {
1053 "Read invalid device hardware information - tuner "
1058 memcpy(&priv
->cur_fw
, &new_fw
, sizeof(priv
->cur_fw
));
1061 * By setting BASE in cur_fw.type only after successfully loading all
1062 * firmwares, we can:
1063 * 1. Identify that BASE firmware with type=0 has been loaded;
1064 * 2. Tell whether BASE firmware was just changed the next time through.
1066 priv
->cur_fw
.type
|= BASE
;
1071 memset(&priv
->cur_fw
, 0, sizeof(priv
->cur_fw
));
1075 dprintk(1, "Retrying firmware load\n");
1084 static void xc_debug_dump(struct xc4000_priv
*priv
)
1087 u32 freq_error_hz
= 0;
1089 u32 hsync_freq_hz
= 0;
1092 u8 hw_majorversion
= 0, hw_minorversion
= 0;
1093 u8 fw_majorversion
= 0, fw_minorversion
= 0;
1095 xc_get_adc_envelope(priv
, &adc_envelope
);
1096 dprintk(1, "*** ADC envelope (0-1023) = %d\n", adc_envelope
);
1098 xc_get_frequency_error(priv
, &freq_error_hz
);
1099 dprintk(1, "*** Frequency error = %d Hz\n", freq_error_hz
);
1101 xc_get_lock_status(priv
, &lock_status
);
1102 dprintk(1, "*** Lock status (0-Wait, 1-Locked, 2-No-signal) = %d\n",
1105 xc_get_version(priv
, &hw_majorversion
, &hw_minorversion
,
1106 &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 if (priv
->video_standard
< XC4000_DTV6
) {
1112 xc_get_hsync_freq(priv
, &hsync_freq_hz
);
1113 dprintk(1, "*** Horizontal sync frequency = %d Hz\n",
1116 xc_get_frame_lines(priv
, &frame_lines
);
1117 dprintk(1, "*** Frame lines = %d\n", frame_lines
);
1120 xc_get_quality(priv
, &quality
);
1121 dprintk(1, "*** Quality (0:<8dB, 7:>56dB) = %d\n", quality
);
1124 static int xc4000_set_params(struct dvb_frontend
*fe
)
1126 struct dtv_frontend_properties
*c
= &fe
->dtv_property_cache
;
1127 u32 delsys
= c
->delivery_system
;
1128 u32 bw
= c
->bandwidth_hz
;
1129 struct xc4000_priv
*priv
= fe
->tuner_priv
;
1131 int ret
= -EREMOTEIO
;
1133 dprintk(1, "%s() frequency=%d (Hz)\n", __func__
, c
->frequency
);
1135 mutex_lock(&priv
->lock
);
1139 dprintk(1, "%s() VSB modulation\n", __func__
);
1140 priv
->rf_mode
= XC_RF_MODE_AIR
;
1141 priv
->freq_hz
= c
->frequency
- 1750000;
1142 priv
->video_standard
= XC4000_DTV6
;
1145 case SYS_DVBC_ANNEX_B
:
1146 dprintk(1, "%s() QAM modulation\n", __func__
);
1147 priv
->rf_mode
= XC_RF_MODE_CABLE
;
1148 priv
->freq_hz
= c
->frequency
- 1750000;
1149 priv
->video_standard
= XC4000_DTV6
;
1154 dprintk(1, "%s() OFDM\n", __func__
);
1156 if (c
->frequency
< 400000000) {
1157 priv
->freq_hz
= c
->frequency
- 2250000;
1159 priv
->freq_hz
= c
->frequency
- 2750000;
1161 priv
->video_standard
= XC4000_DTV7_8
;
1163 } else if (bw
<= 6000000) {
1164 priv
->video_standard
= XC4000_DTV6
;
1165 priv
->freq_hz
= c
->frequency
- 1750000;
1167 } else if (bw
<= 7000000) {
1168 priv
->video_standard
= XC4000_DTV7
;
1169 priv
->freq_hz
= c
->frequency
- 2250000;
1172 priv
->video_standard
= XC4000_DTV8
;
1173 priv
->freq_hz
= c
->frequency
- 2750000;
1176 priv
->rf_mode
= XC_RF_MODE_AIR
;
1179 printk(KERN_ERR
"xc4000 delivery system not supported!\n");
1184 dprintk(1, "%s() frequency=%d (compensated)\n",
1185 __func__
, priv
->freq_hz
);
1187 /* Make sure the correct firmware type is loaded */
1188 if (check_firmware(fe
, type
, 0, priv
->if_khz
) != 0)
1191 priv
->bandwidth
= c
->bandwidth_hz
;
1193 ret
= xc_set_signal_source(priv
, priv
->rf_mode
);
1195 printk(KERN_ERR
"xc4000: xc_set_signal_source(%d) failed\n",
1199 u16 video_mode
, audio_mode
;
1200 video_mode
= xc4000_standard
[priv
->video_standard
].video_mode
;
1201 audio_mode
= xc4000_standard
[priv
->video_standard
].audio_mode
;
1202 if (type
== DTV6
&& priv
->firm_version
!= 0x0102)
1203 video_mode
|= 0x0001;
1204 ret
= xc_set_tv_standard(priv
, video_mode
, audio_mode
);
1206 printk(KERN_ERR
"xc4000: xc_set_tv_standard failed\n");
1207 /* DJH - do not return when it fails... */
1212 if (xc_write_reg(priv
, XREG_D_CODE
, 0) == 0)
1214 if (priv
->dvb_amplitude
!= 0) {
1215 if (xc_write_reg(priv
, XREG_AMPLITUDE
,
1216 (priv
->firm_version
!= 0x0102 ||
1217 priv
->dvb_amplitude
!= 134 ?
1218 priv
->dvb_amplitude
: 132)) != 0)
1221 if (priv
->set_smoothedcvbs
!= 0) {
1222 if (xc_write_reg(priv
, XREG_SMOOTHEDCVBS
, 1) != 0)
1226 printk(KERN_ERR
"xc4000: setting registers failed\n");
1230 xc_tune_channel(priv
, priv
->freq_hz
);
1235 mutex_unlock(&priv
->lock
);
1240 static int xc4000_set_analog_params(struct dvb_frontend
*fe
,
1241 struct analog_parameters
*params
)
1243 struct xc4000_priv
*priv
= fe
->tuner_priv
;
1244 unsigned int type
= 0;
1245 int ret
= -EREMOTEIO
;
1247 if (params
->mode
== V4L2_TUNER_RADIO
) {
1248 dprintk(1, "%s() frequency=%d (in units of 62.5Hz)\n",
1249 __func__
, params
->frequency
);
1251 mutex_lock(&priv
->lock
);
1254 priv
->freq_hz
= params
->frequency
* 125L / 2;
1256 if (audio_std
& XC4000_AUDIO_STD_INPUT1
) {
1257 priv
->video_standard
= XC4000_FM_Radio_INPUT1
;
1260 priv
->video_standard
= XC4000_FM_Radio_INPUT2
;
1267 dprintk(1, "%s() frequency=%d (in units of 62.5khz)\n",
1268 __func__
, params
->frequency
);
1270 mutex_lock(&priv
->lock
);
1272 /* params->frequency is in units of 62.5khz */
1273 priv
->freq_hz
= params
->frequency
* 62500;
1275 params
->std
&= V4L2_STD_ALL
;
1276 /* if std is not defined, choose one */
1278 params
->std
= V4L2_STD_PAL_BG
;
1280 if (audio_std
& XC4000_AUDIO_STD_MONO
)
1283 if (params
->std
& V4L2_STD_MN
) {
1284 params
->std
= V4L2_STD_MN
;
1285 if (audio_std
& XC4000_AUDIO_STD_MONO
) {
1286 priv
->video_standard
= XC4000_MN_NTSC_PAL_Mono
;
1287 } else if (audio_std
& XC4000_AUDIO_STD_A2
) {
1288 params
->std
|= V4L2_STD_A2
;
1289 priv
->video_standard
= XC4000_MN_NTSC_PAL_A2
;
1291 params
->std
|= V4L2_STD_BTSC
;
1292 priv
->video_standard
= XC4000_MN_NTSC_PAL_BTSC
;
1297 if (params
->std
& V4L2_STD_PAL_BG
) {
1298 params
->std
= V4L2_STD_PAL_BG
;
1299 if (audio_std
& XC4000_AUDIO_STD_MONO
) {
1300 priv
->video_standard
= XC4000_BG_PAL_MONO
;
1301 } else if (!(audio_std
& XC4000_AUDIO_STD_A2
)) {
1302 if (!(audio_std
& XC4000_AUDIO_STD_B
)) {
1303 params
->std
|= V4L2_STD_NICAM_A
;
1304 priv
->video_standard
= XC4000_BG_PAL_NICAM
;
1306 params
->std
|= V4L2_STD_NICAM_B
;
1307 priv
->video_standard
= XC4000_BG_PAL_NICAM
;
1310 if (!(audio_std
& XC4000_AUDIO_STD_B
)) {
1311 params
->std
|= V4L2_STD_A2_A
;
1312 priv
->video_standard
= XC4000_BG_PAL_A2
;
1314 params
->std
|= V4L2_STD_A2_B
;
1315 priv
->video_standard
= XC4000_BG_PAL_A2
;
1321 if (params
->std
& V4L2_STD_PAL_I
) {
1322 /* default to NICAM audio standard */
1323 params
->std
= V4L2_STD_PAL_I
| V4L2_STD_NICAM
;
1324 if (audio_std
& XC4000_AUDIO_STD_MONO
)
1325 priv
->video_standard
= XC4000_I_PAL_NICAM_MONO
;
1327 priv
->video_standard
= XC4000_I_PAL_NICAM
;
1331 if (params
->std
& V4L2_STD_PAL_DK
) {
1332 params
->std
= V4L2_STD_PAL_DK
;
1333 if (audio_std
& XC4000_AUDIO_STD_MONO
) {
1334 priv
->video_standard
= XC4000_DK_PAL_MONO
;
1335 } else if (audio_std
& XC4000_AUDIO_STD_A2
) {
1336 params
->std
|= V4L2_STD_A2
;
1337 priv
->video_standard
= XC4000_DK_PAL_A2
;
1339 params
->std
|= V4L2_STD_NICAM
;
1340 priv
->video_standard
= XC4000_DK_PAL_NICAM
;
1345 if (params
->std
& V4L2_STD_SECAM_DK
) {
1346 /* default to A2 audio standard */
1347 params
->std
= V4L2_STD_SECAM_DK
| V4L2_STD_A2
;
1348 if (audio_std
& XC4000_AUDIO_STD_L
) {
1350 priv
->video_standard
= XC4000_DK_SECAM_NICAM
;
1351 } else if (audio_std
& XC4000_AUDIO_STD_MONO
) {
1352 priv
->video_standard
= XC4000_DK_SECAM_A2MONO
;
1353 } else if (audio_std
& XC4000_AUDIO_STD_K3
) {
1354 params
->std
|= V4L2_STD_SECAM_K3
;
1355 priv
->video_standard
= XC4000_DK_SECAM_A2LDK3
;
1357 priv
->video_standard
= XC4000_DK_SECAM_A2DK1
;
1362 if (params
->std
& V4L2_STD_SECAM_L
) {
1363 /* default to NICAM audio standard */
1365 params
->std
= V4L2_STD_SECAM_L
| V4L2_STD_NICAM
;
1366 priv
->video_standard
= XC4000_L_SECAM_NICAM
;
1370 if (params
->std
& V4L2_STD_SECAM_LC
) {
1371 /* default to NICAM audio standard */
1373 params
->std
= V4L2_STD_SECAM_LC
| V4L2_STD_NICAM
;
1374 priv
->video_standard
= XC4000_LC_SECAM_NICAM
;
1379 /* FIXME: it could be air. */
1380 priv
->rf_mode
= XC_RF_MODE_CABLE
;
1382 if (check_firmware(fe
, type
, params
->std
,
1383 xc4000_standard
[priv
->video_standard
].int_freq
) != 0)
1386 ret
= xc_set_signal_source(priv
, priv
->rf_mode
);
1389 "xc4000: xc_set_signal_source(%d) failed\n",
1393 u16 video_mode
, audio_mode
;
1394 video_mode
= xc4000_standard
[priv
->video_standard
].video_mode
;
1395 audio_mode
= xc4000_standard
[priv
->video_standard
].audio_mode
;
1396 if (priv
->video_standard
< XC4000_BG_PAL_A2
) {
1398 video_mode
&= 0xFF7F;
1399 } else if (priv
->video_standard
< XC4000_I_PAL_NICAM
) {
1400 if (priv
->firm_version
== 0x0102)
1401 video_mode
&= 0xFEFF;
1402 if (audio_std
& XC4000_AUDIO_STD_B
)
1403 video_mode
|= 0x0080;
1405 ret
= xc_set_tv_standard(priv
, video_mode
, audio_mode
);
1407 printk(KERN_ERR
"xc4000: xc_set_tv_standard failed\n");
1412 if (xc_write_reg(priv
, XREG_D_CODE
, 0) == 0)
1414 if (xc_write_reg(priv
, XREG_AMPLITUDE
, 1) != 0)
1416 if (priv
->set_smoothedcvbs
!= 0) {
1417 if (xc_write_reg(priv
, XREG_SMOOTHEDCVBS
, 1) != 0)
1421 printk(KERN_ERR
"xc4000: setting registers failed\n");
1425 xc_tune_channel(priv
, priv
->freq_hz
);
1430 mutex_unlock(&priv
->lock
);
1435 static int xc4000_get_frequency(struct dvb_frontend
*fe
, u32
*freq
)
1437 struct xc4000_priv
*priv
= fe
->tuner_priv
;
1439 *freq
= priv
->freq_hz
;
1442 mutex_lock(&priv
->lock
);
1443 if ((priv
->cur_fw
.type
1444 & (BASE
| FM
| DTV6
| DTV7
| DTV78
| DTV8
)) == BASE
) {
1446 if (xc4000_readreg(priv
, XREG_SNR
, &snr
) == 0) {
1447 mutex_unlock(&priv
->lock
);
1448 dprintk(1, "%s() freq = %u, SNR = %d\n",
1449 __func__
, *freq
, snr
);
1453 mutex_unlock(&priv
->lock
);
1456 dprintk(1, "%s()\n", __func__
);
1461 static int xc4000_get_bandwidth(struct dvb_frontend
*fe
, u32
*bw
)
1463 struct xc4000_priv
*priv
= fe
->tuner_priv
;
1464 dprintk(1, "%s()\n", __func__
);
1466 *bw
= priv
->bandwidth
;
1470 static int xc4000_get_status(struct dvb_frontend
*fe
, u32
*status
)
1472 struct xc4000_priv
*priv
= fe
->tuner_priv
;
1473 u16 lock_status
= 0;
1475 mutex_lock(&priv
->lock
);
1477 if (priv
->cur_fw
.type
& BASE
)
1478 xc_get_lock_status(priv
, &lock_status
);
1480 *status
= (lock_status
== 1 ?
1481 TUNER_STATUS_LOCKED
| TUNER_STATUS_STEREO
: 0);
1482 if (priv
->cur_fw
.type
& (DTV6
| DTV7
| DTV78
| DTV8
))
1483 *status
&= (~TUNER_STATUS_STEREO
);
1485 mutex_unlock(&priv
->lock
);
1487 dprintk(2, "%s() lock_status = %d\n", __func__
, lock_status
);
1492 static int xc4000_sleep(struct dvb_frontend
*fe
)
1494 struct xc4000_priv
*priv
= fe
->tuner_priv
;
1497 dprintk(1, "%s()\n", __func__
);
1499 mutex_lock(&priv
->lock
);
1501 /* Avoid firmware reload on slow devices */
1502 if ((no_poweroff
== 2 ||
1503 (no_poweroff
== 0 && priv
->default_pm
!= 0)) &&
1504 (priv
->cur_fw
.type
& BASE
) != 0) {
1505 /* force reset and firmware reload */
1506 priv
->cur_fw
.type
= XC_POWERED_DOWN
;
1508 if (xc_write_reg(priv
, XREG_POWER_DOWN
, 0) != 0) {
1510 "xc4000: %s() unable to shutdown tuner\n",
1517 mutex_unlock(&priv
->lock
);
1522 static int xc4000_init(struct dvb_frontend
*fe
)
1524 dprintk(1, "%s()\n", __func__
);
1529 static int xc4000_release(struct dvb_frontend
*fe
)
1531 struct xc4000_priv
*priv
= fe
->tuner_priv
;
1533 dprintk(1, "%s()\n", __func__
);
1535 mutex_lock(&xc4000_list_mutex
);
1538 hybrid_tuner_release_state(priv
);
1540 mutex_unlock(&xc4000_list_mutex
);
1542 fe
->tuner_priv
= NULL
;
1547 static const struct dvb_tuner_ops xc4000_tuner_ops
= {
1549 .name
= "Xceive XC4000",
1550 .frequency_min
= 1000000,
1551 .frequency_max
= 1023000000,
1552 .frequency_step
= 50000,
1555 .release
= xc4000_release
,
1556 .init
= xc4000_init
,
1557 .sleep
= xc4000_sleep
,
1559 .set_params
= xc4000_set_params
,
1560 .set_analog_params
= xc4000_set_analog_params
,
1561 .get_frequency
= xc4000_get_frequency
,
1562 .get_bandwidth
= xc4000_get_bandwidth
,
1563 .get_status
= xc4000_get_status
1566 struct dvb_frontend
*xc4000_attach(struct dvb_frontend
*fe
,
1567 struct i2c_adapter
*i2c
,
1568 struct xc4000_config
*cfg
)
1570 struct xc4000_priv
*priv
= NULL
;
1574 dprintk(1, "%s(%d-%04x)\n", __func__
,
1575 i2c
? i2c_adapter_id(i2c
) : -1,
1576 cfg
? cfg
->i2c_address
: -1);
1578 mutex_lock(&xc4000_list_mutex
);
1580 instance
= hybrid_tuner_request_state(struct xc4000_priv
, priv
,
1581 hybrid_tuner_instance_list
,
1582 i2c
, cfg
->i2c_address
, "xc4000");
1588 /* new tuner instance */
1589 priv
->bandwidth
= 6000000;
1590 /* set default configuration */
1591 priv
->if_khz
= 4560;
1592 priv
->default_pm
= 0;
1593 priv
->dvb_amplitude
= 134;
1594 priv
->set_smoothedcvbs
= 1;
1595 mutex_init(&priv
->lock
);
1596 fe
->tuner_priv
= priv
;
1599 /* existing tuner instance */
1600 fe
->tuner_priv
= priv
;
1604 if (cfg
->if_khz
!= 0) {
1605 /* copy configuration if provided by the caller */
1606 priv
->if_khz
= cfg
->if_khz
;
1607 priv
->default_pm
= cfg
->default_pm
;
1608 priv
->dvb_amplitude
= cfg
->dvb_amplitude
;
1609 priv
->set_smoothedcvbs
= cfg
->set_smoothedcvbs
;
1612 /* Check if firmware has been loaded. It is possible that another
1613 instance of the driver has loaded the firmware.
1616 if (instance
== 1) {
1617 if (xc4000_readreg(priv
, XREG_PRODUCT_ID
, &id
) != 0)
1620 id
= ((priv
->cur_fw
.type
& BASE
) != 0 ?
1621 priv
->hwmodel
: XC_PRODUCT_ID_FW_NOT_LOADED
);
1625 case XC_PRODUCT_ID_XC4000
:
1626 case XC_PRODUCT_ID_XC4100
:
1628 "xc4000: Successfully identified at address 0x%02x\n",
1631 "xc4000: Firmware has been loaded previously\n");
1633 case XC_PRODUCT_ID_FW_NOT_LOADED
:
1635 "xc4000: Successfully identified at address 0x%02x\n",
1638 "xc4000: Firmware has not been loaded previously\n");
1642 "xc4000: Device not found at addr 0x%02x (0x%x)\n",
1643 cfg
->i2c_address
, id
);
1647 mutex_unlock(&xc4000_list_mutex
);
1649 memcpy(&fe
->ops
.tuner_ops
, &xc4000_tuner_ops
,
1650 sizeof(struct dvb_tuner_ops
));
1652 if (instance
== 1) {
1654 mutex_lock(&priv
->lock
);
1655 ret
= xc4000_fwupload(fe
);
1656 mutex_unlock(&priv
->lock
);
1663 mutex_unlock(&xc4000_list_mutex
);
1668 EXPORT_SYMBOL(xc4000_attach
);
1670 MODULE_AUTHOR("Steven Toth, Davide Ferri");
1671 MODULE_DESCRIPTION("Xceive xc4000 silicon tuner driver");
1672 MODULE_LICENSE("GPL");