• Mauro Carvalho Chehab's avatar
    V4L/DVB (10527): tuner: fix TUV1236D analog/digital setup · ef88f2b5
    Mauro Carvalho Chehab authored
    As reported by David Engel <david@istwok.net>, ATSC115 doesn't work
    fine with mythtv. This software opens both analog and dvb interfaces of
    saa7134.
    
    What happens is that some tuner commands are going to the wrong place,
    as shown at the logs:
    
    Feb 12 20:37:48 opus kernel: tuner-simple 1-0061: using tuner params #0 (ntsc)
    Feb 12 20:37:48 opus kernel: tuner-simple 1-0061: freq = 67.25 (1076), range = 0, config = 0xce, cb = 0x01
    Feb 12 20:37:48 opus kernel: tuner-simple 1-0061: Freq= 67.25 MHz, V_IF=45.75 MHz, Offset=0.00 MHz, div=1808
    Feb 12 20:37:48 opus kernel: tuner 1-0061: tv freq set to 67.25
    Feb 12 20:37:48 opus kernel: tuner-simple 1-000a: using tuner params #0 (ntsc)
    Feb 12 20:37:48 opus kernel: tuner-simple 1-000a: freq = 67.25 (1076), range = 0, config = 0xce, cb = 0x01
    Feb 12 20:37:48 opus kernel: tuner-simple 1-000a: Freq= 67.25 MHz, V_IF=45.75 MHz, Offset=0.00 MHz, div=1808
    Feb 12 20:37:48 opus kernel: tuner-simple 1-000a: tv 0x07 0x10 0xce 0x01
    Feb 12 20:37:48 opus kernel: tuner-simple 1-0061: tv 0x07 0x10 0xce 0x01
    
    This happens due to a hack at TUV1236D analog setup, where it replaces
    tuner address, at 0x61 for 0x0a, in order to save a few memory bytes.
    
    The code assumes that nobody else would try to access the tuner during
    that setup, but the point is that there's no lock to protect such
    access. So, this opens the possibility of race conditions to happen.
    
    Instead of hacking tuner address, this patch uses a temporary var with
    the proper tuner value to be used during the setup. This should save
    the issue, although we should consider to write some analog/digital
    lock at saa7134 driver.
    Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
    ef88f2b5
tuner-simple.c 27.7 KB