diff options
author | Mikhail Domrachev <mihail.domrychev@comexp.ru> | 2014-04-01 08:28:17 -0400 |
---|---|---|
committer | Mauro Carvalho Chehab <m.chehab@samsung.com> | 2014-05-23 11:56:01 -0400 |
commit | 707b7f80b5873da7728979ba1b81c0daae736762 (patch) | |
tree | 6fb9d84722c00ef48b1f98b9a5f63f4960b405eb /drivers/media | |
parent | a112fbaf782f08cc837ee6bbd10ca8900d0e4b91 (diff) |
[media] saa7134: add vidioc_querystd
Signed-off-by: Mikhail Domrachev <mihail.domrychev@comexp.ru>
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
Diffstat (limited to 'drivers/media')
-rw-r--r-- | drivers/media/pci/saa7134/saa7134-empress.c | 1 | ||||
-rw-r--r-- | drivers/media/pci/saa7134/saa7134-reg.h | 5 | ||||
-rw-r--r-- | drivers/media/pci/saa7134/saa7134-video.c | 41 | ||||
-rw-r--r-- | drivers/media/pci/saa7134/saa7134.h | 1 |
4 files changed, 46 insertions, 2 deletions
diff --git a/drivers/media/pci/saa7134/saa7134-empress.c b/drivers/media/pci/saa7134/saa7134-empress.c index 7d4d39036009..3ae5e2c48357 100644 --- a/drivers/media/pci/saa7134/saa7134-empress.c +++ b/drivers/media/pci/saa7134/saa7134-empress.c | |||
@@ -264,6 +264,7 @@ static const struct v4l2_ioctl_ops ts_ioctl_ops = { | |||
264 | .vidioc_s_input = saa7134_s_input, | 264 | .vidioc_s_input = saa7134_s_input, |
265 | .vidioc_s_std = saa7134_s_std, | 265 | .vidioc_s_std = saa7134_s_std, |
266 | .vidioc_g_std = saa7134_g_std, | 266 | .vidioc_g_std = saa7134_g_std, |
267 | .vidioc_querystd = saa7134_querystd, | ||
267 | .vidioc_log_status = v4l2_ctrl_log_status, | 268 | .vidioc_log_status = v4l2_ctrl_log_status, |
268 | .vidioc_subscribe_event = v4l2_ctrl_subscribe_event, | 269 | .vidioc_subscribe_event = v4l2_ctrl_subscribe_event, |
269 | .vidioc_unsubscribe_event = v4l2_event_unsubscribe, | 270 | .vidioc_unsubscribe_event = v4l2_event_unsubscribe, |
diff --git a/drivers/media/pci/saa7134/saa7134-reg.h b/drivers/media/pci/saa7134/saa7134-reg.h index b28b1515c8aa..b6ea6f4f9b6c 100644 --- a/drivers/media/pci/saa7134/saa7134-reg.h +++ b/drivers/media/pci/saa7134/saa7134-reg.h | |||
@@ -167,17 +167,22 @@ | |||
167 | #define SAA7134_HSYNC_START 0x106 | 167 | #define SAA7134_HSYNC_START 0x106 |
168 | #define SAA7134_HSYNC_STOP 0x107 | 168 | #define SAA7134_HSYNC_STOP 0x107 |
169 | #define SAA7134_SYNC_CTRL 0x108 | 169 | #define SAA7134_SYNC_CTRL 0x108 |
170 | #define SAA7134_SYNC_CTRL_AUFD (1 << 7) | ||
170 | #define SAA7134_LUMA_CTRL 0x109 | 171 | #define SAA7134_LUMA_CTRL 0x109 |
172 | #define SAA7134_LUMA_CTRL_LDEL (1 << 5) | ||
171 | #define SAA7134_DEC_LUMA_BRIGHT 0x10a | 173 | #define SAA7134_DEC_LUMA_BRIGHT 0x10a |
172 | #define SAA7134_DEC_LUMA_CONTRAST 0x10b | 174 | #define SAA7134_DEC_LUMA_CONTRAST 0x10b |
173 | #define SAA7134_DEC_CHROMA_SATURATION 0x10c | 175 | #define SAA7134_DEC_CHROMA_SATURATION 0x10c |
174 | #define SAA7134_DEC_CHROMA_HUE 0x10d | 176 | #define SAA7134_DEC_CHROMA_HUE 0x10d |
175 | #define SAA7134_CHROMA_CTRL1 0x10e | 177 | #define SAA7134_CHROMA_CTRL1 0x10e |
178 | #define SAA7134_CHROMA_CTRL1_AUTO0 (1 << 1) | ||
179 | #define SAA7134_CHROMA_CTRL1_FCTC (1 << 2) | ||
176 | #define SAA7134_CHROMA_GAIN 0x10f | 180 | #define SAA7134_CHROMA_GAIN 0x10f |
177 | #define SAA7134_CHROMA_CTRL2 0x110 | 181 | #define SAA7134_CHROMA_CTRL2 0x110 |
178 | #define SAA7134_MODE_DELAY_CTRL 0x111 | 182 | #define SAA7134_MODE_DELAY_CTRL 0x111 |
179 | 183 | ||
180 | #define SAA7134_ANALOG_ADC 0x114 | 184 | #define SAA7134_ANALOG_ADC 0x114 |
185 | #define SAA7134_ANALOG_ADC_AUTO1 (1 << 2) | ||
181 | #define SAA7134_VGATE_START 0x115 | 186 | #define SAA7134_VGATE_START 0x115 |
182 | #define SAA7134_VGATE_STOP 0x116 | 187 | #define SAA7134_VGATE_STOP 0x116 |
183 | #define SAA7134_MISC_VGATE_MSB 0x117 | 188 | #define SAA7134_MISC_VGATE_MSB 0x117 |
diff --git a/drivers/media/pci/saa7134/saa7134-video.c b/drivers/media/pci/saa7134/saa7134-video.c index e5b2bebaf010..16140ad6ffb3 100644 --- a/drivers/media/pci/saa7134/saa7134-video.c +++ b/drivers/media/pci/saa7134/saa7134-video.c | |||
@@ -452,19 +452,26 @@ static void video_mux(struct saa7134_dev *dev, int input) | |||
452 | 452 | ||
453 | static void saa7134_set_decoder(struct saa7134_dev *dev) | 453 | static void saa7134_set_decoder(struct saa7134_dev *dev) |
454 | { | 454 | { |
455 | int luma_control, sync_control, mux; | 455 | int luma_control, sync_control, chroma_ctrl1, mux; |
456 | 456 | ||
457 | struct saa7134_tvnorm *norm = dev->tvnorm; | 457 | struct saa7134_tvnorm *norm = dev->tvnorm; |
458 | mux = card_in(dev, dev->ctl_input).vmux; | 458 | mux = card_in(dev, dev->ctl_input).vmux; |
459 | 459 | ||
460 | luma_control = norm->luma_control; | 460 | luma_control = norm->luma_control; |
461 | sync_control = norm->sync_control; | 461 | sync_control = norm->sync_control; |
462 | chroma_ctrl1 = norm->chroma_ctrl1; | ||
462 | 463 | ||
463 | if (mux > 5) | 464 | if (mux > 5) |
464 | luma_control |= 0x80; /* svideo */ | 465 | luma_control |= 0x80; /* svideo */ |
465 | if (noninterlaced || dev->nosignal) | 466 | if (noninterlaced || dev->nosignal) |
466 | sync_control |= 0x20; | 467 | sync_control |= 0x20; |
467 | 468 | ||
469 | /* switch on auto standard detection */ | ||
470 | sync_control |= SAA7134_SYNC_CTRL_AUFD; | ||
471 | chroma_ctrl1 |= SAA7134_CHROMA_CTRL1_AUTO0; | ||
472 | chroma_ctrl1 &= ~SAA7134_CHROMA_CTRL1_FCTC; | ||
473 | luma_control &= ~SAA7134_LUMA_CTRL_LDEL; | ||
474 | |||
468 | /* setup video decoder */ | 475 | /* setup video decoder */ |
469 | saa_writeb(SAA7134_INCR_DELAY, 0x08); | 476 | saa_writeb(SAA7134_INCR_DELAY, 0x08); |
470 | saa_writeb(SAA7134_ANALOG_IN_CTRL1, 0xc0 | mux); | 477 | saa_writeb(SAA7134_ANALOG_IN_CTRL1, 0xc0 | mux); |
@@ -487,7 +494,7 @@ static void saa7134_set_decoder(struct saa7134_dev *dev) | |||
487 | dev->ctl_invert ? -dev->ctl_saturation : dev->ctl_saturation); | 494 | dev->ctl_invert ? -dev->ctl_saturation : dev->ctl_saturation); |
488 | 495 | ||
489 | saa_writeb(SAA7134_DEC_CHROMA_HUE, dev->ctl_hue); | 496 | saa_writeb(SAA7134_DEC_CHROMA_HUE, dev->ctl_hue); |
490 | saa_writeb(SAA7134_CHROMA_CTRL1, norm->chroma_ctrl1); | 497 | saa_writeb(SAA7134_CHROMA_CTRL1, chroma_ctrl1); |
491 | saa_writeb(SAA7134_CHROMA_GAIN, norm->chroma_gain); | 498 | saa_writeb(SAA7134_CHROMA_GAIN, norm->chroma_gain); |
492 | 499 | ||
493 | saa_writeb(SAA7134_CHROMA_CTRL2, norm->chroma_ctrl2); | 500 | saa_writeb(SAA7134_CHROMA_CTRL2, norm->chroma_ctrl2); |
@@ -1686,6 +1693,35 @@ int saa7134_g_std(struct file *file, void *priv, v4l2_std_id *id) | |||
1686 | } | 1693 | } |
1687 | EXPORT_SYMBOL_GPL(saa7134_g_std); | 1694 | EXPORT_SYMBOL_GPL(saa7134_g_std); |
1688 | 1695 | ||
1696 | static v4l2_std_id saa7134_read_std(struct saa7134_dev *dev) | ||
1697 | { | ||
1698 | static v4l2_std_id stds[] = { | ||
1699 | V4L2_STD_UNKNOWN, | ||
1700 | V4L2_STD_NTSC, | ||
1701 | V4L2_STD_PAL, | ||
1702 | V4L2_STD_SECAM }; | ||
1703 | |||
1704 | v4l2_std_id result = 0; | ||
1705 | |||
1706 | u8 st1 = saa_readb(SAA7134_STATUS_VIDEO1); | ||
1707 | u8 st2 = saa_readb(SAA7134_STATUS_VIDEO2); | ||
1708 | |||
1709 | if (!(st2 & 0x1)) /* RDCAP == 0 */ | ||
1710 | result = V4L2_STD_UNKNOWN; | ||
1711 | else | ||
1712 | result = stds[st1 & 0x03]; | ||
1713 | |||
1714 | return result; | ||
1715 | } | ||
1716 | |||
1717 | int saa7134_querystd(struct file *file, void *priv, v4l2_std_id *std) | ||
1718 | { | ||
1719 | struct saa7134_dev *dev = video_drvdata(file); | ||
1720 | *std &= saa7134_read_std(dev); | ||
1721 | return 0; | ||
1722 | } | ||
1723 | EXPORT_SYMBOL_GPL(saa7134_querystd); | ||
1724 | |||
1689 | static int saa7134_cropcap(struct file *file, void *priv, | 1725 | static int saa7134_cropcap(struct file *file, void *priv, |
1690 | struct v4l2_cropcap *cap) | 1726 | struct v4l2_cropcap *cap) |
1691 | { | 1727 | { |
@@ -2079,6 +2115,7 @@ static const struct v4l2_ioctl_ops video_ioctl_ops = { | |||
2079 | .vidioc_dqbuf = saa7134_dqbuf, | 2115 | .vidioc_dqbuf = saa7134_dqbuf, |
2080 | .vidioc_s_std = saa7134_s_std, | 2116 | .vidioc_s_std = saa7134_s_std, |
2081 | .vidioc_g_std = saa7134_g_std, | 2117 | .vidioc_g_std = saa7134_g_std, |
2118 | .vidioc_querystd = saa7134_querystd, | ||
2082 | .vidioc_enum_input = saa7134_enum_input, | 2119 | .vidioc_enum_input = saa7134_enum_input, |
2083 | .vidioc_g_input = saa7134_g_input, | 2120 | .vidioc_g_input = saa7134_g_input, |
2084 | .vidioc_s_input = saa7134_s_input, | 2121 | .vidioc_s_input = saa7134_s_input, |
diff --git a/drivers/media/pci/saa7134/saa7134.h b/drivers/media/pci/saa7134/saa7134.h index 482489a682cc..968a10a860e7 100644 --- a/drivers/media/pci/saa7134/saa7134.h +++ b/drivers/media/pci/saa7134/saa7134.h | |||
@@ -782,6 +782,7 @@ extern struct video_device saa7134_radio_template; | |||
782 | 782 | ||
783 | int saa7134_s_std(struct file *file, void *priv, v4l2_std_id id); | 783 | int saa7134_s_std(struct file *file, void *priv, v4l2_std_id id); |
784 | int saa7134_g_std(struct file *file, void *priv, v4l2_std_id *id); | 784 | int saa7134_g_std(struct file *file, void *priv, v4l2_std_id *id); |
785 | int saa7134_querystd(struct file *file, void *priv, v4l2_std_id *std); | ||
785 | int saa7134_enum_input(struct file *file, void *priv, struct v4l2_input *i); | 786 | int saa7134_enum_input(struct file *file, void *priv, struct v4l2_input *i); |
786 | int saa7134_g_input(struct file *file, void *priv, unsigned int *i); | 787 | int saa7134_g_input(struct file *file, void *priv, unsigned int *i); |
787 | int saa7134_s_input(struct file *file, void *priv, unsigned int i); | 788 | int saa7134_s_input(struct file *file, void *priv, unsigned int i); |