aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/bt8xx/bttv-driver.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/media/video/bt8xx/bttv-driver.c')
-rw-r--r--drivers/media/video/bt8xx/bttv-driver.c34
1 files changed, 32 insertions, 2 deletions
diff --git a/drivers/media/video/bt8xx/bttv-driver.c b/drivers/media/video/bt8xx/bttv-driver.c
index b1fedb0f6431..cb555f2c40f9 100644
--- a/drivers/media/video/bt8xx/bttv-driver.c
+++ b/drivers/media/video/bt8xx/bttv-driver.c
@@ -1218,7 +1218,14 @@ audio_mux(struct bttv *btv, int input, int mute)
1218 break; 1218 break;
1219 case TVAUDIO_INPUT_TUNER: 1219 case TVAUDIO_INPUT_TUNER:
1220 default: 1220 default:
1221 route.input = MSP_INPUT_DEFAULT; 1221 /* This is the only card that uses TUNER2, and afaik,
1222 is the only difference between the VOODOOTV_FM
1223 and VOODOOTV_200 */
1224 if (btv->c.type == BTTV_BOARD_VOODOOTV_200)
1225 route.input = MSP_INPUT(MSP_IN_SCART1, MSP_IN_TUNER2, \
1226 MSP_DSP_IN_TUNER, MSP_DSP_IN_TUNER);
1227 else
1228 route.input = MSP_INPUT_DEFAULT;
1222 break; 1229 break;
1223 } 1230 }
1224 route.output = MSP_OUTPUT_DEFAULT; 1231 route.output = MSP_OUTPUT_DEFAULT;
@@ -1253,7 +1260,7 @@ i2c_vidiocschan(struct bttv *btv)
1253 v4l2_std_id std = bttv_tvnorms[btv->tvnorm].v4l2_id; 1260 v4l2_std_id std = bttv_tvnorms[btv->tvnorm].v4l2_id;
1254 1261
1255 bttv_call_i2c_clients(btv, VIDIOC_S_STD, &std); 1262 bttv_call_i2c_clients(btv, VIDIOC_S_STD, &std);
1256 if (btv->c.type == BTTV_BOARD_VOODOOTV_FM) 1263 if (btv->c.type == BTTV_BOARD_VOODOOTV_FM || btv->c.type == BTTV_BOARD_VOODOOTV_200)
1257 bttv_tda9880_setnorm(btv,btv->tvnorm); 1264 bttv_tda9880_setnorm(btv,btv->tvnorm);
1258} 1265}
1259 1266
@@ -1323,6 +1330,7 @@ set_tvnorm(struct bttv *btv, unsigned int norm)
1323 1330
1324 switch (btv->c.type) { 1331 switch (btv->c.type) {
1325 case BTTV_BOARD_VOODOOTV_FM: 1332 case BTTV_BOARD_VOODOOTV_FM:
1333 case BTTV_BOARD_VOODOOTV_200:
1326 bttv_tda9880_setnorm(btv,norm); 1334 bttv_tda9880_setnorm(btv,norm);
1327 break; 1335 break;
1328 } 1336 }
@@ -2251,6 +2259,24 @@ static int bttv_common_ioctls(struct bttv *btv, unsigned int cmd, void *arg)
2251 printk(KERN_INFO "bttv%d: ================== END STATUS CARD #%d ==================\n", btv->c.nr, btv->c.nr); 2259 printk(KERN_INFO "bttv%d: ================== END STATUS CARD #%d ==================\n", btv->c.nr, btv->c.nr);
2252 return 0; 2260 return 0;
2253 } 2261 }
2262#ifdef CONFIG_VIDEO_ADV_DEBUG
2263 case VIDIOC_DBG_G_REGISTER:
2264 case VIDIOC_DBG_S_REGISTER:
2265 {
2266 struct v4l2_register *reg = arg;
2267 if (!capable(CAP_SYS_ADMIN))
2268 return -EPERM;
2269 if (!v4l2_chip_match_host(reg->match_type, reg->match_chip))
2270 return -EINVAL;
2271 /* bt848 has a 12-bit register space */
2272 reg->reg &= 0xfff;
2273 if (cmd == VIDIOC_DBG_G_REGISTER)
2274 reg->val = btread(reg->reg);
2275 else
2276 btwrite(reg->val, reg->reg);
2277 return 0;
2278 }
2279#endif
2254 2280
2255 default: 2281 default:
2256 return -ENOIOCTLCMD; 2282 return -ENOIOCTLCMD;
@@ -3561,6 +3587,8 @@ static int bttv_do_ioctl(struct inode *inode, struct file *file,
3561 case VIDIOC_G_FREQUENCY: 3587 case VIDIOC_G_FREQUENCY:
3562 case VIDIOC_S_FREQUENCY: 3588 case VIDIOC_S_FREQUENCY:
3563 case VIDIOC_LOG_STATUS: 3589 case VIDIOC_LOG_STATUS:
3590 case VIDIOC_DBG_G_REGISTER:
3591 case VIDIOC_DBG_S_REGISTER:
3564 return bttv_common_ioctls(btv,cmd,arg); 3592 return bttv_common_ioctls(btv,cmd,arg);
3565 3593
3566 default: 3594 default:
@@ -3943,6 +3971,8 @@ static int radio_do_ioctl(struct inode *inode, struct file *file,
3943 case VIDIOCGAUDIO: 3971 case VIDIOCGAUDIO:
3944 case VIDIOCSAUDIO: 3972 case VIDIOCSAUDIO:
3945 case VIDIOC_LOG_STATUS: 3973 case VIDIOC_LOG_STATUS:
3974 case VIDIOC_DBG_G_REGISTER:
3975 case VIDIOC_DBG_S_REGISTER:
3946 return bttv_common_ioctls(btv,cmd,arg); 3976 return bttv_common_ioctls(btv,cmd,arg);
3947 3977
3948 default: 3978 default: