V4L/DVB (3533): Add WSS (wide screen signalling) module parameters
authorOliver Endriss <o.endriss@gmx.de>
Fri, 17 Mar 2006 08:29:15 +0000 (05:29 -0300)
committerLinus Torvalds <torvalds@g5.osdl.org>
Tue, 21 Mar 2006 16:53:55 +0000 (08:53 -0800)
Add wss_cfg_4_3 and wss_cfg_16_9 configuration options.
Firmware 2623 or later required.
Both parameters are bit masks:
- bit 15: disable WSS
- bit 14: send short WSS burst, then turn off WSS
- bit 13..0: WSS bits as specified by the standard
These parameters are useful if you own a broken tv set which
does not handle wss correctly.
Default settings:
- wss_cfg_4_3: 0x4008
- wss_cfg_16_9: 0x0007
These should work with most devices.

Signed-off-by: Oliver Endriss <o.endriss@gmx.de>
Signed-off-by: Mauro Carvalho Chehab <mchehab@infradead.org>
drivers/media/dvb/ttpci/av7110.c
drivers/media/dvb/ttpci/av7110_v4l.c

index 5cf5b7d044ff194ac08c16ba6aaad7e6ca7775ac..840efec32cb621c7d0c723b8e675b197ca02d5cf 100644 (file)
@@ -85,6 +85,8 @@ static int hw_sections;
 static int rgb_on;
 static int volume = 255;
 static int budgetpatch;
+static int wss_cfg_4_3 = 0x4008;
+static int wss_cfg_16_9 = 0x0007;
 
 module_param_named(debug, av7110_debug, int, 0644);
 MODULE_PARM_DESC(debug, "debug level (bitmask, default 0)");
@@ -103,6 +105,10 @@ module_param(volume, int, 0444);
 MODULE_PARM_DESC(volume, "initial volume: default 255 (range 0-255)");
 module_param(budgetpatch, int, 0444);
 MODULE_PARM_DESC(budgetpatch, "use budget-patch hardware modification: default 0 (0 no, 1 autodetect, 2 always)");
+module_param(wss_cfg_4_3, int, 0444);
+MODULE_PARM_DESC(wss_cfg_4_3, "WSS 4:3 - default 0x4008 - bit 15: disable, 14: burst mode, 13..0: wss data");
+module_param(wss_cfg_16_9, int, 0444);
+MODULE_PARM_DESC(wss_cfg_16_9, "WSS 16:9 - default 0x0007 - bit 15: disable, 14: burst mode, 13..0: wss data");
 
 static void restart_feeds(struct av7110 *av7110);
 
@@ -128,6 +134,13 @@ static void init_av7110_av(struct av7110 *av7110)
        if (ret < 0)
                printk("dvb-ttpci:cannot set internal volume to maximum:%d\n",ret);
 
+       ret = av7110_fw_cmd(av7110, COMTYPE_ENCODER, SetWSSConfig, 2, 2, wss_cfg_4_3);
+       if (ret < 0)
+               printk("dvb-ttpci: unable to configure 4:3 wss\n");
+       ret = av7110_fw_cmd(av7110, COMTYPE_ENCODER, SetWSSConfig, 2, 3, wss_cfg_16_9);
+       if (ret < 0)
+               printk("dvb-ttpci: unable to configure 16:9 wss\n");
+
        ret = av7710_set_video_mode(av7110, vidmode);
        if (ret < 0)
                printk("dvb-ttpci:cannot set video mode:%d\n",ret);
index 94cf38c7e8a809f8f5cf5ce2bba99c9f160aea0d..2f23ceab8d446491c73a3d832ec2c824733eb951 100644 (file)
@@ -579,14 +579,11 @@ static ssize_t av7110_vbi_write(struct file *file, const char __user *data, size
                return -EFAULT;
        if ((d.id != 0 && d.id != V4L2_SLICED_WSS_625) || d.field != 0 || d.line != 23)
                return -EINVAL;
-       if (d.id) {
+       if (d.id)
                av7110->wssData = ((d.data[1] << 8) & 0x3f00) | d.data[0];
-               rc = av7110_fw_cmd(av7110, COMTYPE_ENCODER, SetWSSConfig,
-                                  2, 1, av7110->wssData);
-       } else {
-               av7110->wssData = 0;
-               rc = av7110_fw_cmd(av7110, COMTYPE_ENCODER, SetWSSConfig, 1, 0);
-       }
+       else
+               av7110->wssData = 0x8000;
+       rc = av7110_fw_cmd(av7110, COMTYPE_ENCODER, SetWSSConfig, 2, 1, av7110->wssData);
        return (rc < 0) ? rc : count;
 }