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

Commit ea8f3c2c authored by Mauro Carvalho Chehab's avatar Mauro Carvalho Chehab
Browse files

[media] drx-j: Allow userspace control of LNA



Instead of just disabling the LNA every time, allow to control it from
userspace.

Acked-by: default avatarDevin Heitmueller <dheitmueller@kernellabs.com>
Signed-off-by: default avatarMauro Carvalho Chehab <m.chehab@samsung.com>
parent 244c0e06
Loading
Loading
Loading
Loading
+41 −0
Original line number Diff line number Diff line
@@ -20683,6 +20683,46 @@ static int drx39xxj_init(struct dvb_frontend *fe)
	return 0;
}
static int drx39xxj_set_lna(struct dvb_frontend *fe)
{
	int result;
	struct dtv_frontend_properties *c = &fe->dtv_property_cache;
	struct drx39xxj_state *state = fe->demodulator_priv;
	struct drx_demod_instance *demod = state->demod;
	struct drxj_data *ext_attr = demod->my_ext_attr;
	struct drxuio_cfg uio_cfg;
	struct drxuio_data uio_data;
	if (c->lna) {
		if (!ext_attr->has_lna) {
			pr_err("LNA is not supported on this device!\n");
			return -EINVAL;
		}
	}
	/* Turn off the LNA */
	uio_cfg.uio = DRX_UIO1;
	uio_cfg.mode = DRX_UIO_MODE_READWRITE;
	/* Configure user-I/O #3: enable read/write */
	result = ctrl_set_uio_cfg(demod, &uio_cfg);
	if (result) {
		pr_err("Failed to setup LNA GPIO!\n");
		return result;
	}
	uio_data.uio = DRX_UIO1;
	uio_data.value = c->lna;
	result = ctrl_uio_write(demod, &uio_data);
	if (result != 0) {
		pr_err("Failed to %sable LNA!\n",
		       c->lna ? "en" : "dis");
		return result;
	}
	return 0;
}
static int drx39xxj_get_tune_settings(struct dvb_frontend *fe,
				      struct dvb_frontend_tune_settings *tune)
{
@@ -20824,6 +20864,7 @@ static struct dvb_frontend_ops drx39xxj_ops = {
	.read_snr = drx39xxj_read_snr,
	.read_ucblocks = drx39xxj_read_ucblocks,
	.release = drx39xxj_release,
	.set_lna = drx39xxj_set_lna,
};
MODULE_DESCRIPTION("Micronas DRX39xxj Frontend");