aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/dvb/bt8xx/dvb-bt8xx.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/media/dvb/bt8xx/dvb-bt8xx.c')
-rw-r--r--drivers/media/dvb/bt8xx/dvb-bt8xx.c57
1 files changed, 27 insertions, 30 deletions
diff --git a/drivers/media/dvb/bt8xx/dvb-bt8xx.c b/drivers/media/dvb/bt8xx/dvb-bt8xx.c
index b79629f1e520..1952f6bfc90e 100644
--- a/drivers/media/dvb/bt8xx/dvb-bt8xx.c
+++ b/drivers/media/dvb/bt8xx/dvb-bt8xx.c
@@ -744,57 +744,42 @@ static int __devinit dvb_bt8xx_load_card(struct dvb_bt8xx_card *card, u32 type)
744 card->demux.stop_feed = dvb_bt8xx_stop_feed; 744 card->demux.stop_feed = dvb_bt8xx_stop_feed;
745 card->demux.write_to_decoder = NULL; 745 card->demux.write_to_decoder = NULL;
746 746
747 if ((result = dvb_dmx_init(&card->demux)) < 0) { 747 result = dvb_dmx_init(&card->demux);
748 if (result < 0) {
748 printk("dvb_bt8xx: dvb_dmx_init failed (errno = %d)\n", result); 749 printk("dvb_bt8xx: dvb_dmx_init failed (errno = %d)\n", result);
749 750 goto err_unregister_adaptor;
750 dvb_unregister_adapter(&card->dvb_adapter);
751 return result;
752 } 751 }
753 752
754 card->dmxdev.filternum = 256; 753 card->dmxdev.filternum = 256;
755 card->dmxdev.demux = &card->demux.dmx; 754 card->dmxdev.demux = &card->demux.dmx;
756 card->dmxdev.capabilities = 0; 755 card->dmxdev.capabilities = 0;
757 756
758 if ((result = dvb_dmxdev_init(&card->dmxdev, &card->dvb_adapter)) < 0) { 757 result = dvb_dmxdev_init(&card->dmxdev, &card->dvb_adapter);
758 if (result < 0) {
759 printk("dvb_bt8xx: dvb_dmxdev_init failed (errno = %d)\n", result); 759 printk("dvb_bt8xx: dvb_dmxdev_init failed (errno = %d)\n", result);
760 760 goto err_dmx_release;
761 dvb_dmx_release(&card->demux);
762 dvb_unregister_adapter(&card->dvb_adapter);
763 return result;
764 } 761 }
765 762
766 card->fe_hw.source = DMX_FRONTEND_0; 763 card->fe_hw.source = DMX_FRONTEND_0;
767 764
768 if ((result = card->demux.dmx.add_frontend(&card->demux.dmx, &card->fe_hw)) < 0) { 765 result = card->demux.dmx.add_frontend(&card->demux.dmx, &card->fe_hw);
766 if (result < 0) {
769 printk("dvb_bt8xx: dvb_dmx_init failed (errno = %d)\n", result); 767 printk("dvb_bt8xx: dvb_dmx_init failed (errno = %d)\n", result);
770 768 goto err_dmxdev_release;
771 dvb_dmxdev_release(&card->dmxdev);
772 dvb_dmx_release(&card->demux);
773 dvb_unregister_adapter(&card->dvb_adapter);
774 return result;
775 } 769 }
776 770
777 card->fe_mem.source = DMX_MEMORY_FE; 771 card->fe_mem.source = DMX_MEMORY_FE;
778 772
779 if ((result = card->demux.dmx.add_frontend(&card->demux.dmx, &card->fe_mem)) < 0) { 773 result = card->demux.dmx.add_frontend(&card->demux.dmx, &card->fe_mem);
774 if (result < 0) {
780 printk("dvb_bt8xx: dvb_dmx_init failed (errno = %d)\n", result); 775 printk("dvb_bt8xx: dvb_dmx_init failed (errno = %d)\n", result);
781 776 goto err_remove_hw_frontend;
782 card->demux.dmx.remove_frontend(&card->demux.dmx, &card->fe_hw);
783 dvb_dmxdev_release(&card->dmxdev);
784 dvb_dmx_release(&card->demux);
785 dvb_unregister_adapter(&card->dvb_adapter);
786 return result;
787 } 777 }
788 778
789 if ((result = card->demux.dmx.connect_frontend(&card->demux.dmx, &card->fe_hw)) < 0) { 779 result = card->demux.dmx.connect_frontend(&card->demux.dmx, &card->fe_hw);
780 if (result < 0) {
790 printk("dvb_bt8xx: dvb_dmx_init failed (errno = %d)\n", result); 781 printk("dvb_bt8xx: dvb_dmx_init failed (errno = %d)\n", result);
791 782 goto err_remove_mem_frontend;
792 card->demux.dmx.remove_frontend(&card->demux.dmx, &card->fe_mem);
793 card->demux.dmx.remove_frontend(&card->demux.dmx, &card->fe_hw);
794 dvb_dmxdev_release(&card->dmxdev);
795 dvb_dmx_release(&card->demux);
796 dvb_unregister_adapter(&card->dvb_adapter);
797 return result;
798 } 783 }
799 784
800 dvb_net_init(&card->dvb_adapter, &card->dvbnet, &card->demux.dmx); 785 dvb_net_init(&card->dvb_adapter, &card->dvbnet, &card->demux.dmx);
@@ -804,6 +789,18 @@ static int __devinit dvb_bt8xx_load_card(struct dvb_bt8xx_card *card, u32 type)
804 frontend_init(card, type); 789 frontend_init(card, type);
805 790
806 return 0; 791 return 0;
792
793err_remove_mem_frontend:
794 card->demux.dmx.remove_frontend(&card->demux.dmx, &card->fe_mem);
795err_remove_hw_frontend:
796 card->demux.dmx.remove_frontend(&card->demux.dmx, &card->fe_hw);
797err_dmxdev_release:
798 dvb_dmxdev_release(&card->dmxdev);
799err_dmx_release:
800 dvb_dmx_release(&card->demux);
801err_unregister_adaptor:
802 dvb_unregister_adapter(&card->dvb_adapter);
803 return result;
807} 804}
808 805
809static int __devinit dvb_bt8xx_probe(struct bttv_sub_device *sub) 806static int __devinit dvb_bt8xx_probe(struct bttv_sub_device *sub)