3 * Copyright (c) 2007-2008 Mauro Carvalho Chehab (mchehab@infradead.org)
5 * Copyright (c) 2007 Michel Ludwig (michel.ludwig@gmail.com)
8 * This code is placed under the terms of the GNU General Public License v2
11 #include <linux/i2c.h>
12 #include <asm/div64.h>
13 #include <linux/firmware.h>
14 #include <linux/videodev2.h>
15 #include <linux/delay.h>
16 #include <media/tuner.h>
17 #include <linux/mutex.h>
18 #include <linux/slab.h>
19 #include <asm/unaligned.h>
20 #include "tuner-i2c.h"
21 #include "tuner-xc2028.h"
22 #include "tuner-xc2028-types.h"
24 #include <linux/dvb/frontend.h>
25 #include "dvb_frontend.h"
27 /* Max transfer size done by I2C transfer functions */
28 #define MAX_XFER_SIZE 80
30 /* Registers (Write-only) */
31 #define XREG_INIT 0x00
32 #define XREG_RF_FREQ 0x02
33 #define XREG_POWER_DOWN 0x08
35 /* Registers (Read-only) */
36 #define XREG_FREQ_ERROR 0x01
37 #define XREG_LOCK 0x02
38 #define XREG_VERSION 0x04
39 #define XREG_PRODUCT_ID 0x08
40 #define XREG_HSYNC_FREQ 0x10
41 #define XREG_FRAME_LINES 0x20
44 #define XREG_ADC_ENV 0x0100
47 module_param(debug
, int, 0644);
48 MODULE_PARM_DESC(debug
, "enable verbose debug messages");
50 static int no_poweroff
;
51 module_param(no_poweroff
, int, 0644);
52 MODULE_PARM_DESC(no_poweroff
, "0 (default) powers device off when not used.\n"
53 "1 keep device energized and with tuner ready all the times.\n"
54 " Faster, but consumes more power and keeps the device hotter\n");
56 static char audio_std
[8];
57 module_param_string(audio_std
, audio_std
, sizeof(audio_std
), 0);
58 MODULE_PARM_DESC(audio_std
,
59 "Audio standard. XC3028 audio decoder explicitly "
60 "needs to know what audio\n"
61 "standard is needed for some video standards with audio A2 or NICAM.\n"
62 "The valid values are:\n"
70 static char firmware_name
[30];
71 module_param_string(firmware_name
, firmware_name
, sizeof(firmware_name
), 0);
72 MODULE_PARM_DESC(firmware_name
, "Firmware file name. Allows overriding the "
73 "default firmware name\n");
75 static LIST_HEAD(hybrid_tuner_instance_list
);
76 static DEFINE_MUTEX(xc2028_list_mutex
);
78 /* struct for storing firmware table */
79 struct firmware_description
{
87 struct firmware_properties
{
92 unsigned int scode_table
;
97 XC2028_NO_FIRMWARE
= 0,
98 XC2028_WAITING_FIRMWARE
,
105 struct list_head hybrid_tuner_instance_list
;
106 struct tuner_i2c_props i2c_props
;
109 enum xc2028_state state
;
112 struct firmware_description
*firm
;
119 struct xc2028_ctrl ctrl
;
121 struct firmware_properties cur_fw
;
126 #define i2c_send(priv, buf, size) ({ \
128 _rc = tuner_i2c_xfer_send(&priv->i2c_props, buf, size); \
130 tuner_info("i2c output error: rc = %d (should be %d)\n",\
132 if (priv->ctrl.msleep) \
133 msleep(priv->ctrl.msleep); \
137 #define i2c_send_recv(priv, obuf, osize, ibuf, isize) ({ \
139 _rc = tuner_i2c_xfer_send_recv(&priv->i2c_props, obuf, osize, \
142 tuner_err("i2c input error: rc = %d (should be %d)\n", \
144 if (priv->ctrl.msleep) \
145 msleep(priv->ctrl.msleep); \
149 #define send_seq(priv, data...) ({ \
150 static u8 _val[] = data; \
152 if (sizeof(_val) != \
153 (_rc = tuner_i2c_xfer_send(&priv->i2c_props, \
154 _val, sizeof(_val)))) { \
155 tuner_err("Error on line %d: %d\n", __LINE__, _rc); \
156 } else if (priv->ctrl.msleep) \
157 msleep(priv->ctrl.msleep); \
161 static int xc2028_get_reg(struct xc2028_data
*priv
, u16 reg
, u16
*val
)
163 unsigned char buf
[2];
164 unsigned char ibuf
[2];
166 tuner_dbg("%s %04x called\n", __func__
, reg
);
169 buf
[1] = (unsigned char) reg
;
171 if (i2c_send_recv(priv
, buf
, 2, ibuf
, 2) != 2)
174 *val
= (ibuf
[1]) | (ibuf
[0] << 8);
178 #define dump_firm_type(t) dump_firm_type_and_int_freq(t, 0)
179 static void dump_firm_type_and_int_freq(unsigned int type
, u16 int_freq
)
225 if (type
& TOYOTA388
)
226 printk("TOYOTA388 ");
227 if (type
& TOYOTA794
)
228 printk("TOYOTA794 ");
231 if (type
& ZARLINK456
)
232 printk("ZARLINK456 ");
242 printk("HAS_IF_%d ", int_freq
);
245 static v4l2_std_id
parse_audio_std_option(void)
247 if (strcasecmp(audio_std
, "A2") == 0)
249 if (strcasecmp(audio_std
, "A2/A") == 0)
250 return V4L2_STD_A2_A
;
251 if (strcasecmp(audio_std
, "A2/B") == 0)
252 return V4L2_STD_A2_B
;
253 if (strcasecmp(audio_std
, "NICAM") == 0)
254 return V4L2_STD_NICAM
;
255 if (strcasecmp(audio_std
, "NICAM/A") == 0)
256 return V4L2_STD_NICAM_A
;
257 if (strcasecmp(audio_std
, "NICAM/B") == 0)
258 return V4L2_STD_NICAM_B
;
263 static int check_device_status(struct xc2028_data
*priv
)
265 switch (priv
->state
) {
266 case XC2028_NO_FIRMWARE
:
267 case XC2028_WAITING_FIRMWARE
:
279 static void free_firmware(struct xc2028_data
*priv
)
282 tuner_dbg("%s called\n", __func__
);
287 for (i
= 0; i
< priv
->firm_size
; i
++)
288 kfree(priv
->firm
[i
].ptr
);
294 priv
->state
= XC2028_NO_FIRMWARE
;
296 memset(&priv
->cur_fw
, 0, sizeof(priv
->cur_fw
));
299 static int load_all_firmwares(struct dvb_frontend
*fe
,
300 const struct firmware
*fw
)
302 struct xc2028_data
*priv
= fe
->tuner_priv
;
303 const unsigned char *p
, *endp
;
308 tuner_dbg("%s called\n", __func__
);
313 if (fw
->size
< sizeof(name
) - 1 + 2 + 2) {
314 tuner_err("Error: firmware file %s has invalid size!\n",
319 memcpy(name
, p
, sizeof(name
) - 1);
320 name
[sizeof(name
) - 1] = 0;
321 p
+= sizeof(name
) - 1;
323 priv
->firm_version
= get_unaligned_le16(p
);
326 n_array
= get_unaligned_le16(p
);
329 tuner_info("Loading %d firmware images from %s, type: %s, ver %d.%d\n",
330 n_array
, priv
->fname
, name
,
331 priv
->firm_version
>> 8, priv
->firm_version
& 0xff);
333 priv
->firm
= kcalloc(n_array
, sizeof(*priv
->firm
), GFP_KERNEL
);
334 if (priv
->firm
== NULL
) {
335 tuner_err("Not enough memory to load firmware file.\n");
339 priv
->firm_size
= n_array
;
349 tuner_err("More firmware images in file than "
354 /* Checks if there's enough bytes to read */
355 if (endp
- p
< sizeof(type
) + sizeof(id
) + sizeof(size
))
358 type
= get_unaligned_le32(p
);
361 id
= get_unaligned_le64(p
);
365 int_freq
= get_unaligned_le16(p
);
366 p
+= sizeof(int_freq
);
367 if (endp
- p
< sizeof(size
))
371 size
= get_unaligned_le32(p
);
374 if (!size
|| size
> endp
- p
) {
375 tuner_err("Firmware type ");
376 dump_firm_type(type
);
377 printk("(%x), id %llx is corrupted "
378 "(size=%d, expected %d)\n",
379 type
, (unsigned long long)id
,
380 (unsigned)(endp
- p
), size
);
384 priv
->firm
[n
].ptr
= kzalloc(size
, GFP_KERNEL
);
385 if (priv
->firm
[n
].ptr
== NULL
) {
386 tuner_err("Not enough memory to load firmware file.\n");
390 tuner_dbg("Reading firmware type ");
392 dump_firm_type_and_int_freq(type
, int_freq
);
393 printk("(%x), id %llx, size=%d.\n",
394 type
, (unsigned long long)id
, size
);
397 memcpy(priv
->firm
[n
].ptr
, p
, size
);
398 priv
->firm
[n
].type
= type
;
399 priv
->firm
[n
].id
= id
;
400 priv
->firm
[n
].size
= size
;
401 priv
->firm
[n
].int_freq
= int_freq
;
406 if (n
+ 1 != priv
->firm_size
) {
407 tuner_err("Firmware file is incomplete!\n");
414 tuner_err("Firmware header is incomplete!\n");
417 tuner_err("Error: firmware file is corrupted!\n");
420 tuner_info("Releasing partially loaded firmware file.\n");
425 tuner_dbg("Firmware files loaded.\n");
427 priv
->state
= XC2028_NODEV
;
432 static int seek_firmware(struct dvb_frontend
*fe
, unsigned int type
,
435 struct xc2028_data
*priv
= fe
->tuner_priv
;
436 int i
, best_i
= -1, best_nr_matches
= 0;
437 unsigned int type_mask
= 0;
439 tuner_dbg("%s called, want type=", __func__
);
441 dump_firm_type(type
);
442 printk("(%x), id %016llx.\n", type
, (unsigned long long)*id
);
446 tuner_err("Error! firmware not loaded\n");
450 if (((type
& ~SCODE
) == 0) && (*id
== 0))
454 type_mask
= BASE_TYPES
;
455 else if (type
& SCODE
) {
457 type_mask
= SCODE_TYPES
& ~HAS_IF
;
458 } else if (type
& DTV_TYPES
)
459 type_mask
= DTV_TYPES
;
460 else if (type
& STD_SPECIFIC_TYPES
)
461 type_mask
= STD_SPECIFIC_TYPES
;
468 /* Seek for exact match */
469 for (i
= 0; i
< priv
->firm_size
; i
++) {
470 if ((type
== (priv
->firm
[i
].type
& type_mask
)) &&
471 (*id
== priv
->firm
[i
].id
))
475 /* Seek for generic video standard match */
476 for (i
= 0; i
< priv
->firm_size
; i
++) {
477 v4l2_std_id match_mask
;
480 if (type
!= (priv
->firm
[i
].type
& type_mask
))
483 match_mask
= *id
& priv
->firm
[i
].id
;
487 if ((*id
& match_mask
) == *id
)
488 goto found
; /* Supports all the requested standards */
490 nr_matches
= hweight64(match_mask
);
491 if (nr_matches
> best_nr_matches
) {
492 best_nr_matches
= nr_matches
;
497 if (best_nr_matches
> 0) {
498 tuner_dbg("Selecting best matching firmware (%d bits) for "
499 "type=", best_nr_matches
);
500 dump_firm_type(type
);
501 printk("(%x), id %016llx:\n", type
, (unsigned long long)*id
);
506 /*FIXME: Would make sense to seek for type "hint" match ? */
512 *id
= priv
->firm
[i
].id
;
515 tuner_dbg("%s firmware for type=", (i
< 0) ? "Can't find" : "Found");
517 dump_firm_type(type
);
518 printk("(%x), id %016llx.\n", type
, (unsigned long long)*id
);
523 static inline int do_tuner_callback(struct dvb_frontend
*fe
, int cmd
, int arg
)
525 struct xc2028_data
*priv
= fe
->tuner_priv
;
527 /* analog side (tuner-core) uses i2c_adap->algo_data.
528 * digital side is not guaranteed to have algo_data defined.
530 * digital side will always have fe->dvb defined.
531 * analog side (tuner-core) doesn't (yet) define fe->dvb.
534 return (!fe
->callback
) ? -EINVAL
:
535 fe
->callback(((fe
->dvb
) && (fe
->dvb
->priv
)) ?
536 fe
->dvb
->priv
: priv
->i2c_props
.adap
->algo_data
,
537 DVB_FRONTEND_COMPONENT_TUNER
, cmd
, arg
);
540 static int load_firmware(struct dvb_frontend
*fe
, unsigned int type
,
543 struct xc2028_data
*priv
= fe
->tuner_priv
;
545 unsigned char *p
, *endp
, buf
[MAX_XFER_SIZE
];
547 if (priv
->ctrl
.max_len
> sizeof(buf
))
548 priv
->ctrl
.max_len
= sizeof(buf
);
550 tuner_dbg("%s called\n", __func__
);
552 pos
= seek_firmware(fe
, type
, id
);
556 tuner_info("Loading firmware for type=");
557 dump_firm_type(priv
->firm
[pos
].type
);
558 printk("(%x), id %016llx.\n", priv
->firm
[pos
].type
,
559 (unsigned long long)*id
);
561 p
= priv
->firm
[pos
].ptr
;
562 endp
= p
+ priv
->firm
[pos
].size
;
567 /* Checks if there's enough bytes to read */
568 if (p
+ sizeof(size
) > endp
) {
569 tuner_err("Firmware chunk size is wrong\n");
573 size
= le16_to_cpu(*(__le16
*) p
);
580 /* Special callback command received */
581 rc
= do_tuner_callback(fe
, XC2028_TUNER_RESET
, 0);
583 tuner_err("Error at RESET code %d\n",
589 if (size
>= 0xff00) {
592 rc
= do_tuner_callback(fe
, XC2028_RESET_CLK
, 0);
594 tuner_err("Error at RESET code %d\n",
600 tuner_info("Invalid RESET code %d\n",
608 /* Checks for a sleep command */
610 msleep(size
& 0x7fff);
614 if ((size
+ p
> endp
)) {
615 tuner_err("missing bytes: need %d, have %d\n",
616 size
, (int)(endp
- p
));
624 /* Sends message chunks */
626 int len
= (size
< priv
->ctrl
.max_len
- 1) ?
627 size
: priv
->ctrl
.max_len
- 1;
629 memcpy(buf
+ 1, p
, len
);
631 rc
= i2c_send(priv
, buf
, len
+ 1);
633 tuner_err("%d returned from send\n", rc
);
641 /* silently fail if the frontend doesn't support I2C flush */
642 rc
= do_tuner_callback(fe
, XC2028_I2C_FLUSH
, 0);
643 if ((rc
< 0) && (rc
!= -EINVAL
)) {
644 tuner_err("error executing flush: %d\n", rc
);
651 static int load_scode(struct dvb_frontend
*fe
, unsigned int type
,
652 v4l2_std_id
*id
, __u16 int_freq
, int scode
)
654 struct xc2028_data
*priv
= fe
->tuner_priv
;
658 tuner_dbg("%s called\n", __func__
);
661 pos
= seek_firmware(fe
, type
, id
);
665 for (pos
= 0; pos
< priv
->firm_size
; pos
++) {
666 if ((priv
->firm
[pos
].int_freq
== int_freq
) &&
667 (priv
->firm
[pos
].type
& HAS_IF
))
670 if (pos
== priv
->firm_size
)
674 p
= priv
->firm
[pos
].ptr
;
676 if (priv
->firm
[pos
].type
& HAS_IF
) {
677 if (priv
->firm
[pos
].size
!= 12 * 16 || scode
>= 16)
681 /* 16 SCODE entries per file; each SCODE entry is 12 bytes and
682 * has a 2-byte size header in the firmware format. */
683 if (priv
->firm
[pos
].size
!= 14 * 16 || scode
>= 16 ||
684 le16_to_cpu(*(__le16
*)(p
+ 14 * scode
)) != 12)
689 tuner_info("Loading SCODE for type=");
690 dump_firm_type_and_int_freq(priv
->firm
[pos
].type
,
691 priv
->firm
[pos
].int_freq
);
692 printk("(%x), id %016llx.\n", priv
->firm
[pos
].type
,
693 (unsigned long long)*id
);
695 if (priv
->firm_version
< 0x0202)
696 rc
= send_seq(priv
, {0x20, 0x00, 0x00, 0x00});
698 rc
= send_seq(priv
, {0xa0, 0x00, 0x00, 0x00});
702 rc
= i2c_send(priv
, p
, 12);
706 rc
= send_seq(priv
, {0x00, 0x8c});
713 static int xc2028_sleep(struct dvb_frontend
*fe
);
715 static int check_firmware(struct dvb_frontend
*fe
, unsigned int type
,
716 v4l2_std_id std
, __u16 int_freq
)
718 struct xc2028_data
*priv
= fe
->tuner_priv
;
719 struct firmware_properties new_fw
;
720 int rc
, retry_count
= 0;
721 u16 version
, hwmodel
;
724 tuner_dbg("%s called\n", __func__
);
726 rc
= check_device_status(priv
);
730 if (priv
->ctrl
.mts
&& !(type
& FM
))
736 new_fw
.std_req
= std
;
737 new_fw
.scode_table
= SCODE
| priv
->ctrl
.scode_table
;
739 new_fw
.int_freq
= int_freq
;
741 tuner_dbg("checking firmware, user requested type=");
743 dump_firm_type(new_fw
.type
);
744 printk("(%x), id %016llx, ", new_fw
.type
,
745 (unsigned long long)new_fw
.std_req
);
747 printk("scode_tbl ");
748 dump_firm_type(priv
->ctrl
.scode_table
);
749 printk("(%x), ", priv
->ctrl
.scode_table
);
751 printk("int_freq %d, ", new_fw
.int_freq
);
752 printk("scode_nr %d\n", new_fw
.scode_nr
);
756 * No need to reload base firmware if it matches and if the tuner
757 * is not at sleep mode
759 if ((priv
->state
== XC2028_ACTIVE
) &&
760 (((BASE
| new_fw
.type
) & BASE_TYPES
) ==
761 (priv
->cur_fw
.type
& BASE_TYPES
))) {
762 tuner_dbg("BASE firmware not changed.\n");
766 /* Updating BASE - forget about all currently loaded firmware */
767 memset(&priv
->cur_fw
, 0, sizeof(priv
->cur_fw
));
769 /* Reset is needed before loading firmware */
770 rc
= do_tuner_callback(fe
, XC2028_TUNER_RESET
, 0);
774 /* BASE firmwares are all std0 */
776 rc
= load_firmware(fe
, BASE
| new_fw
.type
, &std0
);
778 tuner_err("Error %d while loading base firmware\n",
783 /* Load INIT1, if needed */
784 tuner_dbg("Load init1 firmware, if exists\n");
786 rc
= load_firmware(fe
, BASE
| INIT1
| new_fw
.type
, &std0
);
788 rc
= load_firmware(fe
, (BASE
| INIT1
| new_fw
.type
) & ~F8MHZ
,
790 if (rc
< 0 && rc
!= -ENOENT
) {
791 tuner_err("Error %d while loading init1 firmware\n",
798 * No need to reload standard specific firmware if base firmware
799 * was not reloaded and requested video standards have not changed.
801 if (priv
->cur_fw
.type
== (BASE
| new_fw
.type
) &&
802 priv
->cur_fw
.std_req
== std
) {
803 tuner_dbg("Std-specific firmware already loaded.\n");
804 goto skip_std_specific
;
807 /* Reloading std-specific firmware forces a SCODE update */
808 priv
->cur_fw
.scode_table
= 0;
810 rc
= load_firmware(fe
, new_fw
.type
, &new_fw
.id
);
812 rc
= load_firmware(fe
, new_fw
.type
& ~F8MHZ
, &new_fw
.id
);
818 if (priv
->cur_fw
.scode_table
== new_fw
.scode_table
&&
819 priv
->cur_fw
.scode_nr
== new_fw
.scode_nr
) {
820 tuner_dbg("SCODE firmware already loaded.\n");
824 if (new_fw
.type
& FM
)
827 /* Load SCODE firmware, if exists */
828 tuner_dbg("Trying to load scode %d\n", new_fw
.scode_nr
);
830 rc
= load_scode(fe
, new_fw
.type
| new_fw
.scode_table
, &new_fw
.id
,
831 new_fw
.int_freq
, new_fw
.scode_nr
);
834 if (xc2028_get_reg(priv
, 0x0004, &version
) < 0 ||
835 xc2028_get_reg(priv
, 0x0008, &hwmodel
) < 0) {
836 tuner_err("Unable to read tuner registers.\n");
840 tuner_dbg("Device is Xceive %d version %d.%d, "
841 "firmware version %d.%d\n",
842 hwmodel
, (version
& 0xf000) >> 12, (version
& 0xf00) >> 8,
843 (version
& 0xf0) >> 4, version
& 0xf);
846 if (priv
->ctrl
.read_not_reliable
)
847 goto read_not_reliable
;
849 /* Check firmware version against what we downloaded. */
850 if (priv
->firm_version
!= ((version
& 0xf0) << 4 | (version
& 0x0f))) {
851 if (!priv
->ctrl
.read_not_reliable
) {
852 tuner_err("Incorrect readback of firmware version.\n");
855 tuner_err("Returned an incorrect version. However, "
856 "read is not reliable enough. Ignoring it.\n");
861 /* Check that the tuner hardware model remains consistent over time. */
862 if (priv
->hwmodel
== 0 && (hwmodel
== 2028 || hwmodel
== 3028)) {
863 priv
->hwmodel
= hwmodel
;
864 priv
->hwvers
= version
& 0xff00;
865 } else if (priv
->hwmodel
== 0 || priv
->hwmodel
!= hwmodel
||
866 priv
->hwvers
!= (version
& 0xff00)) {
867 tuner_err("Read invalid device hardware information - tuner "
873 priv
->cur_fw
= new_fw
;
876 * By setting BASE in cur_fw.type only after successfully loading all
878 * 1. Identify that BASE firmware with type=0 has been loaded;
879 * 2. Tell whether BASE firmware was just changed the next time through.
881 priv
->cur_fw
.type
|= BASE
;
882 priv
->state
= XC2028_ACTIVE
;
887 priv
->state
= XC2028_NO_FIRMWARE
;
889 memset(&priv
->cur_fw
, 0, sizeof(priv
->cur_fw
));
890 if (retry_count
< 8) {
893 tuner_dbg("Retrying firmware load\n");
897 /* Firmware didn't load. Put the device to sleep */
905 static int xc2028_signal(struct dvb_frontend
*fe
, u16
*strength
)
907 struct xc2028_data
*priv
= fe
->tuner_priv
;
908 u16 frq_lock
, signal
= 0;
911 tuner_dbg("%s called\n", __func__
);
913 rc
= check_device_status(priv
);
917 /* If the device is sleeping, no channel is tuned */
923 mutex_lock(&priv
->lock
);
925 /* Sync Lock Indicator */
926 for (i
= 0; i
< 3; i
++) {
927 rc
= xc2028_get_reg(priv
, XREG_LOCK
, &frq_lock
);
936 /* Frequency didn't lock */
940 /* Get SNR of the video signal */
941 rc
= xc2028_get_reg(priv
, XREG_SNR
, &signal
);
945 /* Signal level is 3 bits only */
947 signal
= ((1 << 12) - 1) | ((signal
& 0x07) << 12);
950 mutex_unlock(&priv
->lock
);
954 tuner_dbg("signal strength is %d\n", signal
);
959 static int xc2028_get_afc(struct dvb_frontend
*fe
, s32
*afc
)
961 struct xc2028_data
*priv
= fe
->tuner_priv
;
966 rc
= check_device_status(priv
);
970 /* If the device is sleeping, no channel is tuned */
976 mutex_lock(&priv
->lock
);
978 /* Sync Lock Indicator */
979 for (i
= 0; i
< 3; i
++) {
980 rc
= xc2028_get_reg(priv
, XREG_LOCK
, &frq_lock
);
989 /* Frequency didn't lock */
994 rc
= xc2028_get_reg(priv
, XREG_FREQ_ERROR
, &afc_reg
);
998 *afc
= afc_reg
* 15625; /* Hz */
1000 tuner_dbg("AFC is %d Hz\n", *afc
);
1003 mutex_unlock(&priv
->lock
);
1010 static int generic_set_freq(struct dvb_frontend
*fe
, u32 freq
/* in HZ */,
1011 enum v4l2_tuner_type new_type
,
1016 struct xc2028_data
*priv
= fe
->tuner_priv
;
1018 unsigned char buf
[4];
1019 u32 div
, offset
= 0;
1021 tuner_dbg("%s called\n", __func__
);
1023 mutex_lock(&priv
->lock
);
1025 tuner_dbg("should set frequency %d kHz\n", freq
/ 1000);
1027 if (check_firmware(fe
, type
, std
, int_freq
) < 0)
1030 /* On some cases xc2028 can disable video output, if
1031 * very weak signals are received. By sending a soft
1032 * reset, this is re-enabled. So, it is better to always
1033 * send a soft reset before changing channels, to be sure
1034 * that xc2028 will be in a safe state.
1035 * Maybe this might also be needed for DTV.
1038 case V4L2_TUNER_ANALOG_TV
:
1039 rc
= send_seq(priv
, {0x00, 0x00});
1041 /* Analog mode requires offset = 0 */
1043 case V4L2_TUNER_RADIO
:
1044 /* Radio mode requires offset = 0 */
1046 case V4L2_TUNER_DIGITAL_TV
:
1048 * Digital modes require an offset to adjust to the
1049 * proper frequency. The offset depends on what
1050 * firmware version is used.
1054 * Adjust to the center frequency. This is calculated by the
1055 * formula: offset = 1.25MHz - BW/2
1056 * For DTV 7/8, the firmware uses BW = 8000, so it needs a
1057 * further adjustment to get the frequency center on VHF
1061 * The firmware DTV78 used to work fine in UHF band (8 MHz
1062 * bandwidth) but not at all in VHF band (7 MHz bandwidth).
1063 * The real problem was connected to the formula used to
1064 * calculate the center frequency offset in VHF band.
1065 * In fact, removing the 500KHz adjustment fixed the problem.
1066 * This is coherent to what was implemented for the DTV7
1068 * In the end, now the center frequency is the same for all 3
1069 * firmwares (DTV7, DTV8, DTV78) and doesn't depend on channel
1073 if (priv
->cur_fw
.type
& DTV6
)
1075 else /* DTV7 or DTV8 or DTV78 */
1079 * xc3028 additional "magic"
1080 * Depending on the firmware version, it needs some adjustments
1081 * to properly centralize the frequency. This seems to be
1082 * needed to compensate the SCODE table adjustments made by
1087 * The proper adjustment would be to do it at s-code table.
1088 * However, this didn't work, as reported by
1089 * Robert Lowery <rglowery@exemail.com.au>
1094 * Still need tests for XC3028L (firmware 3.2 or upper)
1095 * So, for now, let's just comment the per-firmware
1096 * version of this change. Reports with xc3028l working
1097 * with and without the lines bellow are welcome
1100 if (priv
->firm_version
< 0x0302) {
1101 if (priv
->cur_fw
.type
& DTV7
)
1104 if (priv
->cur_fw
.type
& DTV7
)
1106 else if (type
!= ATSC
) /* DVB @6MHz, DTV 8 and DTV 7/8 */
1112 div
= (freq
- offset
+ DIV
/ 2) / DIV
;
1114 /* CMD= Set frequency */
1115 if (priv
->firm_version
< 0x0202)
1116 rc
= send_seq(priv
, {0x00, XREG_RF_FREQ
, 0x00, 0x00});
1118 rc
= send_seq(priv
, {0x80, XREG_RF_FREQ
, 0x00, 0x00});
1122 /* Return code shouldn't be checked.
1123 The reset CLK is needed only with tm6000.
1124 Driver should work fine even if this fails.
1126 if (priv
->ctrl
.msleep
)
1127 msleep(priv
->ctrl
.msleep
);
1128 do_tuner_callback(fe
, XC2028_RESET_CLK
, 1);
1132 buf
[0] = 0xff & (div
>> 24);
1133 buf
[1] = 0xff & (div
>> 16);
1134 buf
[2] = 0xff & (div
>> 8);
1135 buf
[3] = 0xff & (div
);
1137 rc
= i2c_send(priv
, buf
, sizeof(buf
));
1142 priv
->frequency
= freq
;
1144 tuner_dbg("divisor= %*ph (freq=%d.%03d)\n", 4, buf
,
1145 freq
/ 1000000, (freq
% 1000000) / 1000);
1150 mutex_unlock(&priv
->lock
);
1155 static int xc2028_set_analog_freq(struct dvb_frontend
*fe
,
1156 struct analog_parameters
*p
)
1158 struct xc2028_data
*priv
= fe
->tuner_priv
;
1159 unsigned int type
=0;
1161 tuner_dbg("%s called\n", __func__
);
1163 if (p
->mode
== V4L2_TUNER_RADIO
) {
1165 if (priv
->ctrl
.input1
)
1167 return generic_set_freq(fe
, (625l * p
->frequency
) / 10,
1168 V4L2_TUNER_RADIO
, type
, 0, 0);
1171 /* if std is not defined, choose one */
1173 p
->std
= V4L2_STD_MN
;
1175 /* PAL/M, PAL/N, PAL/Nc and NTSC variants should use 6MHz firmware */
1176 if (!(p
->std
& V4L2_STD_MN
))
1179 /* Add audio hack to std mask */
1180 p
->std
|= parse_audio_std_option();
1182 return generic_set_freq(fe
, 62500l * p
->frequency
,
1183 V4L2_TUNER_ANALOG_TV
, type
, p
->std
, 0);
1186 static int xc2028_set_params(struct dvb_frontend
*fe
)
1188 struct dtv_frontend_properties
*c
= &fe
->dtv_property_cache
;
1189 u32 delsys
= c
->delivery_system
;
1190 u32 bw
= c
->bandwidth_hz
;
1191 struct xc2028_data
*priv
= fe
->tuner_priv
;
1193 unsigned int type
= 0;
1196 tuner_dbg("%s called\n", __func__
);
1198 rc
= check_device_status(priv
);
1206 * The only countries with 6MHz seem to be Taiwan/Uruguay.
1207 * Both seem to require QAM firmware for OFDM decoding
1208 * Tested in Taiwan by Terry Wu <terrywu2009@gmail.com>
1213 switch (priv
->ctrl
.type
) {
1222 /* Zarlink seems to need D2633 */
1223 if (priv
->ctrl
.demod
== XC3028_FE_ZARLINK456
)
1230 /* The only ATSC firmware (at least on v2.7) is D2633 */
1231 type
|= ATSC
| D2633
;
1233 /* DVB-S and pure QAM (FE_QAM) are not supported */
1238 if (bw
<= 6000000) {
1240 priv
->ctrl
.vhfbw7
= 0;
1241 priv
->ctrl
.uhfbw8
= 0;
1242 } else if (bw
<= 7000000) {
1243 if (c
->frequency
< 470000000)
1244 priv
->ctrl
.vhfbw7
= 1;
1246 priv
->ctrl
.uhfbw8
= 0;
1247 type
|= (priv
->ctrl
.vhfbw7
&& priv
->ctrl
.uhfbw8
) ? DTV78
: DTV7
;
1250 if (c
->frequency
< 470000000)
1251 priv
->ctrl
.vhfbw7
= 0;
1253 priv
->ctrl
.uhfbw8
= 1;
1254 type
|= (priv
->ctrl
.vhfbw7
&& priv
->ctrl
.uhfbw8
) ? DTV78
: DTV8
;
1258 /* All S-code tables need a 200kHz shift */
1259 if (priv
->ctrl
.demod
) {
1260 demod
= priv
->ctrl
.demod
;
1263 * Newer firmwares require a 200 kHz offset only for ATSC
1265 if (type
== ATSC
|| priv
->firm_version
< 0x0302)
1268 * The DTV7 S-code table needs a 700 kHz shift.
1270 * DTV7 is only used in Australia. Germany or Italy may also
1271 * use this firmware after initialization, but a tune to a UHF
1272 * channel should then cause DTV78 to be used.
1274 * Unfortunately, on real-field tests, the s-code offset
1275 * didn't work as expected, as reported by
1276 * Robert Lowery <rglowery@exemail.com.au>
1280 return generic_set_freq(fe
, c
->frequency
,
1281 V4L2_TUNER_DIGITAL_TV
, type
, 0, demod
);
1284 static int xc2028_sleep(struct dvb_frontend
*fe
)
1286 struct xc2028_data
*priv
= fe
->tuner_priv
;
1289 rc
= check_device_status(priv
);
1293 /* Device is already in sleep mode */
1297 /* Avoid firmware reload on slow devices or if PM disabled */
1298 if (no_poweroff
|| priv
->ctrl
.disable_power_mgmt
)
1301 tuner_dbg("Putting xc2028/3028 into poweroff mode.\n");
1303 tuner_dbg("Printing sleep stack trace:\n");
1307 mutex_lock(&priv
->lock
);
1309 if (priv
->firm_version
< 0x0202)
1310 rc
= send_seq(priv
, {0x00, XREG_POWER_DOWN
, 0x00, 0x00});
1312 rc
= send_seq(priv
, {0x80, XREG_POWER_DOWN
, 0x00, 0x00});
1315 priv
->state
= XC2028_SLEEP
;
1317 mutex_unlock(&priv
->lock
);
1322 static int xc2028_dvb_release(struct dvb_frontend
*fe
)
1324 struct xc2028_data
*priv
= fe
->tuner_priv
;
1326 tuner_dbg("%s called\n", __func__
);
1328 mutex_lock(&xc2028_list_mutex
);
1330 /* only perform final cleanup if this is the last instance */
1331 if (hybrid_tuner_report_instance_count(priv
) == 1) {
1332 free_firmware(priv
);
1333 kfree(priv
->ctrl
.fname
);
1334 priv
->ctrl
.fname
= NULL
;
1338 hybrid_tuner_release_state(priv
);
1340 mutex_unlock(&xc2028_list_mutex
);
1342 fe
->tuner_priv
= NULL
;
1347 static int xc2028_get_frequency(struct dvb_frontend
*fe
, u32
*frequency
)
1349 struct xc2028_data
*priv
= fe
->tuner_priv
;
1352 tuner_dbg("%s called\n", __func__
);
1354 rc
= check_device_status(priv
);
1358 *frequency
= priv
->frequency
;
1363 static void load_firmware_cb(const struct firmware
*fw
,
1366 struct dvb_frontend
*fe
= context
;
1367 struct xc2028_data
*priv
= fe
->tuner_priv
;
1370 tuner_dbg("request_firmware_nowait(): %s\n", fw
? "OK" : "error");
1372 tuner_err("Could not load firmware %s.\n", priv
->fname
);
1373 priv
->state
= XC2028_NODEV
;
1377 rc
= load_all_firmwares(fe
, fw
);
1379 release_firmware(fw
);
1383 priv
->state
= XC2028_ACTIVE
;
1386 static int xc2028_set_config(struct dvb_frontend
*fe
, void *priv_cfg
)
1388 struct xc2028_data
*priv
= fe
->tuner_priv
;
1389 struct xc2028_ctrl
*p
= priv_cfg
;
1392 tuner_dbg("%s called\n", __func__
);
1394 mutex_lock(&priv
->lock
);
1397 * Copy the config data.
1398 * For the firmware name, keep a local copy of the string,
1399 * in order to avoid troubles during device release.
1401 kfree(priv
->ctrl
.fname
);
1402 memcpy(&priv
->ctrl
, p
, sizeof(priv
->ctrl
));
1404 priv
->ctrl
.fname
= kstrdup(p
->fname
, GFP_KERNEL
);
1405 if (priv
->ctrl
.fname
== NULL
)
1410 * If firmware name changed, frees firmware. As free_firmware will
1411 * reset the status to NO_FIRMWARE, this forces a new request_firmware
1413 if (!firmware_name
[0] && p
->fname
&&
1414 priv
->fname
&& strcmp(p
->fname
, priv
->fname
))
1415 free_firmware(priv
);
1417 if (priv
->ctrl
.max_len
< 9)
1418 priv
->ctrl
.max_len
= 13;
1420 if (priv
->state
== XC2028_NO_FIRMWARE
) {
1421 if (!firmware_name
[0])
1422 priv
->fname
= priv
->ctrl
.fname
;
1424 priv
->fname
= firmware_name
;
1426 rc
= request_firmware_nowait(THIS_MODULE
, 1,
1428 priv
->i2c_props
.adap
->dev
.parent
,
1430 fe
, load_firmware_cb
);
1432 tuner_err("Failed to request firmware %s\n",
1434 priv
->state
= XC2028_NODEV
;
1436 priv
->state
= XC2028_WAITING_FIRMWARE
;
1438 mutex_unlock(&priv
->lock
);
1443 static const struct dvb_tuner_ops xc2028_dvb_tuner_ops
= {
1445 .name
= "Xceive XC3028",
1446 .frequency_min
= 42000000,
1447 .frequency_max
= 864000000,
1448 .frequency_step
= 50000,
1451 .set_config
= xc2028_set_config
,
1452 .set_analog_params
= xc2028_set_analog_freq
,
1453 .release
= xc2028_dvb_release
,
1454 .get_frequency
= xc2028_get_frequency
,
1455 .get_rf_strength
= xc2028_signal
,
1456 .get_afc
= xc2028_get_afc
,
1457 .set_params
= xc2028_set_params
,
1458 .sleep
= xc2028_sleep
,
1461 struct dvb_frontend
*xc2028_attach(struct dvb_frontend
*fe
,
1462 struct xc2028_config
*cfg
)
1464 struct xc2028_data
*priv
;
1468 printk(KERN_DEBUG
"xc2028: Xcv2028/3028 init called!\n");
1474 printk(KERN_ERR
"xc2028: No frontend!\n");
1478 mutex_lock(&xc2028_list_mutex
);
1480 instance
= hybrid_tuner_request_state(struct xc2028_data
, priv
,
1481 hybrid_tuner_instance_list
,
1482 cfg
->i2c_adap
, cfg
->i2c_addr
,
1486 /* memory allocation failure */
1490 /* new tuner instance */
1491 priv
->ctrl
.max_len
= 13;
1493 mutex_init(&priv
->lock
);
1495 fe
->tuner_priv
= priv
;
1498 /* existing tuner instance */
1499 fe
->tuner_priv
= priv
;
1503 memcpy(&fe
->ops
.tuner_ops
, &xc2028_dvb_tuner_ops
,
1504 sizeof(xc2028_dvb_tuner_ops
));
1506 tuner_info("type set to %s\n", "XCeive xc2028/xc3028 tuner");
1509 xc2028_set_config(fe
, cfg
->ctrl
);
1511 mutex_unlock(&xc2028_list_mutex
);
1515 mutex_unlock(&xc2028_list_mutex
);
1517 xc2028_dvb_release(fe
);
1521 EXPORT_SYMBOL(xc2028_attach
);
1523 MODULE_DESCRIPTION("Xceive xc2028/xc3028 tuner driver");
1524 MODULE_AUTHOR("Michel Ludwig <michel.ludwig@gmail.com>");
1525 MODULE_AUTHOR("Mauro Carvalho Chehab <mchehab@infradead.org>");
1526 MODULE_LICENSE("GPL");
1527 MODULE_FIRMWARE(XC2028_DEFAULT_FIRMWARE
);
1528 MODULE_FIRMWARE(XC3028L_DEFAULT_FIRMWARE
);