static int dvb_init(struct saa7134_dev *dev)
 {
        char *board_name;
+       int ret;
        /* init struct videobuf_dvb */
        dev->ts.nr_bufs    = 32;
        dev->ts.nr_packets = 32*4;
        }
 
        /* register everything else */
-       return videobuf_dvb_register(&dev->dvb, THIS_MODULE, dev, &dev->pci->dev);
+       ret = videobuf_dvb_register(&dev->dvb, THIS_MODULE, dev, &dev->pci->dev);
+
+       /* this sequence is necessary to make the tda1004x load its firmware
+        * and to enter analog mode of hybrid boards
+        */
+       if (!ret) {
+               if (dev->dvb.frontend->ops.init)
+                       dev->dvb.frontend->ops.init(dev->dvb.frontend);
+               if (dev->dvb.frontend->ops.sleep)
+                       dev->dvb.frontend->ops.sleep(dev->dvb.frontend);
+       }
+       return ret;
 }
 
 static int dvb_fini(struct saa7134_dev *dev)