Lines Matching refs:adap

21 static int pvr2_dvb_feed_func(struct pvr2_dvb_adapter *adap)  in pvr2_dvb_feed_func()  argument
31 stream = adap->channel.stream->stream; in pvr2_dvb_feed_func()
44 &adap->demux, in pvr2_dvb_feed_func()
45 adap->buffer_storage[ in pvr2_dvb_feed_func()
66 adap->buffer_wait_data, in pvr2_dvb_feed_func()
91 static void pvr2_dvb_notify(struct pvr2_dvb_adapter *adap) in pvr2_dvb_notify() argument
93 wake_up(&adap->buffer_wait_data); in pvr2_dvb_notify()
96 static void pvr2_dvb_stream_end(struct pvr2_dvb_adapter *adap) in pvr2_dvb_stream_end() argument
101 if (adap->thread) { in pvr2_dvb_stream_end()
102 kthread_stop(adap->thread); in pvr2_dvb_stream_end()
103 adap->thread = NULL; in pvr2_dvb_stream_end()
106 if (adap->channel.stream) { in pvr2_dvb_stream_end()
107 stream = adap->channel.stream->stream; in pvr2_dvb_stream_end()
112 pvr2_hdw_set_streaming(adap->channel.hdw, 0); in pvr2_dvb_stream_end()
116 pvr2_channel_claim_stream(&adap->channel, NULL); in pvr2_dvb_stream_end()
119 if (adap->stream_run) { in pvr2_dvb_stream_end()
121 if (!(adap->buffer_storage[idx])) continue; in pvr2_dvb_stream_end()
122 kfree(adap->buffer_storage[idx]); in pvr2_dvb_stream_end()
123 adap->buffer_storage[idx] = NULL; in pvr2_dvb_stream_end()
125 adap->stream_run = 0; in pvr2_dvb_stream_end()
129 static int pvr2_dvb_stream_do_start(struct pvr2_dvb_adapter *adap) in pvr2_dvb_stream_do_start() argument
131 struct pvr2_context *pvr = adap->channel.mc_head; in pvr2_dvb_stream_do_start()
137 if (adap->stream_run) return -EIO; in pvr2_dvb_stream_do_start()
139 ret = pvr2_channel_claim_stream(&adap->channel, &pvr->video_stream); in pvr2_dvb_stream_do_start()
143 stream = adap->channel.stream->stream; in pvr2_dvb_stream_do_start()
146 adap->buffer_storage[idx] = kmalloc(PVR2_DVB_BUFFER_SIZE, in pvr2_dvb_stream_do_start()
148 if (!(adap->buffer_storage[idx])) return -ENOMEM; in pvr2_dvb_stream_do_start()
152 (pvr2_stream_callback) pvr2_dvb_notify, adap); in pvr2_dvb_stream_do_start()
160 adap->buffer_storage[idx], in pvr2_dvb_stream_do_start()
164 ret = pvr2_hdw_set_streaming(adap->channel.hdw, 1); in pvr2_dvb_stream_do_start()
172 adap->thread = kthread_run(pvr2_dvb_feed_thread, adap, "pvrusb2-dvb"); in pvr2_dvb_stream_do_start()
174 if (IS_ERR(adap->thread)) { in pvr2_dvb_stream_do_start()
175 ret = PTR_ERR(adap->thread); in pvr2_dvb_stream_do_start()
176 adap->thread = NULL; in pvr2_dvb_stream_do_start()
180 adap->stream_run = !0; in pvr2_dvb_stream_do_start()
185 static int pvr2_dvb_stream_start(struct pvr2_dvb_adapter *adap) in pvr2_dvb_stream_start() argument
187 int ret = pvr2_dvb_stream_do_start(adap); in pvr2_dvb_stream_start()
188 if (ret < 0) pvr2_dvb_stream_end(adap); in pvr2_dvb_stream_start()
194 struct pvr2_dvb_adapter *adap = dvbdmxfeed->demux->priv; in pvr2_dvb_ctrl_feed() local
197 if (adap == NULL) return -ENODEV; in pvr2_dvb_ctrl_feed()
199 mutex_lock(&adap->lock); in pvr2_dvb_ctrl_feed()
202 if (!adap->feedcount) { in pvr2_dvb_ctrl_feed()
205 ret = pvr2_dvb_stream_start(adap); in pvr2_dvb_ctrl_feed()
208 (adap->feedcount)++; in pvr2_dvb_ctrl_feed()
209 } else if (adap->feedcount > 0) { in pvr2_dvb_ctrl_feed()
210 (adap->feedcount)--; in pvr2_dvb_ctrl_feed()
211 if (!adap->feedcount) { in pvr2_dvb_ctrl_feed()
214 pvr2_dvb_stream_end(adap); in pvr2_dvb_ctrl_feed()
218 mutex_unlock(&adap->lock); in pvr2_dvb_ctrl_feed()
237 struct pvr2_dvb_adapter *adap = fe->dvb->priv; in pvr2_dvb_bus_ctrl() local
239 &adap->channel, in pvr2_dvb_bus_ctrl()
243 static int pvr2_dvb_adapter_init(struct pvr2_dvb_adapter *adap) in pvr2_dvb_adapter_init() argument
247 ret = dvb_register_adapter(&adap->dvb_adap, "pvrusb2-dvb", in pvr2_dvb_adapter_init()
249 &adap->channel.hdw->usb_dev->dev, in pvr2_dvb_adapter_init()
256 adap->dvb_adap.priv = adap; in pvr2_dvb_adapter_init()
258 adap->demux.dmx.capabilities = DMX_TS_FILTERING | in pvr2_dvb_adapter_init()
261 adap->demux.priv = adap; in pvr2_dvb_adapter_init()
262 adap->demux.filternum = 256; in pvr2_dvb_adapter_init()
263 adap->demux.feednum = 256; in pvr2_dvb_adapter_init()
264 adap->demux.start_feed = pvr2_dvb_start_feed; in pvr2_dvb_adapter_init()
265 adap->demux.stop_feed = pvr2_dvb_stop_feed; in pvr2_dvb_adapter_init()
266 adap->demux.write_to_decoder = NULL; in pvr2_dvb_adapter_init()
268 ret = dvb_dmx_init(&adap->demux); in pvr2_dvb_adapter_init()
275 adap->dmxdev.filternum = adap->demux.filternum; in pvr2_dvb_adapter_init()
276 adap->dmxdev.demux = &adap->demux.dmx; in pvr2_dvb_adapter_init()
277 adap->dmxdev.capabilities = 0; in pvr2_dvb_adapter_init()
279 ret = dvb_dmxdev_init(&adap->dmxdev, &adap->dvb_adap); in pvr2_dvb_adapter_init()
286 dvb_net_init(&adap->dvb_adap, &adap->dvb_net, &adap->demux.dmx); in pvr2_dvb_adapter_init()
291 dvb_dmx_release(&adap->demux); in pvr2_dvb_adapter_init()
293 dvb_unregister_adapter(&adap->dvb_adap); in pvr2_dvb_adapter_init()
298 static int pvr2_dvb_adapter_exit(struct pvr2_dvb_adapter *adap) in pvr2_dvb_adapter_exit() argument
301 dvb_net_release(&adap->dvb_net); in pvr2_dvb_adapter_exit()
302 adap->demux.dmx.close(&adap->demux.dmx); in pvr2_dvb_adapter_exit()
303 dvb_dmxdev_release(&adap->dmxdev); in pvr2_dvb_adapter_exit()
304 dvb_dmx_release(&adap->demux); in pvr2_dvb_adapter_exit()
305 dvb_unregister_adapter(&adap->dvb_adap); in pvr2_dvb_adapter_exit()
309 static int pvr2_dvb_frontend_init(struct pvr2_dvb_adapter *adap) in pvr2_dvb_frontend_init() argument
311 struct pvr2_hdw *hdw = adap->channel.hdw; in pvr2_dvb_frontend_init()
321 &adap->channel, in pvr2_dvb_frontend_init()
337 if (dvb_props->frontend_attach(adap) == 0 && adap->fe[0]) { in pvr2_dvb_frontend_init()
338 if (dvb_register_frontend(&adap->dvb_adap, adap->fe[0])) { in pvr2_dvb_frontend_init()
344 if (adap->fe[0]->ops.analog_ops.standby) in pvr2_dvb_frontend_init()
345 adap->fe[0]->ops.analog_ops.standby(adap->fe[0]); in pvr2_dvb_frontend_init()
348 adap->fe[0]->id); in pvr2_dvb_frontend_init()
349 adap->fe[0]->ops.ts_bus_ctrl = pvr2_dvb_bus_ctrl; in pvr2_dvb_frontend_init()
357 if (dvb_props->tuner_attach && dvb_props->tuner_attach(adap)) { in pvr2_dvb_frontend_init()
363 if (adap->fe[1]) { in pvr2_dvb_frontend_init()
364 adap->fe[1]->id = 1; in pvr2_dvb_frontend_init()
365 adap->fe[1]->tuner_priv = adap->fe[0]->tuner_priv; in pvr2_dvb_frontend_init()
366 memcpy(&adap->fe[1]->ops.tuner_ops, in pvr2_dvb_frontend_init()
367 &adap->fe[0]->ops.tuner_ops, in pvr2_dvb_frontend_init()
370 if (dvb_register_frontend(&adap->dvb_adap, adap->fe[1])) { in pvr2_dvb_frontend_init()
377 adap->dvb_adap.mfe_shared = 1; in pvr2_dvb_frontend_init()
379 if (adap->fe[1]->ops.analog_ops.standby) in pvr2_dvb_frontend_init()
380 adap->fe[1]->ops.analog_ops.standby(adap->fe[1]); in pvr2_dvb_frontend_init()
383 adap->fe[1]->id); in pvr2_dvb_frontend_init()
384 adap->fe[1]->ops.ts_bus_ctrl = pvr2_dvb_bus_ctrl; in pvr2_dvb_frontend_init()
387 pvr2_channel_limit_inputs(&adap->channel, 0); in pvr2_dvb_frontend_init()
391 dvb_frontend_detach(adap->fe[1]); in pvr2_dvb_frontend_init()
392 adap->fe[1] = NULL; in pvr2_dvb_frontend_init()
394 dvb_unregister_frontend(adap->fe[0]); in pvr2_dvb_frontend_init()
396 dvb_frontend_detach(adap->fe[0]); in pvr2_dvb_frontend_init()
397 adap->fe[0] = NULL; in pvr2_dvb_frontend_init()
398 dvb_module_release(adap->i2c_client_tuner); in pvr2_dvb_frontend_init()
399 dvb_module_release(adap->i2c_client_demod[1]); in pvr2_dvb_frontend_init()
400 dvb_module_release(adap->i2c_client_demod[0]); in pvr2_dvb_frontend_init()
405 static int pvr2_dvb_frontend_exit(struct pvr2_dvb_adapter *adap) in pvr2_dvb_frontend_exit() argument
407 if (adap->fe[1]) { in pvr2_dvb_frontend_exit()
408 dvb_unregister_frontend(adap->fe[1]); in pvr2_dvb_frontend_exit()
409 dvb_frontend_detach(adap->fe[1]); in pvr2_dvb_frontend_exit()
410 adap->fe[1] = NULL; in pvr2_dvb_frontend_exit()
412 if (adap->fe[0]) { in pvr2_dvb_frontend_exit()
413 dvb_unregister_frontend(adap->fe[0]); in pvr2_dvb_frontend_exit()
414 dvb_frontend_detach(adap->fe[0]); in pvr2_dvb_frontend_exit()
415 adap->fe[0] = NULL; in pvr2_dvb_frontend_exit()
418 dvb_module_release(adap->i2c_client_tuner); in pvr2_dvb_frontend_exit()
419 adap->i2c_client_tuner = NULL; in pvr2_dvb_frontend_exit()
420 dvb_module_release(adap->i2c_client_demod[1]); in pvr2_dvb_frontend_exit()
421 adap->i2c_client_demod[1] = NULL; in pvr2_dvb_frontend_exit()
422 dvb_module_release(adap->i2c_client_demod[0]); in pvr2_dvb_frontend_exit()
423 adap->i2c_client_demod[0] = NULL; in pvr2_dvb_frontend_exit()
428 static void pvr2_dvb_destroy(struct pvr2_dvb_adapter *adap) in pvr2_dvb_destroy() argument
430 pvr2_dvb_stream_end(adap); in pvr2_dvb_destroy()
431 pvr2_dvb_frontend_exit(adap); in pvr2_dvb_destroy()
432 pvr2_dvb_adapter_exit(adap); in pvr2_dvb_destroy()
433 pvr2_channel_done(&adap->channel); in pvr2_dvb_destroy()
434 kfree(adap); in pvr2_dvb_destroy()
439 struct pvr2_dvb_adapter *adap; in pvr2_dvb_internal_check() local
440 adap = container_of(chp, struct pvr2_dvb_adapter, channel); in pvr2_dvb_internal_check()
441 if (!adap->channel.mc_head->disconnect_flag) return; in pvr2_dvb_internal_check()
442 pvr2_dvb_destroy(adap); in pvr2_dvb_internal_check()
448 struct pvr2_dvb_adapter *adap; in pvr2_dvb_create() local
454 adap = kzalloc(sizeof(*adap), GFP_KERNEL); in pvr2_dvb_create()
455 if (!adap) return adap; in pvr2_dvb_create()
456 pvr2_channel_init(&adap->channel, pvr); in pvr2_dvb_create()
457 adap->channel.check_func = pvr2_dvb_internal_check; in pvr2_dvb_create()
458 init_waitqueue_head(&adap->buffer_wait_data); in pvr2_dvb_create()
459 mutex_init(&adap->lock); in pvr2_dvb_create()
460 ret = pvr2_dvb_adapter_init(adap); in pvr2_dvb_create()
462 ret = pvr2_dvb_frontend_init(adap); in pvr2_dvb_create()
464 return adap; in pvr2_dvb_create()
467 pvr2_dvb_adapter_exit(adap); in pvr2_dvb_create()
469 pvr2_channel_done(&adap->channel); in pvr2_dvb_create()