I was bothered by this bug since the 2.6.14 kernel, and it has effectively stopped me from performing any upgrade till the very last week. Soon before I have found a
tip from MichaĆ Kochanowicz which prompted me to investigate the issue personally. By extensive use of printk within the i2c and v4l modules I managed to track down the root cause. It happened only for the PixelView PlayTV card (card_id=16) for which the parameters definition in the bttv-cards.c file was missing assignment of the tuner_addr and radio_addr fields. Consequently in the attach_inform function the TUNER_SET_TYPE_ADDR command was not sent to the tuner's driver. The patch is as simple as that:
--- drivers/media/video/bt8xx/bttv-cards.c.orig 2007-07-08 23:32:17.000000000 +0000
+++ drivers/media/video/bt8xx/bttv-cards.c 2008-03-01 20:48:19.183306298 +0000
@@ -588,6 +588,8 @@ struct tvcard bttv_tvcards[] = {
.needs_tvaudio = 1,
.pll = PLL_28,
.tuner_type = -1,
+ .tuner_addr = ADDR_UNSET,
+ .radio_addr = ADDR_UNSET,
},
[BTTV_BOARD_WINVIEW_601] = {
.name = "Leadtek WinView 601",