diff options
-rw-r--r-- | drivers/media/video/bt8xx/bttv-cards.c | 179 | ||||
-rw-r--r-- | drivers/media/video/bt8xx/bttv-driver.c | 41 | ||||
-rw-r--r-- | drivers/media/video/bt8xx/bttv-i2c.c | 53 | ||||
-rw-r--r-- | drivers/media/video/bt8xx/bttv.h | 7 | ||||
-rw-r--r-- | drivers/media/video/bt8xx/bttvp.h | 5 |
5 files changed, 180 insertions, 105 deletions
diff --git a/drivers/media/video/bt8xx/bttv-cards.c b/drivers/media/video/bt8xx/bttv-cards.c index 1536ab5a4a8d..b9c3ba51fb86 100644 --- a/drivers/media/video/bt8xx/bttv-cards.c +++ b/drivers/media/video/bt8xx/bttv-cards.c | |||
@@ -96,12 +96,10 @@ static unsigned int pll[BTTV_MAX] = { [ 0 ... (BTTV_MAX-1) ] = UNSET }; | |||
96 | static unsigned int tuner[BTTV_MAX] = { [ 0 ... (BTTV_MAX-1) ] = UNSET }; | 96 | static unsigned int tuner[BTTV_MAX] = { [ 0 ... (BTTV_MAX-1) ] = UNSET }; |
97 | static unsigned int svhs[BTTV_MAX] = { [ 0 ... (BTTV_MAX-1) ] = UNSET }; | 97 | static unsigned int svhs[BTTV_MAX] = { [ 0 ... (BTTV_MAX-1) ] = UNSET }; |
98 | static unsigned int remote[BTTV_MAX] = { [ 0 ... (BTTV_MAX-1) ] = UNSET }; | 98 | static unsigned int remote[BTTV_MAX] = { [ 0 ... (BTTV_MAX-1) ] = UNSET }; |
99 | static unsigned int audiodev[BTTV_MAX]; | ||
100 | static unsigned int saa6588[BTTV_MAX]; | ||
99 | static struct bttv *master[BTTV_MAX] = { [ 0 ... (BTTV_MAX-1) ] = NULL }; | 101 | static struct bttv *master[BTTV_MAX] = { [ 0 ... (BTTV_MAX-1) ] = NULL }; |
100 | #ifdef MODULE | 102 | static unsigned int autoload = UNSET; |
101 | static unsigned int autoload = 1; | ||
102 | #else | ||
103 | static unsigned int autoload; | ||
104 | #endif | ||
105 | static unsigned int gpiomask = UNSET; | 103 | static unsigned int gpiomask = UNSET; |
106 | static unsigned int audioall = UNSET; | 104 | static unsigned int audioall = UNSET; |
107 | static unsigned int audiomux[5] = { [ 0 ... 4 ] = UNSET }; | 105 | static unsigned int audiomux[5] = { [ 0 ... 4 ] = UNSET }; |
@@ -120,6 +118,7 @@ module_param_array(pll, int, NULL, 0444); | |||
120 | module_param_array(tuner, int, NULL, 0444); | 118 | module_param_array(tuner, int, NULL, 0444); |
121 | module_param_array(svhs, int, NULL, 0444); | 119 | module_param_array(svhs, int, NULL, 0444); |
122 | module_param_array(remote, int, NULL, 0444); | 120 | module_param_array(remote, int, NULL, 0444); |
121 | module_param_array(audiodev, int, NULL, 0444); | ||
123 | module_param_array(audiomux, int, NULL, 0444); | 122 | module_param_array(audiomux, int, NULL, 0444); |
124 | 123 | ||
125 | MODULE_PARM_DESC(triton1,"set ETBF pci config bit " | 124 | MODULE_PARM_DESC(triton1,"set ETBF pci config bit " |
@@ -130,7 +129,14 @@ MODULE_PARM_DESC(latency,"pci latency timer"); | |||
130 | MODULE_PARM_DESC(card,"specify TV/grabber card model, see CARDLIST file for a list"); | 129 | MODULE_PARM_DESC(card,"specify TV/grabber card model, see CARDLIST file for a list"); |
131 | MODULE_PARM_DESC(pll,"specify installed crystal (0=none, 28=28 MHz, 35=35 MHz)"); | 130 | MODULE_PARM_DESC(pll,"specify installed crystal (0=none, 28=28 MHz, 35=35 MHz)"); |
132 | MODULE_PARM_DESC(tuner,"specify installed tuner type"); | 131 | MODULE_PARM_DESC(tuner,"specify installed tuner type"); |
133 | MODULE_PARM_DESC(autoload,"automatically load i2c modules like tuner.o, default is 1 (yes)"); | 132 | MODULE_PARM_DESC(autoload, "obsolete option, please do not use anymore"); |
133 | MODULE_PARM_DESC(audiodev, "specify audio device:\n" | ||
134 | "\t\t-1 = no audio\n" | ||
135 | "\t\t 0 = autodetect (default)\n" | ||
136 | "\t\t 1 = msp3400\n" | ||
137 | "\t\t 2 = tda7432\n" | ||
138 | "\t\t 3 = tvaudio"); | ||
139 | MODULE_PARM_DESC(saa6588, "if 1, then load the saa6588 RDS module, default (0) is to use the card definition."); | ||
134 | MODULE_PARM_DESC(no_overlay,"allow override overlay default (0 disables, 1 enables)" | 140 | MODULE_PARM_DESC(no_overlay,"allow override overlay default (0 disables, 1 enables)" |
135 | " [some VIA/SIS chipsets are known to have problem with overlay]"); | 141 | " [some VIA/SIS chipsets are known to have problem with overlay]"); |
136 | 142 | ||
@@ -3318,6 +3324,17 @@ void __devinit bttv_init_card1(struct bttv *btv) | |||
3318 | /* initialization part two -- after registering i2c bus */ | 3324 | /* initialization part two -- after registering i2c bus */ |
3319 | void __devinit bttv_init_card2(struct bttv *btv) | 3325 | void __devinit bttv_init_card2(struct bttv *btv) |
3320 | { | 3326 | { |
3327 | static const unsigned short tvaudio_addrs[] = { | ||
3328 | I2C_ADDR_TDA8425 >> 1, | ||
3329 | I2C_ADDR_TEA6300 >> 1, | ||
3330 | I2C_ADDR_TEA6420 >> 1, | ||
3331 | I2C_ADDR_TDA9840 >> 1, | ||
3332 | I2C_ADDR_TDA985x_L >> 1, | ||
3333 | I2C_ADDR_TDA985x_H >> 1, | ||
3334 | I2C_ADDR_TDA9874 >> 1, | ||
3335 | I2C_ADDR_PIC16C54 >> 1, | ||
3336 | I2C_CLIENT_END | ||
3337 | }; | ||
3321 | int addr=ADDR_UNSET; | 3338 | int addr=ADDR_UNSET; |
3322 | 3339 | ||
3323 | btv->tuner_type = UNSET; | 3340 | btv->tuner_type = UNSET; |
@@ -3481,6 +3498,12 @@ void __devinit bttv_init_card2(struct bttv *btv) | |||
3481 | printk(KERN_INFO "bttv%d: tuner type=%d\n", btv->c.nr, | 3498 | printk(KERN_INFO "bttv%d: tuner type=%d\n", btv->c.nr, |
3482 | btv->tuner_type); | 3499 | btv->tuner_type); |
3483 | 3500 | ||
3501 | if (autoload != UNSET) { | ||
3502 | printk(KERN_WARNING "bttv%d: the autoload option is obsolete.\n", btv->c.nr); | ||
3503 | printk(KERN_WARNING "bttv%d: use option msp3400, tda7432 or tvaudio to\n", btv->c.nr); | ||
3504 | printk(KERN_WARNING "bttv%d: override which audio module should be used.\n", btv->c.nr); | ||
3505 | } | ||
3506 | |||
3484 | if (UNSET == btv->tuner_type) | 3507 | if (UNSET == btv->tuner_type) |
3485 | btv->tuner_type = TUNER_ABSENT; | 3508 | btv->tuner_type = TUNER_ABSENT; |
3486 | 3509 | ||
@@ -3488,8 +3511,13 @@ void __devinit bttv_init_card2(struct bttv *btv) | |||
3488 | struct tuner_setup tun_setup; | 3511 | struct tuner_setup tun_setup; |
3489 | 3512 | ||
3490 | /* Load tuner module before issuing tuner config call! */ | 3513 | /* Load tuner module before issuing tuner config call! */ |
3491 | if (autoload) | 3514 | if (bttv_tvcards[btv->c.type].has_radio) |
3492 | request_module("tuner"); | 3515 | v4l2_i2c_new_probed_subdev(&btv->c.i2c_adap, |
3516 | "tuner", "tuner", v4l2_i2c_tuner_addrs(ADDRS_RADIO)); | ||
3517 | v4l2_i2c_new_probed_subdev(&btv->c.i2c_adap, "tuner", | ||
3518 | "tuner", v4l2_i2c_tuner_addrs(ADDRS_DEMOD)); | ||
3519 | v4l2_i2c_new_probed_subdev(&btv->c.i2c_adap, "tuner", | ||
3520 | "tuner", v4l2_i2c_tuner_addrs(ADDRS_TV_WITH_DEMOD)); | ||
3493 | 3521 | ||
3494 | tun_setup.mode_mask = T_ANALOG_TV | T_DIGITAL_TV; | 3522 | tun_setup.mode_mask = T_ANALOG_TV | T_DIGITAL_TV; |
3495 | tun_setup.type = btv->tuner_type; | 3523 | tun_setup.type = btv->tuner_type; |
@@ -3498,7 +3526,7 @@ void __devinit bttv_init_card2(struct bttv *btv) | |||
3498 | if (bttv_tvcards[btv->c.type].has_radio) | 3526 | if (bttv_tvcards[btv->c.type].has_radio) |
3499 | tun_setup.mode_mask |= T_RADIO; | 3527 | tun_setup.mode_mask |= T_RADIO; |
3500 | 3528 | ||
3501 | bttv_call_i2c_clients(btv, TUNER_SET_TYPE_ADDR, &tun_setup); | 3529 | bttv_call_all(btv, tuner, s_type_addr, &tun_setup); |
3502 | } | 3530 | } |
3503 | 3531 | ||
3504 | if (btv->tda9887_conf) { | 3532 | if (btv->tda9887_conf) { |
@@ -3507,7 +3535,7 @@ void __devinit bttv_init_card2(struct bttv *btv) | |||
3507 | tda9887_cfg.tuner = TUNER_TDA9887; | 3535 | tda9887_cfg.tuner = TUNER_TDA9887; |
3508 | tda9887_cfg.priv = &btv->tda9887_conf; | 3536 | tda9887_cfg.priv = &btv->tda9887_conf; |
3509 | 3537 | ||
3510 | bttv_call_i2c_clients(btv, TUNER_SET_CONFIG, &tda9887_cfg); | 3538 | bttv_call_all(btv, tuner, s_config, &tda9887_cfg); |
3511 | } | 3539 | } |
3512 | 3540 | ||
3513 | btv->dig = bttv_tvcards[btv->c.type].has_dig_in ? | 3541 | btv->dig = bttv_tvcards[btv->c.type].has_dig_in ? |
@@ -3530,31 +3558,127 @@ void __devinit bttv_init_card2(struct bttv *btv) | |||
3530 | if (bttv_tvcards[btv->c.type].audio_mode_gpio) | 3558 | if (bttv_tvcards[btv->c.type].audio_mode_gpio) |
3531 | btv->audio_mode_gpio=bttv_tvcards[btv->c.type].audio_mode_gpio; | 3559 | btv->audio_mode_gpio=bttv_tvcards[btv->c.type].audio_mode_gpio; |
3532 | 3560 | ||
3533 | if (!autoload) | ||
3534 | return; | ||
3535 | |||
3536 | if (btv->tuner_type == TUNER_ABSENT) | 3561 | if (btv->tuner_type == TUNER_ABSENT) |
3537 | return; /* no tuner or related drivers to load */ | 3562 | return; /* no tuner or related drivers to load */ |
3538 | 3563 | ||
3564 | if (btv->has_saa6588 || saa6588[btv->c.nr]) { | ||
3565 | /* Probe for RDS receiver chip */ | ||
3566 | static const unsigned short addrs[] = { | ||
3567 | 0x20 >> 1, | ||
3568 | 0x22 >> 1, | ||
3569 | I2C_CLIENT_END | ||
3570 | }; | ||
3571 | struct v4l2_subdev *sd; | ||
3572 | |||
3573 | sd = v4l2_i2c_new_probed_subdev(&btv->c.i2c_adap, | ||
3574 | "saa6588", "saa6588", addrs); | ||
3575 | btv->has_saa6588 = (sd != NULL); | ||
3576 | } | ||
3577 | |||
3539 | /* try to detect audio/fader chips */ | 3578 | /* try to detect audio/fader chips */ |
3540 | if (!bttv_tvcards[btv->c.type].no_msp34xx && | ||
3541 | bttv_I2CRead(btv, I2C_ADDR_MSP3400, "MSP34xx") >=0) | ||
3542 | request_module("msp3400"); | ||
3543 | 3579 | ||
3544 | if (bttv_tvcards[btv->c.type].msp34xx_alt && | 3580 | /* First check if the user specified the audio chip via a module |
3545 | bttv_I2CRead(btv, I2C_ADDR_MSP3400_ALT, "MSP34xx (alternate address)") >=0) | 3581 | option. */ |
3546 | request_module("msp3400"); | 3582 | |
3583 | switch (audiodev[btv->c.nr]) { | ||
3584 | case -1: | ||
3585 | return; /* do not load any audio module */ | ||
3586 | |||
3587 | case 0: /* autodetect */ | ||
3588 | break; | ||
3589 | |||
3590 | case 1: { | ||
3591 | /* The user specified that we should probe for msp3400 */ | ||
3592 | static const unsigned short addrs[] = { | ||
3593 | I2C_ADDR_MSP3400 >> 1, | ||
3594 | I2C_ADDR_MSP3400_ALT >> 1, | ||
3595 | I2C_CLIENT_END | ||
3596 | }; | ||
3597 | |||
3598 | btv->sd_msp34xx = v4l2_i2c_new_probed_subdev(&btv->c.i2c_adap, | ||
3599 | "msp3400", "msp3400", addrs); | ||
3600 | if (btv->sd_msp34xx) | ||
3601 | return; | ||
3602 | goto no_audio; | ||
3603 | } | ||
3604 | |||
3605 | case 2: { | ||
3606 | /* The user specified that we should probe for tda7432 */ | ||
3607 | static const unsigned short addrs[] = { | ||
3608 | I2C_ADDR_TDA7432 >> 1, | ||
3609 | I2C_CLIENT_END | ||
3610 | }; | ||
3611 | |||
3612 | if (v4l2_i2c_new_probed_subdev(&btv->c.i2c_adap, | ||
3613 | "tda7432", "tda7432", addrs)) | ||
3614 | return; | ||
3615 | goto no_audio; | ||
3616 | } | ||
3547 | 3617 | ||
3548 | if (!bttv_tvcards[btv->c.type].no_tda9875 && | 3618 | case 3: { |
3549 | bttv_I2CRead(btv, I2C_ADDR_TDA9875, "TDA9875") >=0) | 3619 | /* The user specified that we should probe for tvaudio */ |
3550 | request_module("tda9875"); | 3620 | btv->sd_tvaudio = v4l2_i2c_new_probed_subdev(&btv->c.i2c_adap, |
3621 | "tvaudio", "tvaudio", tvaudio_addrs); | ||
3622 | if (btv->sd_tvaudio) | ||
3623 | return; | ||
3624 | goto no_audio; | ||
3625 | } | ||
3551 | 3626 | ||
3552 | if (!bttv_tvcards[btv->c.type].no_tda7432 && | 3627 | default: |
3553 | bttv_I2CRead(btv, I2C_ADDR_TDA7432, "TDA7432") >=0) | 3628 | printk(KERN_WARNING "bttv%d: unknown audiodev value!\n", |
3554 | request_module("tda7432"); | 3629 | btv->c.nr); |
3630 | return; | ||
3631 | } | ||
3632 | |||
3633 | /* There were no overrides, so now we try to discover this through the | ||
3634 | card definition */ | ||
3635 | |||
3636 | /* probe for msp3400 first: this driver can detect whether or not | ||
3637 | it really is a msp3400, so it will return NULL when the device | ||
3638 | found is really something else (e.g. a tea6300). */ | ||
3639 | if (!bttv_tvcards[btv->c.type].no_msp34xx) { | ||
3640 | static const unsigned short addrs[] = { | ||
3641 | I2C_ADDR_MSP3400 >> 1, | ||
3642 | I2C_CLIENT_END | ||
3643 | }; | ||
3644 | |||
3645 | btv->sd_msp34xx = v4l2_i2c_new_probed_subdev(&btv->c.i2c_adap, | ||
3646 | "msp3400", "msp3400", addrs); | ||
3647 | } else if (bttv_tvcards[btv->c.type].msp34xx_alt) { | ||
3648 | static const unsigned short addrs[] = { | ||
3649 | I2C_ADDR_MSP3400_ALT >> 1, | ||
3650 | I2C_CLIENT_END | ||
3651 | }; | ||
3652 | |||
3653 | btv->sd_msp34xx = v4l2_i2c_new_probed_subdev(&btv->c.i2c_adap, | ||
3654 | "msp3400", "msp3400", addrs); | ||
3655 | } | ||
3656 | |||
3657 | /* If we found a msp34xx, then we're done. */ | ||
3658 | if (btv->sd_msp34xx) | ||
3659 | return; | ||
3660 | |||
3661 | /* it might also be a tda7432. */ | ||
3662 | if (!bttv_tvcards[btv->c.type].no_tda7432) { | ||
3663 | static const unsigned short addrs[] = { | ||
3664 | I2C_ADDR_TDA7432 >> 1, | ||
3665 | I2C_CLIENT_END | ||
3666 | }; | ||
3667 | |||
3668 | if (v4l2_i2c_new_probed_subdev(&btv->c.i2c_adap, | ||
3669 | "tda7432", "tda7432", addrs)) | ||
3670 | return; | ||
3671 | } | ||
3672 | |||
3673 | /* Now see if we can find one of the tvaudio devices. */ | ||
3674 | btv->sd_tvaudio = v4l2_i2c_new_probed_subdev(&btv->c.i2c_adap, | ||
3675 | "tvaudio", "tvaudio", tvaudio_addrs); | ||
3676 | if (btv->sd_tvaudio) | ||
3677 | return; | ||
3555 | 3678 | ||
3556 | if (bttv_tvcards[btv->c.type].needs_tvaudio) | 3679 | no_audio: |
3557 | request_module("tvaudio"); | 3680 | printk(KERN_WARNING "bttv%d: audio absent, no audio device found!\n", |
3681 | btv->c.nr); | ||
3558 | } | 3682 | } |
3559 | 3683 | ||
3560 | 3684 | ||
@@ -3626,6 +3750,7 @@ static int terratec_active_radio_upgrade(struct bttv *btv) | |||
3626 | printk("bttv%d: Terratec Active Radio Upgrade found.\n", | 3750 | printk("bttv%d: Terratec Active Radio Upgrade found.\n", |
3627 | btv->c.nr); | 3751 | btv->c.nr); |
3628 | btv->has_radio = 1; | 3752 | btv->has_radio = 1; |
3753 | btv->has_saa6588 = 1; | ||
3629 | btv->has_matchbox = 1; | 3754 | btv->has_matchbox = 1; |
3630 | } else { | 3755 | } else { |
3631 | btv->has_radio = 0; | 3756 | btv->has_radio = 0; |
diff --git a/drivers/media/video/bt8xx/bttv-driver.c b/drivers/media/video/bt8xx/bttv-driver.c index 1dc79b82cf42..7a8ca0d8356f 100644 --- a/drivers/media/video/bt8xx/bttv-driver.c +++ b/drivers/media/video/bt8xx/bttv-driver.c | |||
@@ -1163,7 +1163,6 @@ audio_mux(struct bttv *btv, int input, int mute) | |||
1163 | { | 1163 | { |
1164 | int gpio_val, signal; | 1164 | int gpio_val, signal; |
1165 | struct v4l2_control ctrl; | 1165 | struct v4l2_control ctrl; |
1166 | struct i2c_client *c; | ||
1167 | 1166 | ||
1168 | gpio_inout(bttv_tvcards[btv->c.type].gpiomask, | 1167 | gpio_inout(bttv_tvcards[btv->c.type].gpiomask, |
1169 | bttv_tvcards[btv->c.type].gpiomask); | 1168 | bttv_tvcards[btv->c.type].gpiomask); |
@@ -1197,9 +1196,8 @@ audio_mux(struct bttv *btv, int input, int mute) | |||
1197 | 1196 | ||
1198 | ctrl.id = V4L2_CID_AUDIO_MUTE; | 1197 | ctrl.id = V4L2_CID_AUDIO_MUTE; |
1199 | ctrl.value = btv->mute; | 1198 | ctrl.value = btv->mute; |
1200 | bttv_call_i2c_clients(btv, VIDIOC_S_CTRL, &ctrl); | 1199 | bttv_call_all(btv, core, s_ctrl, &ctrl); |
1201 | c = btv->i2c_msp34xx_client; | 1200 | if (btv->sd_msp34xx) { |
1202 | if (c) { | ||
1203 | struct v4l2_routing route; | 1201 | struct v4l2_routing route; |
1204 | 1202 | ||
1205 | /* Note: the inputs tuner/radio/extern/intern are translated | 1203 | /* Note: the inputs tuner/radio/extern/intern are translated |
@@ -1238,15 +1236,14 @@ audio_mux(struct bttv *btv, int input, int mute) | |||
1238 | break; | 1236 | break; |
1239 | } | 1237 | } |
1240 | route.output = MSP_OUTPUT_DEFAULT; | 1238 | route.output = MSP_OUTPUT_DEFAULT; |
1241 | c->driver->command(c, VIDIOC_INT_S_AUDIO_ROUTING, &route); | 1239 | v4l2_subdev_call(btv->sd_msp34xx, audio, s_routing, &route); |
1242 | } | 1240 | } |
1243 | c = btv->i2c_tvaudio_client; | 1241 | if (btv->sd_tvaudio) { |
1244 | if (c) { | ||
1245 | struct v4l2_routing route; | 1242 | struct v4l2_routing route; |
1246 | 1243 | ||
1247 | route.input = input; | 1244 | route.input = input; |
1248 | route.output = 0; | 1245 | route.output = 0; |
1249 | c->driver->command(c, VIDIOC_INT_S_AUDIO_ROUTING, &route); | 1246 | v4l2_subdev_call(btv->sd_tvaudio, audio, s_routing, &route); |
1250 | } | 1247 | } |
1251 | return 0; | 1248 | return 0; |
1252 | } | 1249 | } |
@@ -1332,7 +1329,7 @@ set_tvnorm(struct bttv *btv, unsigned int norm) | |||
1332 | break; | 1329 | break; |
1333 | } | 1330 | } |
1334 | id = tvnorm->v4l2_id; | 1331 | id = tvnorm->v4l2_id; |
1335 | bttv_call_i2c_clients(btv, VIDIOC_S_STD, &id); | 1332 | bttv_call_all(btv, tuner, s_std, id); |
1336 | 1333 | ||
1337 | return 0; | 1334 | return 0; |
1338 | } | 1335 | } |
@@ -1476,7 +1473,7 @@ static int bttv_g_ctrl(struct file *file, void *priv, | |||
1476 | case V4L2_CID_AUDIO_BALANCE: | 1473 | case V4L2_CID_AUDIO_BALANCE: |
1477 | case V4L2_CID_AUDIO_BASS: | 1474 | case V4L2_CID_AUDIO_BASS: |
1478 | case V4L2_CID_AUDIO_TREBLE: | 1475 | case V4L2_CID_AUDIO_TREBLE: |
1479 | bttv_call_i2c_clients(btv, VIDIOC_G_CTRL, c); | 1476 | bttv_call_all(btv, core, g_ctrl, c); |
1480 | break; | 1477 | break; |
1481 | 1478 | ||
1482 | case V4L2_CID_PRIVATE_CHROMA_AGC: | 1479 | case V4L2_CID_PRIVATE_CHROMA_AGC: |
@@ -1550,12 +1547,12 @@ static int bttv_s_ctrl(struct file *file, void *f, | |||
1550 | if (btv->volume_gpio) | 1547 | if (btv->volume_gpio) |
1551 | btv->volume_gpio(btv, c->value); | 1548 | btv->volume_gpio(btv, c->value); |
1552 | 1549 | ||
1553 | bttv_call_i2c_clients(btv, VIDIOC_S_CTRL, c); | 1550 | bttv_call_all(btv, core, s_ctrl, c); |
1554 | break; | 1551 | break; |
1555 | case V4L2_CID_AUDIO_BALANCE: | 1552 | case V4L2_CID_AUDIO_BALANCE: |
1556 | case V4L2_CID_AUDIO_BASS: | 1553 | case V4L2_CID_AUDIO_BASS: |
1557 | case V4L2_CID_AUDIO_TREBLE: | 1554 | case V4L2_CID_AUDIO_TREBLE: |
1558 | bttv_call_i2c_clients(btv, VIDIOC_S_CTRL, c); | 1555 | bttv_call_all(btv, core, s_ctrl, c); |
1559 | break; | 1556 | break; |
1560 | 1557 | ||
1561 | case V4L2_CID_PRIVATE_CHROMA_AGC: | 1558 | case V4L2_CID_PRIVATE_CHROMA_AGC: |
@@ -1973,7 +1970,7 @@ static int bttv_s_tuner(struct file *file, void *priv, | |||
1973 | return -EINVAL; | 1970 | return -EINVAL; |
1974 | 1971 | ||
1975 | mutex_lock(&btv->lock); | 1972 | mutex_lock(&btv->lock); |
1976 | bttv_call_i2c_clients(btv, VIDIOC_S_TUNER, t); | 1973 | bttv_call_all(btv, tuner, s_tuner, t); |
1977 | 1974 | ||
1978 | if (btv->audio_mode_gpio) | 1975 | if (btv->audio_mode_gpio) |
1979 | btv->audio_mode_gpio(btv, t, 1); | 1976 | btv->audio_mode_gpio(btv, t, 1); |
@@ -2018,7 +2015,7 @@ static int bttv_s_frequency(struct file *file, void *priv, | |||
2018 | return -EINVAL; | 2015 | return -EINVAL; |
2019 | mutex_lock(&btv->lock); | 2016 | mutex_lock(&btv->lock); |
2020 | btv->freq = f->frequency; | 2017 | btv->freq = f->frequency; |
2021 | bttv_call_i2c_clients(btv, VIDIOC_S_FREQUENCY, f); | 2018 | bttv_call_all(btv, tuner, s_frequency, f); |
2022 | if (btv->has_matchbox && btv->radio_user) | 2019 | if (btv->has_matchbox && btv->radio_user) |
2023 | tea5757_set_freq(btv, btv->freq); | 2020 | tea5757_set_freq(btv, btv->freq); |
2024 | mutex_unlock(&btv->lock); | 2021 | mutex_unlock(&btv->lock); |
@@ -2032,7 +2029,7 @@ static int bttv_log_status(struct file *file, void *f) | |||
2032 | 2029 | ||
2033 | printk(KERN_INFO "bttv%d: ======== START STATUS CARD #%d ========\n", | 2030 | printk(KERN_INFO "bttv%d: ======== START STATUS CARD #%d ========\n", |
2034 | btv->c.nr, btv->c.nr); | 2031 | btv->c.nr, btv->c.nr); |
2035 | bttv_call_i2c_clients(btv, VIDIOC_LOG_STATUS, NULL); | 2032 | bttv_call_all(btv, core, log_status); |
2036 | printk(KERN_INFO "bttv%d: ======== END STATUS CARD #%d ========\n", | 2033 | printk(KERN_INFO "bttv%d: ======== END STATUS CARD #%d ========\n", |
2037 | btv->c.nr, btv->c.nr); | 2034 | btv->c.nr, btv->c.nr); |
2038 | return 0; | 2035 | return 0; |
@@ -2946,7 +2943,7 @@ static int bttv_g_tuner(struct file *file, void *priv, | |||
2946 | 2943 | ||
2947 | mutex_lock(&btv->lock); | 2944 | mutex_lock(&btv->lock); |
2948 | t->rxsubchans = V4L2_TUNER_SUB_MONO; | 2945 | t->rxsubchans = V4L2_TUNER_SUB_MONO; |
2949 | bttv_call_i2c_clients(btv, VIDIOC_G_TUNER, t); | 2946 | bttv_call_all(btv, tuner, g_tuner, t); |
2950 | strcpy(t->name, "Television"); | 2947 | strcpy(t->name, "Television"); |
2951 | t->capability = V4L2_TUNER_CAP_NORM; | 2948 | t->capability = V4L2_TUNER_CAP_NORM; |
2952 | t->type = V4L2_TUNER_ANALOG_TV; | 2949 | t->type = V4L2_TUNER_ANALOG_TV; |
@@ -3437,7 +3434,7 @@ static int radio_open(struct file *file) | |||
3437 | 3434 | ||
3438 | btv->radio_user++; | 3435 | btv->radio_user++; |
3439 | 3436 | ||
3440 | bttv_call_i2c_clients(btv,AUDC_SET_RADIO,NULL); | 3437 | bttv_call_all(btv, tuner, s_radio); |
3441 | audio_input(btv,TVAUDIO_INPUT_RADIO); | 3438 | audio_input(btv,TVAUDIO_INPUT_RADIO); |
3442 | 3439 | ||
3443 | mutex_unlock(&btv->lock); | 3440 | mutex_unlock(&btv->lock); |
@@ -3457,7 +3454,7 @@ static int radio_release(struct file *file) | |||
3457 | 3454 | ||
3458 | btv->radio_user--; | 3455 | btv->radio_user--; |
3459 | 3456 | ||
3460 | bttv_call_i2c_clients(btv, RDS_CMD_CLOSE, &cmd); | 3457 | bttv_call_all(btv, core, ioctl, RDS_CMD_CLOSE, &cmd); |
3461 | 3458 | ||
3462 | return 0; | 3459 | return 0; |
3463 | } | 3460 | } |
@@ -3490,7 +3487,7 @@ static int radio_g_tuner(struct file *file, void *priv, struct v4l2_tuner *t) | |||
3490 | strcpy(t->name, "Radio"); | 3487 | strcpy(t->name, "Radio"); |
3491 | t->type = V4L2_TUNER_RADIO; | 3488 | t->type = V4L2_TUNER_RADIO; |
3492 | 3489 | ||
3493 | bttv_call_i2c_clients(btv, VIDIOC_G_TUNER, t); | 3490 | bttv_call_all(btv, tuner, g_tuner, t); |
3494 | 3491 | ||
3495 | if (btv->audio_mode_gpio) | 3492 | if (btv->audio_mode_gpio) |
3496 | btv->audio_mode_gpio(btv, t, 0); | 3493 | btv->audio_mode_gpio(btv, t, 0); |
@@ -3532,7 +3529,7 @@ static int radio_s_tuner(struct file *file, void *priv, | |||
3532 | if (0 != t->index) | 3529 | if (0 != t->index) |
3533 | return -EINVAL; | 3530 | return -EINVAL; |
3534 | 3531 | ||
3535 | bttv_call_i2c_clients(btv, VIDIOC_G_TUNER, t); | 3532 | bttv_call_all(btv, tuner, g_tuner, t); |
3536 | return 0; | 3533 | return 0; |
3537 | } | 3534 | } |
3538 | 3535 | ||
@@ -3593,7 +3590,7 @@ static ssize_t radio_read(struct file *file, char __user *data, | |||
3593 | cmd.instance = file; | 3590 | cmd.instance = file; |
3594 | cmd.result = -ENODEV; | 3591 | cmd.result = -ENODEV; |
3595 | 3592 | ||
3596 | bttv_call_i2c_clients(btv, RDS_CMD_READ, &cmd); | 3593 | bttv_call_all(btv, core, ioctl, RDS_CMD_READ, &cmd); |
3597 | 3594 | ||
3598 | return cmd.result; | 3595 | return cmd.result; |
3599 | } | 3596 | } |
@@ -3606,7 +3603,7 @@ static unsigned int radio_poll(struct file *file, poll_table *wait) | |||
3606 | cmd.instance = file; | 3603 | cmd.instance = file; |
3607 | cmd.event_list = wait; | 3604 | cmd.event_list = wait; |
3608 | cmd.result = -ENODEV; | 3605 | cmd.result = -ENODEV; |
3609 | bttv_call_i2c_clients(btv, RDS_CMD_POLL, &cmd); | 3606 | bttv_call_all(btv, core, ioctl, RDS_CMD_POLL, &cmd); |
3610 | 3607 | ||
3611 | return cmd.result; | 3608 | return cmd.result; |
3612 | } | 3609 | } |
diff --git a/drivers/media/video/bt8xx/bttv-i2c.c b/drivers/media/video/bt8xx/bttv-i2c.c index 9b66c5b09321..a99d92fac3dc 100644 --- a/drivers/media/video/bt8xx/bttv-i2c.c +++ b/drivers/media/video/bt8xx/bttv-i2c.c | |||
@@ -36,8 +36,6 @@ | |||
36 | #include <linux/jiffies.h> | 36 | #include <linux/jiffies.h> |
37 | #include <asm/io.h> | 37 | #include <asm/io.h> |
38 | 38 | ||
39 | static int attach_inform(struct i2c_client *client); | ||
40 | |||
41 | static int i2c_debug; | 39 | static int i2c_debug; |
42 | static int i2c_hw; | 40 | static int i2c_hw; |
43 | static int i2c_scan; | 41 | static int i2c_scan; |
@@ -266,51 +264,6 @@ static const struct i2c_algorithm bttv_algo = { | |||
266 | /* ----------------------------------------------------------------------- */ | 264 | /* ----------------------------------------------------------------------- */ |
267 | /* I2C functions - common stuff */ | 265 | /* I2C functions - common stuff */ |
268 | 266 | ||
269 | static int attach_inform(struct i2c_client *client) | ||
270 | { | ||
271 | struct v4l2_device *v4l2_dev = i2c_get_adapdata(client->adapter); | ||
272 | struct bttv *btv = to_bttv(v4l2_dev); | ||
273 | int addr=ADDR_UNSET; | ||
274 | |||
275 | |||
276 | if (ADDR_UNSET != bttv_tvcards[btv->c.type].tuner_addr) | ||
277 | addr = bttv_tvcards[btv->c.type].tuner_addr; | ||
278 | |||
279 | |||
280 | if (bttv_debug) | ||
281 | printk(KERN_DEBUG "bttv%d: %s i2c attach [addr=0x%x,client=%s]\n", | ||
282 | btv->c.nr, client->driver->driver.name, client->addr, | ||
283 | client->name); | ||
284 | if (!client->driver->command) | ||
285 | return 0; | ||
286 | |||
287 | if (client->driver->id == I2C_DRIVERID_MSP3400) | ||
288 | btv->i2c_msp34xx_client = client; | ||
289 | if (client->driver->id == I2C_DRIVERID_TVAUDIO) | ||
290 | btv->i2c_tvaudio_client = client; | ||
291 | if (btv->tuner_type != TUNER_ABSENT) { | ||
292 | struct tuner_setup tun_setup; | ||
293 | |||
294 | if (addr == ADDR_UNSET || addr == client->addr) { | ||
295 | tun_setup.mode_mask = T_ANALOG_TV | T_DIGITAL_TV | T_RADIO; | ||
296 | tun_setup.type = btv->tuner_type; | ||
297 | tun_setup.addr = addr; | ||
298 | bttv_call_i2c_clients(btv, TUNER_SET_TYPE_ADDR, &tun_setup); | ||
299 | } | ||
300 | |||
301 | } | ||
302 | |||
303 | return 0; | ||
304 | } | ||
305 | |||
306 | void bttv_call_i2c_clients(struct bttv *btv, unsigned int cmd, void *arg) | ||
307 | { | ||
308 | if (0 != btv->i2c_rc) | ||
309 | return; | ||
310 | i2c_clients_command(&btv->c.i2c_adap, cmd, arg); | ||
311 | } | ||
312 | |||
313 | |||
314 | /* read I2C */ | 267 | /* read I2C */ |
315 | int bttv_I2CRead(struct bttv *btv, unsigned char addr, char *probe_for) | 268 | int bttv_I2CRead(struct bttv *btv, unsigned char addr, char *probe_for) |
316 | { | 269 | { |
@@ -417,8 +370,6 @@ int __devinit init_bttv_i2c(struct bttv *btv) | |||
417 | btv->c.i2c_adap.algo_data = &btv->i2c_algo; | 370 | btv->c.i2c_adap.algo_data = &btv->i2c_algo; |
418 | } | 371 | } |
419 | btv->c.i2c_adap.owner = THIS_MODULE; | 372 | btv->c.i2c_adap.owner = THIS_MODULE; |
420 | btv->c.i2c_adap.class = I2C_CLASS_TV_ANALOG; | ||
421 | btv->c.i2c_adap.client_register = attach_inform; | ||
422 | 373 | ||
423 | btv->c.i2c_adap.dev.parent = &btv->c.pci->dev; | 374 | btv->c.i2c_adap.dev.parent = &btv->c.pci->dev; |
424 | snprintf(btv->c.i2c_adap.name, sizeof(btv->c.i2c_adap.name), | 375 | snprintf(btv->c.i2c_adap.name, sizeof(btv->c.i2c_adap.name), |
@@ -428,10 +379,6 @@ int __devinit init_bttv_i2c(struct bttv *btv) | |||
428 | i2c_set_adapdata(&btv->c.i2c_adap, &btv->c.v4l2_dev); | 379 | i2c_set_adapdata(&btv->c.i2c_adap, &btv->c.v4l2_dev); |
429 | btv->i2c_client.adapter = &btv->c.i2c_adap; | 380 | btv->i2c_client.adapter = &btv->c.i2c_adap; |
430 | 381 | ||
431 | if (bttv_tvcards[btv->c.type].no_video) | ||
432 | btv->c.i2c_adap.class &= ~I2C_CLASS_TV_ANALOG; | ||
433 | if (bttv_tvcards[btv->c.type].has_dvb) | ||
434 | btv->c.i2c_adap.class |= I2C_CLASS_TV_DIGITAL; | ||
435 | 382 | ||
436 | if (btv->use_i2c_hw) { | 383 | if (btv->use_i2c_hw) { |
437 | btv->i2c_rc = i2c_add_adapter(&btv->c.i2c_adap); | 384 | btv->i2c_rc = i2c_add_adapter(&btv->c.i2c_adap); |
diff --git a/drivers/media/video/bt8xx/bttv.h b/drivers/media/video/bt8xx/bttv.h index fac5f86356d2..3d36daf206f3 100644 --- a/drivers/media/video/bt8xx/bttv.h +++ b/drivers/media/video/bt8xx/bttv.h | |||
@@ -240,6 +240,9 @@ struct tvcard { | |||
240 | unsigned int no_tda7432:1; | 240 | unsigned int no_tda7432:1; |
241 | unsigned int needs_tvaudio:1; | 241 | unsigned int needs_tvaudio:1; |
242 | unsigned int msp34xx_alt:1; | 242 | unsigned int msp34xx_alt:1; |
243 | /* Note: currently no card definition needs to mark the presence | ||
244 | of a RDS saa6588 chip. If this is ever needed, then add a new | ||
245 | 'has_saa6588' bit here. */ | ||
243 | 246 | ||
244 | unsigned int no_video:1; /* video pci function is unused */ | 247 | unsigned int no_video:1; /* video pci function is unused */ |
245 | unsigned int has_dvb:1; | 248 | unsigned int has_dvb:1; |
@@ -355,7 +358,9 @@ void bttv_gpio_bits(struct bttv_core *core, u32 mask, u32 bits); | |||
355 | /* ---------------------------------------------------------- */ | 358 | /* ---------------------------------------------------------- */ |
356 | /* i2c */ | 359 | /* i2c */ |
357 | 360 | ||
358 | extern void bttv_call_i2c_clients(struct bttv *btv, unsigned int cmd, void *arg); | 361 | #define bttv_call_all(btv, o, f, args...) \ |
362 | v4l2_device_call_all(&btv->c.v4l2_dev, 0, o, f, ##args) | ||
363 | |||
359 | extern int bttv_I2CRead(struct bttv *btv, unsigned char addr, char *probe_for); | 364 | extern int bttv_I2CRead(struct bttv *btv, unsigned char addr, char *probe_for); |
360 | extern int bttv_I2CWrite(struct bttv *btv, unsigned char addr, unsigned char b1, | 365 | extern int bttv_I2CWrite(struct bttv *btv, unsigned char addr, unsigned char b1, |
361 | unsigned char b2, int both); | 366 | unsigned char b2, int both); |
diff --git a/drivers/media/video/bt8xx/bttvp.h b/drivers/media/video/bt8xx/bttvp.h index 5755b407c0a2..96498489199d 100644 --- a/drivers/media/video/bt8xx/bttvp.h +++ b/drivers/media/video/bt8xx/bttvp.h | |||
@@ -329,6 +329,7 @@ struct bttv { | |||
329 | unsigned int tuner_type; /* tuner chip type */ | 329 | unsigned int tuner_type; /* tuner chip type */ |
330 | unsigned int tda9887_conf; | 330 | unsigned int tda9887_conf; |
331 | unsigned int svhs, dig; | 331 | unsigned int svhs, dig; |
332 | unsigned int has_saa6588:1; | ||
332 | struct bttv_pll_info pll; | 333 | struct bttv_pll_info pll; |
333 | int triton1; | 334 | int triton1; |
334 | int gpioirq; | 335 | int gpioirq; |
@@ -352,8 +353,8 @@ struct bttv { | |||
352 | int i2c_state, i2c_rc; | 353 | int i2c_state, i2c_rc; |
353 | int i2c_done; | 354 | int i2c_done; |
354 | wait_queue_head_t i2c_queue; | 355 | wait_queue_head_t i2c_queue; |
355 | struct i2c_client *i2c_msp34xx_client; | 356 | struct v4l2_subdev *sd_msp34xx; |
356 | struct i2c_client *i2c_tvaudio_client; | 357 | struct v4l2_subdev *sd_tvaudio; |
357 | 358 | ||
358 | /* video4linux (1) */ | 359 | /* video4linux (1) */ |
359 | struct video_device *video_dev; | 360 | struct video_device *video_dev; |