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

Commit 040cf86c authored by Antti Palosaari's avatar Antti Palosaari Committed by Mauro Carvalho Chehab
Browse files

[media] af9033: implement PID filter



Implement PID filter and export it via symbol.

Signed-off-by: default avatarAntti Palosaari <crope@iki.fi>
Signed-off-by: default avatarMauro Carvalho Chehab <m.chehab@samsung.com>
parent 02b72200
Loading
Loading
Loading
Loading
+53 −0
Original line number Diff line number Diff line
@@ -989,6 +989,59 @@ err:
	return ret;
}

int af9033_pid_filter_ctrl(struct dvb_frontend *fe, int onoff)
{
	struct af9033_state *state = fe->demodulator_priv;
	int ret;

	dev_dbg(&state->i2c->dev, "%s: onoff=%d\n", __func__, onoff);

	ret = af9033_wr_reg_mask(state, 0x80f993, onoff, 0x01);
	if (ret < 0)
		goto err;

	return 0;

err:
	dev_dbg(&state->i2c->dev, "%s: failed=%d\n", __func__, ret);

	return ret;
}
EXPORT_SYMBOL(af9033_pid_filter_ctrl);

int af9033_pid_filter(struct dvb_frontend *fe, int index, u16 pid, int onoff)
{
	struct af9033_state *state = fe->demodulator_priv;
	int ret;
	u8 wbuf[2] = {(pid >> 0) & 0xff, (pid >> 8) & 0xff};

	dev_dbg(&state->i2c->dev, "%s: index=%d pid=%04x onoff=%d\n",
			__func__, index, pid, onoff);

	if (pid > 0x1fff)
		return 0;

	ret = af9033_wr_regs(state, 0x80f996, wbuf, 2);
	if (ret < 0)
		goto err;

	ret = af9033_wr_reg(state, 0x80f994, onoff);
	if (ret < 0)
		goto err;

	ret = af9033_wr_reg(state, 0x80f995, index);
	if (ret < 0)
		goto err;

	return 0;

err:
	dev_dbg(&state->i2c->dev, "%s: failed=%d\n", __func__, ret);

	return ret;
}
EXPORT_SYMBOL(af9033_pid_filter);

static struct dvb_frontend_ops af9033_ops;

struct dvb_frontend *af9033_attach(const struct af9033_config *config,
+19 −0
Original line number Diff line number Diff line
@@ -81,6 +81,11 @@ struct af9033_config {
#if IS_ENABLED(CONFIG_DVB_AF9033)
extern struct dvb_frontend *af9033_attach(const struct af9033_config *config,
	struct i2c_adapter *i2c);

extern int af9033_pid_filter_ctrl(struct dvb_frontend *fe, int onoff);

extern int af9033_pid_filter(struct dvb_frontend *fe, int index, u16 pid,
	int onoff);
#else
static inline struct dvb_frontend *af9033_attach(
	const struct af9033_config *config, struct i2c_adapter *i2c)
@@ -88,6 +93,20 @@ static inline struct dvb_frontend *af9033_attach(
	pr_warn("%s: driver disabled by Kconfig\n", __func__);
	return NULL;
}

static inline int af9033_pid_filter_ctrl(struct dvb_frontend *fe, int onoff)
{
	pr_warn("%s: driver disabled by Kconfig\n", __func__);
	return -ENODEV;
}

static inline int af9033_pid_filter(struct dvb_frontend *fe, int index, u16 pid,
	int onoff)
{
	pr_warn("%s: driver disabled by Kconfig\n", __func__);
	return -ENODEV;
}

#endif

#endif /* AF9033_H */