dvb-usb-cxusb: Geniatech T230 - resync TS FIFO after lock
Subsystems (2)
PATCH 1/1 dvb-usb-cxusb: Geniatech T230 - resync TS FIFO after lock
This patch fix streaming issue for Geniatech T230/PT360.
Signed-off-by CrazyCat <[email protected]>
--- drivers/media/usb/dvb-usb/cxusb.c | 26 ++++++++++++++++++++++++++ drivers/media/usb/dvb-usb/cxusb.h | 5 +++++ 2 files changed, 31 insertions(+)
drivers/media/usb/dvb-usb/cxusb.c +26 -0
@@ -368,6 +368,26 @@ static int cxusb_aver_streaming_ctrl(struct dvb_usb_adapter *adap, int onoff)return 0 ; } +static int cxusb_read_status (struct dvb_frontend *fe, +enum fe_status *status) +{ +struct dvb_usb_adapter *adap = (struct dvb_usb_adapter *)fe->dvb->priv; +struct cxusb_state *state = (struct cxusb_state *)adap->dev->priv; +int ret; + + ret = state->fe_read_status (fe, status); + +/* it need resync slave fifo when signal change from unlock to lock.*/ +if ((*status &FE_HAS_LOCK ) && (!state->last_lock)) { +mutex_lock (&state->stream_mutex); +cxusb_streaming_ctrl (adap,1 ); +mutex_unlock (&state->stream_mutex); + } + + state->last_lock = (*status &FE_HAS_LOCK ) ?1 :0 ; +return ret; +} +static void cxusb_d680_dmb_drain_message (struct dvb_usb_device *d) {int ep = d->props.generic_bulk_ctrl_endpoint;
@@ -1370,6 +1390,12 @@ static int cxusb_mygica_t230_frontend_attach(struct dvb_usb_adapter *adap) st->i2c_client_demod = client_demod; st->i2c_client_tuner = client_tuner; +/* hook fe: need to resync the slave fifo when signal locks. */ +mutex_init (&st->stream_mutex); + st->last_lock =0 ; + st->fe_read_status = adap->fe_adap[0 ].fe->ops.read_status; + adap->fe_adap[0 ].fe->ops.read_status = cxusb_read_status; +return 0 ; }
drivers/media/usb/dvb-usb/cxusb.h +5 -0
@@ -32,6 +32,11 @@ struct cxusb_state {u8 gpio_write_state[3 ];struct i2c_client *i2c_client_demod;struct i2c_client *i2c_client_tuner; + +struct mutex stream_mutex; +u8 last_lock; +int (*fe_read_status)(struct dvb_frontend *fe, + enum fe_status *status); };#endif
Signature · 1 line
1.9.1