[PATCH] dvb: modified dvb_register_adapter() to avoid kmalloc/kfree

Modified dvb_register_adapter() to avoid kmalloc/kfree. Drivers have to embed
struct dvb_adapter into their private data struct from now on. (Andreas
Oberritter)

Signed-off-by: Johannes Stezenbach <js@linuxtv.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>

authored by

Johannes Stezenbach and committed by
Linus Torvalds
fdc53a6d 0b3f5a57

+111 -118
+10 -10
drivers/media/dvb/b2c2/skystar2.c
··· 97 u8 mac_addr[8]; 98 u32 dw_sram_type; 99 100 - struct dvb_adapter *dvb_adapter; 101 struct dvb_demux demux; 102 struct dmxdev dmxdev; 103 struct dmx_frontend hw_frontend; ··· 2461 skystar2->pdev->subsystem_vendor, 2462 skystar2->pdev->subsystem_device); 2463 } else { 2464 - if (dvb_register_frontend(skystar2->dvb_adapter, skystar2->fe)) { 2465 printk("skystar2: Frontend registration failed!\n"); 2466 if (skystar2->fe->ops->release) 2467 skystar2->fe->ops->release(skystar2->fe); ··· 2486 if (ret < 0) 2487 goto out; 2488 2489 - ret = dvb_register_adapter(&dvb_adapter, skystar2_pci_driver.name, 2490 THIS_MODULE); 2491 if (ret < 0) { 2492 printk("%s: Error registering DVB adapter\n", __FUNCTION__); 2493 goto err_halt; 2494 } 2495 2496 - adapter = pci_get_drvdata(pdev); 2497 - 2498 dvb_adapter->priv = adapter; 2499 - adapter->dvb_adapter = dvb_adapter; 2500 2501 2502 init_MUTEX(&adapter->i2c_sem); ··· 2541 adapter->dmxdev.demux = dmx; 2542 adapter->dmxdev.capabilities = 0; 2543 2544 - ret = dvb_dmxdev_init(&adapter->dmxdev, adapter->dvb_adapter); 2545 if (ret < 0) 2546 goto err_dmx_release; 2547 ··· 2559 if (ret < 0) 2560 goto err_remove_mem_frontend; 2561 2562 - dvb_net_init(adapter->dvb_adapter, &adapter->dvbnet, &dvbdemux->dmx); 2563 2564 frontend_init(adapter); 2565 out: ··· 2576 err_i2c_del: 2577 i2c_del_adapter(&adapter->i2c_adap); 2578 err_dvb_unregister: 2579 - dvb_unregister_adapter(adapter->dvb_adapter); 2580 err_halt: 2581 driver_halt(pdev); 2582 goto out; ··· 2605 if (adapter->fe != NULL) 2606 dvb_unregister_frontend(adapter->fe); 2607 2608 - dvb_unregister_adapter(adapter->dvb_adapter); 2609 2610 i2c_del_adapter(&adapter->i2c_adap); 2611
··· 97 u8 mac_addr[8]; 98 u32 dw_sram_type; 99 100 + struct dvb_adapter dvb_adapter; 101 struct dvb_demux demux; 102 struct dmxdev dmxdev; 103 struct dmx_frontend hw_frontend; ··· 2461 skystar2->pdev->subsystem_vendor, 2462 skystar2->pdev->subsystem_device); 2463 } else { 2464 + if (dvb_register_frontend(&skystar2->dvb_adapter, skystar2->fe)) { 2465 printk("skystar2: Frontend registration failed!\n"); 2466 if (skystar2->fe->ops->release) 2467 skystar2->fe->ops->release(skystar2->fe); ··· 2486 if (ret < 0) 2487 goto out; 2488 2489 + adapter = pci_get_drvdata(pdev); 2490 + dvb_adapter = &adapter->dvb_adapter; 2491 + 2492 + ret = dvb_register_adapter(dvb_adapter, skystar2_pci_driver.name, 2493 THIS_MODULE); 2494 if (ret < 0) { 2495 printk("%s: Error registering DVB adapter\n", __FUNCTION__); 2496 goto err_halt; 2497 } 2498 2499 dvb_adapter->priv = adapter; 2500 2501 2502 init_MUTEX(&adapter->i2c_sem); ··· 2541 adapter->dmxdev.demux = dmx; 2542 adapter->dmxdev.capabilities = 0; 2543 2544 + ret = dvb_dmxdev_init(&adapter->dmxdev, &adapter->dvb_adapter); 2545 if (ret < 0) 2546 goto err_dmx_release; 2547 ··· 2559 if (ret < 0) 2560 goto err_remove_mem_frontend; 2561 2562 + dvb_net_init(&adapter->dvb_adapter, &adapter->dvbnet, &dvbdemux->dmx); 2563 2564 frontend_init(adapter); 2565 out: ··· 2576 err_i2c_del: 2577 i2c_del_adapter(&adapter->i2c_adap); 2578 err_dvb_unregister: 2579 + dvb_unregister_adapter(&adapter->dvb_adapter); 2580 err_halt: 2581 driver_halt(pdev); 2582 goto out; ··· 2605 if (adapter->fe != NULL) 2606 dvb_unregister_frontend(adapter->fe); 2607 2608 + dvb_unregister_adapter(&adapter->dvb_adapter); 2609 2610 i2c_del_adapter(&adapter->i2c_adap); 2611
+10 -10
drivers/media/dvb/bt8xx/dvb-bt8xx.c
··· 531 card->bt->dev->subsystem_vendor, 532 card->bt->dev->subsystem_device); 533 } else { 534 - if (dvb_register_frontend(card->dvb_adapter, card->fe)) { 535 printk("dvb-bt8xx: Frontend registration failed!\n"); 536 if (card->fe->ops->release) 537 card->fe->ops->release(card->fe); ··· 550 return result; 551 552 } 553 - card->dvb_adapter->priv = card; 554 555 card->bt->adapter = card->i2c_adapter; 556 ··· 568 if ((result = dvb_dmx_init(&card->demux)) < 0) { 569 printk("dvb_bt8xx: dvb_dmx_init failed (errno = %d)\n", result); 570 571 - dvb_unregister_adapter(card->dvb_adapter); 572 return result; 573 } 574 ··· 576 card->dmxdev.demux = &card->demux.dmx; 577 card->dmxdev.capabilities = 0; 578 579 - if ((result = dvb_dmxdev_init(&card->dmxdev, card->dvb_adapter)) < 0) { 580 printk("dvb_bt8xx: dvb_dmxdev_init failed (errno = %d)\n", result); 581 582 dvb_dmx_release(&card->demux); 583 - dvb_unregister_adapter(card->dvb_adapter); 584 return result; 585 } 586 ··· 591 592 dvb_dmxdev_release(&card->dmxdev); 593 dvb_dmx_release(&card->demux); 594 - dvb_unregister_adapter(card->dvb_adapter); 595 return result; 596 } 597 ··· 603 card->demux.dmx.remove_frontend(&card->demux.dmx, &card->fe_hw); 604 dvb_dmxdev_release(&card->dmxdev); 605 dvb_dmx_release(&card->demux); 606 - dvb_unregister_adapter(card->dvb_adapter); 607 return result; 608 } 609 ··· 614 card->demux.dmx.remove_frontend(&card->demux.dmx, &card->fe_hw); 615 dvb_dmxdev_release(&card->dmxdev); 616 dvb_dmx_release(&card->demux); 617 - dvb_unregister_adapter(card->dvb_adapter); 618 return result; 619 } 620 621 - dvb_net_init(card->dvb_adapter, &card->dvbnet, &card->demux.dmx); 622 623 tasklet_init(&card->bt->tasklet, dvb_bt8xx_task, (unsigned long) card); 624 ··· 759 dvb_dmxdev_release(&card->dmxdev); 760 dvb_dmx_release(&card->demux); 761 if (card->fe) dvb_unregister_frontend(card->fe); 762 - dvb_unregister_adapter(card->dvb_adapter); 763 764 kfree(card); 765
··· 531 card->bt->dev->subsystem_vendor, 532 card->bt->dev->subsystem_device); 533 } else { 534 + if (dvb_register_frontend(&card->dvb_adapter, card->fe)) { 535 printk("dvb-bt8xx: Frontend registration failed!\n"); 536 if (card->fe->ops->release) 537 card->fe->ops->release(card->fe); ··· 550 return result; 551 552 } 553 + card->dvb_adapter.priv = card; 554 555 card->bt->adapter = card->i2c_adapter; 556 ··· 568 if ((result = dvb_dmx_init(&card->demux)) < 0) { 569 printk("dvb_bt8xx: dvb_dmx_init failed (errno = %d)\n", result); 570 571 + dvb_unregister_adapter(&card->dvb_adapter); 572 return result; 573 } 574 ··· 576 card->dmxdev.demux = &card->demux.dmx; 577 card->dmxdev.capabilities = 0; 578 579 + if ((result = dvb_dmxdev_init(&card->dmxdev, &card->dvb_adapter)) < 0) { 580 printk("dvb_bt8xx: dvb_dmxdev_init failed (errno = %d)\n", result); 581 582 dvb_dmx_release(&card->demux); 583 + dvb_unregister_adapter(&card->dvb_adapter); 584 return result; 585 } 586 ··· 591 592 dvb_dmxdev_release(&card->dmxdev); 593 dvb_dmx_release(&card->demux); 594 + dvb_unregister_adapter(&card->dvb_adapter); 595 return result; 596 } 597 ··· 603 card->demux.dmx.remove_frontend(&card->demux.dmx, &card->fe_hw); 604 dvb_dmxdev_release(&card->dmxdev); 605 dvb_dmx_release(&card->demux); 606 + dvb_unregister_adapter(&card->dvb_adapter); 607 return result; 608 } 609 ··· 614 card->demux.dmx.remove_frontend(&card->demux.dmx, &card->fe_hw); 615 dvb_dmxdev_release(&card->dmxdev); 616 dvb_dmx_release(&card->demux); 617 + dvb_unregister_adapter(&card->dvb_adapter); 618 return result; 619 } 620 621 + dvb_net_init(&card->dvb_adapter, &card->dvbnet, &card->demux.dmx); 622 623 tasklet_init(&card->bt->tasklet, dvb_bt8xx_task, (unsigned long) card); 624 ··· 759 dvb_dmxdev_release(&card->dmxdev); 760 dvb_dmx_release(&card->demux); 761 if (card->fe) dvb_unregister_frontend(card->fe); 762 + dvb_unregister_adapter(&card->dvb_adapter); 763 764 kfree(card); 765
+1 -1
drivers/media/dvb/bt8xx/dvb-bt8xx.h
··· 40 struct semaphore lock; 41 int nfeeds; 42 char card_name[32]; 43 - struct dvb_adapter *dvb_adapter; 44 struct bt878 *bt; 45 unsigned int bttv_nr; 46 struct dvb_demux demux;
··· 40 struct semaphore lock; 41 int nfeeds; 42 char card_name[32]; 43 + struct dvb_adapter dvb_adapter; 44 struct bt878 *bt; 45 unsigned int bttv_nr; 46 struct dvb_demux demux;
+6 -6
drivers/media/dvb/cinergyT2/cinergyT2.c
··· 119 struct dvb_demux demux; 120 struct usb_device *udev; 121 struct semaphore sem; 122 - struct dvb_adapter *adapter; 123 struct dvb_device *fedev; 124 struct dmxdev dmxdev; 125 struct dvb_net dvbnet; ··· 813 cinergyt2->dmxdev.demux = &cinergyt2->demux.dmx; 814 cinergyt2->dmxdev.capabilities = 0; 815 816 - if ((err = dvb_dmxdev_init(&cinergyt2->dmxdev, cinergyt2->adapter)) < 0) { 817 dprintk(1, "dvb_dmxdev_init() failed (err = %d)\n", err); 818 goto bailout; 819 } 820 821 - if (dvb_net_init(cinergyt2->adapter, &cinergyt2->dvbnet, &cinergyt2->demux.dmx)) 822 dprintk(1, "dvb_net_init() failed!\n"); 823 824 - dvb_register_device(cinergyt2->adapter, &cinergyt2->fedev, 825 &cinergyt2_fe_template, cinergyt2, 826 DVB_DEVICE_FRONTEND); 827 ··· 848 bailout: 849 dvb_dmxdev_release(&cinergyt2->dmxdev); 850 dvb_dmx_release(&cinergyt2->demux); 851 - dvb_unregister_adapter (cinergyt2->adapter); 852 cinergyt2_free_stream_urbs (cinergyt2); 853 kfree(cinergyt2); 854 return -ENOMEM; ··· 872 dvb_dmxdev_release(&cinergyt2->dmxdev); 873 dvb_dmx_release(&cinergyt2->demux); 874 dvb_unregister_device(cinergyt2->fedev); 875 - dvb_unregister_adapter(cinergyt2->adapter); 876 877 cinergyt2_free_stream_urbs(cinergyt2); 878 up(&cinergyt2->sem);
··· 119 struct dvb_demux demux; 120 struct usb_device *udev; 121 struct semaphore sem; 122 + struct dvb_adapter adapter; 123 struct dvb_device *fedev; 124 struct dmxdev dmxdev; 125 struct dvb_net dvbnet; ··· 813 cinergyt2->dmxdev.demux = &cinergyt2->demux.dmx; 814 cinergyt2->dmxdev.capabilities = 0; 815 816 + if ((err = dvb_dmxdev_init(&cinergyt2->dmxdev, &cinergyt2->adapter)) < 0) { 817 dprintk(1, "dvb_dmxdev_init() failed (err = %d)\n", err); 818 goto bailout; 819 } 820 821 + if (dvb_net_init(&cinergyt2->adapter, &cinergyt2->dvbnet, &cinergyt2->demux.dmx)) 822 dprintk(1, "dvb_net_init() failed!\n"); 823 824 + dvb_register_device(&cinergyt2->adapter, &cinergyt2->fedev, 825 &cinergyt2_fe_template, cinergyt2, 826 DVB_DEVICE_FRONTEND); 827 ··· 848 bailout: 849 dvb_dmxdev_release(&cinergyt2->dmxdev); 850 dvb_dmx_release(&cinergyt2->demux); 851 + dvb_unregister_adapter (&cinergyt2->adapter); 852 cinergyt2_free_stream_urbs (cinergyt2); 853 kfree(cinergyt2); 854 return -ENOMEM; ··· 872 dvb_dmxdev_release(&cinergyt2->dmxdev); 873 dvb_dmx_release(&cinergyt2->demux); 874 dvb_unregister_device(cinergyt2->fedev); 875 + dvb_unregister_adapter(&cinergyt2->adapter); 876 877 cinergyt2_free_stream_urbs(cinergyt2); 878 up(&cinergyt2->sem);
+5 -5
drivers/media/dvb/dibusb/dvb-dibusb-dvb.c
··· 131 deb_info("dvb_register_adapter failed: error %d", ret); 132 goto err; 133 } 134 - dib->adapter->priv = dib; 135 136 /* i2c is done in dibusb_i2c_init */ 137 ··· 151 dib->dmxdev.filternum = dib->demux.filternum; 152 dib->dmxdev.demux = &dib->demux.dmx; 153 dib->dmxdev.capabilities = 0; 154 - if ((ret = dvb_dmxdev_init(&dib->dmxdev, dib->adapter)) < 0) { 155 err("dvb_dmxdev_init failed: error %d",ret); 156 goto err_dmx_dev; 157 } 158 159 - dvb_net_init(dib->adapter, &dib->dvb_net, &dib->demux.dmx); 160 161 goto success; 162 err_dmx_dev: 163 dvb_dmx_release(&dib->demux); 164 err_dmx: 165 - dvb_unregister_adapter(dib->adapter); 166 err: 167 return ret; 168 success: ··· 179 dib->demux.dmx.close(&dib->demux.dmx); 180 dvb_dmxdev_release(&dib->dmxdev); 181 dvb_dmx_release(&dib->demux); 182 - dvb_unregister_adapter(dib->adapter); 183 } 184 return 0; 185 }
··· 131 deb_info("dvb_register_adapter failed: error %d", ret); 132 goto err; 133 } 134 + dib->adapter.priv = dib; 135 136 /* i2c is done in dibusb_i2c_init */ 137 ··· 151 dib->dmxdev.filternum = dib->demux.filternum; 152 dib->dmxdev.demux = &dib->demux.dmx; 153 dib->dmxdev.capabilities = 0; 154 + if ((ret = dvb_dmxdev_init(&dib->dmxdev, &dib->adapter)) < 0) { 155 err("dvb_dmxdev_init failed: error %d",ret); 156 goto err_dmx_dev; 157 } 158 159 + dvb_net_init(&dib->adapter, &dib->dvb_net, &dib->demux.dmx); 160 161 goto success; 162 err_dmx_dev: 163 dvb_dmx_release(&dib->demux); 164 err_dmx: 165 + dvb_unregister_adapter(&dib->adapter); 166 err: 167 return ret; 168 success: ··· 179 dib->demux.dmx.close(&dib->demux.dmx); 180 dvb_dmxdev_release(&dib->dmxdev); 181 dvb_dmx_release(&dib->demux); 182 + dvb_unregister_adapter(&dib->adapter); 183 } 184 return 0; 185 }
+2 -2
drivers/media/dvb/dibusb/dvb-dibusb-fe-i2c.c
··· 183 dib->dibdev->name); 184 return -ENODEV; 185 } else { 186 - if (dvb_register_frontend(dib->adapter, dib->fe)) { 187 err("Frontend registration failed."); 188 if (dib->fe->ops->release) 189 dib->fe->ops->release(dib->fe); ··· 206 { 207 int ret = 0; 208 209 - dib->adapter->priv = dib; 210 211 strncpy(dib->i2c_adap.name,dib->dibdev->name,I2C_NAME_SIZE); 212 #ifdef I2C_ADAP_CLASS_TV_DIGITAL
··· 183 dib->dibdev->name); 184 return -ENODEV; 185 } else { 186 + if (dvb_register_frontend(&dib->adapter, dib->fe)) { 187 err("Frontend registration failed."); 188 if (dib->fe->ops->release) 189 dib->fe->ops->release(dib->fe); ··· 206 { 207 int ret = 0; 208 209 + dib->adapter.priv = dib; 210 211 strncpy(dib->i2c_adap.name,dib->dibdev->name,I2C_NAME_SIZE); 212 #ifdef I2C_ADAP_CLASS_TV_DIGITAL
+1 -1
drivers/media/dvb/dibusb/dvb-dibusb.h
··· 181 struct semaphore i2c_sem; 182 183 /* dvb */ 184 - struct dvb_adapter *adapter; 185 struct dmxdev dmxdev; 186 struct dvb_demux demux; 187 struct dvb_net dvb_net;
··· 181 struct semaphore i2c_sem; 182 183 /* dvb */ 184 + struct dvb_adapter adapter; 185 struct dmxdev dmxdev; 186 struct dvb_demux demux; 187 struct dvb_net dvb_net;
+1 -8
drivers/media/dvb/dvb-core/dvbdev.c
··· 286 } 287 288 289 - int dvb_register_adapter(struct dvb_adapter **padap, const char *name, struct module *module) 290 { 291 - struct dvb_adapter *adap; 292 int num; 293 294 if (down_interruptible (&dvbdev_register_lock)) ··· 296 if ((num = dvbdev_get_free_adapter_num ()) < 0) { 297 up (&dvbdev_register_lock); 298 return -ENFILE; 299 - } 300 - 301 - if (!(*padap = adap = kmalloc(sizeof(struct dvb_adapter), GFP_KERNEL))) { 302 - up(&dvbdev_register_lock); 303 - return -ENOMEM; 304 } 305 306 memset (adap, 0, sizeof(struct dvb_adapter)); ··· 325 return -ERESTARTSYS; 326 list_del (&adap->list_head); 327 up (&dvbdev_register_lock); 328 - kfree (adap); 329 return 0; 330 } 331 EXPORT_SYMBOL(dvb_unregister_adapter);
··· 286 } 287 288 289 + int dvb_register_adapter(struct dvb_adapter *adap, const char *name, struct module *module) 290 { 291 int num; 292 293 if (down_interruptible (&dvbdev_register_lock)) ··· 297 if ((num = dvbdev_get_free_adapter_num ()) < 0) { 298 up (&dvbdev_register_lock); 299 return -ENFILE; 300 } 301 302 memset (adap, 0, sizeof(struct dvb_adapter)); ··· 331 return -ERESTARTSYS; 332 list_del (&adap->list_head); 333 up (&dvbdev_register_lock); 334 return 0; 335 } 336 EXPORT_SYMBOL(dvb_unregister_adapter);
+1 -1
drivers/media/dvb/dvb-core/dvbdev.h
··· 76 }; 77 78 79 - extern int dvb_register_adapter (struct dvb_adapter **padap, const char *name, struct module *module); 80 extern int dvb_unregister_adapter (struct dvb_adapter *adap); 81 82 extern int dvb_register_device (struct dvb_adapter *adap,
··· 76 }; 77 78 79 + extern int dvb_register_adapter (struct dvb_adapter *adap, const char *name, struct module *module); 80 extern int dvb_unregister_adapter (struct dvb_adapter *adap); 81 82 extern int dvb_register_device (struct dvb_adapter *adap,
+14 -14
drivers/media/dvb/ttpci/av7110.c
··· 130 av7110->current_input = 0; 131 if (i2c_writereg(av7110, 0x20, 0x00, 0x00) == 1) { 132 printk ("dvb-ttpci: Crystal audio DAC @ card %d detected\n", 133 - av7110->dvb_adapter->num); 134 av7110->adac_type = DVB_ADAC_CRYSTAL; 135 i2c_writereg(av7110, 0x20, 0x01, 0xd2); 136 i2c_writereg(av7110, 0x20, 0x02, 0x49); ··· 145 } 146 else if (dev->pci->subsystem_vendor == 0x110a) { 147 printk("dvb-ttpci: DVB-C w/o analog module @ card %d detected\n", 148 - av7110->dvb_adapter->num); 149 av7110->adac_type = DVB_ADAC_NONE; 150 } 151 else { 152 av7110->adac_type = adac; 153 printk("dvb-ttpci: adac type set to %d @ card %d\n", 154 - av7110->dvb_adapter->num, av7110->adac_type); 155 } 156 157 if (av7110->adac_type == DVB_ADAC_NONE || av7110->adac_type == DVB_ADAC_MSP) { ··· 231 232 if (newloops == av7110->arm_loops) { 233 printk(KERN_ERR "dvb-ttpci: ARM crashed @ card %d\n", 234 - av7110->dvb_adapter->num); 235 236 arm_error(av7110); 237 av7710_set_video_mode(av7110, vidmode); ··· 1282 av7110->dmxdev.demux = &dvbdemux->dmx; 1283 av7110->dmxdev.capabilities = 0; 1284 1285 - dvb_dmxdev_init(&av7110->dmxdev, av7110->dvb_adapter); 1286 1287 av7110->hw_frontend.source = DMX_FRONTEND_0; 1288 ··· 1307 av7110_ca_register(av7110); 1308 1309 #ifdef CONFIG_DVB_AV7110_OSD 1310 - dvb_register_device(av7110->dvb_adapter, &av7110->osd_dev, 1311 &dvbdev_osd, av7110, DVB_DEVICE_OSD); 1312 #endif 1313 1314 - dvb_net_init(av7110->dvb_adapter, &av7110->dvb_net, &dvbdemux->dmx); 1315 1316 if (budgetpatch) { 1317 /* initialize software demux1 without its own frontend ··· 1334 av7110->dmxdev1.demux = &dvbdemux1->dmx; 1335 av7110->dmxdev1.capabilities = 0; 1336 1337 - dvb_dmxdev_init(&av7110->dmxdev1, av7110->dvb_adapter); 1338 1339 - dvb_net_init(av7110->dvb_adapter, &av7110->dvb_net1, &dvbdemux1->dmx); 1340 printk("dvb-ttpci: additional demux1 for budget-patch registered\n"); 1341 } 1342 return 0; ··· 2246 FE_FUNC_OVERRIDE(av7110->fe->ops->dishnetwork_send_legacy_command, av7110->fe_dishnetwork_send_legacy_command, av7110_fe_dishnetwork_send_legacy_command); 2247 FE_FUNC_OVERRIDE(av7110->fe->ops->set_frontend, av7110->fe_set_frontend, av7110_fe_set_frontend); 2248 2249 - ret = dvb_register_frontend(av7110->dvb_adapter, av7110->fe); 2250 if (ret < 0) { 2251 printk("av7110: Frontend registration failed!\n"); 2252 if (av7110->fe->ops->release) ··· 2460 goto err_dvb_unregister_adapter_2; 2461 2462 ttpci_eeprom_parse_mac(&av7110->i2c_adap, 2463 - av7110->dvb_adapter->proposed_mac); 2464 ret = -ENOMEM; 2465 2466 if (budgetpatch) { ··· 2631 if (ret < 0) 2632 goto err_av7110_unregister_11; 2633 2634 - av7110->dvb_adapter->priv = av7110; 2635 ret = frontend_init(av7110); 2636 if (ret < 0) 2637 goto err_av7110_exit_v4l_12; ··· 2666 err_i2c_del_3: 2667 i2c_del_adapter(&av7110->i2c_adap); 2668 err_dvb_unregister_adapter_2: 2669 - dvb_unregister_adapter(av7110->dvb_adapter); 2670 err_put_firmware_1: 2671 put_firmware(av7110); 2672 err_kfree_0: ··· 2712 2713 i2c_del_adapter(&av7110->i2c_adap); 2714 2715 - dvb_unregister_adapter (av7110->dvb_adapter); 2716 2717 av7110_num--; 2718
··· 130 av7110->current_input = 0; 131 if (i2c_writereg(av7110, 0x20, 0x00, 0x00) == 1) { 132 printk ("dvb-ttpci: Crystal audio DAC @ card %d detected\n", 133 + av7110->dvb_adapter.num); 134 av7110->adac_type = DVB_ADAC_CRYSTAL; 135 i2c_writereg(av7110, 0x20, 0x01, 0xd2); 136 i2c_writereg(av7110, 0x20, 0x02, 0x49); ··· 145 } 146 else if (dev->pci->subsystem_vendor == 0x110a) { 147 printk("dvb-ttpci: DVB-C w/o analog module @ card %d detected\n", 148 + av7110->dvb_adapter.num); 149 av7110->adac_type = DVB_ADAC_NONE; 150 } 151 else { 152 av7110->adac_type = adac; 153 printk("dvb-ttpci: adac type set to %d @ card %d\n", 154 + av7110->dvb_adapter.num, av7110->adac_type); 155 } 156 157 if (av7110->adac_type == DVB_ADAC_NONE || av7110->adac_type == DVB_ADAC_MSP) { ··· 231 232 if (newloops == av7110->arm_loops) { 233 printk(KERN_ERR "dvb-ttpci: ARM crashed @ card %d\n", 234 + av7110->dvb_adapter.num); 235 236 arm_error(av7110); 237 av7710_set_video_mode(av7110, vidmode); ··· 1282 av7110->dmxdev.demux = &dvbdemux->dmx; 1283 av7110->dmxdev.capabilities = 0; 1284 1285 + dvb_dmxdev_init(&av7110->dmxdev, &av7110->dvb_adapter); 1286 1287 av7110->hw_frontend.source = DMX_FRONTEND_0; 1288 ··· 1307 av7110_ca_register(av7110); 1308 1309 #ifdef CONFIG_DVB_AV7110_OSD 1310 + dvb_register_device(&av7110->dvb_adapter, &av7110->osd_dev, 1311 &dvbdev_osd, av7110, DVB_DEVICE_OSD); 1312 #endif 1313 1314 + dvb_net_init(&av7110->dvb_adapter, &av7110->dvb_net, &dvbdemux->dmx); 1315 1316 if (budgetpatch) { 1317 /* initialize software demux1 without its own frontend ··· 1334 av7110->dmxdev1.demux = &dvbdemux1->dmx; 1335 av7110->dmxdev1.capabilities = 0; 1336 1337 + dvb_dmxdev_init(&av7110->dmxdev1, &av7110->dvb_adapter); 1338 1339 + dvb_net_init(&av7110->dvb_adapter, &av7110->dvb_net1, &dvbdemux1->dmx); 1340 printk("dvb-ttpci: additional demux1 for budget-patch registered\n"); 1341 } 1342 return 0; ··· 2246 FE_FUNC_OVERRIDE(av7110->fe->ops->dishnetwork_send_legacy_command, av7110->fe_dishnetwork_send_legacy_command, av7110_fe_dishnetwork_send_legacy_command); 2247 FE_FUNC_OVERRIDE(av7110->fe->ops->set_frontend, av7110->fe_set_frontend, av7110_fe_set_frontend); 2248 2249 + ret = dvb_register_frontend(&av7110->dvb_adapter, av7110->fe); 2250 if (ret < 0) { 2251 printk("av7110: Frontend registration failed!\n"); 2252 if (av7110->fe->ops->release) ··· 2460 goto err_dvb_unregister_adapter_2; 2461 2462 ttpci_eeprom_parse_mac(&av7110->i2c_adap, 2463 + av7110->dvb_adapter.proposed_mac); 2464 ret = -ENOMEM; 2465 2466 if (budgetpatch) { ··· 2631 if (ret < 0) 2632 goto err_av7110_unregister_11; 2633 2634 + av7110->dvb_adapter.priv = av7110; 2635 ret = frontend_init(av7110); 2636 if (ret < 0) 2637 goto err_av7110_exit_v4l_12; ··· 2666 err_i2c_del_3: 2667 i2c_del_adapter(&av7110->i2c_adap); 2668 err_dvb_unregister_adapter_2: 2669 + dvb_unregister_adapter(&av7110->dvb_adapter); 2670 err_put_firmware_1: 2671 put_firmware(av7110); 2672 err_kfree_0: ··· 2712 2713 i2c_del_adapter(&av7110->i2c_adap); 2714 2715 + dvb_unregister_adapter (&av7110->dvb_adapter); 2716 2717 av7110_num--; 2718
+1 -1
drivers/media/dvb/ttpci/av7110.h
··· 220 221 struct audio_mixer mixer; 222 223 - struct dvb_adapter *dvb_adapter; 224 struct dvb_device *video_dev; 225 struct dvb_device *audio_dev; 226 struct dvb_device *ca_dev;
··· 220 221 struct audio_mixer mixer; 222 223 + struct dvb_adapter dvb_adapter; 224 struct dvb_device *video_dev; 225 struct dvb_device *audio_dev; 226 struct dvb_device *ca_dev;
+2 -2
drivers/media/dvb/ttpci/av7110_av.c
··· 1415 av7110->video_events.overflow = 0; 1416 memset(&av7110->video_size, 0, sizeof (video_size_t)); 1417 1418 - dvb_register_device(av7110->dvb_adapter, &av7110->video_dev, 1419 &dvbdev_video, av7110, DVB_DEVICE_VIDEO); 1420 1421 - dvb_register_device(av7110->dvb_adapter, &av7110->audio_dev, 1422 &dvbdev_audio, av7110, DVB_DEVICE_AUDIO); 1423 1424 return 0;
··· 1415 av7110->video_events.overflow = 0; 1416 memset(&av7110->video_size, 0, sizeof (video_size_t)); 1417 1418 + dvb_register_device(&av7110->dvb_adapter, &av7110->video_dev, 1419 &dvbdev_video, av7110, DVB_DEVICE_VIDEO); 1420 1421 + dvb_register_device(&av7110->dvb_adapter, &av7110->audio_dev, 1422 &dvbdev_audio, av7110, DVB_DEVICE_AUDIO); 1423 1424 return 0;
+1 -1
drivers/media/dvb/ttpci/av7110_ca.c
··· 370 371 int av7110_ca_register(struct av7110 *av7110) 372 { 373 - return dvb_register_device(av7110->dvb_adapter, &av7110->ca_dev, 374 &dvbdev_ca, av7110, DVB_DEVICE_CA); 375 } 376
··· 370 371 int av7110_ca_register(struct av7110 *av7110) 372 { 373 + return dvb_register_device(&av7110->dvb_adapter, &av7110->ca_dev, 374 &dvbdev_ca, av7110, DVB_DEVICE_CA); 375 } 376
+4 -4
drivers/media/dvb/ttpci/av7110_hw.c
··· 619 620 if (av7110_fw_query(av7110, tag, buf, 16)) { 621 printk("dvb-ttpci: failed to boot firmware @ card %d\n", 622 - av7110->dvb_adapter->num); 623 return -EIO; 624 } 625 ··· 630 av7110->avtype = (buf[8] << 16) + buf[9]; 631 632 printk("dvb-ttpci: info @ card %d: firm %08x, rtsl %08x, vid %08x, app %08x\n", 633 - av7110->dvb_adapter->num, av7110->arm_fw, 634 av7110->arm_rtsl, av7110->arm_vid, av7110->arm_app); 635 636 /* print firmware capabilities */ 637 if (FW_CI_LL_SUPPORT(av7110->arm_app)) 638 printk("dvb-ttpci: firmware @ card %d supports CI link layer interface\n", 639 - av7110->dvb_adapter->num); 640 else 641 printk("dvb-ttpci: no firmware support for CI link layer interface @ card %d\n", 642 - av7110->dvb_adapter->num); 643 644 return 0; 645 }
··· 619 620 if (av7110_fw_query(av7110, tag, buf, 16)) { 621 printk("dvb-ttpci: failed to boot firmware @ card %d\n", 622 + av7110->dvb_adapter.num); 623 return -EIO; 624 } 625 ··· 630 av7110->avtype = (buf[8] << 16) + buf[9]; 631 632 printk("dvb-ttpci: info @ card %d: firm %08x, rtsl %08x, vid %08x, app %08x\n", 633 + av7110->dvb_adapter.num, av7110->arm_fw, 634 av7110->arm_rtsl, av7110->arm_vid, av7110->arm_app); 635 636 /* print firmware capabilities */ 637 if (FW_CI_LL_SUPPORT(av7110->arm_app)) 638 printk("dvb-ttpci: firmware @ card %d supports CI link layer interface\n", 639 + av7110->dvb_adapter.num); 640 else 641 printk("dvb-ttpci: no firmware support for CI link layer interface @ card %d\n", 642 + av7110->dvb_adapter.num); 643 644 return 0; 645 }
+5 -5
drivers/media/dvb/ttpci/av7110_v4l.c
··· 46 47 if (i2c_transfer(&av7110->i2c_adap, &msgs, 1) != 1) { 48 dprintk(1, "dvb-ttpci: failed @ card %d, %u = %u\n", 49 - av7110->dvb_adapter->num, reg, val); 50 return -EIO; 51 } 52 return 0; ··· 63 64 if (i2c_transfer(&av7110->i2c_adap, &msgs[0], 2) != 2) { 65 dprintk(1, "dvb-ttpci: failed @ card %d, %u\n", 66 - av7110->dvb_adapter->num, reg); 67 return -EIO; 68 } 69 *val = (msg2[0] << 8) | msg2[1]; ··· 552 return -ENODEV; 553 554 printk("dvb-ttpci: DVB-C analog module @ card %d detected, initializing MSP3400\n", 555 - av7110->dvb_adapter->num); 556 av7110->adac_type = DVB_ADAC_MSP; 557 msleep(100); // the probing above resets the msp... 558 msp_readreg(av7110, MSP_RD_DSP, 0x001e, &version1); 559 msp_readreg(av7110, MSP_RD_DSP, 0x001f, &version2); 560 dprintk(1, "dvb-ttpci: @ card %d MSP3400 version 0x%04x 0x%04x\n", 561 - av7110->dvb_adapter->num, version1, version2); 562 msp_writereg(av7110, MSP_WR_DSP, 0x0013, 0x0c00); 563 msp_writereg(av7110, MSP_WR_DSP, 0x0000, 0x7f00); // loudspeaker + headphone 564 msp_writereg(av7110, MSP_WR_DSP, 0x0008, 0x0220); // loudspeaker source ··· 596 /* init the saa7113 */ 597 while (*i != 0xff) { 598 if (i2c_writereg(av7110, 0x48, i[0], i[1]) != 1) { 599 - dprintk(1, "saa7113 initialization failed @ card %d", av7110->dvb_adapter->num); 600 break; 601 } 602 i += 2;
··· 46 47 if (i2c_transfer(&av7110->i2c_adap, &msgs, 1) != 1) { 48 dprintk(1, "dvb-ttpci: failed @ card %d, %u = %u\n", 49 + av7110->dvb_adapter.num, reg, val); 50 return -EIO; 51 } 52 return 0; ··· 63 64 if (i2c_transfer(&av7110->i2c_adap, &msgs[0], 2) != 2) { 65 dprintk(1, "dvb-ttpci: failed @ card %d, %u\n", 66 + av7110->dvb_adapter.num, reg); 67 return -EIO; 68 } 69 *val = (msg2[0] << 8) | msg2[1]; ··· 552 return -ENODEV; 553 554 printk("dvb-ttpci: DVB-C analog module @ card %d detected, initializing MSP3400\n", 555 + av7110->dvb_adapter.num); 556 av7110->adac_type = DVB_ADAC_MSP; 557 msleep(100); // the probing above resets the msp... 558 msp_readreg(av7110, MSP_RD_DSP, 0x001e, &version1); 559 msp_readreg(av7110, MSP_RD_DSP, 0x001f, &version2); 560 dprintk(1, "dvb-ttpci: @ card %d MSP3400 version 0x%04x 0x%04x\n", 561 + av7110->dvb_adapter.num, version1, version2); 562 msp_writereg(av7110, MSP_WR_DSP, 0x0013, 0x0c00); 563 msp_writereg(av7110, MSP_WR_DSP, 0x0000, 0x7f00); // loudspeaker + headphone 564 msp_writereg(av7110, MSP_WR_DSP, 0x0008, 0x0220); // loudspeaker source ··· 596 /* init the saa7113 */ 597 while (*i != 0xff) { 598 if (i2c_writereg(av7110, 0x48, i[0], i[1]) != 1) { 599 + dprintk(1, "saa7113 initialization failed @ card %d", av7110->dvb_adapter.num); 600 break; 601 } 602 i += 2;
+6 -6
drivers/media/dvb/ttpci/budget-av.c
··· 297 budget_av->ca.slot_ts_enable = ciintf_slot_ts_enable; 298 budget_av->ca.poll_slot_status = ciintf_poll_slot_status; 299 budget_av->ca.data = budget_av; 300 - if ((result = dvb_ca_en50221_init(budget_av->budget.dvb_adapter, 301 &budget_av->ca, 0, 1)) != 0) { 302 printk("budget_av: CI interface detected, but initialisation failed.\n"); 303 goto error; ··· 767 budget_av->budget.dev->pci->subsystem_device); 768 } else { 769 if (dvb_register_frontend 770 - (budget_av->budget.dvb_adapter, budget_av->budget.dvb_frontend)) { 771 printk("budget-av: Frontend registration failed!\n"); 772 if (budget_av->budget.dvb_frontend->ops->release) 773 budget_av->budget.dvb_frontend->ops->release(budget_av->budget.dvb_frontend); ··· 875 /* fixme: find some sane values here... */ 876 saa7146_write(dev, PCI_BT_V1, 0x1c00101f); 877 878 - mac = budget_av->budget.dvb_adapter->proposed_mac; 879 if (i2c_readregs(&budget_av->budget.i2c_adap, 0xa0, 0x30, mac, 6)) { 880 printk("KNC1-%d: Could not read MAC from KNC1 card\n", 881 - budget_av->budget.dvb_adapter->num); 882 memset(mac, 0, 6); 883 } else { 884 printk("KNC1-%d: MAC addr = %.2x:%.2x:%.2x:%.2x:%.2x:%.2x\n", 885 - budget_av->budget.dvb_adapter->num, 886 mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); 887 } 888 889 - budget_av->budget.dvb_adapter->priv = budget_av; 890 frontend_init(budget_av); 891 892 if (enable_ci)
··· 297 budget_av->ca.slot_ts_enable = ciintf_slot_ts_enable; 298 budget_av->ca.poll_slot_status = ciintf_poll_slot_status; 299 budget_av->ca.data = budget_av; 300 + if ((result = dvb_ca_en50221_init(&budget_av->budget.dvb_adapter, 301 &budget_av->ca, 0, 1)) != 0) { 302 printk("budget_av: CI interface detected, but initialisation failed.\n"); 303 goto error; ··· 767 budget_av->budget.dev->pci->subsystem_device); 768 } else { 769 if (dvb_register_frontend 770 + (&budget_av->budget.dvb_adapter, budget_av->budget.dvb_frontend)) { 771 printk("budget-av: Frontend registration failed!\n"); 772 if (budget_av->budget.dvb_frontend->ops->release) 773 budget_av->budget.dvb_frontend->ops->release(budget_av->budget.dvb_frontend); ··· 875 /* fixme: find some sane values here... */ 876 saa7146_write(dev, PCI_BT_V1, 0x1c00101f); 877 878 + mac = budget_av->budget.dvb_adapter.proposed_mac; 879 if (i2c_readregs(&budget_av->budget.i2c_adap, 0xa0, 0x30, mac, 6)) { 880 printk("KNC1-%d: Could not read MAC from KNC1 card\n", 881 + budget_av->budget.dvb_adapter.num); 882 memset(mac, 0, 6); 883 } else { 884 printk("KNC1-%d: MAC addr = %.2x:%.2x:%.2x:%.2x:%.2x:%.2x\n", 885 + budget_av->budget.dvb_adapter.num, 886 mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); 887 } 888 889 + budget_av->budget.dvb_adapter.priv = budget_av; 890 frontend_init(budget_av); 891 892 if (enable_ci)
+3 -3
drivers/media/dvb/ttpci/budget-ci.c
··· 395 budget_ci->ca.slot_shutdown = ciintf_slot_shutdown; 396 budget_ci->ca.slot_ts_enable = ciintf_slot_ts_enable; 397 budget_ci->ca.data = budget_ci; 398 - if ((result = dvb_ca_en50221_init(budget_ci->budget.dvb_adapter, 399 &budget_ci->ca, 400 DVB_CA_EN50221_FLAG_IRQ_CAMCHANGE | 401 DVB_CA_EN50221_FLAG_IRQ_FR | ··· 881 budget_ci->budget.dev->pci->subsystem_device); 882 } else { 883 if (dvb_register_frontend 884 - (budget_ci->budget.dvb_adapter, budget_ci->budget.dvb_frontend)) { 885 printk("budget-ci: Frontend registration failed!\n"); 886 if (budget_ci->budget.dvb_frontend->ops->release) 887 budget_ci->budget.dvb_frontend->ops->release(budget_ci->budget.dvb_frontend); ··· 916 917 ciintf_init(budget_ci); 918 919 - budget_ci->budget.dvb_adapter->priv = budget_ci; 920 frontend_init(budget_ci); 921 922 return 0;
··· 395 budget_ci->ca.slot_shutdown = ciintf_slot_shutdown; 396 budget_ci->ca.slot_ts_enable = ciintf_slot_ts_enable; 397 budget_ci->ca.data = budget_ci; 398 + if ((result = dvb_ca_en50221_init(&budget_ci->budget.dvb_adapter, 399 &budget_ci->ca, 400 DVB_CA_EN50221_FLAG_IRQ_CAMCHANGE | 401 DVB_CA_EN50221_FLAG_IRQ_FR | ··· 881 budget_ci->budget.dev->pci->subsystem_device); 882 } else { 883 if (dvb_register_frontend 884 + (&budget_ci->budget.dvb_adapter, budget_ci->budget.dvb_frontend)) { 885 printk("budget-ci: Frontend registration failed!\n"); 886 if (budget_ci->budget.dvb_frontend->ops->release) 887 budget_ci->budget.dvb_frontend->ops->release(budget_ci->budget.dvb_frontend); ··· 916 917 ciintf_init(budget_ci); 918 919 + budget_ci->budget.dvb_adapter.priv = budget_ci; 920 frontend_init(budget_ci); 921 922 return 0;
+6 -6
drivers/media/dvb/ttpci/budget-core.c
··· 298 budget->dmxdev.demux = &dvbdemux->dmx; 299 budget->dmxdev.capabilities = 0; 300 301 - dvb_dmxdev_init(&budget->dmxdev, budget->dvb_adapter); 302 303 budget->hw_frontend.source = DMX_FRONTEND_0; 304 ··· 316 if (ret < 0) 317 return ret; 318 319 - dvb_net_init(budget->dvb_adapter, &budget->dvb_net, &dvbdemux->dmx); 320 321 return 0; 322 } ··· 385 strcpy(budget->i2c_adap.name, budget->card->name); 386 387 if (i2c_add_adapter(&budget->i2c_adap) < 0) { 388 - dvb_unregister_adapter(budget->dvb_adapter); 389 return -ENOMEM; 390 } 391 392 - ttpci_eeprom_parse_mac(&budget->i2c_adap, budget->dvb_adapter->proposed_mac); 393 394 if (NULL == 395 (budget->grabbing = saa7146_vmalloc_build_pgtable(dev->pci, length, &budget->pt))) { ··· 417 418 vfree(budget->grabbing); 419 420 - dvb_unregister_adapter(budget->dvb_adapter); 421 422 return ret; 423 } ··· 432 433 i2c_del_adapter(&budget->i2c_adap); 434 435 - dvb_unregister_adapter(budget->dvb_adapter); 436 437 tasklet_kill(&budget->vpe_tasklet); 438
··· 298 budget->dmxdev.demux = &dvbdemux->dmx; 299 budget->dmxdev.capabilities = 0; 300 301 + dvb_dmxdev_init(&budget->dmxdev, &budget->dvb_adapter); 302 303 budget->hw_frontend.source = DMX_FRONTEND_0; 304 ··· 316 if (ret < 0) 317 return ret; 318 319 + dvb_net_init(&budget->dvb_adapter, &budget->dvb_net, &dvbdemux->dmx); 320 321 return 0; 322 } ··· 385 strcpy(budget->i2c_adap.name, budget->card->name); 386 387 if (i2c_add_adapter(&budget->i2c_adap) < 0) { 388 + dvb_unregister_adapter(&budget->dvb_adapter); 389 return -ENOMEM; 390 } 391 392 + ttpci_eeprom_parse_mac(&budget->i2c_adap, budget->dvb_adapter.proposed_mac); 393 394 if (NULL == 395 (budget->grabbing = saa7146_vmalloc_build_pgtable(dev->pci, length, &budget->pt))) { ··· 417 418 vfree(budget->grabbing); 419 420 + dvb_unregister_adapter(&budget->dvb_adapter); 421 422 return ret; 423 } ··· 432 433 i2c_del_adapter(&budget->i2c_adap); 434 435 + dvb_unregister_adapter(&budget->dvb_adapter); 436 437 tasklet_kill(&budget->vpe_tasklet); 438
+2 -2
drivers/media/dvb/ttpci/budget-patch.c
··· 453 budget->dev->pci->subsystem_vendor, 454 budget->dev->pci->subsystem_device); 455 } else { 456 - if (dvb_register_frontend(budget->dvb_adapter, budget->dvb_frontend)) { 457 printk("budget-av: Frontend registration failed!\n"); 458 if (budget->dvb_frontend->ops->release) 459 budget->dvb_frontend->ops->release(budget->dvb_frontend); ··· 702 703 dev->ext_priv = budget; 704 705 - budget->dvb_adapter->priv = budget; 706 frontend_init(budget); 707 708 return 0;
··· 453 budget->dev->pci->subsystem_vendor, 454 budget->dev->pci->subsystem_device); 455 } else { 456 + if (dvb_register_frontend(&budget->dvb_adapter, budget->dvb_frontend)) { 457 printk("budget-av: Frontend registration failed!\n"); 458 if (budget->dvb_frontend->ops->release) 459 budget->dvb_frontend->ops->release(budget->dvb_frontend); ··· 702 703 dev->ext_priv = budget; 704 705 + budget->dvb_adapter.priv = budget; 706 frontend_init(budget); 707 708 return 0;
+2 -2
drivers/media/dvb/ttpci/budget.c
··· 468 budget->dev->pci->subsystem_vendor, 469 budget->dev->pci->subsystem_device); 470 } else { 471 - if (dvb_register_frontend(budget->dvb_adapter, budget->dvb_frontend)) { 472 printk("budget: Frontend registration failed!\n"); 473 if (budget->dvb_frontend->ops->release) 474 budget->dvb_frontend->ops->release(budget->dvb_frontend); ··· 497 return err; 498 } 499 500 - budget->dvb_adapter->priv = budget; 501 frontend_init(budget); 502 503 return 0;
··· 468 budget->dev->pci->subsystem_vendor, 469 budget->dev->pci->subsystem_device); 470 } else { 471 + if (dvb_register_frontend(&budget->dvb_adapter, budget->dvb_frontend)) { 472 printk("budget: Frontend registration failed!\n"); 473 if (budget->dvb_frontend->ops->release) 474 budget->dvb_frontend->ops->release(budget->dvb_frontend); ··· 497 return err; 498 } 499 500 + budget->dvb_adapter.priv = budget; 501 frontend_init(budget); 502 503 return 0;
+1 -1
drivers/media/dvb/ttpci/budget.h
··· 64 65 spinlock_t debilock; 66 67 - struct dvb_adapter *dvb_adapter; 68 struct dvb_frontend *dvb_frontend; 69 void *priv; 70 };
··· 64 65 spinlock_t debilock; 66 67 + struct dvb_adapter dvb_adapter; 68 struct dvb_frontend *dvb_frontend; 69 void *priv; 70 };
+10 -10
drivers/media/dvb/ttusb-budget/dvb-ttusb-budget.c
··· 84 struct semaphore semi2c; 85 struct semaphore semusb; 86 87 - struct dvb_adapter *adapter; 88 struct usb_device *dev; 89 90 struct i2c_adapter i2c_adap; ··· 1412 le16_to_cpu(ttusb->dev->descriptor.idVendor), 1413 le16_to_cpu(ttusb->dev->descriptor.idProduct)); 1414 } else { 1415 - if (dvb_register_frontend(ttusb->adapter, ttusb->fe)) { 1416 printk("dvb-ttusb-budget: Frontend registration failed!\n"); 1417 if (ttusb->fe->ops->release) 1418 ttusb->fe->ops->release(ttusb->fe); ··· 1462 up(&ttusb->semi2c); 1463 1464 dvb_register_adapter(&ttusb->adapter, "Technotrend/Hauppauge Nova-USB", THIS_MODULE); 1465 - ttusb->adapter->priv = ttusb; 1466 1467 /* i2c */ 1468 memset(&ttusb->i2c_adap, 0, sizeof(struct i2c_adapter)); ··· 1481 1482 result = i2c_add_adapter(&ttusb->i2c_adap); 1483 if (result) { 1484 - dvb_unregister_adapter (ttusb->adapter); 1485 return result; 1486 } 1487 ··· 1503 if ((result = dvb_dmx_init(&ttusb->dvb_demux)) < 0) { 1504 printk("ttusb_dvb: dvb_dmx_init failed (errno = %d)\n", result); 1505 i2c_del_adapter(&ttusb->i2c_adap); 1506 - dvb_unregister_adapter (ttusb->adapter); 1507 return -ENODEV; 1508 } 1509 //FIXME dmxdev (nur WAS?) ··· 1511 ttusb->dmxdev.demux = &ttusb->dvb_demux.dmx; 1512 ttusb->dmxdev.capabilities = 0; 1513 1514 - if ((result = dvb_dmxdev_init(&ttusb->dmxdev, ttusb->adapter)) < 0) { 1515 printk("ttusb_dvb: dvb_dmxdev_init failed (errno = %d)\n", 1516 result); 1517 dvb_dmx_release(&ttusb->dvb_demux); 1518 i2c_del_adapter(&ttusb->i2c_adap); 1519 - dvb_unregister_adapter (ttusb->adapter); 1520 return -ENODEV; 1521 } 1522 1523 - if (dvb_net_init(ttusb->adapter, &ttusb->dvbnet, &ttusb->dvb_demux.dmx)) { 1524 printk("ttusb_dvb: dvb_net_init failed!\n"); 1525 dvb_dmxdev_release(&ttusb->dmxdev); 1526 dvb_dmx_release(&ttusb->dvb_demux); 1527 i2c_del_adapter(&ttusb->i2c_adap); 1528 - dvb_unregister_adapter (ttusb->adapter); 1529 return -ENODEV; 1530 } 1531 ··· 1559 dvb_dmx_release(&ttusb->dvb_demux); 1560 if (ttusb->fe != NULL) dvb_unregister_frontend(ttusb->fe); 1561 i2c_del_adapter(&ttusb->i2c_adap); 1562 - dvb_unregister_adapter(ttusb->adapter); 1563 1564 ttusb_free_iso_urbs(ttusb); 1565
··· 84 struct semaphore semi2c; 85 struct semaphore semusb; 86 87 + struct dvb_adapter adapter; 88 struct usb_device *dev; 89 90 struct i2c_adapter i2c_adap; ··· 1412 le16_to_cpu(ttusb->dev->descriptor.idVendor), 1413 le16_to_cpu(ttusb->dev->descriptor.idProduct)); 1414 } else { 1415 + if (dvb_register_frontend(&ttusb->adapter, ttusb->fe)) { 1416 printk("dvb-ttusb-budget: Frontend registration failed!\n"); 1417 if (ttusb->fe->ops->release) 1418 ttusb->fe->ops->release(ttusb->fe); ··· 1462 up(&ttusb->semi2c); 1463 1464 dvb_register_adapter(&ttusb->adapter, "Technotrend/Hauppauge Nova-USB", THIS_MODULE); 1465 + ttusb->adapter.priv = ttusb; 1466 1467 /* i2c */ 1468 memset(&ttusb->i2c_adap, 0, sizeof(struct i2c_adapter)); ··· 1481 1482 result = i2c_add_adapter(&ttusb->i2c_adap); 1483 if (result) { 1484 + dvb_unregister_adapter (&ttusb->adapter); 1485 return result; 1486 } 1487 ··· 1503 if ((result = dvb_dmx_init(&ttusb->dvb_demux)) < 0) { 1504 printk("ttusb_dvb: dvb_dmx_init failed (errno = %d)\n", result); 1505 i2c_del_adapter(&ttusb->i2c_adap); 1506 + dvb_unregister_adapter (&ttusb->adapter); 1507 return -ENODEV; 1508 } 1509 //FIXME dmxdev (nur WAS?) ··· 1511 ttusb->dmxdev.demux = &ttusb->dvb_demux.dmx; 1512 ttusb->dmxdev.capabilities = 0; 1513 1514 + if ((result = dvb_dmxdev_init(&ttusb->dmxdev, &ttusb->adapter)) < 0) { 1515 printk("ttusb_dvb: dvb_dmxdev_init failed (errno = %d)\n", 1516 result); 1517 dvb_dmx_release(&ttusb->dvb_demux); 1518 i2c_del_adapter(&ttusb->i2c_adap); 1519 + dvb_unregister_adapter (&ttusb->adapter); 1520 return -ENODEV; 1521 } 1522 1523 + if (dvb_net_init(&ttusb->adapter, &ttusb->dvbnet, &ttusb->dvb_demux.dmx)) { 1524 printk("ttusb_dvb: dvb_net_init failed!\n"); 1525 dvb_dmxdev_release(&ttusb->dmxdev); 1526 dvb_dmx_release(&ttusb->dvb_demux); 1527 i2c_del_adapter(&ttusb->i2c_adap); 1528 + dvb_unregister_adapter (&ttusb->adapter); 1529 return -ENODEV; 1530 } 1531 ··· 1559 dvb_dmx_release(&ttusb->dvb_demux); 1560 if (ttusb->fe != NULL) dvb_unregister_frontend(ttusb->fe); 1561 i2c_del_adapter(&ttusb->i2c_adap); 1562 + dvb_unregister_adapter(&ttusb->adapter); 1563 1564 ttusb_free_iso_urbs(ttusb); 1565
+10 -10
drivers/media/dvb/ttusb-dec/ttusb_dec.c
··· 98 int can_playback; 99 100 /* DVB bits */ 101 - struct dvb_adapter *adapter; 102 struct dmxdev dmxdev; 103 struct dvb_demux demux; 104 struct dmx_frontend frontend; ··· 1435 printk("%s: dvb_dmx_init failed: error %d\n", __FUNCTION__, 1436 result); 1437 1438 - dvb_unregister_adapter(dec->adapter); 1439 1440 return result; 1441 } ··· 1444 dec->dmxdev.demux = &dec->demux.dmx; 1445 dec->dmxdev.capabilities = 0; 1446 1447 - if ((result = dvb_dmxdev_init(&dec->dmxdev, dec->adapter)) < 0) { 1448 printk("%s: dvb_dmxdev_init failed: error %d\n", 1449 __FUNCTION__, result); 1450 1451 dvb_dmx_release(&dec->demux); 1452 - dvb_unregister_adapter(dec->adapter); 1453 1454 return result; 1455 } ··· 1463 1464 dvb_dmxdev_release(&dec->dmxdev); 1465 dvb_dmx_release(&dec->demux); 1466 - dvb_unregister_adapter(dec->adapter); 1467 1468 return result; 1469 } ··· 1476 dec->demux.dmx.remove_frontend(&dec->demux.dmx, &dec->frontend); 1477 dvb_dmxdev_release(&dec->dmxdev); 1478 dvb_dmx_release(&dec->demux); 1479 - dvb_unregister_adapter(dec->adapter); 1480 1481 return result; 1482 } 1483 1484 - dvb_net_init(dec->adapter, &dec->dvb_net, &dec->demux.dmx); 1485 1486 return 0; 1487 } ··· 1496 dvb_dmxdev_release(&dec->dmxdev); 1497 dvb_dmx_release(&dec->demux); 1498 if (dec->fe) dvb_unregister_frontend(dec->fe); 1499 - dvb_unregister_adapter(dec->adapter); 1500 } 1501 1502 static void ttusb_dec_exit_rc(struct ttusb_dec *dec) ··· 1620 } 1621 ttusb_dec_init_dvb(dec); 1622 1623 - dec->adapter->priv = dec; 1624 switch (le16_to_cpu(id->idProduct)) { 1625 case 0x1006: 1626 dec->fe = ttusbdecfe_dvbs_attach(&fe_config); ··· 1637 le16_to_cpu(dec->udev->descriptor.idVendor), 1638 le16_to_cpu(dec->udev->descriptor.idProduct)); 1639 } else { 1640 - if (dvb_register_frontend(dec->adapter, dec->fe)) { 1641 printk("budget-ci: Frontend registration failed!\n"); 1642 if (dec->fe->ops->release) 1643 dec->fe->ops->release(dec->fe);
··· 98 int can_playback; 99 100 /* DVB bits */ 101 + struct dvb_adapter adapter; 102 struct dmxdev dmxdev; 103 struct dvb_demux demux; 104 struct dmx_frontend frontend; ··· 1435 printk("%s: dvb_dmx_init failed: error %d\n", __FUNCTION__, 1436 result); 1437 1438 + dvb_unregister_adapter(&dec->adapter); 1439 1440 return result; 1441 } ··· 1444 dec->dmxdev.demux = &dec->demux.dmx; 1445 dec->dmxdev.capabilities = 0; 1446 1447 + if ((result = dvb_dmxdev_init(&dec->dmxdev, &dec->adapter)) < 0) { 1448 printk("%s: dvb_dmxdev_init failed: error %d\n", 1449 __FUNCTION__, result); 1450 1451 dvb_dmx_release(&dec->demux); 1452 + dvb_unregister_adapter(&dec->adapter); 1453 1454 return result; 1455 } ··· 1463 1464 dvb_dmxdev_release(&dec->dmxdev); 1465 dvb_dmx_release(&dec->demux); 1466 + dvb_unregister_adapter(&dec->adapter); 1467 1468 return result; 1469 } ··· 1476 dec->demux.dmx.remove_frontend(&dec->demux.dmx, &dec->frontend); 1477 dvb_dmxdev_release(&dec->dmxdev); 1478 dvb_dmx_release(&dec->demux); 1479 + dvb_unregister_adapter(&dec->adapter); 1480 1481 return result; 1482 } 1483 1484 + dvb_net_init(&dec->adapter, &dec->dvb_net, &dec->demux.dmx); 1485 1486 return 0; 1487 } ··· 1496 dvb_dmxdev_release(&dec->dmxdev); 1497 dvb_dmx_release(&dec->demux); 1498 if (dec->fe) dvb_unregister_frontend(dec->fe); 1499 + dvb_unregister_adapter(&dec->adapter); 1500 } 1501 1502 static void ttusb_dec_exit_rc(struct ttusb_dec *dec) ··· 1620 } 1621 ttusb_dec_init_dvb(dec); 1622 1623 + dec->adapter.priv = dec; 1624 switch (le16_to_cpu(id->idProduct)) { 1625 case 0x1006: 1626 dec->fe = ttusbdecfe_dvbs_attach(&fe_config); ··· 1637 le16_to_cpu(dec->udev->descriptor.idVendor), 1638 le16_to_cpu(dec->udev->descriptor.idProduct)); 1639 } else { 1640 + if (dvb_register_frontend(&dec->adapter, dec->fe)) { 1641 printk("budget-ci: Frontend registration failed!\n"); 1642 if (dec->fe->ops->release) 1643 dec->fe->ops->release(dec->fe);
+6 -6
drivers/media/video/video-buf-dvb.c
··· 149 dvb->name, result); 150 goto fail_adapter; 151 } 152 - dvb->adapter->priv = adapter_priv; 153 154 /* register frontend */ 155 - result = dvb_register_frontend(dvb->adapter, dvb->frontend); 156 if (result < 0) { 157 printk(KERN_WARNING "%s: dvb_register_frontend failed (errno = %d)\n", 158 dvb->name, result); ··· 178 dvb->dmxdev.filternum = 256; 179 dvb->dmxdev.demux = &dvb->demux.dmx; 180 dvb->dmxdev.capabilities = 0; 181 - result = dvb_dmxdev_init(&dvb->dmxdev, dvb->adapter); 182 if (result < 0) { 183 printk(KERN_WARNING "%s: dvb_dmxdev_init failed (errno = %d)\n", 184 dvb->name, result); ··· 209 } 210 211 /* register network adapter */ 212 - dvb_net_init(dvb->adapter, &dvb->net, &dvb->demux.dmx); 213 return 0; 214 215 fail_fe_conn: ··· 223 fail_dmx: 224 dvb_unregister_frontend(dvb->frontend); 225 fail_frontend: 226 - dvb_unregister_adapter(dvb->adapter); 227 fail_adapter: 228 return result; 229 } ··· 236 dvb_dmxdev_release(&dvb->dmxdev); 237 dvb_dmx_release(&dvb->demux); 238 dvb_unregister_frontend(dvb->frontend); 239 - dvb_unregister_adapter(dvb->adapter); 240 } 241 242 EXPORT_SYMBOL(videobuf_dvb_register);
··· 149 dvb->name, result); 150 goto fail_adapter; 151 } 152 + dvb->adapter.priv = adapter_priv; 153 154 /* register frontend */ 155 + result = dvb_register_frontend(&dvb->adapter, dvb->frontend); 156 if (result < 0) { 157 printk(KERN_WARNING "%s: dvb_register_frontend failed (errno = %d)\n", 158 dvb->name, result); ··· 178 dvb->dmxdev.filternum = 256; 179 dvb->dmxdev.demux = &dvb->demux.dmx; 180 dvb->dmxdev.capabilities = 0; 181 + result = dvb_dmxdev_init(&dvb->dmxdev, &dvb->adapter); 182 if (result < 0) { 183 printk(KERN_WARNING "%s: dvb_dmxdev_init failed (errno = %d)\n", 184 dvb->name, result); ··· 209 } 210 211 /* register network adapter */ 212 + dvb_net_init(&dvb->adapter, &dvb->net, &dvb->demux.dmx); 213 return 0; 214 215 fail_fe_conn: ··· 223 fail_dmx: 224 dvb_unregister_frontend(dvb->frontend); 225 fail_frontend: 226 + dvb_unregister_adapter(&dvb->adapter); 227 fail_adapter: 228 return result; 229 } ··· 236 dvb_dmxdev_release(&dvb->dmxdev); 237 dvb_dmx_release(&dvb->demux); 238 dvb_unregister_frontend(dvb->frontend); 239 + dvb_unregister_adapter(&dvb->adapter); 240 } 241 242 EXPORT_SYMBOL(videobuf_dvb_register);
+1 -1
include/media/video-buf-dvb.h
··· 16 int nfeeds; 17 18 /* videobuf_dvb_(un)register manges this */ 19 - struct dvb_adapter *adapter; 20 struct dvb_demux demux; 21 struct dmxdev dmxdev; 22 struct dmx_frontend fe_hw;
··· 16 int nfeeds; 17 18 /* videobuf_dvb_(un)register manges this */ 19 + struct dvb_adapter adapter; 20 struct dvb_demux demux; 21 struct dmxdev dmxdev; 22 struct dmx_frontend fe_hw;