• Seth Barry's avatar
    V4L/DVB (13109): tda18271: fix signedness issue in tda18271_rf_tracking_filters_init · a57c1dcb
    Seth Barry authored
    While having tda18271 module set with debug=17 (cal & info prints) and
    cal=0 (delay calibration process until first use) - I discovered that
    during the calibration process, if the frequency test for 69750000
    returned a bcal of 0 (see tda18721-fe.c in tda18271_powerscan func) that
    the tuner wouldn't be able to pickup any of the frequencies in the range
    (all the other frequencies bands returned bcal=1).  I spent some time
    going over the code and the NXP's tda18271 spec (ver.4 of it i think) and
    adding a lot of debug prints and walking/stepping through the calibration
    process.  I found that when the powerscan fails to find a frequency, the
    rf calibration is not run and the default value is supposed to be used in
    its place (pulled from the RF_CAL_map table) - but something was getting
    goofed up there.
    
    Now, my c coding skills are very rusty, but i think root of the problem is
    a signedness issue with the math operation for calculating the rf_a1 and
    rf_a2 values in tda18271_rf_tracking_filters_init func, which results in
    values like 20648 for rf_a1 (when it should probably have a value like 0,
    or so slightly negative that it should be zero - this bad value for rf_a1
    would in turn makes the approx calc within
    tda18271c2_rf_tracking_filters_correction go out of whack).  The simplest
    solution i found was to explicitly convert the signedness of the
    denominator to avoid the implicit conversion.  The values placed into the
    u32 rf_freq array should never exceed about 900mhz, so i think the s32 max
    value shouldn't be an issue in this case.
    
    I've tested it out a little, and even when i get a bcal=0 with the
    modified code, the default calibration value gets used, rf_a1 is zero, and
    the tuner seems to lock on the stream and mythtv seems to play it fine.
    Signed-off-by: default avatarSeth Barry <seth@cyberseth.com>
    Signed-off-by: default avatarMichael Krufky <mkrufky@kernellabs.com>
    CC: stable@kernel.org
    Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
    a57c1dcb
tda18271-fe.c 30.8 KB