Lines Matching refs:dvb

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