struct media_interface *intf;
        unsigned demux_pad = 0;
        unsigned dvr_pad = 0;
+       unsigned ntuner = 0, ndemod = 0;
        int ret;
        static const char *connector_name = "Television";
 
                switch (entity->function) {
                case MEDIA_ENT_F_TUNER:
                        tuner = entity;
+                       ntuner++;
                        break;
                case MEDIA_ENT_F_DTV_DEMOD:
                        demod = entity;
+                       ndemod++;
                        break;
                case MEDIA_ENT_F_TS_DEMUX:
                        demux = entity;
                }
        }
 
+       /*
+        * Prepare to signalize to media_create_pad_links() that multiple
+        * entities of the same type exists and a 1:n or n:1 links need to be
+        * created.
+        * NOTE: if both tuner and demod have multiple instances, it is up
+        * to the caller driver to create such links.
+        */
+       if (ntuner > 1)
+               tuner = NULL;
+       if (ndemod > 1)
+               demod = NULL;
+
        if (create_rf_connector) {
                conn = kzalloc(sizeof(*conn), GFP_KERNEL);
                if (!conn)
                if (ret)
                        return ret;
 
-               if (!tuner)
-                       ret = media_create_pad_link(conn, 0,
-                                                   demod, 0,
-                                                   MEDIA_LNK_FL_ENABLED);
+               if (!ntuner)
+                       ret = media_create_pad_links(mdev,
+                                                    MEDIA_ENT_F_CONN_RF,
+                                                    conn, 0,
+                                                    MEDIA_ENT_F_DTV_DEMOD,
+                                                    demod, 0,
+                                                    MEDIA_LNK_FL_ENABLED,
+                                                    false);
                else
-                       ret = media_create_pad_link(conn, 0,
-                                                   tuner, TUNER_PAD_RF_INPUT,
-                                                   MEDIA_LNK_FL_ENABLED);
+                       ret = media_create_pad_links(mdev,
+                                                    MEDIA_ENT_F_CONN_RF,
+                                                    conn, 0,
+                                                    MEDIA_ENT_F_TUNER,
+                                                    tuner, TUNER_PAD_RF_INPUT,
+                                                    MEDIA_LNK_FL_ENABLED,
+                                                    false);
                if (ret)
                        return ret;
        }
 
-       if (tuner && demod) {
-               ret = media_create_pad_link(tuner, TUNER_PAD_IF_OUTPUT,
-                                           demod, 0, MEDIA_LNK_FL_ENABLED);
+       if (ntuner && ndemod) {
+               ret = media_create_pad_links(mdev,
+                                            MEDIA_ENT_F_TUNER,
+                                            tuner, TUNER_PAD_IF_OUTPUT,
+                                            MEDIA_ENT_F_DTV_DEMOD,
+                                            demod, 0, MEDIA_LNK_FL_ENABLED,
+                                            false);
                if (ret)
                        return ret;
        }
 
-       if (demod && demux) {
-               ret = media_create_pad_link(demod, 1, demux,
-                                           0, MEDIA_LNK_FL_ENABLED);
+       if (ndemod && demux) {
+               ret = media_create_pad_links(mdev,
+                                            MEDIA_ENT_F_DTV_DEMOD,
+                                            demod, 1,
+                                            MEDIA_ENT_F_TS_DEMUX,
+                                            demux, 0, MEDIA_LNK_FL_ENABLED,
+                                            false);
                if (ret)
                        return -ENOMEM;
        }
 
  *
  * @adap:                      pointer to struct dvb_adapter
  * @create_rf_connector:       if true, it creates the RF connector too
+ *
+ * This function checks all DVB-related functions at the media controller
+ * entities and creates the needed links for the media graph. It is
+ * capable of working with multiple tuners or multiple frontends, but it
+ * won't create links if the device has multiple tuners and multiple frontends
+ * or if the device has multiple muxes. In such case, the caller driver should
+ * manually create the remaining links.
  */
 __must_check int dvb_create_media_graph(struct dvb_adapter *adap,
                                        bool create_rf_connector);