Lines Matching refs:fdtv
28 static int alloc_channel(struct firedtv *fdtv) in alloc_channel() argument
33 if (!__test_and_set_bit(i, &fdtv->channel_active)) in alloc_channel()
38 static void collect_channels(struct firedtv *fdtv, int *pidc, u16 pid[]) in collect_channels() argument
43 if (test_bit(i, &fdtv->channel_active)) in collect_channels()
44 pid[n++] = fdtv->channel_pid[i]; in collect_channels()
48 static inline void dealloc_channel(struct firedtv *fdtv, int i) in dealloc_channel() argument
50 __clear_bit(i, &fdtv->channel_active); in dealloc_channel()
55 struct firedtv *fdtv = dvbdmxfeed->demux->priv; in fdtv_start_feed() local
64 dev_err(fdtv->device, "can't start dmx feed: invalid type %u\n", in fdtv_start_feed()
69 if (mutex_lock_interruptible(&fdtv->demux_mutex)) in fdtv_start_feed()
79 c = alloc_channel(fdtv); in fdtv_start_feed()
82 dev_err(fdtv->device, in fdtv_start_feed()
89 c = alloc_channel(fdtv); in fdtv_start_feed()
93 dev_err(fdtv->device, "can't start dmx feed: busy\n"); in fdtv_start_feed()
99 fdtv->channel_pid[c] = dvbdmxfeed->pid; in fdtv_start_feed()
100 collect_channels(fdtv, &pidc, pids); in fdtv_start_feed()
103 ret = avc_tuner_get_ts(fdtv); in fdtv_start_feed()
105 dealloc_channel(fdtv, c); in fdtv_start_feed()
106 dev_err(fdtv->device, "can't get TS\n"); in fdtv_start_feed()
110 ret = avc_tuner_set_pids(fdtv, pidc, pids); in fdtv_start_feed()
112 dealloc_channel(fdtv, c); in fdtv_start_feed()
113 dev_err(fdtv->device, "can't set PIDs\n"); in fdtv_start_feed()
118 mutex_unlock(&fdtv->demux_mutex); in fdtv_start_feed()
126 struct firedtv *fdtv = demux->priv; in fdtv_stop_feed() local
148 if (mutex_lock_interruptible(&fdtv->demux_mutex)) in fdtv_stop_feed()
152 dealloc_channel(fdtv, c); in fdtv_stop_feed()
153 collect_channels(fdtv, &pidc, pids); in fdtv_stop_feed()
155 ret = avc_tuner_set_pids(fdtv, pidc, pids); in fdtv_stop_feed()
157 mutex_unlock(&fdtv->demux_mutex); in fdtv_stop_feed()
164 int fdtv_dvb_register(struct firedtv *fdtv, const char *name) in fdtv_dvb_register() argument
168 err = dvb_register_adapter(&fdtv->adapter, name, in fdtv_dvb_register()
169 THIS_MODULE, fdtv->device, adapter_nr); in fdtv_dvb_register()
174 fdtv->demux.dmx.capabilities = 0; in fdtv_dvb_register()
176 fdtv->demux.priv = fdtv; in fdtv_dvb_register()
177 fdtv->demux.filternum = 16; in fdtv_dvb_register()
178 fdtv->demux.feednum = 16; in fdtv_dvb_register()
179 fdtv->demux.start_feed = fdtv_start_feed; in fdtv_dvb_register()
180 fdtv->demux.stop_feed = fdtv_stop_feed; in fdtv_dvb_register()
181 fdtv->demux.write_to_decoder = NULL; in fdtv_dvb_register()
183 err = dvb_dmx_init(&fdtv->demux); in fdtv_dvb_register()
187 fdtv->dmxdev.filternum = 16; in fdtv_dvb_register()
188 fdtv->dmxdev.demux = &fdtv->demux.dmx; in fdtv_dvb_register()
189 fdtv->dmxdev.capabilities = 0; in fdtv_dvb_register()
191 err = dvb_dmxdev_init(&fdtv->dmxdev, &fdtv->adapter); in fdtv_dvb_register()
195 fdtv->frontend.source = DMX_FRONTEND_0; in fdtv_dvb_register()
197 err = fdtv->demux.dmx.add_frontend(&fdtv->demux.dmx, &fdtv->frontend); in fdtv_dvb_register()
201 err = fdtv->demux.dmx.connect_frontend(&fdtv->demux.dmx, in fdtv_dvb_register()
202 &fdtv->frontend); in fdtv_dvb_register()
206 err = dvb_net_init(&fdtv->adapter, &fdtv->dvbnet, &fdtv->demux.dmx); in fdtv_dvb_register()
210 fdtv_frontend_init(fdtv, name); in fdtv_dvb_register()
211 err = dvb_register_frontend(&fdtv->adapter, &fdtv->fe); in fdtv_dvb_register()
215 err = fdtv_ca_register(fdtv); in fdtv_dvb_register()
217 dev_info(fdtv->device, in fdtv_dvb_register()
222 dvb_net_release(&fdtv->dvbnet); in fdtv_dvb_register()
224 fdtv->demux.dmx.close(&fdtv->demux.dmx); in fdtv_dvb_register()
226 fdtv->demux.dmx.remove_frontend(&fdtv->demux.dmx, &fdtv->frontend); in fdtv_dvb_register()
228 dvb_dmxdev_release(&fdtv->dmxdev); in fdtv_dvb_register()
230 dvb_dmx_release(&fdtv->demux); in fdtv_dvb_register()
232 dvb_unregister_adapter(&fdtv->adapter); in fdtv_dvb_register()
234 dev_err(fdtv->device, "DVB initialization failed\n"); in fdtv_dvb_register()
238 void fdtv_dvb_unregister(struct firedtv *fdtv) in fdtv_dvb_unregister() argument
240 fdtv_ca_release(fdtv); in fdtv_dvb_unregister()
241 dvb_unregister_frontend(&fdtv->fe); in fdtv_dvb_unregister()
242 dvb_net_release(&fdtv->dvbnet); in fdtv_dvb_unregister()
243 fdtv->demux.dmx.close(&fdtv->demux.dmx); in fdtv_dvb_unregister()
244 fdtv->demux.dmx.remove_frontend(&fdtv->demux.dmx, &fdtv->frontend); in fdtv_dvb_unregister()
245 dvb_dmxdev_release(&fdtv->dmxdev); in fdtv_dvb_unregister()
246 dvb_dmx_release(&fdtv->demux); in fdtv_dvb_unregister()
247 dvb_unregister_adapter(&fdtv->adapter); in fdtv_dvb_unregister()