module_param(debug, int, 0644);
 MODULE_PARM_DESC(debug, "enable verbose debug messages");
 
+#define TUNER_SIMPLE_MAX 64
+static unsigned int simple_devcount;
+
 static int offset;
 module_param(offset, int, 0664);
 MODULE_PARM_DESC(offset, "Allows to specify an offset for tuner");
 
+static unsigned int atv_input[TUNER_SIMPLE_MAX] = \
+                       { [0 ... (TUNER_SIMPLE_MAX-1)] = 0 };
+static unsigned int dtv_input[TUNER_SIMPLE_MAX] = \
+                       { [0 ... (TUNER_SIMPLE_MAX-1)] = 0 };
+module_param_array(atv_input, int, NULL, 0644);
+module_param_array(dtv_input, int, NULL, 0644);
+MODULE_PARM_DESC(atv_input, "specify atv rf input, 0 for autoselect");
+MODULE_PARM_DESC(dtv_input, "specify dtv rf input, 0 for autoselect");
+
 /* ---------------------------------------------------------------------- */
 
 /* tv standard selection for Temic 4046 FM5
 static LIST_HEAD(hybrid_tuner_instance_list);
 
 struct tuner_simple_priv {
+       unsigned int nr;
        u16 last_div;
 
        struct tuner_i2c_props i2c_props;
                *cb &= ~0x03;
                if (!(params->std & V4L2_STD_ATSC))
                        *cb |= 2;
-               /* FIXME: input */
                break;
 
        case TUNER_MICROTUNE_4042FI5:
                        tuner_warn("i2c i/o error: rc == %d "
                                   "(should be 2)\n", rc);
                priv->i2c_props.addr = tuneraddr;
-               /* FIXME: input */
                break;
        }
        }
+       if (atv_input[priv->nr])
+               simple_set_rf_input(fe, config, cb, atv_input[priv->nr]);
 
        return 0;
 }
        {
                unsigned int new_rf;
 
-               switch (params->u.vsb.modulation) {
-               case QAM_64:
-               case QAM_256:
-                       new_rf = 1;
-                       break;
-               case VSB_8:
-               default:
-                       new_rf = 0;
-                       break;
-               }
+               if (dtv_input[priv->nr])
+                       new_rf = dtv_input[priv->nr];
+               else
+                       switch (params->u.vsb.modulation) {
+                       case QAM_64:
+                       case QAM_256:
+                               new_rf = 1;
+                               break;
+                       case VSB_8:
+                       default:
+                               new_rf = 0;
+                               break;
+                       }
                simple_set_rf_input(fe, &buf[2], &buf[3], new_rf);
                break;
        }
 
                priv->type = type;
                priv->tun  = &tuners[type];
+               priv->nr   = simple_devcount++;
                break;
        default:
                fe->tuner_priv = priv;
 
        tuner_info("type set to %d (%s)\n", type, priv->tun->name);
 
+       if ((debug) || ((atv_input[priv->nr] > 0) ||
+                       (dtv_input[priv->nr] > 0))) {
+               if (0 == atv_input[priv->nr])
+                       tuner_info("tuner %d atv rf input will be "
+                                  "autoselected\n", priv->nr);
+               else
+                       tuner_info("tuner %d atv rf input will be "
+                                  "set to input %d (insmod option)\n",
+                                  priv->nr, atv_input[priv->nr]);
+               if (0 == dtv_input[priv->nr])
+                       tuner_info("tuner %d dtv rf input will be "
+                                  "autoselected\n", priv->nr);
+               else
+                       tuner_info("tuner %d dtv rf input will be "
+                                  "set to input %d (insmod option)\n",
+                                  priv->nr, dtv_input[priv->nr]);
+       }
+
        strlcpy(fe->ops.tuner_ops.info.name, priv->tun->name,
                sizeof(fe->ops.tuner_ops.info.name));