Lines Matching refs:dvb
139 static bool vidtv_bridge_check_demod_lock(struct vidtv_dvb *dvb, u32 n) in vidtv_bridge_check_demod_lock() argument
143 dvb->fe[n]->ops.read_status(dvb->fe[n], &status); in vidtv_bridge_check_demod_lock()
157 struct vidtv_dvb *dvb = priv; in vidtv_bridge_on_new_pkts_avail() local
160 if (vidtv_bridge_check_demod_lock(dvb, 0)) in vidtv_bridge_on_new_pkts_avail()
161 dvb_dmx_swfilter_packets(&dvb->demux, buf, npkts); in vidtv_bridge_on_new_pkts_avail()
164 static int vidtv_start_streaming(struct vidtv_dvb *dvb) in vidtv_start_streaming() argument
175 .priv = dvb, in vidtv_start_streaming()
177 struct device *dev = &dvb->pdev->dev; in vidtv_start_streaming()
180 if (dvb->streaming) { in vidtv_start_streaming()
192 dvb->streaming = true; in vidtv_start_streaming()
193 dvb->mux = vidtv_mux_init(dvb->fe[0], dev, &mux_args); in vidtv_start_streaming()
194 if (!dvb->mux) in vidtv_start_streaming()
196 vidtv_mux_start_thread(dvb->mux); in vidtv_start_streaming()
202 static int vidtv_stop_streaming(struct vidtv_dvb *dvb) in vidtv_stop_streaming() argument
204 struct device *dev = &dvb->pdev->dev; in vidtv_stop_streaming()
206 dvb->streaming = false; in vidtv_stop_streaming()
207 vidtv_mux_stop_thread(dvb->mux); in vidtv_stop_streaming()
208 vidtv_mux_destroy(dvb->mux); in vidtv_stop_streaming()
209 dvb->mux = NULL; in vidtv_stop_streaming()
218 struct vidtv_dvb *dvb = demux->priv; in vidtv_start_feed() local
225 mutex_lock(&dvb->feed_lock); in vidtv_start_feed()
227 dvb->nfeeds++; in vidtv_start_feed()
228 rc = dvb->nfeeds; in vidtv_start_feed()
230 if (dvb->nfeeds == 1) { in vidtv_start_feed()
231 ret = vidtv_start_streaming(dvb); in vidtv_start_feed()
236 mutex_unlock(&dvb->feed_lock); in vidtv_start_feed()
243 struct vidtv_dvb *dvb = demux->priv; in vidtv_stop_feed() local
246 mutex_lock(&dvb->feed_lock); in vidtv_stop_feed()
247 dvb->nfeeds--; in vidtv_stop_feed()
249 if (!dvb->nfeeds) in vidtv_stop_feed()
250 err = vidtv_stop_streaming(dvb); in vidtv_stop_feed()
252 mutex_unlock(&dvb->feed_lock); in vidtv_stop_feed()
286 static int vidtv_bridge_i2c_register_adap(struct vidtv_dvb *dvb) in vidtv_bridge_i2c_register_adap() argument
288 struct i2c_adapter *i2c_adapter = &dvb->i2c_adapter; in vidtv_bridge_i2c_register_adap()
296 i2c_adapter->dev.parent = &dvb->pdev->dev; in vidtv_bridge_i2c_register_adap()
298 i2c_set_adapdata(i2c_adapter, dvb); in vidtv_bridge_i2c_register_adap()
299 return i2c_add_adapter(&dvb->i2c_adapter); in vidtv_bridge_i2c_register_adap()
302 static int vidtv_bridge_register_adap(struct vidtv_dvb *dvb) in vidtv_bridge_register_adap() argument
306 ret = dvb_register_adapter(&dvb->adapter, in vidtv_bridge_register_adap()
309 &dvb->i2c_adapter.dev, in vidtv_bridge_register_adap()
315 static int vidtv_bridge_dmx_init(struct vidtv_dvb *dvb) in vidtv_bridge_dmx_init() argument
317 dvb->demux.dmx.capabilities = DMX_TS_FILTERING | in vidtv_bridge_dmx_init()
320 dvb->demux.priv = dvb; in vidtv_bridge_dmx_init()
321 dvb->demux.filternum = 256; in vidtv_bridge_dmx_init()
322 dvb->demux.feednum = 256; in vidtv_bridge_dmx_init()
323 dvb->demux.start_feed = vidtv_start_feed; in vidtv_bridge_dmx_init()
324 dvb->demux.stop_feed = vidtv_stop_feed; in vidtv_bridge_dmx_init()
326 return dvb_dmx_init(&dvb->demux); in vidtv_bridge_dmx_init()
329 static int vidtv_bridge_dmxdev_init(struct vidtv_dvb *dvb) in vidtv_bridge_dmxdev_init() argument
331 dvb->dmx_dev.filternum = 256; in vidtv_bridge_dmxdev_init()
332 dvb->dmx_dev.demux = &dvb->demux.dmx; in vidtv_bridge_dmxdev_init()
333 dvb->dmx_dev.capabilities = 0; in vidtv_bridge_dmxdev_init()
335 return dvb_dmxdev_init(&dvb->dmx_dev, &dvb->adapter); in vidtv_bridge_dmxdev_init()
338 static int vidtv_bridge_probe_demod(struct vidtv_dvb *dvb, u32 n) in vidtv_bridge_probe_demod() argument
344 dvb->i2c_client_demod[n] = dvb_module_probe("dvb_vidtv_demod", in vidtv_bridge_probe_demod()
346 &dvb->i2c_adapter, in vidtv_bridge_probe_demod()
351 if (!dvb->i2c_client_demod[n]) in vidtv_bridge_probe_demod()
355 dvb->fe[n] = vidtv_get_frontend_ptr(dvb->i2c_client_demod[n]); in vidtv_bridge_probe_demod()
360 static int vidtv_bridge_probe_tuner(struct vidtv_dvb *dvb, u32 n) in vidtv_bridge_probe_tuner() argument
363 .fe = dvb->fe[n], in vidtv_bridge_probe_tuner()
397 dvb->i2c_client_tuner[n] = dvb_module_probe("dvb_vidtv_tuner", in vidtv_bridge_probe_tuner()
399 &dvb->i2c_adapter, in vidtv_bridge_probe_tuner()
403 return (dvb->i2c_client_tuner[n]) ? 0 : -ENODEV; in vidtv_bridge_probe_tuner()
406 static int vidtv_bridge_dvb_init(struct vidtv_dvb *dvb) in vidtv_bridge_dvb_init() argument
410 ret = vidtv_bridge_i2c_register_adap(dvb); in vidtv_bridge_dvb_init()
414 ret = vidtv_bridge_register_adap(dvb); in vidtv_bridge_dvb_init()
419 ret = vidtv_bridge_probe_demod(dvb, i); in vidtv_bridge_dvb_init()
423 ret = vidtv_bridge_probe_tuner(dvb, i); in vidtv_bridge_dvb_init()
427 ret = dvb_register_frontend(&dvb->adapter, dvb->fe[i]); in vidtv_bridge_dvb_init()
432 ret = vidtv_bridge_dmx_init(dvb); in vidtv_bridge_dvb_init()
436 ret = vidtv_bridge_dmxdev_init(dvb); in vidtv_bridge_dvb_init()
441 ret = dvb->demux.dmx.connect_frontend(&dvb->demux.dmx, in vidtv_bridge_dvb_init()
442 &dvb->dmx_fe[j]); in vidtv_bridge_dvb_init()
450 dvb->dmx_fe[j].source = DMX_FRONTEND_0; in vidtv_bridge_dvb_init()
457 dvb->demux.dmx.remove_frontend(&dvb->demux.dmx, in vidtv_bridge_dvb_init()
458 &dvb->dmx_fe[j]); in vidtv_bridge_dvb_init()
460 dvb_dmxdev_release(&dvb->dmx_dev); in vidtv_bridge_dvb_init()
462 dvb_dmx_release(&dvb->demux); in vidtv_bridge_dvb_init()
465 dvb_unregister_frontend(dvb->fe[j]); in vidtv_bridge_dvb_init()
468 if (dvb->i2c_client_tuner[j]) in vidtv_bridge_dvb_init()
469 dvb_module_release(dvb->i2c_client_tuner[j]); in vidtv_bridge_dvb_init()
473 if (dvb->i2c_client_demod[j]) in vidtv_bridge_dvb_init()
474 dvb_module_release(dvb->i2c_client_demod[j]); in vidtv_bridge_dvb_init()
477 dvb_unregister_adapter(&dvb->adapter); in vidtv_bridge_dvb_init()
480 i2c_del_adapter(&dvb->i2c_adapter); in vidtv_bridge_dvb_init()
487 struct vidtv_dvb *dvb; in vidtv_bridge_probe() local
490 dvb = kzalloc(sizeof(*dvb), GFP_KERNEL); in vidtv_bridge_probe()
491 if (!dvb) in vidtv_bridge_probe()
494 dvb->pdev = pdev; in vidtv_bridge_probe()
496 ret = vidtv_bridge_dvb_init(dvb); in vidtv_bridge_probe()
500 mutex_init(&dvb->feed_lock); in vidtv_bridge_probe()
502 platform_set_drvdata(pdev, dvb); in vidtv_bridge_probe()
508 kfree(dvb); in vidtv_bridge_probe()
514 struct vidtv_dvb *dvb; in vidtv_bridge_remove() local
517 dvb = platform_get_drvdata(pdev); in vidtv_bridge_remove()
519 mutex_destroy(&dvb->feed_lock); in vidtv_bridge_remove()
522 dvb_unregister_frontend(dvb->fe[i]); in vidtv_bridge_remove()
523 dvb_module_release(dvb->i2c_client_tuner[i]); in vidtv_bridge_remove()
524 dvb_module_release(dvb->i2c_client_demod[i]); in vidtv_bridge_remove()
527 dvb_dmxdev_release(&dvb->dmx_dev); in vidtv_bridge_remove()
528 dvb_dmx_release(&dvb->demux); in vidtv_bridge_remove()
529 dvb_unregister_adapter(&dvb->adapter); in vidtv_bridge_remove()