Mauro,

I had to make 2 changes to get the patch to work for me

see below

HTH

-Rob

> Robert Lowery wrote:
>> Mauro's new code does the 500000 offset unconditionally for DTV7 by
>> setting offset = 2250000, not just when the ZARLINK456 or DIBCOM52
>> tables
>> were explicitly selected.  This change is what appears to cause issues
>> for
>> me.
>
> I've reviewed all information and troubles we have with xc3028 tuning,
> including the reports related to newer firmwares for XC3028L. I think
> that the right fix is the one provided on this patch.
>
> Could you all please verify if this patch fixes the issues, without
> causing
> any regression?
>
> Cheers,
> Mauro.
>
> ---
>
> V4L/DVB: tuner-xc2028: fix tuning logic
>
> There's one reported regression in Australia (DTV7) and some
> reported troubles with newer firmwares. Rework the logic to improve
> tuner on those cases.
>
> Thanks-to: Robert Lowery <rglow...@exemail.com.au>
> Thanks-to: Stefan Ringel <stefan.rin...@arcor.de>
> Signed-off-by: Mauro Carvalho Chehab <mche...@redhat.com>
> ---
>  drivers/media/common/tuners/tuner-xc2028.c |   51
> ++++++++++++++++++++--------
>  1 files changed, 37 insertions(+), 14 deletions(-)
>
> diff --git a/drivers/media/common/tuners/tuner-xc2028.c
> b/drivers/media/common/tuners/tuner-xc2028.c
> index ed50168..eb782a0 100644
> --- a/drivers/media/common/tuners/tuner-xc2028.c
> +++ b/drivers/media/common/tuners/tuner-xc2028.c
> @@ -932,30 +932,49 @@ static int generic_set_freq(struct dvb_frontend *fe,
> u32 freq /* in HZ */,
>        * that xc2028 will be in a safe state.
>        * Maybe this might also be needed for DTV.
>        */
> -     if (new_mode == T_ANALOG_TV)
> +     if (new_mode == T_ANALOG_TV) {
>               rc = send_seq(priv, {0x00, 0x00});
>
> -     /*
> -      * Digital modes require an offset to adjust to the
> -      * proper frequency.
> -      * Analog modes require offset = 0
> -      */
> -     if (new_mode == T_DIGITAL_TV) {
> -             /* Sets the offset according with firmware */
> +             /* Analog modes require offset = 0 */
> +     } else {
> +             /*
> +              * Digital modes require an offset to adjust to the
> +              * proper frequency. The offset depends on what
> +              * firmware version is used.
> +              */
> +
> +             /*
> +              * Adjust to the center frequency. This is calculated by the
> +              * formula: offset = 1.25MHz - BW/2
> +              * For DTV 7/8, the firmware uses BW = 8000, so it needs a
> +              * further adjustment to get the frequency center on VHF
> +              */
>               if (priv->cur_fw.type & DTV6)
>                       offset = 1750000;
>               else if (priv->cur_fw.type & DTV7)
>                       offset = 2250000;
>               else    /* DTV8 or DTV78 */
>                       offset = 2750000;
> +             if ((priv->cur_fw.type & DTV78) && freq < 470000000)
> +                     offset -= 500000;
>
>               /*
> -              * We must adjust the offset by 500kHz  when
> -              * tuning a 7MHz VHF channel with DTV78 firmware
> -              * (used in Australia, Italy and Germany)
> +              * xc3028 additional "magic"
> +              * Depending on the firmware version, it needs some adjustments
> +              * to properly centralize the frequency. This seems to be
> +              * needed to compensate the SCODE table adjustments made by
> +              * newer firmwares
>                */
> -             if ((priv->cur_fw.type & DTV78) && freq < 470000000)
> -                     offset -= 500000;
> +
> +             if (priv->firm_version >= 0x0302) {
> +                     if (priv->cur_fw.type & DTV7)
> +                             offset -= 300000;
> +                     else if (type != ATSC) /* DVB @6MHz, DTV 8 and DTV 7/8 
> */
> +                             offset += 200000;
> +             } else {
> +                     if (priv->cur_fw.type & DTV7)
> +                             offset -= 500000;
This should be offset += 500000;

> +             }
>       }
>
>       div = (freq - offset + DIV / 2) / DIV;
> @@ -1114,7 +1133,11 @@ static int xc2028_set_params(struct dvb_frontend
> *fe,
>
>       /* All S-code tables need a 200kHz shift */
>       if (priv->ctrl.demod) {
> -             demod = priv->ctrl.demod + 200;
> +             /*
> +              * Newer firmwares require a 200 kHz offset only for ATSC
> +              */
> +             if (type == ATSC || priv->firm_version < 0x0302)
> +                     demod = priv->ctrl.demod + 200;
>               /*
>                * The DTV7 S-code table needs a 700 kHz shift.
>                * Thanks to Terry Wu <terrywu2...@gmail.com> for reporting this
I had to also delete the
if (type & DTV7)
    demod += 500

I suspect this is no longer required due to the offset += 500000 above
> --
> 1.6.6.1
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-media" in
> the body of a message to majord...@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
>


--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to