aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media
diff options
context:
space:
mode:
authorHans Verkuil <hverkuil@xs4all.nl>2009-03-29 16:47:30 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2009-03-30 11:43:49 -0400
commit43d5eab7d632de5bde582d41b5d0eac01b52bb3a (patch)
tree1092c3534289a1d86289c12ba697dc193898ac73 /drivers/media
parenta0d1251da012594381165e36590312009693bf49 (diff)
V4L/DVB (11305): cx88: prevent probing rtc and ir devices
tuner-core.c contains a hack for cx88 board to prevent probing of certain addresses: /* HACK: Ignore 0x6b and 0x6f on cx88 boards. * FusionHDTV5 RT Gold has an ir receiver at 0x6b * and an RTC at 0x6f which can get corrupted if probed. */ With the new i2c API this hack no longer works. So instead change the list of tuner probe addresses in the cx88 driver itself, which is much more clean. Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media')
-rw-r--r--drivers/media/video/cx88/cx88-cards.c14
1 files changed, 10 insertions, 4 deletions
diff --git a/drivers/media/video/cx88/cx88-cards.c b/drivers/media/video/cx88/cx88-cards.c
index c226fff49f23..0363971a23a8 100644
--- a/drivers/media/video/cx88/cx88-cards.c
+++ b/drivers/media/video/cx88/cx88-cards.c
@@ -3205,6 +3205,15 @@ struct cx88_core *cx88_core_create(struct pci_dev *pci, int nr)
3205 3205
3206 /* load tuner module, if needed */ 3206 /* load tuner module, if needed */
3207 if (TUNER_ABSENT != core->board.tuner_type) { 3207 if (TUNER_ABSENT != core->board.tuner_type) {
3208 /* Ignore 0x6b and 0x6f on cx88 boards.
3209 * FusionHDTV5 RT Gold has an ir receiver at 0x6b
3210 * and an RTC at 0x6f which can get corrupted if probed. */
3211 static const unsigned short tv_addrs[] = {
3212 0x42, 0x43, 0x4a, 0x4b, /* tda8290 */
3213 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67,
3214 0x68, 0x69, 0x6a, 0x6c, 0x6d, 0x6e,
3215 I2C_CLIENT_END
3216 };
3208 int has_demod = (core->board.tda9887_conf & TDA9887_PRESENT); 3217 int has_demod = (core->board.tda9887_conf & TDA9887_PRESENT);
3209 3218
3210 /* I don't trust the radio_type as is stored in the card 3219 /* I don't trust the radio_type as is stored in the card
@@ -3218,11 +3227,8 @@ struct cx88_core *cx88_core_create(struct pci_dev *pci, int nr)
3218 v4l2_i2c_new_probed_subdev(&core->i2c_adap, "tuner", 3227 v4l2_i2c_new_probed_subdev(&core->i2c_adap, "tuner",
3219 "tuner", v4l2_i2c_tuner_addrs(ADDRS_DEMOD)); 3228 "tuner", v4l2_i2c_tuner_addrs(ADDRS_DEMOD));
3220 if (core->board.tuner_addr == ADDR_UNSET) { 3229 if (core->board.tuner_addr == ADDR_UNSET) {
3221 enum v4l2_i2c_tuner_type type =
3222 has_demod ? ADDRS_TV_WITH_DEMOD : ADDRS_TV;
3223
3224 v4l2_i2c_new_probed_subdev(&core->i2c_adap, "tuner", 3230 v4l2_i2c_new_probed_subdev(&core->i2c_adap, "tuner",
3225 "tuner", v4l2_i2c_tuner_addrs(type)); 3231 "tuner", has_demod ? tv_addrs + 4 : tv_addrs);
3226 } else { 3232 } else {
3227 v4l2_i2c_new_subdev(&core->i2c_adap, 3233 v4l2_i2c_new_subdev(&core->i2c_adap,
3228 "tuner", "tuner", core->board.tuner_addr); 3234 "tuner", "tuner", core->board.tuner_addr);