diff options
Diffstat (limited to 'drivers/media/video/cx23885/cx23885-video.c')
-rw-r--r-- | drivers/media/video/cx23885/cx23885-video.c | 44 |
1 files changed, 14 insertions, 30 deletions
diff --git a/drivers/media/video/cx23885/cx23885-video.c b/drivers/media/video/cx23885/cx23885-video.c index 654cc253cd50..8b372b4f0de2 100644 --- a/drivers/media/video/cx23885/cx23885-video.c +++ b/drivers/media/video/cx23885/cx23885-video.c | |||
@@ -35,6 +35,7 @@ | |||
35 | #include "cx23885.h" | 35 | #include "cx23885.h" |
36 | #include <media/v4l2-common.h> | 36 | #include <media/v4l2-common.h> |
37 | #include <media/v4l2-ioctl.h> | 37 | #include <media/v4l2-ioctl.h> |
38 | #include "cx23885-ioctl.h" | ||
38 | 39 | ||
39 | MODULE_DESCRIPTION("v4l2 driver module for cx23885 based TV cards"); | 40 | MODULE_DESCRIPTION("v4l2 driver module for cx23885 based TV cards"); |
40 | MODULE_AUTHOR("Steven Toth <stoth@linuxtv.org>"); | 41 | MODULE_AUTHOR("Steven Toth <stoth@linuxtv.org>"); |
@@ -401,6 +402,13 @@ static int cx23885_video_mux(struct cx23885_dev *dev, unsigned int input) | |||
401 | INPUT(input)->gpio2, INPUT(input)->gpio3); | 402 | INPUT(input)->gpio2, INPUT(input)->gpio3); |
402 | dev->input = input; | 403 | dev->input = input; |
403 | 404 | ||
405 | if (dev->board == CX23885_BOARD_MYGICA_X8506 || | ||
406 | dev->board == CX23885_BOARD_MAGICPRO_PROHDTVE2) { | ||
407 | /* Select Analog TV */ | ||
408 | if (INPUT(input)->type == CX23885_VMUX_TELEVISION) | ||
409 | cx23885_gpio_clear(dev, GPIO_0); | ||
410 | } | ||
411 | |||
404 | /* Tell the internal A/V decoder */ | 412 | /* Tell the internal A/V decoder */ |
405 | v4l2_subdev_call(dev->sd_cx25840, video, s_routing, | 413 | v4l2_subdev_call(dev->sd_cx25840, video, s_routing, |
406 | INPUT(input)->vmux, 0, 0); | 414 | INPUT(input)->vmux, 0, 0); |
@@ -1144,6 +1152,7 @@ static int cx23885_enum_input(struct cx23885_dev *dev, struct v4l2_input *i) | |||
1144 | [CX23885_VMUX_COMPOSITE3] = "Composite3", | 1152 | [CX23885_VMUX_COMPOSITE3] = "Composite3", |
1145 | [CX23885_VMUX_COMPOSITE4] = "Composite4", | 1153 | [CX23885_VMUX_COMPOSITE4] = "Composite4", |
1146 | [CX23885_VMUX_SVIDEO] = "S-Video", | 1154 | [CX23885_VMUX_SVIDEO] = "S-Video", |
1155 | [CX23885_VMUX_COMPONENT] = "Component", | ||
1147 | [CX23885_VMUX_TELEVISION] = "Television", | 1156 | [CX23885_VMUX_TELEVISION] = "Television", |
1148 | [CX23885_VMUX_CABLE] = "Cable TV", | 1157 | [CX23885_VMUX_CABLE] = "Cable TV", |
1149 | [CX23885_VMUX_DVB] = "DVB", | 1158 | [CX23885_VMUX_DVB] = "DVB", |
@@ -1312,34 +1321,6 @@ static int vidioc_s_frequency(struct file *file, void *priv, | |||
1312 | cx23885_set_freq(dev, f); | 1321 | cx23885_set_freq(dev, f); |
1313 | } | 1322 | } |
1314 | 1323 | ||
1315 | #ifdef CONFIG_VIDEO_ADV_DEBUG | ||
1316 | static int vidioc_g_register(struct file *file, void *fh, | ||
1317 | struct v4l2_dbg_register *reg) | ||
1318 | { | ||
1319 | struct cx23885_dev *dev = ((struct cx23885_fh *)fh)->dev; | ||
1320 | |||
1321 | if (!v4l2_chip_match_host(®->match)) | ||
1322 | return -EINVAL; | ||
1323 | |||
1324 | call_all(dev, core, g_register, reg); | ||
1325 | |||
1326 | return 0; | ||
1327 | } | ||
1328 | |||
1329 | static int vidioc_s_register(struct file *file, void *fh, | ||
1330 | struct v4l2_dbg_register *reg) | ||
1331 | { | ||
1332 | struct cx23885_dev *dev = ((struct cx23885_fh *)fh)->dev; | ||
1333 | |||
1334 | if (!v4l2_chip_match_host(®->match)) | ||
1335 | return -EINVAL; | ||
1336 | |||
1337 | call_all(dev, core, s_register, reg); | ||
1338 | |||
1339 | return 0; | ||
1340 | } | ||
1341 | #endif | ||
1342 | |||
1343 | /* ----------------------------------------------------------- */ | 1324 | /* ----------------------------------------------------------- */ |
1344 | 1325 | ||
1345 | static void cx23885_vid_timeout(unsigned long data) | 1326 | static void cx23885_vid_timeout(unsigned long data) |
@@ -1449,9 +1430,10 @@ static const struct v4l2_ioctl_ops video_ioctl_ops = { | |||
1449 | .vidioc_s_tuner = vidioc_s_tuner, | 1430 | .vidioc_s_tuner = vidioc_s_tuner, |
1450 | .vidioc_g_frequency = vidioc_g_frequency, | 1431 | .vidioc_g_frequency = vidioc_g_frequency, |
1451 | .vidioc_s_frequency = vidioc_s_frequency, | 1432 | .vidioc_s_frequency = vidioc_s_frequency, |
1433 | .vidioc_g_chip_ident = cx23885_g_chip_ident, | ||
1452 | #ifdef CONFIG_VIDEO_ADV_DEBUG | 1434 | #ifdef CONFIG_VIDEO_ADV_DEBUG |
1453 | .vidioc_g_register = vidioc_g_register, | 1435 | .vidioc_g_register = cx23885_g_register, |
1454 | .vidioc_s_register = vidioc_s_register, | 1436 | .vidioc_s_register = cx23885_s_register, |
1455 | #endif | 1437 | #endif |
1456 | }; | 1438 | }; |
1457 | 1439 | ||
@@ -1529,9 +1511,11 @@ int cx23885_video_register(struct cx23885_dev *dev) | |||
1529 | if (sd) { | 1511 | if (sd) { |
1530 | struct tuner_setup tun_setup; | 1512 | struct tuner_setup tun_setup; |
1531 | 1513 | ||
1514 | memset(&tun_setup, 0, sizeof(tun_setup)); | ||
1532 | tun_setup.mode_mask = T_ANALOG_TV; | 1515 | tun_setup.mode_mask = T_ANALOG_TV; |
1533 | tun_setup.type = dev->tuner_type; | 1516 | tun_setup.type = dev->tuner_type; |
1534 | tun_setup.addr = v4l2_i2c_subdev_addr(sd); | 1517 | tun_setup.addr = v4l2_i2c_subdev_addr(sd); |
1518 | tun_setup.tuner_callback = cx23885_tuner_callback; | ||
1535 | 1519 | ||
1536 | v4l2_subdev_call(sd, tuner, s_type_addr, &tun_setup); | 1520 | v4l2_subdev_call(sd, tuner, s_type_addr, &tun_setup); |
1537 | } | 1521 | } |