On Mon, 15 Sep 2008, Paul Chubb wrote: > Hi, > the mcentral.de tree loads DTV7_2633. > whereas the v4l-dvb code loads F8MHZ D2620 DTV7 > How does it figure out which firmware to load since I assume for Australia it > should be F7MHZ (D2633 DTV7) > > Would this be the problem? Yes. Firmware selection is something really trick on xc3028. I'm enclosing a patch that will hopefully fix it for you, if you have a Zarlink firmware. If this doesn't solve the firmware detection part, you'll need to add something like this, before sending the control struct to xc3028: ctrl.type = XC2028_D2633; This will override type autodetection. You should also notice that, on Australia, you'll need an extra offset of 500 KHz for the frequency. There's a trick on tuner-xc2028 for doing this, at generic_set_freq(): if (((priv->cur_fw.type & DTV7) && (priv->cur_fw.scode_table & (ZARLINK456 | DIBCOM52))) || ((priv->cur_fw.type & DTV78) && freq < 470000000)) offset -= 500000; So, if you don't successfully tune your board at the right frequencies, you may need to fix the above code. Steven, Please review the code also. I suspect that you can get hid of the cx25885 hack after this patch. Cheers, Mauro --- tuner-xc2028: Do a better job selecting firmware type Firmware selection is very tricky on this device. This patch do a better selection of the proper firmware type, by using a code to hint if the firmware to be loaded should be D2620 or D2633. It also allows overriding the hint at the control structure. Signed-off-by: Mauro Carvalho Chehab <mchehab@xxxxxxxxxxxxx> diff -r e5ca4534b543 linux/drivers/media/common/tuners/tuner-xc2028.c --- a/linux/drivers/media/common/tuners/tuner-xc2028.c Tue Sep 09 08:29:56 2008 -0700 +++ b/linux/drivers/media/common/tuners/tuner-xc2028.c Mon Sep 15 11:07:03 2008 -0300 @@ -1006,11 +1006,6 @@ tuner_dbg("%s called\n", __func__); - if (priv->ctrl.d2633) - type |= D2633; - else - type |= D2620; - switch(fe->ops.info.type) { case FE_OFDM: bw = p->u.ofdm.bandwidth; @@ -1025,10 +1020,8 @@ break; case FE_ATSC: bw = BANDWIDTH_6_MHZ; - /* The only ATSC firmware (at least on v2.7) is D2633, - so overrides ctrl->d2633 */ - type |= ATSC| D2633; - type &= ~D2620; + /* The only ATSC firmware (at least on v2.7) is D2633 */ + type |= ATSC | D2633; break; /* DVB-S is not supported */ default: @@ -1060,6 +1053,28 @@ default: tuner_err("error: bandwidth not supported.\n"); }; + + /* + Selects between D2633 or D2620 firmware. + It doesn't make sense for ATSC, since it should be D2633 on all cases + */ + if (fe->ops.info.type != FE_ATSC) { + switch (priv->ctrl.type) { + case XC2028_D2633: + type |= D2633; + break; + case XC2028_D2620: + type |= D2620; + break; + case XC2028_AUTO: + default: + /* Zarlink seems to need D2633 */ + if (priv->ctrl.demod == XC3028_FE_ZARLINK456) + type |= D2633; + else + type |= D2620; + } + } /* All S-code tables need a 200kHz shift */ if (priv->ctrl.demod) diff -r e5ca4534b543 linux/drivers/media/common/tuners/tuner-xc2028.h --- a/linux/drivers/media/common/tuners/tuner-xc2028.h Tue Sep 09 08:29:56 2008 -0700 +++ b/linux/drivers/media/common/tuners/tuner-xc2028.h Mon Sep 15 11:07:03 2008 -0300 @@ -23,15 +23,21 @@ #define XC3028_FE_ZARLINK456 4560 #define XC3028_FE_CHINA 5200 +enum firmware_type { + XC2028_AUTO = 0, /* By default, auto-detects */ + XC2028_D2633, + XC2028_D2620, +}; + struct xc2028_ctrl { char *fname; int max_len; unsigned int scode_table; unsigned int mts :1; - unsigned int d2633 :1; unsigned int input1:1; unsigned int vhfbw7:1; unsigned int uhfbw8:1; + enum firmware_type type:2; unsigned int demod; }; diff -r e5ca4534b543 linux/drivers/media/video/cx23885/cx23885-dvb.c --- a/linux/drivers/media/video/cx23885/cx23885-dvb.c Tue Sep 09 08:29:56 2008 -0700 +++ b/linux/drivers/media/video/cx23885/cx23885-dvb.c Mon Sep 15 11:07:03 2008 -0300 @@ -451,7 +451,8 @@ .fname = "xc3028L-v36.fw", .max_len = 64, .demod = 5000, - .d2633 = 1 + /* This is true for all demods with v36 firmware? */ + .type = XC2028_D2633, }; fe = dvb_attach(xc2028_attach, _______________________________________________ linux-dvb mailing list linux-dvb@xxxxxxxxxxx http://www.linuxtv.org/cgi-bin/mailman/listinfo/linux-dvb