Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 34e59a7d authored by Guilherme Herrmann Destefani's avatar Guilherme Herrmann Destefani Committed by Mauro Carvalho Chehab
Browse files

[media] bt8xx: Add video4linux control V4L2_CID_COLOR_KILLER



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: default avatarGuilherme Herrmann Destefani <linuxtv@destefani.eng.br>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent 38a7996c
Loading
Loading
Loading
Loading
+26 −4
Original line number Diff line number Diff line
@@ -667,6 +667,12 @@ static const struct v4l2_queryctrl bttv_ctls[] = {
		.step          = 128,
		.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",
@@ -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;
+1 −0
Original line number Diff line number Diff line
@@ -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;