0001
0002
0003
0004
0005
0006
0007
0008
0009 #include "dvb_usb_common.h"
0010 #include <media/media-device.h>
0011
0012 static int dvb_usbv2_disable_rc_polling;
0013 module_param_named(disable_rc_polling, dvb_usbv2_disable_rc_polling, int, 0644);
0014 MODULE_PARM_DESC(disable_rc_polling,
0015 "disable remote control polling (default: 0)");
0016 static int dvb_usb_force_pid_filter_usage;
0017 module_param_named(force_pid_filter_usage, dvb_usb_force_pid_filter_usage,
0018 int, 0444);
0019 MODULE_PARM_DESC(force_pid_filter_usage,
0020 "force all DVB USB devices to use a PID filter, if any (default: 0)");
0021
0022 static int dvb_usbv2_download_firmware(struct dvb_usb_device *d,
0023 const char *name)
0024 {
0025 int ret;
0026 const struct firmware *fw;
0027 dev_dbg(&d->udev->dev, "%s:\n", __func__);
0028
0029 if (!d->props->download_firmware) {
0030 ret = -EINVAL;
0031 goto err;
0032 }
0033
0034 ret = request_firmware(&fw, name, &d->udev->dev);
0035 if (ret < 0) {
0036 dev_err(&d->udev->dev,
0037 "%s: Did not find the firmware file '%s' (status %d). You can use <kernel_dir>/scripts/get_dvb_firmware to get the firmware\n",
0038 KBUILD_MODNAME, name, ret);
0039 goto err;
0040 }
0041
0042 dev_info(&d->udev->dev, "%s: downloading firmware from file '%s'\n",
0043 KBUILD_MODNAME, name);
0044
0045 ret = d->props->download_firmware(d, fw);
0046 release_firmware(fw);
0047 if (ret < 0)
0048 goto err;
0049
0050 return ret;
0051 err:
0052 dev_dbg(&d->udev->dev, "%s: failed=%d\n", __func__, ret);
0053 return ret;
0054 }
0055
0056 static int dvb_usbv2_i2c_init(struct dvb_usb_device *d)
0057 {
0058 int ret;
0059 dev_dbg(&d->udev->dev, "%s:\n", __func__);
0060
0061 if (!d->props->i2c_algo)
0062 return 0;
0063
0064 strscpy(d->i2c_adap.name, d->name, sizeof(d->i2c_adap.name));
0065 d->i2c_adap.algo = d->props->i2c_algo;
0066 d->i2c_adap.dev.parent = &d->udev->dev;
0067 i2c_set_adapdata(&d->i2c_adap, d);
0068
0069 ret = i2c_add_adapter(&d->i2c_adap);
0070 if (ret < 0) {
0071 d->i2c_adap.algo = NULL;
0072 goto err;
0073 }
0074
0075 return 0;
0076 err:
0077 dev_dbg(&d->udev->dev, "%s: failed=%d\n", __func__, ret);
0078 return ret;
0079 }
0080
0081 static int dvb_usbv2_i2c_exit(struct dvb_usb_device *d)
0082 {
0083 dev_dbg(&d->udev->dev, "%s:\n", __func__);
0084
0085 if (d->i2c_adap.algo)
0086 i2c_del_adapter(&d->i2c_adap);
0087
0088 return 0;
0089 }
0090
0091 #if IS_ENABLED(CONFIG_RC_CORE)
0092 static void dvb_usb_read_remote_control(struct work_struct *work)
0093 {
0094 struct dvb_usb_device *d = container_of(work,
0095 struct dvb_usb_device, rc_query_work.work);
0096 int ret;
0097
0098
0099
0100
0101
0102 if (dvb_usbv2_disable_rc_polling || d->rc.bulk_mode) {
0103 d->rc_polling_active = false;
0104 return;
0105 }
0106
0107 ret = d->rc.query(d);
0108 if (ret < 0) {
0109 dev_err(&d->udev->dev, "%s: rc.query() failed=%d\n",
0110 KBUILD_MODNAME, ret);
0111 d->rc_polling_active = false;
0112 return;
0113 }
0114
0115 schedule_delayed_work(&d->rc_query_work,
0116 msecs_to_jiffies(d->rc.interval));
0117 }
0118
0119 static int dvb_usbv2_remote_init(struct dvb_usb_device *d)
0120 {
0121 int ret;
0122 struct rc_dev *dev;
0123 dev_dbg(&d->udev->dev, "%s:\n", __func__);
0124
0125 if (dvb_usbv2_disable_rc_polling || !d->props->get_rc_config)
0126 return 0;
0127
0128 d->rc.map_name = d->rc_map;
0129 ret = d->props->get_rc_config(d, &d->rc);
0130 if (ret < 0)
0131 goto err;
0132
0133
0134 if (!d->rc.map_name)
0135 return 0;
0136
0137 dev = rc_allocate_device(d->rc.driver_type);
0138 if (!dev) {
0139 ret = -ENOMEM;
0140 goto err;
0141 }
0142
0143 dev->dev.parent = &d->udev->dev;
0144 dev->device_name = d->name;
0145 usb_make_path(d->udev, d->rc_phys, sizeof(d->rc_phys));
0146 strlcat(d->rc_phys, "/ir0", sizeof(d->rc_phys));
0147 dev->input_phys = d->rc_phys;
0148 usb_to_input_id(d->udev, &dev->input_id);
0149 dev->driver_name = d->props->driver_name;
0150 dev->map_name = d->rc.map_name;
0151 dev->allowed_protocols = d->rc.allowed_protos;
0152 dev->change_protocol = d->rc.change_protocol;
0153 dev->timeout = d->rc.timeout;
0154 dev->priv = d;
0155
0156 ret = rc_register_device(dev);
0157 if (ret < 0) {
0158 rc_free_device(dev);
0159 goto err;
0160 }
0161
0162 d->rc_dev = dev;
0163
0164
0165 if (d->rc.query && !d->rc.bulk_mode) {
0166
0167 INIT_DELAYED_WORK(&d->rc_query_work,
0168 dvb_usb_read_remote_control);
0169 dev_info(&d->udev->dev,
0170 "%s: schedule remote query interval to %d msecs\n",
0171 KBUILD_MODNAME, d->rc.interval);
0172 schedule_delayed_work(&d->rc_query_work,
0173 msecs_to_jiffies(d->rc.interval));
0174 d->rc_polling_active = true;
0175 }
0176
0177 return 0;
0178 err:
0179 dev_dbg(&d->udev->dev, "%s: failed=%d\n", __func__, ret);
0180 return ret;
0181 }
0182
0183 static int dvb_usbv2_remote_exit(struct dvb_usb_device *d)
0184 {
0185 dev_dbg(&d->udev->dev, "%s:\n", __func__);
0186
0187 if (d->rc_dev) {
0188 cancel_delayed_work_sync(&d->rc_query_work);
0189 rc_unregister_device(d->rc_dev);
0190 d->rc_dev = NULL;
0191 }
0192
0193 return 0;
0194 }
0195 #else
0196 #define dvb_usbv2_remote_init(args...) 0
0197 #define dvb_usbv2_remote_exit(args...)
0198 #endif
0199
0200 static void dvb_usb_data_complete(struct usb_data_stream *stream, u8 *buf,
0201 size_t len)
0202 {
0203 struct dvb_usb_adapter *adap = stream->user_priv;
0204 dvb_dmx_swfilter(&adap->demux, buf, len);
0205 }
0206
0207 static void dvb_usb_data_complete_204(struct usb_data_stream *stream, u8 *buf,
0208 size_t len)
0209 {
0210 struct dvb_usb_adapter *adap = stream->user_priv;
0211 dvb_dmx_swfilter_204(&adap->demux, buf, len);
0212 }
0213
0214 static void dvb_usb_data_complete_raw(struct usb_data_stream *stream, u8 *buf,
0215 size_t len)
0216 {
0217 struct dvb_usb_adapter *adap = stream->user_priv;
0218 dvb_dmx_swfilter_raw(&adap->demux, buf, len);
0219 }
0220
0221 static int dvb_usbv2_adapter_stream_init(struct dvb_usb_adapter *adap)
0222 {
0223 dev_dbg(&adap_to_d(adap)->udev->dev, "%s: adap=%d\n", __func__,
0224 adap->id);
0225
0226 adap->stream.udev = adap_to_d(adap)->udev;
0227 adap->stream.user_priv = adap;
0228 adap->stream.complete = dvb_usb_data_complete;
0229
0230 return usb_urb_initv2(&adap->stream, &adap->props->stream);
0231 }
0232
0233 static int dvb_usbv2_adapter_stream_exit(struct dvb_usb_adapter *adap)
0234 {
0235 dev_dbg(&adap_to_d(adap)->udev->dev, "%s: adap=%d\n", __func__,
0236 adap->id);
0237
0238 return usb_urb_exitv2(&adap->stream);
0239 }
0240
0241 static int dvb_usb_start_feed(struct dvb_demux_feed *dvbdmxfeed)
0242 {
0243 struct dvb_usb_adapter *adap = dvbdmxfeed->demux->priv;
0244 struct dvb_usb_device *d = adap_to_d(adap);
0245 int ret = 0;
0246 struct usb_data_stream_properties stream_props;
0247 dev_dbg(&d->udev->dev,
0248 "%s: adap=%d active_fe=%d feed_type=%d setting pid [%s]: %04x (%04d) at index %d\n",
0249 __func__, adap->id, adap->active_fe, dvbdmxfeed->type,
0250 adap->pid_filtering ? "yes" : "no", dvbdmxfeed->pid,
0251 dvbdmxfeed->pid, dvbdmxfeed->index);
0252
0253
0254 wait_on_bit(&adap->state_bits, ADAP_INIT, TASK_UNINTERRUPTIBLE);
0255
0256 if (adap->active_fe == -1)
0257 return -EINVAL;
0258
0259
0260 if (adap->feed_count++ > 0)
0261 goto skip_feed_start;
0262
0263
0264 set_bit(ADAP_STREAMING, &adap->state_bits);
0265
0266
0267 if (d->props->get_stream_config) {
0268 memcpy(&stream_props, &adap->props->stream,
0269 sizeof(struct usb_data_stream_properties));
0270 ret = d->props->get_stream_config(adap->fe[adap->active_fe],
0271 &adap->ts_type, &stream_props);
0272 if (ret)
0273 dev_err(&d->udev->dev,
0274 "%s: get_stream_config() failed=%d\n",
0275 KBUILD_MODNAME, ret);
0276 } else {
0277 stream_props = adap->props->stream;
0278 }
0279
0280 switch (adap->ts_type) {
0281 case DVB_USB_FE_TS_TYPE_204:
0282 adap->stream.complete = dvb_usb_data_complete_204;
0283 break;
0284 case DVB_USB_FE_TS_TYPE_RAW:
0285 adap->stream.complete = dvb_usb_data_complete_raw;
0286 break;
0287 case DVB_USB_FE_TS_TYPE_188:
0288 default:
0289 adap->stream.complete = dvb_usb_data_complete;
0290 break;
0291 }
0292
0293
0294 usb_urb_submitv2(&adap->stream, &stream_props);
0295
0296
0297 if (adap->pid_filtering && adap->props->pid_filter_ctrl) {
0298 ret = adap->props->pid_filter_ctrl(adap, 1);
0299 if (ret)
0300 dev_err(&d->udev->dev,
0301 "%s: pid_filter_ctrl() failed=%d\n",
0302 KBUILD_MODNAME, ret);
0303 }
0304
0305
0306 if (d->props->streaming_ctrl) {
0307 ret = d->props->streaming_ctrl(adap->fe[adap->active_fe], 1);
0308 if (ret)
0309 dev_err(&d->udev->dev,
0310 "%s: streaming_ctrl() failed=%d\n",
0311 KBUILD_MODNAME, ret);
0312 }
0313 skip_feed_start:
0314
0315
0316 if (adap->pid_filtering && adap->props->pid_filter) {
0317 ret = adap->props->pid_filter(adap, dvbdmxfeed->index,
0318 dvbdmxfeed->pid, 1);
0319 if (ret)
0320 dev_err(&d->udev->dev, "%s: pid_filter() failed=%d\n",
0321 KBUILD_MODNAME, ret);
0322 }
0323
0324 if (ret)
0325 dev_dbg(&d->udev->dev, "%s: failed=%d\n", __func__, ret);
0326 return ret;
0327 }
0328
0329 static int dvb_usb_stop_feed(struct dvb_demux_feed *dvbdmxfeed)
0330 {
0331 struct dvb_usb_adapter *adap = dvbdmxfeed->demux->priv;
0332 struct dvb_usb_device *d = adap_to_d(adap);
0333 int ret = 0;
0334 dev_dbg(&d->udev->dev,
0335 "%s: adap=%d active_fe=%d feed_type=%d setting pid [%s]: %04x (%04d) at index %d\n",
0336 __func__, adap->id, adap->active_fe, dvbdmxfeed->type,
0337 adap->pid_filtering ? "yes" : "no", dvbdmxfeed->pid,
0338 dvbdmxfeed->pid, dvbdmxfeed->index);
0339
0340 if (adap->active_fe == -1)
0341 return -EINVAL;
0342
0343
0344 if (adap->pid_filtering && adap->props->pid_filter) {
0345 ret = adap->props->pid_filter(adap, dvbdmxfeed->index,
0346 dvbdmxfeed->pid, 0);
0347 if (ret)
0348 dev_err(&d->udev->dev, "%s: pid_filter() failed=%d\n",
0349 KBUILD_MODNAME, ret);
0350 }
0351
0352
0353 if (--adap->feed_count > 0)
0354 goto skip_feed_stop;
0355
0356
0357 if (d->props->streaming_ctrl) {
0358 ret = d->props->streaming_ctrl(adap->fe[adap->active_fe], 0);
0359 if (ret)
0360 dev_err(&d->udev->dev,
0361 "%s: streaming_ctrl() failed=%d\n",
0362 KBUILD_MODNAME, ret);
0363 }
0364
0365
0366 if (adap->pid_filtering && adap->props->pid_filter_ctrl) {
0367 ret = adap->props->pid_filter_ctrl(adap, 0);
0368 if (ret)
0369 dev_err(&d->udev->dev,
0370 "%s: pid_filter_ctrl() failed=%d\n",
0371 KBUILD_MODNAME, ret);
0372 }
0373
0374
0375 usb_urb_killv2(&adap->stream);
0376
0377
0378 clear_bit(ADAP_STREAMING, &adap->state_bits);
0379 smp_mb__after_atomic();
0380 wake_up_bit(&adap->state_bits, ADAP_STREAMING);
0381 skip_feed_stop:
0382
0383 if (ret)
0384 dev_dbg(&d->udev->dev, "%s: failed=%d\n", __func__, ret);
0385 return ret;
0386 }
0387
0388 static int dvb_usbv2_media_device_init(struct dvb_usb_adapter *adap)
0389 {
0390 #ifdef CONFIG_MEDIA_CONTROLLER_DVB
0391 struct media_device *mdev;
0392 struct dvb_usb_device *d = adap_to_d(adap);
0393 struct usb_device *udev = d->udev;
0394
0395 mdev = kzalloc(sizeof(*mdev), GFP_KERNEL);
0396 if (!mdev)
0397 return -ENOMEM;
0398
0399 media_device_usb_init(mdev, udev, d->name);
0400
0401 dvb_register_media_controller(&adap->dvb_adap, mdev);
0402
0403 dev_info(&d->udev->dev, "media controller created\n");
0404 #endif
0405 return 0;
0406 }
0407
0408 static int dvb_usbv2_media_device_register(struct dvb_usb_adapter *adap)
0409 {
0410 #ifdef CONFIG_MEDIA_CONTROLLER_DVB
0411 return media_device_register(adap->dvb_adap.mdev);
0412 #else
0413 return 0;
0414 #endif
0415 }
0416
0417 static void dvb_usbv2_media_device_unregister(struct dvb_usb_adapter *adap)
0418 {
0419 #ifdef CONFIG_MEDIA_CONTROLLER_DVB
0420
0421 if (!adap->dvb_adap.mdev)
0422 return;
0423
0424 media_device_unregister(adap->dvb_adap.mdev);
0425 media_device_cleanup(adap->dvb_adap.mdev);
0426 kfree(adap->dvb_adap.mdev);
0427 adap->dvb_adap.mdev = NULL;
0428
0429 #endif
0430 }
0431
0432 static int dvb_usbv2_adapter_dvb_init(struct dvb_usb_adapter *adap)
0433 {
0434 int ret;
0435 struct dvb_usb_device *d = adap_to_d(adap);
0436
0437 dev_dbg(&d->udev->dev, "%s: adap=%d\n", __func__, adap->id);
0438
0439 ret = dvb_register_adapter(&adap->dvb_adap, d->name, d->props->owner,
0440 &d->udev->dev, d->props->adapter_nr);
0441 if (ret < 0) {
0442 dev_dbg(&d->udev->dev, "%s: dvb_register_adapter() failed=%d\n",
0443 __func__, ret);
0444 goto err_dvb_register_adapter;
0445 }
0446
0447 adap->dvb_adap.priv = adap;
0448
0449 ret = dvb_usbv2_media_device_init(adap);
0450 if (ret < 0) {
0451 dev_dbg(&d->udev->dev, "%s: dvb_usbv2_media_device_init() failed=%d\n",
0452 __func__, ret);
0453 goto err_dvb_register_mc;
0454 }
0455
0456 if (d->props->read_mac_address) {
0457 ret = d->props->read_mac_address(adap,
0458 adap->dvb_adap.proposed_mac);
0459 if (ret < 0)
0460 goto err_dvb_dmx_init;
0461
0462 dev_info(&d->udev->dev, "%s: MAC address: %pM\n",
0463 KBUILD_MODNAME, adap->dvb_adap.proposed_mac);
0464 }
0465
0466 adap->demux.dmx.capabilities = DMX_TS_FILTERING | DMX_SECTION_FILTERING;
0467 adap->demux.priv = adap;
0468 adap->demux.filternum = 0;
0469 adap->demux.filternum = adap->max_feed_count;
0470 adap->demux.feednum = adap->demux.filternum;
0471 adap->demux.start_feed = dvb_usb_start_feed;
0472 adap->demux.stop_feed = dvb_usb_stop_feed;
0473 adap->demux.write_to_decoder = NULL;
0474 ret = dvb_dmx_init(&adap->demux);
0475 if (ret < 0) {
0476 dev_err(&d->udev->dev, "%s: dvb_dmx_init() failed=%d\n",
0477 KBUILD_MODNAME, ret);
0478 goto err_dvb_dmx_init;
0479 }
0480
0481 adap->dmxdev.filternum = adap->demux.filternum;
0482 adap->dmxdev.demux = &adap->demux.dmx;
0483 adap->dmxdev.capabilities = 0;
0484 ret = dvb_dmxdev_init(&adap->dmxdev, &adap->dvb_adap);
0485 if (ret < 0) {
0486 dev_err(&d->udev->dev, "%s: dvb_dmxdev_init() failed=%d\n",
0487 KBUILD_MODNAME, ret);
0488 goto err_dvb_dmxdev_init;
0489 }
0490
0491 ret = dvb_net_init(&adap->dvb_adap, &adap->dvb_net, &adap->demux.dmx);
0492 if (ret < 0) {
0493 dev_err(&d->udev->dev, "%s: dvb_net_init() failed=%d\n",
0494 KBUILD_MODNAME, ret);
0495 goto err_dvb_net_init;
0496 }
0497
0498 return 0;
0499 err_dvb_net_init:
0500 dvb_dmxdev_release(&adap->dmxdev);
0501 err_dvb_dmxdev_init:
0502 dvb_dmx_release(&adap->demux);
0503 err_dvb_dmx_init:
0504 dvb_usbv2_media_device_unregister(adap);
0505 err_dvb_register_mc:
0506 dvb_unregister_adapter(&adap->dvb_adap);
0507 err_dvb_register_adapter:
0508 adap->dvb_adap.priv = NULL;
0509 return ret;
0510 }
0511
0512 static int dvb_usbv2_adapter_dvb_exit(struct dvb_usb_adapter *adap)
0513 {
0514 dev_dbg(&adap_to_d(adap)->udev->dev, "%s: adap=%d\n", __func__,
0515 adap->id);
0516
0517 if (adap->dvb_adap.priv) {
0518 dvb_net_release(&adap->dvb_net);
0519 adap->demux.dmx.close(&adap->demux.dmx);
0520 dvb_dmxdev_release(&adap->dmxdev);
0521 dvb_dmx_release(&adap->demux);
0522 dvb_unregister_adapter(&adap->dvb_adap);
0523 }
0524
0525 return 0;
0526 }
0527
0528 static int dvb_usbv2_device_power_ctrl(struct dvb_usb_device *d, int onoff)
0529 {
0530 int ret;
0531
0532 if (onoff)
0533 d->powered++;
0534 else
0535 d->powered--;
0536
0537 if (d->powered == 0 || (onoff && d->powered == 1)) {
0538
0539 dev_dbg(&d->udev->dev, "%s: power=%d\n", __func__, onoff);
0540 if (d->props->power_ctrl) {
0541 ret = d->props->power_ctrl(d, onoff);
0542 if (ret < 0)
0543 goto err;
0544 }
0545 }
0546
0547 return 0;
0548 err:
0549 dev_dbg(&d->udev->dev, "%s: failed=%d\n", __func__, ret);
0550 return ret;
0551 }
0552
0553 static int dvb_usb_fe_init(struct dvb_frontend *fe)
0554 {
0555 int ret;
0556 struct dvb_usb_adapter *adap = fe->dvb->priv;
0557 struct dvb_usb_device *d = adap_to_d(adap);
0558 dev_dbg(&d->udev->dev, "%s: adap=%d fe=%d\n", __func__, adap->id,
0559 fe->id);
0560
0561 if (!adap->suspend_resume_active) {
0562 adap->active_fe = fe->id;
0563 set_bit(ADAP_INIT, &adap->state_bits);
0564 }
0565
0566 ret = dvb_usbv2_device_power_ctrl(d, 1);
0567 if (ret < 0)
0568 goto err;
0569
0570 if (d->props->frontend_ctrl) {
0571 ret = d->props->frontend_ctrl(fe, 1);
0572 if (ret < 0)
0573 goto err;
0574 }
0575
0576 if (adap->fe_init[fe->id]) {
0577 ret = adap->fe_init[fe->id](fe);
0578 if (ret < 0)
0579 goto err;
0580 }
0581 err:
0582 if (!adap->suspend_resume_active) {
0583 clear_bit(ADAP_INIT, &adap->state_bits);
0584 smp_mb__after_atomic();
0585 wake_up_bit(&adap->state_bits, ADAP_INIT);
0586 }
0587
0588 dev_dbg(&d->udev->dev, "%s: ret=%d\n", __func__, ret);
0589 return ret;
0590 }
0591
0592 static int dvb_usb_fe_sleep(struct dvb_frontend *fe)
0593 {
0594 int ret;
0595 struct dvb_usb_adapter *adap = fe->dvb->priv;
0596 struct dvb_usb_device *d = adap_to_d(adap);
0597 dev_dbg(&d->udev->dev, "%s: adap=%d fe=%d\n", __func__, adap->id,
0598 fe->id);
0599
0600 if (!adap->suspend_resume_active) {
0601 set_bit(ADAP_SLEEP, &adap->state_bits);
0602 wait_on_bit(&adap->state_bits, ADAP_STREAMING,
0603 TASK_UNINTERRUPTIBLE);
0604 }
0605
0606 if (adap->fe_sleep[fe->id]) {
0607 ret = adap->fe_sleep[fe->id](fe);
0608 if (ret < 0)
0609 goto err;
0610 }
0611
0612 if (d->props->frontend_ctrl) {
0613 ret = d->props->frontend_ctrl(fe, 0);
0614 if (ret < 0)
0615 goto err;
0616 }
0617
0618 ret = dvb_usbv2_device_power_ctrl(d, 0);
0619
0620 err:
0621 if (!adap->suspend_resume_active) {
0622 adap->active_fe = -1;
0623 clear_bit(ADAP_SLEEP, &adap->state_bits);
0624 smp_mb__after_atomic();
0625 wake_up_bit(&adap->state_bits, ADAP_SLEEP);
0626 }
0627
0628 dev_dbg(&d->udev->dev, "%s: ret=%d\n", __func__, ret);
0629 return ret;
0630 }
0631
0632 static int dvb_usbv2_adapter_frontend_init(struct dvb_usb_adapter *adap)
0633 {
0634 int ret, i, count_registered = 0;
0635 struct dvb_usb_device *d = adap_to_d(adap);
0636 dev_dbg(&d->udev->dev, "%s: adap=%d\n", __func__, adap->id);
0637
0638 memset(adap->fe, 0, sizeof(adap->fe));
0639 adap->active_fe = -1;
0640
0641 if (d->props->frontend_attach) {
0642 ret = d->props->frontend_attach(adap);
0643 if (ret < 0) {
0644 dev_dbg(&d->udev->dev,
0645 "%s: frontend_attach() failed=%d\n",
0646 __func__, ret);
0647 goto err_dvb_frontend_detach;
0648 }
0649 } else {
0650 dev_dbg(&d->udev->dev, "%s: frontend_attach() do not exists\n",
0651 __func__);
0652 ret = 0;
0653 goto err;
0654 }
0655
0656 for (i = 0; i < MAX_NO_OF_FE_PER_ADAP && adap->fe[i]; i++) {
0657 adap->fe[i]->id = i;
0658
0659 adap->fe_init[i] = adap->fe[i]->ops.init;
0660 adap->fe[i]->ops.init = dvb_usb_fe_init;
0661 adap->fe_sleep[i] = adap->fe[i]->ops.sleep;
0662 adap->fe[i]->ops.sleep = dvb_usb_fe_sleep;
0663
0664 ret = dvb_register_frontend(&adap->dvb_adap, adap->fe[i]);
0665 if (ret < 0) {
0666 dev_err(&d->udev->dev,
0667 "%s: frontend%d registration failed\n",
0668 KBUILD_MODNAME, i);
0669 goto err_dvb_unregister_frontend;
0670 }
0671
0672 count_registered++;
0673 }
0674
0675 if (d->props->tuner_attach) {
0676 ret = d->props->tuner_attach(adap);
0677 if (ret < 0) {
0678 dev_dbg(&d->udev->dev, "%s: tuner_attach() failed=%d\n",
0679 __func__, ret);
0680 goto err_dvb_unregister_frontend;
0681 }
0682 }
0683
0684 ret = dvb_create_media_graph(&adap->dvb_adap, true);
0685 if (ret < 0)
0686 goto err_dvb_unregister_frontend;
0687
0688 ret = dvb_usbv2_media_device_register(adap);
0689
0690 return ret;
0691
0692 err_dvb_unregister_frontend:
0693 for (i = count_registered - 1; i >= 0; i--)
0694 dvb_unregister_frontend(adap->fe[i]);
0695
0696 err_dvb_frontend_detach:
0697 for (i = MAX_NO_OF_FE_PER_ADAP - 1; i >= 0; i--) {
0698 if (adap->fe[i]) {
0699 dvb_frontend_detach(adap->fe[i]);
0700 adap->fe[i] = NULL;
0701 }
0702 }
0703
0704 err:
0705 dev_dbg(&d->udev->dev, "%s: failed=%d\n", __func__, ret);
0706 return ret;
0707 }
0708
0709 static int dvb_usbv2_adapter_frontend_exit(struct dvb_usb_adapter *adap)
0710 {
0711 int ret, i;
0712 struct dvb_usb_device *d = adap_to_d(adap);
0713
0714 dev_dbg(&d->udev->dev, "%s: adap=%d\n", __func__, adap->id);
0715
0716 for (i = MAX_NO_OF_FE_PER_ADAP - 1; i >= 0; i--) {
0717 if (adap->fe[i]) {
0718 dvb_unregister_frontend(adap->fe[i]);
0719 dvb_frontend_detach(adap->fe[i]);
0720 }
0721 }
0722
0723 if (d->props->tuner_detach) {
0724 ret = d->props->tuner_detach(adap);
0725 if (ret < 0) {
0726 dev_dbg(&d->udev->dev, "%s: tuner_detach() failed=%d\n",
0727 __func__, ret);
0728 }
0729 }
0730
0731 if (d->props->frontend_detach) {
0732 ret = d->props->frontend_detach(adap);
0733 if (ret < 0) {
0734 dev_dbg(&d->udev->dev,
0735 "%s: frontend_detach() failed=%d\n",
0736 __func__, ret);
0737 }
0738 }
0739
0740 return 0;
0741 }
0742
0743 static int dvb_usbv2_adapter_init(struct dvb_usb_device *d)
0744 {
0745 struct dvb_usb_adapter *adap;
0746 int ret, i, adapter_count;
0747
0748
0749 adapter_count = d->props->num_adapters;
0750 if (d->props->get_adapter_count) {
0751 ret = d->props->get_adapter_count(d);
0752 if (ret < 0)
0753 goto err;
0754
0755 adapter_count = ret;
0756 }
0757
0758 for (i = 0; i < adapter_count; i++) {
0759 adap = &d->adapter[i];
0760 adap->id = i;
0761 adap->props = &d->props->adapter[i];
0762
0763
0764 if (d->udev->speed == USB_SPEED_FULL &&
0765 !(adap->props->caps & DVB_USB_ADAP_HAS_PID_FILTER)) {
0766 dev_err(&d->udev->dev,
0767 "%s: this USB2.0 device cannot be run on a USB1.1 port (it lacks a hardware PID filter)\n",
0768 KBUILD_MODNAME);
0769 ret = -ENODEV;
0770 goto err;
0771 } else if ((d->udev->speed == USB_SPEED_FULL &&
0772 adap->props->caps & DVB_USB_ADAP_HAS_PID_FILTER) ||
0773 (adap->props->caps & DVB_USB_ADAP_NEED_PID_FILTERING)) {
0774 dev_info(&d->udev->dev,
0775 "%s: will use the device's hardware PID filter (table count: %d)\n",
0776 KBUILD_MODNAME,
0777 adap->props->pid_filter_count);
0778 adap->pid_filtering = 1;
0779 adap->max_feed_count = adap->props->pid_filter_count;
0780 } else {
0781 dev_info(&d->udev->dev,
0782 "%s: will pass the complete MPEG2 transport stream to the software demuxer\n",
0783 KBUILD_MODNAME);
0784 adap->pid_filtering = 0;
0785 adap->max_feed_count = 255;
0786 }
0787
0788 if (!adap->pid_filtering && dvb_usb_force_pid_filter_usage &&
0789 adap->props->caps & DVB_USB_ADAP_HAS_PID_FILTER) {
0790 dev_info(&d->udev->dev,
0791 "%s: PID filter enabled by module option\n",
0792 KBUILD_MODNAME);
0793 adap->pid_filtering = 1;
0794 adap->max_feed_count = adap->props->pid_filter_count;
0795 }
0796
0797 ret = dvb_usbv2_adapter_stream_init(adap);
0798 if (ret)
0799 goto err;
0800
0801 ret = dvb_usbv2_adapter_dvb_init(adap);
0802 if (ret)
0803 goto err;
0804
0805 ret = dvb_usbv2_adapter_frontend_init(adap);
0806 if (ret)
0807 goto err;
0808
0809
0810 if (adap->fe[1])
0811 adap->dvb_adap.mfe_shared = 1;
0812 }
0813
0814 return 0;
0815 err:
0816 dev_dbg(&d->udev->dev, "%s: failed=%d\n", __func__, ret);
0817 return ret;
0818 }
0819
0820 static int dvb_usbv2_adapter_exit(struct dvb_usb_device *d)
0821 {
0822 int i;
0823 dev_dbg(&d->udev->dev, "%s:\n", __func__);
0824
0825 for (i = MAX_NO_OF_ADAPTER_PER_DEVICE - 1; i >= 0; i--) {
0826 if (d->adapter[i].props) {
0827 dvb_usbv2_adapter_dvb_exit(&d->adapter[i]);
0828 dvb_usbv2_adapter_stream_exit(&d->adapter[i]);
0829 dvb_usbv2_adapter_frontend_exit(&d->adapter[i]);
0830 dvb_usbv2_media_device_unregister(&d->adapter[i]);
0831 }
0832 }
0833
0834 return 0;
0835 }
0836
0837
0838 static int dvb_usbv2_exit(struct dvb_usb_device *d)
0839 {
0840 dev_dbg(&d->udev->dev, "%s:\n", __func__);
0841
0842 dvb_usbv2_remote_exit(d);
0843 dvb_usbv2_adapter_exit(d);
0844 dvb_usbv2_i2c_exit(d);
0845
0846 return 0;
0847 }
0848
0849 static int dvb_usbv2_init(struct dvb_usb_device *d)
0850 {
0851 int ret;
0852 dev_dbg(&d->udev->dev, "%s:\n", __func__);
0853
0854 dvb_usbv2_device_power_ctrl(d, 1);
0855
0856 if (d->props->read_config) {
0857 ret = d->props->read_config(d);
0858 if (ret < 0)
0859 goto err;
0860 }
0861
0862 ret = dvb_usbv2_i2c_init(d);
0863 if (ret < 0)
0864 goto err;
0865
0866 ret = dvb_usbv2_adapter_init(d);
0867 if (ret < 0)
0868 goto err;
0869
0870 if (d->props->init) {
0871 ret = d->props->init(d);
0872 if (ret < 0)
0873 goto err;
0874 }
0875
0876 ret = dvb_usbv2_remote_init(d);
0877 if (ret < 0)
0878 goto err;
0879
0880 dvb_usbv2_device_power_ctrl(d, 0);
0881
0882 return 0;
0883 err:
0884 dvb_usbv2_device_power_ctrl(d, 0);
0885 dev_dbg(&d->udev->dev, "%s: failed=%d\n", __func__, ret);
0886 return ret;
0887 }
0888
0889 int dvb_usbv2_probe(struct usb_interface *intf,
0890 const struct usb_device_id *id)
0891 {
0892 int ret;
0893 struct dvb_usb_device *d;
0894 struct usb_device *udev = interface_to_usbdev(intf);
0895 struct dvb_usb_driver_info *driver_info =
0896 (struct dvb_usb_driver_info *) id->driver_info;
0897
0898 dev_dbg(&udev->dev, "%s: bInterfaceNumber=%d\n", __func__,
0899 intf->cur_altsetting->desc.bInterfaceNumber);
0900
0901 if (!id->driver_info) {
0902 dev_err(&udev->dev, "%s: driver_info failed\n", KBUILD_MODNAME);
0903 ret = -ENODEV;
0904 goto err;
0905 }
0906
0907 d = kzalloc(sizeof(struct dvb_usb_device), GFP_KERNEL);
0908 if (!d) {
0909 dev_err(&udev->dev, "%s: kzalloc() failed\n", KBUILD_MODNAME);
0910 ret = -ENOMEM;
0911 goto err;
0912 }
0913
0914 d->intf = intf;
0915 d->name = driver_info->name;
0916 d->rc_map = driver_info->rc_map;
0917 d->udev = udev;
0918 d->props = driver_info->props;
0919
0920 if (intf->cur_altsetting->desc.bInterfaceNumber !=
0921 d->props->bInterfaceNumber) {
0922 ret = -ENODEV;
0923 goto err_kfree_d;
0924 }
0925
0926 mutex_init(&d->usb_mutex);
0927 mutex_init(&d->i2c_mutex);
0928
0929 if (d->props->size_of_priv) {
0930 d->priv = kzalloc(d->props->size_of_priv, GFP_KERNEL);
0931 if (!d->priv) {
0932 dev_err(&d->udev->dev, "%s: kzalloc() failed\n",
0933 KBUILD_MODNAME);
0934 ret = -ENOMEM;
0935 goto err_kfree_d;
0936 }
0937 }
0938
0939 if (d->props->probe) {
0940 ret = d->props->probe(d);
0941 if (ret)
0942 goto err_kfree_priv;
0943 }
0944
0945 if (d->props->identify_state) {
0946 const char *name = NULL;
0947 ret = d->props->identify_state(d, &name);
0948 if (ret == COLD) {
0949 dev_info(&d->udev->dev,
0950 "%s: found a '%s' in cold state\n",
0951 KBUILD_MODNAME, d->name);
0952
0953 if (!name)
0954 name = d->props->firmware;
0955
0956 ret = dvb_usbv2_download_firmware(d, name);
0957 if (ret == 0) {
0958
0959 ;
0960 } else if (ret == RECONNECTS_USB) {
0961
0962
0963
0964
0965
0966
0967
0968
0969 goto exit;
0970 } else {
0971 goto err_free_all;
0972 }
0973 } else if (ret != WARM) {
0974 goto err_free_all;
0975 }
0976 }
0977
0978 dev_info(&d->udev->dev, "%s: found a '%s' in warm state\n",
0979 KBUILD_MODNAME, d->name);
0980
0981 ret = dvb_usbv2_init(d);
0982 if (ret < 0)
0983 goto err_free_all;
0984
0985 dev_info(&d->udev->dev,
0986 "%s: '%s' successfully initialized and connected\n",
0987 KBUILD_MODNAME, d->name);
0988 exit:
0989 usb_set_intfdata(intf, d);
0990
0991 return 0;
0992 err_free_all:
0993 dvb_usbv2_exit(d);
0994 if (d->props->disconnect)
0995 d->props->disconnect(d);
0996 err_kfree_priv:
0997 kfree(d->priv);
0998 err_kfree_d:
0999 kfree(d);
1000 err:
1001 dev_dbg(&udev->dev, "%s: failed=%d\n", __func__, ret);
1002 return ret;
1003 }
1004 EXPORT_SYMBOL(dvb_usbv2_probe);
1005
1006 void 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 }
1030 EXPORT_SYMBOL(dvb_usbv2_disconnect);
1031
1032 int 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
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
1053 usb_urb_killv2(&d->adapter[i].stream);
1054
1055 ret = dvb_frontend_suspend(fe);
1056 }
1057 }
1058
1059 return ret;
1060 }
1061 EXPORT_SYMBOL(dvb_usbv2_suspend);
1062
1063 static 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
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
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
1094 int 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 }
1101 EXPORT_SYMBOL(dvb_usbv2_resume);
1102
1103 int 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 }
1120 EXPORT_SYMBOL(dvb_usbv2_reset_resume);
1121
1122 MODULE_VERSION("2.0");
1123 MODULE_AUTHOR("Patrick Boettcher <patrick.boettcher@posteo.de>");
1124 MODULE_AUTHOR("Antti Palosaari <crope@iki.fi>");
1125 MODULE_DESCRIPTION("DVB USB common");
1126 MODULE_LICENSE("GPL");