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

Commit eea16e36 authored by istvan_v@mailbox.hu's avatar istvan_v@mailbox.hu Committed by Mauro Carvalho Chehab
Browse files

[media] cx88: implemented sharpness control



This patch implements support for a sharpness control, using the luma
peaking filter feature of cx2388x.

[mchehab@redhat.com: use cx_andor instead of cx_write]
Signed-off-by: default avatarIstvan Varga <istvan_v@mailbox.hu>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent fef1c8d0
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -759,8 +759,8 @@ int cx88_set_scale(struct cx88_core *core, unsigned int width, unsigned int heig
	if (nocomb)
		value |= (3 << 5); // disable comb filter

	cx_write(MO_FILTER_EVEN,  value);
	cx_write(MO_FILTER_ODD,   value);
	cx_andor(MO_FILTER_EVEN,  0x7ffc7f, value); /* preserve PEAKEN, PSEL */
	cx_andor(MO_FILTER_ODD,   0x7ffc7f, value);
	dprintk(1,"set_scale: filter  0x%04x\n", value);

	return 0;
+28 −1
Original line number Diff line number Diff line
@@ -221,6 +221,22 @@ static const struct cx88_ctrl cx8800_ctls[] = {
		.reg                   = MO_UV_SATURATION,
		.mask                  = 0x00ff,
		.shift                 = 0,
	}, {
		.v = {
			.id            = V4L2_CID_SHARPNESS,
			.name          = "Sharpness",
			.minimum       = 0,
			.maximum       = 4,
			.step          = 1,
			.default_value = 0x0,
			.type          = V4L2_CTRL_TYPE_INTEGER,
		},
		.off                   = 0,
		/* NOTE: the value is converted and written to both even
		   and odd registers in the code */
		.reg                   = MO_FILTER_ODD,
		.mask                  = 7 << 7,
		.shift                 = 7,
	}, {
		.v = {
			.id            = V4L2_CID_CHROMA_AGC,
@@ -301,6 +317,7 @@ const u32 cx88_user_ctrls[] = {
	V4L2_CID_AUDIO_VOLUME,
	V4L2_CID_AUDIO_BALANCE,
	V4L2_CID_AUDIO_MUTE,
	V4L2_CID_SHARPNESS,
	V4L2_CID_CHROMA_AGC,
	V4L2_CID_COLOR_KILLER,
	0
@@ -963,6 +980,10 @@ int cx88_get_control (struct cx88_core *core, struct v4l2_control *ctl)
	case V4L2_CID_AUDIO_VOLUME:
		ctl->value = 0x3f - (value & 0x3f);
		break;
	case V4L2_CID_SHARPNESS:
		ctl->value = ((value & 0x0200) ? (((value & 0x0180) >> 7) + 1)
						 : 0);
		break;
	default:
		ctl->value = ((value + (c->off << c->shift)) & c->mask) >> c->shift;
		break;
@@ -1040,6 +1061,12 @@ int cx88_set_control(struct cx88_core *core, struct v4l2_control *ctl)
		}
		mask=0xffff;
		break;
	case V4L2_CID_SHARPNESS:
		/* 0b000, 0b100, 0b101, 0b110, or 0b111 */
		value = (ctl->value < 1 ? 0 : ((ctl->value + 3) << 7));
		/* needs to be set for both fields */
		cx_andor(MO_FILTER_EVEN, mask, value);
		break;
	case V4L2_CID_CHROMA_AGC:
		/* Do not allow chroma AGC to be enabled for SECAM */
		value = ((ctl->value - c->off) << c->shift) & c->mask;