1// SPDX-License-Identifier: GPL-2.0-or-later
2/*
3 * DVB USB framework
4 *
5 * Copyright (C) 2004-6 Patrick Boettcher <patrick.boettcher@posteo.de>
6 * Copyright (C) 2012 Antti Palosaari <crope@iki.fi>
7 */
8
9#include "dvb_usb_common.h"
10#include <media/media-device.h>
11
12static int dvb_usbv2_disable_rc_polling;
13module_param_named(disable_rc_polling, dvb_usbv2_disable_rc_polling, int, 0644);
14MODULE_PARM_DESC(disable_rc_polling,
15		"disable remote control polling (default: 0)");
16static int dvb_usb_force_pid_filter_usage;
17module_param_named(force_pid_filter_usage, dvb_usb_force_pid_filter_usage,
18		int, 0444);
19MODULE_PARM_DESC(force_pid_filter_usage,
20		"force all DVB USB devices to use a PID filter, if any (default: 0)");
21
22static int dvb_usbv2_download_firmware(struct dvb_usb_device *d,
23		const char *name)
24{
25	int ret;
26	const struct firmware *fw;
27	dev_dbg(&d->udev->dev, "%s:\n", __func__);
28
29	if (!d->props->download_firmware) {
30		ret = -EINVAL;
31		goto err;
32	}
33
34	ret = request_firmware(&fw, name, &d->udev->dev);
35	if (ret < 0) {
36		dev_err(&d->udev->dev,
37				"%s: Did not find the firmware file '%s' (status %d). You can use <kernel_dir>/scripts/get_dvb_firmware to get the firmware\n",
38				KBUILD_MODNAME, name, ret);
39		goto err;
40	}
41
42	dev_info(&d->udev->dev, "%s: downloading firmware from file '%s'\n",
43			KBUILD_MODNAME, name);
44
45	ret = d->props->download_firmware(d, fw);
46	release_firmware(fw);
47	if (ret < 0)
48		goto err;
49
50	return ret;
51err:
52	dev_dbg(&d->udev->dev, "%s: failed=%d\n", __func__, ret);
53	return ret;
54}
55
56static int dvb_usbv2_i2c_init(struct dvb_usb_device *d)
57{
58	int ret;
59	dev_dbg(&d->udev->dev, "%s:\n", __func__);
60
61	if (!d->props->i2c_algo)
62		return 0;
63
64	strscpy(d->i2c_adap.name, d->name, sizeof(d->i2c_adap.name));
65	d->i2c_adap.algo = d->props->i2c_algo;
66	d->i2c_adap.dev.parent = &d->udev->dev;
67	i2c_set_adapdata(&d->i2c_adap, d);
68
69	ret = i2c_add_adapter(&d->i2c_adap);
70	if (ret < 0) {
71		d->i2c_adap.algo = NULL;
72		goto err;
73	}
74
75	return 0;
76err:
77	dev_dbg(&d->udev->dev, "%s: failed=%d\n", __func__, ret);
78	return ret;
79}
80
81static int dvb_usbv2_i2c_exit(struct dvb_usb_device *d)
82{
83	dev_dbg(&d->udev->dev, "%s:\n", __func__);
84
85	if (d->i2c_adap.algo)
86		i2c_del_adapter(&d->i2c_adap);
87
88	return 0;
89}
90
91#if IS_ENABLED(CONFIG_RC_CORE)
92static void dvb_usb_read_remote_control(struct work_struct *work)
93{
94	struct dvb_usb_device *d = container_of(work,
95			struct dvb_usb_device, rc_query_work.work);
96	int ret;
97
98	/*
99	 * When the parameter has been set to 1 via sysfs while the
100	 * driver was running, or when bulk mode is enabled after IR init.
101	 */
102	if (dvb_usbv2_disable_rc_polling || d->rc.bulk_mode) {
103		d->rc_polling_active = false;
104		return;
105	}
106
107	ret = d->rc.query(d);
108	if (ret < 0) {
109		dev_err(&d->udev->dev, "%s: rc.query() failed=%d\n",
110				KBUILD_MODNAME, ret);
111		d->rc_polling_active = false;
112		return; /* stop polling */
113	}
114
115	schedule_delayed_work(&d->rc_query_work,
116			msecs_to_jiffies(d->rc.interval));
117}
118
119static int dvb_usbv2_remote_init(struct dvb_usb_device *d)
120{
121	int ret;
122	struct rc_dev *dev;
123	dev_dbg(&d->udev->dev, "%s:\n", __func__);
124
125	if (dvb_usbv2_disable_rc_polling || !d->props->get_rc_config)
126		return 0;
127
128	d->rc.map_name = d->rc_map;
129	ret = d->props->get_rc_config(d, &d->rc);
130	if (ret < 0)
131		goto err;
132
133	/* disable rc when there is no keymap defined */
134	if (!d->rc.map_name)
135		return 0;
136
137	dev = rc_allocate_device(d->rc.driver_type);
138	if (!dev) {
139		ret = -ENOMEM;
140		goto err;
141	}
142
143	dev->dev.parent = &d->udev->dev;
144	dev->device_name = d->name;
145	usb_make_path(d->udev, d->rc_phys, sizeof(d->rc_phys));
146	strlcat(d->rc_phys, "/ir0", sizeof(d->rc_phys));
147	dev->input_phys = d->rc_phys;
148	usb_to_input_id(d->udev, &dev->input_id);
149	dev->driver_name = d->props->driver_name;
150	dev->map_name = d->rc.map_name;
151	dev->allowed_protocols = d->rc.allowed_protos;
152	dev->change_protocol = d->rc.change_protocol;
153	dev->timeout = d->rc.timeout;
154	dev->priv = d;
155
156	ret = rc_register_device(dev);
157	if (ret < 0) {
158		rc_free_device(dev);
159		goto err;
160	}
161
162	d->rc_dev = dev;
163
164	/* start polling if needed */
165	if (d->rc.query && !d->rc.bulk_mode) {
166		/* initialize a work queue for handling polling */
167		INIT_DELAYED_WORK(&d->rc_query_work,
168				dvb_usb_read_remote_control);
169		dev_info(&d->udev->dev,
170				"%s: schedule remote query interval to %d msecs\n",
171				KBUILD_MODNAME, d->rc.interval);
172		schedule_delayed_work(&d->rc_query_work,
173				msecs_to_jiffies(d->rc.interval));
174		d->rc_polling_active = true;
175	}
176
177	return 0;
178err:
179	dev_dbg(&d->udev->dev, "%s: failed=%d\n", __func__, ret);
180	return ret;
181}
182
183static int dvb_usbv2_remote_exit(struct dvb_usb_device *d)
184{
185	dev_dbg(&d->udev->dev, "%s:\n", __func__);
186
187	if (d->rc_dev) {
188		cancel_delayed_work_sync(&d->rc_query_work);
189		rc_unregister_device(d->rc_dev);
190		d->rc_dev = NULL;
191	}
192
193	return 0;
194}
195#else
196	#define dvb_usbv2_remote_init(args...) 0
197	#define dvb_usbv2_remote_exit(args...)
198#endif
199
200static void dvb_usb_data_complete(struct usb_data_stream *stream, u8 *buf,
201		size_t len)
202{
203	struct dvb_usb_adapter *adap = stream->user_priv;
204	dvb_dmx_swfilter(&adap->demux, buf, len);
205}
206
207static void dvb_usb_data_complete_204(struct usb_data_stream *stream, u8 *buf,
208		size_t len)
209{
210	struct dvb_usb_adapter *adap = stream->user_priv;
211	dvb_dmx_swfilter_204(&adap->demux, buf, len);
212}
213
214static void dvb_usb_data_complete_raw(struct usb_data_stream *stream, u8 *buf,
215		size_t len)
216{
217	struct dvb_usb_adapter *adap = stream->user_priv;
218	dvb_dmx_swfilter_raw(&adap->demux, buf, len);
219}
220
221static int dvb_usbv2_adapter_stream_init(struct dvb_usb_adapter *adap)
222{
223	dev_dbg(&adap_to_d(adap)->udev->dev, "%s: adap=%d\n", __func__,
224			adap->id);
225
226	adap->stream.udev = adap_to_d(adap)->udev;
227	adap->stream.user_priv = adap;
228	adap->stream.complete = dvb_usb_data_complete;
229
230	return usb_urb_initv2(&adap->stream, &adap->props->stream);
231}
232
233static int dvb_usbv2_adapter_stream_exit(struct dvb_usb_adapter *adap)
234{
235	dev_dbg(&adap_to_d(adap)->udev->dev, "%s: adap=%d\n", __func__,
236			adap->id);
237
238	return usb_urb_exitv2(&adap->stream);
239}
240
241static int dvb_usb_start_feed(struct dvb_demux_feed *dvbdmxfeed)
242{
243	struct dvb_usb_adapter *adap = dvbdmxfeed->demux->priv;
244	struct dvb_usb_device *d = adap_to_d(adap);
245	int ret = 0;
246	struct usb_data_stream_properties stream_props;
247	dev_dbg(&d->udev->dev,
248			"%s: adap=%d active_fe=%d feed_type=%d setting pid [%s]: %04x (%04d) at index %d\n",
249			__func__, adap->id, adap->active_fe, dvbdmxfeed->type,
250			adap->pid_filtering ? "yes" : "no", dvbdmxfeed->pid,
251			dvbdmxfeed->pid, dvbdmxfeed->index);
252
253	/* wait init is done */
254	wait_on_bit(&adap->state_bits, ADAP_INIT, TASK_UNINTERRUPTIBLE);
255
256	if (adap->active_fe == -1)
257		return -EINVAL;
258
259	/* skip feed setup if we are already feeding */
260	if (adap->feed_count++ > 0)
261		goto skip_feed_start;
262
263	/* set 'streaming' status bit */
264	set_bit(ADAP_STREAMING, &adap->state_bits);
265
266	/* resolve input and output streaming parameters */
267	if (d->props->get_stream_config) {
268		memcpy(&stream_props, &adap->props->stream,
269				sizeof(struct usb_data_stream_properties));
270		ret = d->props->get_stream_config(adap->fe[adap->active_fe],
271				&adap->ts_type, &stream_props);
272		if (ret)
273			dev_err(&d->udev->dev,
274					"%s: get_stream_config() failed=%d\n",
275					KBUILD_MODNAME, ret);
276	} else {
277		stream_props = adap->props->stream;
278	}
279
280	switch (adap->ts_type) {
281	case DVB_USB_FE_TS_TYPE_204:
282		adap->stream.complete = dvb_usb_data_complete_204;
283		break;
284	case DVB_USB_FE_TS_TYPE_RAW:
285		adap->stream.complete = dvb_usb_data_complete_raw;
286		break;
287	case DVB_USB_FE_TS_TYPE_188:
288	default:
289		adap->stream.complete = dvb_usb_data_complete;
290		break;
291	}
292
293	/* submit USB streaming packets */
294	usb_urb_submitv2(&adap->stream, &stream_props);
295
296	/* enable HW PID filter */
297	if (adap->pid_filtering && adap->props->pid_filter_ctrl) {
298		ret = adap->props->pid_filter_ctrl(adap, 1);
299		if (ret)
300			dev_err(&d->udev->dev,
301					"%s: pid_filter_ctrl() failed=%d\n",
302					KBUILD_MODNAME, ret);
303	}
304
305	/* ask device to start streaming */
306	if (d->props->streaming_ctrl) {
307		ret = d->props->streaming_ctrl(adap->fe[adap->active_fe], 1);
308		if (ret)
309			dev_err(&d->udev->dev,
310					"%s: streaming_ctrl() failed=%d\n",
311					KBUILD_MODNAME, ret);
312	}
313skip_feed_start:
314
315	/* add PID to device HW PID filter */
316	if (adap->pid_filtering && adap->props->pid_filter) {
317		ret = adap->props->pid_filter(adap, dvbdmxfeed->index,
318				dvbdmxfeed->pid, 1);
319		if (ret)
320			dev_err(&d->udev->dev, "%s: pid_filter() failed=%d\n",
321					KBUILD_MODNAME, ret);
322	}
323
324	if (ret)
325		dev_dbg(&d->udev->dev, "%s: failed=%d\n", __func__, ret);
326	return ret;
327}
328
329static int dvb_usb_stop_feed(struct dvb_demux_feed *dvbdmxfeed)
330{
331	struct dvb_usb_adapter *adap = dvbdmxfeed->demux->priv;
332	struct dvb_usb_device *d = adap_to_d(adap);
333	int ret = 0;
334	dev_dbg(&d->udev->dev,
335			"%s: adap=%d active_fe=%d feed_type=%d setting pid [%s]: %04x (%04d) at index %d\n",
336			__func__, adap->id, adap->active_fe, dvbdmxfeed->type,
337			adap->pid_filtering ? "yes" : "no", dvbdmxfeed->pid,
338			dvbdmxfeed->pid, dvbdmxfeed->index);
339
340	if (adap->active_fe == -1)
341		return -EINVAL;
342
343	/* remove PID from device HW PID filter */
344	if (adap->pid_filtering && adap->props->pid_filter) {
345		ret = adap->props->pid_filter(adap, dvbdmxfeed->index,
346				dvbdmxfeed->pid, 0);
347		if (ret)
348			dev_err(&d->udev->dev, "%s: pid_filter() failed=%d\n",
349					KBUILD_MODNAME, ret);
350	}
351
352	/* we cannot stop streaming until last PID is removed */
353	if (--adap->feed_count > 0)
354		goto skip_feed_stop;
355
356	/* ask device to stop streaming */
357	if (d->props->streaming_ctrl) {
358		ret = d->props->streaming_ctrl(adap->fe[adap->active_fe], 0);
359		if (ret)
360			dev_err(&d->udev->dev,
361					"%s: streaming_ctrl() failed=%d\n",
362					KBUILD_MODNAME, ret);
363	}
364
365	/* disable HW PID filter */
366	if (adap->pid_filtering && adap->props->pid_filter_ctrl) {
367		ret = adap->props->pid_filter_ctrl(adap, 0);
368		if (ret)
369			dev_err(&d->udev->dev,
370					"%s: pid_filter_ctrl() failed=%d\n",
371					KBUILD_MODNAME, ret);
372	}
373
374	/* kill USB streaming packets */
375	usb_urb_killv2(&adap->stream);
376
377	/* clear 'streaming' status bit */
378	clear_bit(ADAP_STREAMING, &adap->state_bits);
379	smp_mb__after_atomic();
380	wake_up_bit(&adap->state_bits, ADAP_STREAMING);
381skip_feed_stop:
382
383	if (ret)
384		dev_dbg(&d->udev->dev, "%s: failed=%d\n", __func__, ret);
385	return ret;
386}
387
388static int dvb_usbv2_media_device_init(struct dvb_usb_adapter *adap)
389{
390#ifdef CONFIG_MEDIA_CONTROLLER_DVB
391	struct media_device *mdev;
392	struct dvb_usb_device *d = adap_to_d(adap);
393	struct usb_device *udev = d->udev;
394
395	mdev = kzalloc(sizeof(*mdev), GFP_KERNEL);
396	if (!mdev)
397		return -ENOMEM;
398
399	media_device_usb_init(mdev, udev, d->name);
400
401	dvb_register_media_controller(&adap->dvb_adap, mdev);
402
403	dev_info(&d->udev->dev, "media controller created\n");
404#endif
405	return 0;
406}
407
408static int dvb_usbv2_media_device_register(struct dvb_usb_adapter *adap)
409{
410#ifdef CONFIG_MEDIA_CONTROLLER_DVB
411	return media_device_register(adap->dvb_adap.mdev);
412#else
413	return 0;
414#endif
415}
416
417static void dvb_usbv2_media_device_unregister(struct dvb_usb_adapter *adap)
418{
419#ifdef CONFIG_MEDIA_CONTROLLER_DVB
420
421	if (!adap->dvb_adap.mdev)
422		return;
423
424	media_device_unregister(adap->dvb_adap.mdev);
425	media_device_cleanup(adap->dvb_adap.mdev);
426	kfree(adap->dvb_adap.mdev);
427	adap->dvb_adap.mdev = NULL;
428
429#endif
430}
431
432static int dvb_usbv2_adapter_dvb_init(struct dvb_usb_adapter *adap)
433{
434	int ret;
435	struct dvb_usb_device *d = adap_to_d(adap);
436
437	dev_dbg(&d->udev->dev, "%s: adap=%d\n", __func__, adap->id);
438
439	ret = dvb_register_adapter(&adap->dvb_adap, d->name, d->props->owner,
440			&d->udev->dev, d->props->adapter_nr);
441	if (ret < 0) {
442		dev_dbg(&d->udev->dev, "%s: dvb_register_adapter() failed=%d\n",
443				__func__, ret);
444		goto err_dvb_register_adapter;
445	}
446
447	adap->dvb_adap.priv = adap;
448
449	ret = dvb_usbv2_media_device_init(adap);
450	if (ret < 0) {
451		dev_dbg(&d->udev->dev, "%s: dvb_usbv2_media_device_init() failed=%d\n",
452				__func__, ret);
453		goto err_dvb_register_mc;
454	}
455
456	if (d->props->read_mac_address) {
457		ret = d->props->read_mac_address(adap,
458				adap->dvb_adap.proposed_mac);
459		if (ret < 0)
460			goto err_dvb_dmx_init;
461
462		dev_info(&d->udev->dev, "%s: MAC address: %pM\n",
463				KBUILD_MODNAME, adap->dvb_adap.proposed_mac);
464	}
465
466	adap->demux.dmx.capabilities = DMX_TS_FILTERING | DMX_SECTION_FILTERING;
467	adap->demux.priv             = adap;
468	adap->demux.filternum        = 0;
469	adap->demux.filternum        = adap->max_feed_count;
470	adap->demux.feednum          = adap->demux.filternum;
471	adap->demux.start_feed       = dvb_usb_start_feed;
472	adap->demux.stop_feed        = dvb_usb_stop_feed;
473	adap->demux.write_to_decoder = NULL;
474	ret = dvb_dmx_init(&adap->demux);
475	if (ret < 0) {
476		dev_err(&d->udev->dev, "%s: dvb_dmx_init() failed=%d\n",
477				KBUILD_MODNAME, ret);
478		goto err_dvb_dmx_init;
479	}
480
481	adap->dmxdev.filternum       = adap->demux.filternum;
482	adap->dmxdev.demux           = &adap->demux.dmx;
483	adap->dmxdev.capabilities    = 0;
484	ret = dvb_dmxdev_init(&adap->dmxdev, &adap->dvb_adap);
485	if (ret < 0) {
486		dev_err(&d->udev->dev, "%s: dvb_dmxdev_init() failed=%d\n",
487				KBUILD_MODNAME, ret);
488		goto err_dvb_dmxdev_init;
489	}
490
491	ret = dvb_net_init(&adap->dvb_adap, &adap->dvb_net, &adap->demux.dmx);
492	if (ret < 0) {
493		dev_err(&d->udev->dev, "%s: dvb_net_init() failed=%d\n",
494				KBUILD_MODNAME, ret);
495		goto err_dvb_net_init;
496	}
497
498	return 0;
499err_dvb_net_init:
500	dvb_dmxdev_release(&adap->dmxdev);
501err_dvb_dmxdev_init:
502	dvb_dmx_release(&adap->demux);
503err_dvb_dmx_init:
504	dvb_usbv2_media_device_unregister(adap);
505err_dvb_register_mc:
506	dvb_unregister_adapter(&adap->dvb_adap);
507err_dvb_register_adapter:
508	adap->dvb_adap.priv = NULL;
509	return ret;
510}
511
512static int dvb_usbv2_adapter_dvb_exit(struct dvb_usb_adapter *adap)
513{
514	dev_dbg(&adap_to_d(adap)->udev->dev, "%s: adap=%d\n", __func__,
515			adap->id);
516
517	if (adap->dvb_adap.priv) {
518		dvb_net_release(&adap->dvb_net);
519		adap->demux.dmx.close(&adap->demux.dmx);
520		dvb_dmxdev_release(&adap->dmxdev);
521		dvb_dmx_release(&adap->demux);
522		dvb_unregister_adapter(&adap->dvb_adap);
523	}
524
525	return 0;
526}
527
528static int dvb_usbv2_device_power_ctrl(struct dvb_usb_device *d, int onoff)
529{
530	int ret;
531
532	if (onoff)
533		d->powered++;
534	else
535		d->powered--;
536
537	if (d->powered == 0 || (onoff && d->powered == 1)) {
538		/* when switching from 1 to 0 or from 0 to 1 */
539		dev_dbg(&d->udev->dev, "%s: power=%d\n", __func__, onoff);
540		if (d->props->power_ctrl) {
541			ret = d->props->power_ctrl(d, onoff);
542			if (ret < 0)
543				goto err;
544		}
545	}
546
547	return 0;
548err:
549	dev_dbg(&d->udev->dev, "%s: failed=%d\n", __func__, ret);
550	return ret;
551}
552
553static int dvb_usb_fe_init(struct dvb_frontend *fe)
554{
555	int ret;
556	struct dvb_usb_adapter *adap = fe->dvb->priv;
557	struct dvb_usb_device *d = adap_to_d(adap);
558	dev_dbg(&d->udev->dev, "%s: adap=%d fe=%d\n", __func__, adap->id,
559			fe->id);
560
561	if (!adap->suspend_resume_active) {
562		adap->active_fe = fe->id;
563		set_bit(ADAP_INIT, &adap->state_bits);
564	}
565
566	ret = dvb_usbv2_device_power_ctrl(d, 1);
567	if (ret < 0)
568		goto err;
569
570	if (d->props->frontend_ctrl) {
571		ret = d->props->frontend_ctrl(fe, 1);
572		if (ret < 0)
573			goto err;
574	}
575
576	if (adap->fe_init[fe->id]) {
577		ret = adap->fe_init[fe->id](fe);
578		if (ret < 0)
579			goto err;
580	}
581err:
582	if (!adap->suspend_resume_active) {
583		clear_bit(ADAP_INIT, &adap->state_bits);
584		smp_mb__after_atomic();
585		wake_up_bit(&adap->state_bits, ADAP_INIT);
586	}
587
588	dev_dbg(&d->udev->dev, "%s: ret=%d\n", __func__, ret);
589	return ret;
590}
591
592static int dvb_usb_fe_sleep(struct dvb_frontend *fe)
593{
594	int ret;
595	struct dvb_usb_adapter *adap = fe->dvb->priv;
596	struct dvb_usb_device *d = adap_to_d(adap);
597	dev_dbg(&d->udev->dev, "%s: adap=%d fe=%d\n", __func__, adap->id,
598			fe->id);
599
600	if (!adap->suspend_resume_active) {
601		set_bit(ADAP_SLEEP, &adap->state_bits);
602		wait_on_bit(&adap->state_bits, ADAP_STREAMING,
603				TASK_UNINTERRUPTIBLE);
604	}
605
606	if (adap->fe_sleep[fe->id]) {
607		ret = adap->fe_sleep[fe->id](fe);
608		if (ret < 0)
609			goto err;
610	}
611
612	if (d->props->frontend_ctrl) {
613		ret = d->props->frontend_ctrl(fe, 0);
614		if (ret < 0)
615			goto err;
616	}
617
618	ret = dvb_usbv2_device_power_ctrl(d, 0);
619
620err:
621	if (!adap->suspend_resume_active) {
622		adap->active_fe = -1;
623		clear_bit(ADAP_SLEEP, &adap->state_bits);
624		smp_mb__after_atomic();
625		wake_up_bit(&adap->state_bits, ADAP_SLEEP);
626	}
627
628	dev_dbg(&d->udev->dev, "%s: ret=%d\n", __func__, ret);
629	return ret;
630}
631
632static int dvb_usbv2_adapter_frontend_init(struct dvb_usb_adapter *adap)
633{
634	int ret, i, count_registered = 0;
635	struct dvb_usb_device *d = adap_to_d(adap);
636	dev_dbg(&d->udev->dev, "%s: adap=%d\n", __func__, adap->id);
637
638	memset(adap->fe, 0, sizeof(adap->fe));
639	adap->active_fe = -1;
640
641	if (d->props->frontend_attach) {
642		ret = d->props->frontend_attach(adap);
643		if (ret < 0) {
644			dev_dbg(&d->udev->dev,
645					"%s: frontend_attach() failed=%d\n",
646					__func__, ret);
647			goto err_dvb_frontend_detach;
648		}
649	} else {
650		dev_dbg(&d->udev->dev, "%s: frontend_attach() do not exists\n",
651				__func__);
652		ret = 0;
653		goto err;
654	}
655
656	for (i = 0; i < MAX_NO_OF_FE_PER_ADAP && adap->fe[i]; i++) {
657		adap->fe[i]->id = i;
658		/* re-assign sleep and wakeup functions */
659		adap->fe_init[i] = adap->fe[i]->ops.init;
660		adap->fe[i]->ops.init = dvb_usb_fe_init;
661		adap->fe_sleep[i] = adap->fe[i]->ops.sleep;
662		adap->fe[i]->ops.sleep = dvb_usb_fe_sleep;
663
664		ret = dvb_register_frontend(&adap->dvb_adap, adap->fe[i]);
665		if (ret < 0) {
666			dev_err(&d->udev->dev,
667					"%s: frontend%d registration failed\n",
668					KBUILD_MODNAME, i);
669			goto err_dvb_unregister_frontend;
670		}
671
672		count_registered++;
673	}
674
675	if (d->props->tuner_attach) {
676		ret = d->props->tuner_attach(adap);
677		if (ret < 0) {
678			dev_dbg(&d->udev->dev, "%s: tuner_attach() failed=%d\n",
679					__func__, ret);
680			goto err_dvb_unregister_frontend;
681		}
682	}
683
684	ret = dvb_create_media_graph(&adap->dvb_adap, true);
685	if (ret < 0)
686		goto err_dvb_unregister_frontend;
687
688	ret = dvb_usbv2_media_device_register(adap);
689
690	return ret;
691
692err_dvb_unregister_frontend:
693	for (i = count_registered - 1; i >= 0; i--)
694		dvb_unregister_frontend(adap->fe[i]);
695
696err_dvb_frontend_detach:
697	for (i = MAX_NO_OF_FE_PER_ADAP - 1; i >= 0; i--) {
698		if (adap->fe[i]) {
699			dvb_frontend_detach(adap->fe[i]);
700			adap->fe[i] = NULL;
701		}
702	}
703
704err:
705	dev_dbg(&d->udev->dev, "%s: failed=%d\n", __func__, ret);
706	return ret;
707}
708
709static int dvb_usbv2_adapter_frontend_exit(struct dvb_usb_adapter *adap)
710{
711	int ret, i;
712	struct dvb_usb_device *d = adap_to_d(adap);
713
714	dev_dbg(&d->udev->dev, "%s: adap=%d\n", __func__, adap->id);
715
716	for (i = MAX_NO_OF_FE_PER_ADAP - 1; i >= 0; i--) {
717		if (adap->fe[i]) {
718			dvb_unregister_frontend(adap->fe[i]);
719			dvb_frontend_detach(adap->fe[i]);
720		}
721	}
722
723	if (d->props->tuner_detach) {
724		ret = d->props->tuner_detach(adap);
725		if (ret < 0) {
726			dev_dbg(&d->udev->dev, "%s: tuner_detach() failed=%d\n",
727					__func__, ret);
728		}
729	}
730
731	if (d->props->frontend_detach) {
732		ret = d->props->frontend_detach(adap);
733		if (ret < 0) {
734			dev_dbg(&d->udev->dev,
735					"%s: frontend_detach() failed=%d\n",
736					__func__, ret);
737		}
738	}
739
740	return 0;
741}
742
743static int dvb_usbv2_adapter_init(struct dvb_usb_device *d)
744{
745	struct dvb_usb_adapter *adap;
746	int ret, i, adapter_count;
747
748	/* resolve adapter count */
749	adapter_count = d->props->num_adapters;
750	if (d->props->get_adapter_count) {
751		ret = d->props->get_adapter_count(d);
752		if (ret < 0)
753			goto err;
754
755		adapter_count = ret;
756	}
757
758	for (i = 0; i < adapter_count; i++) {
759		adap = &d->adapter[i];
760		adap->id = i;
761		adap->props = &d->props->adapter[i];
762
763		/* speed - when running at FULL speed we need a HW PID filter */
764		if (d->udev->speed == USB_SPEED_FULL &&
765				!(adap->props->caps & DVB_USB_ADAP_HAS_PID_FILTER)) {
766			dev_err(&d->udev->dev,
767					"%s: this USB2.0 device cannot be run on a USB1.1 port (it lacks a hardware PID filter)\n",
768					KBUILD_MODNAME);
769			ret = -ENODEV;
770			goto err;
771		} else if ((d->udev->speed == USB_SPEED_FULL &&
772				adap->props->caps & DVB_USB_ADAP_HAS_PID_FILTER) ||
773				(adap->props->caps & DVB_USB_ADAP_NEED_PID_FILTERING)) {
774			dev_info(&d->udev->dev,
775					"%s: will use the device's hardware PID filter (table count: %d)\n",
776					KBUILD_MODNAME,
777					adap->props->pid_filter_count);
778			adap->pid_filtering  = 1;
779			adap->max_feed_count = adap->props->pid_filter_count;
780		} else {
781			dev_info(&d->udev->dev,
782					"%s: will pass the complete MPEG2 transport stream to the software demuxer\n",
783					KBUILD_MODNAME);
784			adap->pid_filtering  = 0;
785			adap->max_feed_count = 255;
786		}
787
788		if (!adap->pid_filtering && dvb_usb_force_pid_filter_usage &&
789				adap->props->caps & DVB_USB_ADAP_HAS_PID_FILTER) {
790			dev_info(&d->udev->dev,
791					"%s: PID filter enabled by module option\n",
792					KBUILD_MODNAME);
793			adap->pid_filtering  = 1;
794			adap->max_feed_count = adap->props->pid_filter_count;
795		}
796
797		ret = dvb_usbv2_adapter_stream_init(adap);
798		if (ret)
799			goto err;
800
801		ret = dvb_usbv2_adapter_dvb_init(adap);
802		if (ret)
803			goto err;
804
805		ret = dvb_usbv2_adapter_frontend_init(adap);
806		if (ret)
807			goto err;
808
809		/* use exclusive FE lock if there is multiple shared FEs */
810		if (adap->fe[1])
811			adap->dvb_adap.mfe_shared = 1;
812	}
813
814	return 0;
815err:
816	dev_dbg(&d->udev->dev, "%s: failed=%d\n", __func__, ret);
817	return ret;
818}
819
820static int dvb_usbv2_adapter_exit(struct dvb_usb_device *d)
821{
822	int i;
823	dev_dbg(&d->udev->dev, "%s:\n", __func__);
824
825	for (i = MAX_NO_OF_ADAPTER_PER_DEVICE - 1; i >= 0; i--) {
826		if (d->adapter[i].props) {
827			dvb_usbv2_adapter_dvb_exit(&d->adapter[i]);
828			dvb_usbv2_adapter_stream_exit(&d->adapter[i]);
829			dvb_usbv2_adapter_frontend_exit(&d->adapter[i]);
830			dvb_usbv2_media_device_unregister(&d->adapter[i]);
831		}
832	}
833
834	return 0;
835}
836
837/* general initialization functions */
838static int dvb_usbv2_exit(struct dvb_usb_device *d)
839{
840	dev_dbg(&d->udev->dev, "%s:\n", __func__);
841
842	dvb_usbv2_remote_exit(d);
843	dvb_usbv2_adapter_exit(d);
844	dvb_usbv2_i2c_exit(d);
845
846	return 0;
847}
848
849static int dvb_usbv2_init(struct dvb_usb_device *d)
850{
851	int ret;
852	dev_dbg(&d->udev->dev, "%s:\n", __func__);
853
854	dvb_usbv2_device_power_ctrl(d, 1);
855
856	if (d->props->read_config) {
857		ret = d->props->read_config(d);
858		if (ret < 0)
859			goto err;
860	}
861
862	ret = dvb_usbv2_i2c_init(d);
863	if (ret < 0)
864		goto err;
865
866	ret = dvb_usbv2_adapter_init(d);
867	if (ret < 0)
868		goto err;
869
870	if (d->props->init) {
871		ret = d->props->init(d);
872		if (ret < 0)
873			goto err;
874	}
875
876	ret = dvb_usbv2_remote_init(d);
877	if (ret < 0)
878		goto err;
879
880	dvb_usbv2_device_power_ctrl(d, 0);
881
882	return 0;
883err:
884	dvb_usbv2_device_power_ctrl(d, 0);
885	dev_dbg(&d->udev->dev, "%s: failed=%d\n", __func__, ret);
886	return ret;
887}
888
889int dvb_usbv2_probe(struct usb_interface *intf,
890		const struct usb_device_id *id)
891{
892	int ret;
893	struct dvb_usb_device *d;
894	struct usb_device *udev = interface_to_usbdev(intf);
895	struct dvb_usb_driver_info *driver_info =
896			(struct dvb_usb_driver_info *) id->driver_info;
897
898	dev_dbg(&udev->dev, "%s: bInterfaceNumber=%d\n", __func__,
899			intf->cur_altsetting->desc.bInterfaceNumber);
900
901	if (!id->driver_info) {
902		dev_err(&udev->dev, "%s: driver_info failed\n", KBUILD_MODNAME);
903		ret = -ENODEV;
904		goto err;
905	}
906
907	d = kzalloc(sizeof(struct dvb_usb_device), GFP_KERNEL);
908	if (!d) {
909		dev_err(&udev->dev, "%s: kzalloc() failed\n", KBUILD_MODNAME);
910		ret = -ENOMEM;
911		goto err;
912	}
913
914	d->intf = intf;
915	d->name = driver_info->name;
916	d->rc_map = driver_info->rc_map;
917	d->udev = udev;
918	d->props = driver_info->props;
919
920	if (intf->cur_altsetting->desc.bInterfaceNumber !=
921			d->props->bInterfaceNumber) {
922		ret = -ENODEV;
923		goto err_kfree_d;
924	}
925
926	mutex_init(&d->usb_mutex);
927	mutex_init(&d->i2c_mutex);
928
929	if (d->props->size_of_priv) {
930		d->priv = kzalloc(d->props->size_of_priv, GFP_KERNEL);
931		if (!d->priv) {
932			dev_err(&d->udev->dev, "%s: kzalloc() failed\n",
933					KBUILD_MODNAME);
934			ret = -ENOMEM;
935			goto err_kfree_d;
936		}
937	}
938
939	if (d->props->probe) {
940		ret = d->props->probe(d);
941		if (ret)
942			goto err_kfree_priv;
943	}
944
945	if (d->props->identify_state) {
946		const char *name = NULL;
947		ret = d->props->identify_state(d, &name);
948		if (ret == COLD) {
949			dev_info(&d->udev->dev,
950					"%s: found a '%s' in cold state\n",
951					KBUILD_MODNAME, d->name);
952
953			if (!name)
954				name = d->props->firmware;
955
956			ret = dvb_usbv2_download_firmware(d, name);
957			if (ret == 0) {
958				/* device is warm, continue initialization */
959				;
960			} else if (ret == RECONNECTS_USB) {
961				/*
962				 * USB core will call disconnect() and then
963				 * probe() as device reconnects itself from the
964				 * USB bus. disconnect() will release all driver
965				 * resources and probe() is called for 'new'
966				 * device. As 'new' device is warm we should
967				 * never go here again.
968				 */
969				goto exit;
970			} else {
971				goto err_free_all;
972			}
973		} else if (ret != WARM) {
974			goto err_free_all;
975		}
976	}
977
978	dev_info(&d->udev->dev, "%s: found a '%s' in warm state\n",
979			KBUILD_MODNAME, d->name);
980
981	ret = dvb_usbv2_init(d);
982	if (ret < 0)
983		goto err_free_all;
984
985	dev_info(&d->udev->dev,
986			"%s: '%s' successfully initialized and connected\n",
987			KBUILD_MODNAME, d->name);
988exit:
989	usb_set_intfdata(intf, d);
990
991	return 0;
992err_free_all:
993	dvb_usbv2_exit(d);
994	if (d->props->disconnect)
995		d->props->disconnect(d);
996err_kfree_priv:
997	kfree(d->priv);
998err_kfree_d:
999	kfree(d);
1000err:
1001	dev_dbg(&udev->dev, "%s: failed=%d\n", __func__, ret);
1002	return ret;
1003}
1004EXPORT_SYMBOL(dvb_usbv2_probe);
1005
1006void dvb_usbv2_disconnect(struct usb_interface *intf)
1007{
1008	struct dvb_usb_device *d = usb_get_intfdata(intf);
1009	const char *devname = kstrdup(dev_name(&d->udev->dev), GFP_KERNEL);
1010	const char *drvname = d->name;
1011
1012	dev_dbg(&d->udev->dev, "%s: bInterfaceNumber=%d\n", __func__,
1013			intf->cur_altsetting->desc.bInterfaceNumber);
1014
1015	if (d->props->exit)
1016		d->props->exit(d);
1017
1018	dvb_usbv2_exit(d);
1019
1020	if (d->props->disconnect)
1021		d->props->disconnect(d);
1022
1023	kfree(d->priv);
1024	kfree(d);
1025
1026	pr_info("%s: '%s:%s' successfully deinitialized and disconnected\n",
1027		KBUILD_MODNAME, drvname, devname);
1028	kfree(devname);
1029}
1030EXPORT_SYMBOL(dvb_usbv2_disconnect);
1031
1032int dvb_usbv2_suspend(struct usb_interface *intf, pm_message_t msg)
1033{
1034	struct dvb_usb_device *d = usb_get_intfdata(intf);
1035	int ret = 0, i, active_fe;
1036	struct dvb_frontend *fe;
1037	dev_dbg(&d->udev->dev, "%s:\n", __func__);
1038
1039	/* stop remote controller poll */
1040	if (d->rc_polling_active)
1041		cancel_delayed_work_sync(&d->rc_query_work);
1042
1043	for (i = MAX_NO_OF_ADAPTER_PER_DEVICE - 1; i >= 0; i--) {
1044		active_fe = d->adapter[i].active_fe;
1045		if (d->adapter[i].dvb_adap.priv && active_fe != -1) {
1046			fe = d->adapter[i].fe[active_fe];
1047			d->adapter[i].suspend_resume_active = true;
1048
1049			if (d->props->streaming_ctrl)
1050				d->props->streaming_ctrl(fe, 0);
1051
1052			/* stop usb streaming */
1053			usb_urb_killv2(&d->adapter[i].stream);
1054
1055			ret = dvb_frontend_suspend(fe);
1056		}
1057	}
1058
1059	return ret;
1060}
1061EXPORT_SYMBOL(dvb_usbv2_suspend);
1062
1063static int dvb_usbv2_resume_common(struct dvb_usb_device *d)
1064{
1065	int ret = 0, i, active_fe;
1066	struct dvb_frontend *fe;
1067	dev_dbg(&d->udev->dev, "%s:\n", __func__);
1068
1069	for (i = 0; i < MAX_NO_OF_ADAPTER_PER_DEVICE; i++) {
1070		active_fe = d->adapter[i].active_fe;
1071		if (d->adapter[i].dvb_adap.priv && active_fe != -1) {
1072			fe = d->adapter[i].fe[active_fe];
1073
1074			ret = dvb_frontend_resume(fe);
1075
1076			/* resume usb streaming */
1077			usb_urb_submitv2(&d->adapter[i].stream, NULL);
1078
1079			if (d->props->streaming_ctrl)
1080				d->props->streaming_ctrl(fe, 1);
1081
1082			d->adapter[i].suspend_resume_active = false;
1083		}
1084	}
1085
1086	/* start remote controller poll */
1087	if (d->rc_polling_active)
1088		schedule_delayed_work(&d->rc_query_work,
1089				msecs_to_jiffies(d->rc.interval));
1090
1091	return ret;
1092}
1093
1094int dvb_usbv2_resume(struct usb_interface *intf)
1095{
1096	struct dvb_usb_device *d = usb_get_intfdata(intf);
1097	dev_dbg(&d->udev->dev, "%s:\n", __func__);
1098
1099	return dvb_usbv2_resume_common(d);
1100}
1101EXPORT_SYMBOL(dvb_usbv2_resume);
1102
1103int dvb_usbv2_reset_resume(struct usb_interface *intf)
1104{
1105	struct dvb_usb_device *d = usb_get_intfdata(intf);
1106	int ret;
1107	dev_dbg(&d->udev->dev, "%s:\n", __func__);
1108
1109	dvb_usbv2_device_power_ctrl(d, 1);
1110
1111	if (d->props->init)
1112		d->props->init(d);
1113
1114	ret = dvb_usbv2_resume_common(d);
1115
1116	dvb_usbv2_device_power_ctrl(d, 0);
1117
1118	return ret;
1119}
1120EXPORT_SYMBOL(dvb_usbv2_reset_resume);
1121
1122MODULE_VERSION("2.0");
1123MODULE_AUTHOR("Patrick Boettcher <patrick.boettcher@posteo.de>");
1124MODULE_AUTHOR("Antti Palosaari <crope@iki.fi>");
1125MODULE_DESCRIPTION("DVB USB common");
1126MODULE_LICENSE("GPL");
1127