diff options
author | Devin Heitmueller <dheitmueller@kernellabs.com> | 2009-11-24 23:17:25 -0300 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2010-02-26 15:10:32 -0300 |
commit | 66d9cbad5330d6df30c82f10ee18b62b096b84ef (patch) | |
tree | 47d42a16b56f43df1dc2a535188205e6fc929708 /drivers/media/video/em28xx/em28xx-core.c | |
parent | 6a2071006b72bf887e38c025c60f98d2998ceacb (diff) | |
download | kernel_samsung_smdk4412-66d9cbad5330d6df30c82f10ee18b62b096b84ef.zip kernel_samsung_smdk4412-66d9cbad5330d6df30c82f10ee18b62b096b84ef.tar.gz kernel_samsung_smdk4412-66d9cbad5330d6df30c82f10ee18b62b096b84ef.tar.bz2 |
V4L/DVB (13932): em28xx: add PAL support for VBI
Make the VBI support work for PAL standards in addition to NTSC.
This work was sponsored by EyeMagnet Limited.
Thanks go out to Andy Walls for providing a CD containing test PAL/VBI captures
and to Steven Toth for providing a PVR-350 to do signal generation with.
Signed-off-by: Devin Heitmueller <dheitmueller@kernellabs.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/video/em28xx/em28xx-core.c')
-rw-r--r-- | drivers/media/video/em28xx/em28xx-core.c | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/drivers/media/video/em28xx/em28xx-core.c b/drivers/media/video/em28xx/em28xx-core.c index b311d45..5a37ecc 100644 --- a/drivers/media/video/em28xx/em28xx-core.c +++ b/drivers/media/video/em28xx/em28xx-core.c @@ -691,9 +691,15 @@ int em28xx_set_outfmt(struct em28xx *dev) if (em28xx_vbi_supported(dev) == 1) { vinctrl |= EM28XX_VINCTRL_VBI_RAW; em28xx_write_reg(dev, EM28XX_R34_VBI_START_H, 0x00); - em28xx_write_reg(dev, EM28XX_R35_VBI_START_V, 0x09); - em28xx_write_reg(dev, EM28XX_R36_VBI_WIDTH, 0xb4); - em28xx_write_reg(dev, EM28XX_R37_VBI_HEIGHT, 0x0c); + em28xx_write_reg(dev, EM28XX_R36_VBI_WIDTH, dev->vbi_width/4); + em28xx_write_reg(dev, EM28XX_R37_VBI_HEIGHT, dev->vbi_height); + if (dev->norm & V4L2_STD_525_60) { + /* NTSC */ + em28xx_write_reg(dev, EM28XX_R35_VBI_START_V, 0x09); + } else if (dev->norm & V4L2_STD_625_50) { + /* PAL */ + em28xx_write_reg(dev, EM28XX_R35_VBI_START_V, 0x07); + } } return em28xx_write_reg(dev, EM28XX_R11_VINCTRL, vinctrl); @@ -760,6 +766,13 @@ int em28xx_resolution_set(struct em28xx *dev) width = norm_maxw(dev); height = norm_maxh(dev); + /* Properly setup VBI */ + dev->vbi_width = 720; + if (dev->norm & V4L2_STD_525_60) + dev->vbi_height = 12; + else + dev->vbi_height = 18; + if (!dev->progressive) height >>= norm_maxh(dev); |