[media] af9033: implement PID filter
Implement PID filter and export it via symbol. Signed-off-by: Antti Palosaari <crope@iki.fi> Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
This commit is contained in:
parent
02b7220017
commit
040cf86c8a
@ -989,6 +989,59 @@ static int af9033_i2c_gate_ctrl(struct dvb_frontend *fe, int enable)
|
|||||||
return ret;
|
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;
|
static struct dvb_frontend_ops af9033_ops;
|
||||||
|
|
||||||
struct dvb_frontend *af9033_attach(const struct af9033_config *config,
|
struct dvb_frontend *af9033_attach(const struct af9033_config *config,
|
||||||
|
@ -81,6 +81,11 @@ struct af9033_config {
|
|||||||
#if IS_ENABLED(CONFIG_DVB_AF9033)
|
#if IS_ENABLED(CONFIG_DVB_AF9033)
|
||||||
extern struct dvb_frontend *af9033_attach(const struct af9033_config *config,
|
extern struct dvb_frontend *af9033_attach(const struct af9033_config *config,
|
||||||
struct i2c_adapter *i2c);
|
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
|
#else
|
||||||
static inline struct dvb_frontend *af9033_attach(
|
static inline struct dvb_frontend *af9033_attach(
|
||||||
const struct af9033_config *config, struct i2c_adapter *i2c)
|
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__);
|
pr_warn("%s: driver disabled by Kconfig\n", __func__);
|
||||||
return NULL;
|
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
|
||||||
|
|
||||||
#endif /* AF9033_H */
|
#endif /* AF9033_H */
|
||||||
|
Loading…
Reference in New Issue
Block a user