diff options
author | Hans Verkuil <hverkuil@xs4all.nl> | 2009-03-29 16:47:30 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2009-03-30 11:43:49 -0400 |
commit | 43d5eab7d632de5bde582d41b5d0eac01b52bb3a (patch) | |
tree | 1092c3534289a1d86289c12ba697dc193898ac73 /drivers/media | |
parent | a0d1251da012594381165e36590312009693bf49 (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.c | 14 |
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); |