[media] bt8xx: Add video4linux control V4L2_CID_COLOR_KILLER
authorGuilherme Herrmann Destefani <linuxtv@destefani.eng.br>
Tue, 25 Sep 2012 21:10:52 +0000 (18:10 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Sat, 6 Oct 2012 15:14:01 +0000 (12:14 -0300)
Added V4L2_CID_COLOR_KILLER control to the bt8xx driver.
The control V4L2_CID_PRIVATE_CHROMA_AGC was changed too because
with this change the bttv driver must touch two bits in the
SC Loop Control Registers, for controls V4L2_CID_COLOR_KILLER
and V4L2_CID_PRIVATE_CHROMA_AGC.

Signed-off-by: Guilherme Herrmann Destefani <linuxtv@destefani.eng.br>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/pci/bt8xx/bttv-driver.c
drivers/media/pci/bt8xx/bttvp.h

index 16f5ca23698c69af3795d5e6a3c90168fc6fee4c..8bad444c86f24ec89692d25fc58bc6b15b2c4a69 100644 (file)
@@ -668,6 +668,12 @@ static const struct v4l2_queryctrl bttv_ctls[] = {
                .default_value = 32768,
                .type          = V4L2_CTRL_TYPE_INTEGER,
        },{
+               .id            = V4L2_CID_COLOR_KILLER,
+               .name          = "Color killer",
+               .minimum       = 0,
+               .maximum       = 1,
+               .type          = V4L2_CTRL_TYPE_BOOLEAN,
+       }, {
                .id            = V4L2_CID_HUE,
                .name          = "Hue",
                .minimum       = 0,
@@ -1474,6 +1480,9 @@ static int bttv_g_ctrl(struct file *file, void *priv,
        case V4L2_CID_SATURATION:
                c->value = btv->saturation;
                break;
+       case V4L2_CID_COLOR_KILLER:
+               c->value = btv->opt_color_killer;
+               break;
 
        case V4L2_CID_AUDIO_MUTE:
        case V4L2_CID_AUDIO_VOLUME:
@@ -1526,7 +1535,6 @@ static int bttv_s_ctrl(struct file *file, void *f,
                                        struct v4l2_control *c)
 {
        int err;
-       int val;
        struct bttv_fh *fh = f;
        struct bttv *btv = fh->btv;
 
@@ -1547,6 +1555,16 @@ static int bttv_s_ctrl(struct file *file, void *f,
        case V4L2_CID_SATURATION:
                bt848_sat(btv, c->value);
                break;
+       case V4L2_CID_COLOR_KILLER:
+               btv->opt_color_killer = c->value;
+               if (btv->opt_color_killer) {
+                       btor(BT848_SCLOOP_CKILL, BT848_E_SCLOOP);
+                       btor(BT848_SCLOOP_CKILL, BT848_O_SCLOOP);
+               } else {
+                       btand(~BT848_SCLOOP_CKILL, BT848_E_SCLOOP);
+                       btand(~BT848_SCLOOP_CKILL, BT848_O_SCLOOP);
+               }
+               break;
        case V4L2_CID_AUDIO_MUTE:
                audio_mute(btv, c->value);
                /* fall through */
@@ -1564,9 +1582,13 @@ static int bttv_s_ctrl(struct file *file, void *f,
 
        case V4L2_CID_PRIVATE_CHROMA_AGC:
                btv->opt_chroma_agc = c->value;
-               val = btv->opt_chroma_agc ? BT848_SCLOOP_CAGC : 0;
-               btwrite(val, BT848_E_SCLOOP);
-               btwrite(val, BT848_O_SCLOOP);
+               if (btv->opt_chroma_agc) {
+                       btor(BT848_SCLOOP_CAGC, BT848_E_SCLOOP);
+                       btor(BT848_SCLOOP_CAGC, BT848_O_SCLOOP);
+               } else {
+                       btand(~BT848_SCLOOP_CAGC, BT848_E_SCLOOP);
+                       btand(~BT848_SCLOOP_CAGC, BT848_O_SCLOOP);
+               }
                break;
        case V4L2_CID_PRIVATE_COMBFILTER:
                btv->opt_combfilter = c->value;
index 70fd4f23f605aa8374799239ca71ca18219bf9d2..9ec0adba236c5bf559fecfeab02f8ab7bd394c0c 100644 (file)
@@ -429,6 +429,7 @@ struct bttv {
        int opt_lumafilter;
        int opt_automute;
        int opt_chroma_agc;
+       int opt_color_killer;
        int opt_adc_crush;
        int opt_vcr_hack;
        int opt_whitecrush_upper;