Lines Matching refs:fdtv

24 static int alloc_channel(struct firedtv *fdtv)
29 if (!__test_and_set_bit(i, &fdtv->channel_active))
34 static void collect_channels(struct firedtv *fdtv, int *pidc, u16 pid[])
39 if (test_bit(i, &fdtv->channel_active))
40 pid[n++] = fdtv->channel_pid[i];
44 static inline void dealloc_channel(struct firedtv *fdtv, int i)
46 __clear_bit(i, &fdtv->channel_active);
51 struct firedtv *fdtv = dvbdmxfeed->demux->priv;
60 dev_err(fdtv->device, "can't start dmx feed: invalid type %u\n",
65 if (mutex_lock_interruptible(&fdtv->demux_mutex))
75 c = alloc_channel(fdtv);
78 dev_err(fdtv->device,
85 c = alloc_channel(fdtv);
89 dev_err(fdtv->device, "can't start dmx feed: busy\n");
95 fdtv->channel_pid[c] = dvbdmxfeed->pid;
96 collect_channels(fdtv, &pidc, pids);
99 ret = avc_tuner_get_ts(fdtv);
101 dealloc_channel(fdtv, c);
102 dev_err(fdtv->device, "can't get TS\n");
106 ret = avc_tuner_set_pids(fdtv, pidc, pids);
108 dealloc_channel(fdtv, c);
109 dev_err(fdtv->device, "can't set PIDs\n");
114 mutex_unlock(&fdtv->demux_mutex);
122 struct firedtv *fdtv = demux->priv;
144 if (mutex_lock_interruptible(&fdtv->demux_mutex))
148 dealloc_channel(fdtv, c);
149 collect_channels(fdtv, &pidc, pids);
151 ret = avc_tuner_set_pids(fdtv, pidc, pids);
153 mutex_unlock(&fdtv->demux_mutex);
160 int fdtv_dvb_register(struct firedtv *fdtv, const char *name)
164 err = dvb_register_adapter(&fdtv->adapter, name,
165 THIS_MODULE, fdtv->device, adapter_nr);
170 fdtv->demux.dmx.capabilities = 0;
172 fdtv->demux.priv = fdtv;
173 fdtv->demux.filternum = 16;
174 fdtv->demux.feednum = 16;
175 fdtv->demux.start_feed = fdtv_start_feed;
176 fdtv->demux.stop_feed = fdtv_stop_feed;
177 fdtv->demux.write_to_decoder = NULL;
179 err = dvb_dmx_init(&fdtv->demux);
183 fdtv->dmxdev.filternum = 16;
184 fdtv->dmxdev.demux = &fdtv->demux.dmx;
185 fdtv->dmxdev.capabilities = 0;
187 err = dvb_dmxdev_init(&fdtv->dmxdev, &fdtv->adapter);
191 fdtv->frontend.source = DMX_FRONTEND_0;
193 err = fdtv->demux.dmx.add_frontend(&fdtv->demux.dmx, &fdtv->frontend);
197 err = fdtv->demux.dmx.connect_frontend(&fdtv->demux.dmx,
198 &fdtv->frontend);
202 err = dvb_net_init(&fdtv->adapter, &fdtv->dvbnet, &fdtv->demux.dmx);
206 fdtv_frontend_init(fdtv, name);
207 err = dvb_register_frontend(&fdtv->adapter, &fdtv->fe);
211 err = fdtv_ca_register(fdtv);
213 dev_info(fdtv->device,
218 dvb_net_release(&fdtv->dvbnet);
220 fdtv->demux.dmx.close(&fdtv->demux.dmx);
222 fdtv->demux.dmx.remove_frontend(&fdtv->demux.dmx, &fdtv->frontend);
224 dvb_dmxdev_release(&fdtv->dmxdev);
226 dvb_dmx_release(&fdtv->demux);
228 dvb_unregister_adapter(&fdtv->adapter);
230 dev_err(fdtv->device, "DVB initialization failed\n");
234 void fdtv_dvb_unregister(struct firedtv *fdtv)
236 fdtv_ca_release(fdtv);
237 dvb_unregister_frontend(&fdtv->fe);
238 dvb_net_release(&fdtv->dvbnet);
239 fdtv->demux.dmx.close(&fdtv->demux.dmx);
240 fdtv->demux.dmx.remove_frontend(&fdtv->demux.dmx, &fdtv->frontend);
241 dvb_dmxdev_release(&fdtv->dmxdev);
242 dvb_dmx_release(&fdtv->demux);
243 dvb_unregister_adapter(&fdtv->adapter);