diff --git a/drivers/media/test-drivers/vidtv/vidtv_bridge.c b/drivers/media/test-drivers/vidtv/vidtv_bridge.c index cb32f82f88f9..108e7937e9c1 100644 --- a/drivers/media/test-drivers/vidtv/vidtv_bridge.c +++ b/drivers/media/test-drivers/vidtv/vidtv_bridge.c @@ -172,7 +172,7 @@ static int vidtv_start_streaming(struct vidtv_dvb *dvb) mux_args.priv = dvb; dvb->streaming = true; - dvb->mux = vidtv_mux_init(dev, mux_args); + dvb->mux = vidtv_mux_init(dvb->fe[0], dev, mux_args); vidtv_mux_start_thread(dvb->mux); dev_dbg_ratelimited(dev, "Started streaming\n"); diff --git a/drivers/media/test-drivers/vidtv/vidtv_bridge.h b/drivers/media/test-drivers/vidtv/vidtv_bridge.h index fd65f9838b10..78fe8472fa37 100644 --- a/drivers/media/test-drivers/vidtv/vidtv_bridge.h +++ b/drivers/media/test-drivers/vidtv/vidtv_bridge.h @@ -12,6 +12,9 @@ #ifndef VIDTV_BRIDGE_H #define VIDTV_BRIDGE_H +/* + * For now, only one frontend is supported. See vidtv_start_streaming() + */ #define NUM_FE 1 #include diff --git a/drivers/media/test-drivers/vidtv/vidtv_mux.c b/drivers/media/test-drivers/vidtv/vidtv_mux.c index d1db9dc6dc89..5d1a275d504b 100644 --- a/drivers/media/test-drivers/vidtv/vidtv_mux.c +++ b/drivers/media/test-drivers/vidtv/vidtv_mux.c @@ -381,6 +381,7 @@ static void vidtv_mux_tick(struct work_struct *work) struct vidtv_mux *m = container_of(work, struct vidtv_mux, mpeg_thread); + struct dtv_frontend_properties *c = &m->fe->dtv_property_cache; u32 nbytes; u32 npkts; @@ -411,6 +412,17 @@ static void vidtv_mux_tick(struct work_struct *work) vidtv_mux_clear(m); + /* + * Update bytes and packet counts at DVBv5 stats + * + * For now, both pre and post bit counts are identical, + * but post BER count can be lower than pre BER, if the error + * correction logic discards packages. + */ + c->pre_bit_count.stat[0].uvalue = nbytes; + c->post_bit_count.stat[0].uvalue = nbytes; + c->block_count.stat[0].uvalue += npkts; + usleep_range(VIDTV_SLEEP_USECS, VIDTV_MAX_SLEEP_USECS); } } @@ -435,12 +447,14 @@ void vidtv_mux_stop_thread(struct vidtv_mux *m) } } -struct vidtv_mux *vidtv_mux_init(struct device *dev, +struct vidtv_mux *vidtv_mux_init(struct dvb_frontend *fe, + struct device *dev, struct vidtv_mux_init_args args) { struct vidtv_mux *m = kzalloc(sizeof(*m), GFP_KERNEL); m->dev = dev; + m->fe = fe; m->timing.pcr_period_usecs = args.pcr_period_usecs; m->timing.si_period_usecs = args.si_period_usecs; diff --git a/drivers/media/test-drivers/vidtv/vidtv_mux.h b/drivers/media/test-drivers/vidtv/vidtv_mux.h index 67de85fd50aa..2caa60623e97 100644 --- a/drivers/media/test-drivers/vidtv/vidtv_mux.h +++ b/drivers/media/test-drivers/vidtv/vidtv_mux.h @@ -18,6 +18,8 @@ #include #include #include +#include + #include "vidtv_psi.h" /** @@ -100,6 +102,7 @@ struct vidtv_mux_pid_ctx { * @priv: Private data. */ struct vidtv_mux { + struct dvb_frontend *fe; struct device *dev; struct vidtv_mux_timing timing; @@ -153,7 +156,8 @@ struct vidtv_mux_init_args { void *priv; }; -struct vidtv_mux *vidtv_mux_init(struct device *dev, +struct vidtv_mux *vidtv_mux_init(struct dvb_frontend *fe, + struct device *dev, struct vidtv_mux_init_args args); void vidtv_mux_destroy(struct vidtv_mux *m);