vserver 2.0 rc7
[linux-2.6.git] / drivers / media / video / tveeprom.c
index 21b844a..e1443a0 100644 (file)
 
 
 #include <linux/module.h>
+#include <linux/moduleparam.h>
 #include <linux/errno.h>
 #include <linux/kernel.h>
 #include <linux/init.h>
 #include <linux/types.h>
+#include <linux/videodev.h>
 #include <linux/i2c.h>
 
 #include <media/tuner.h>
@@ -190,11 +192,13 @@ hauppauge_tuner[] =
        { TUNER_ABSENT,        "TCL MFPE05 2"},
        /* 90-99 */
        { TUNER_ABSENT,        "LG TALN H202T"},
-       { TUNER_ABSENT,        "Philips FQ1216AME MK4"},
-       { TUNER_ABSENT,        "Philips FQ1236A MK4"},
+       { TUNER_PHILIPS_FQ1216AME_MK4, "Philips FQ1216AME MK4"},
+       { TUNER_PHILIPS_FQ1236A_MK4, "Philips FQ1236A MK4"},
        { TUNER_ABSENT,        "Philips FQ1286A MK4"},
        { TUNER_ABSENT,        "Philips FQ1216ME MK5"},
        { TUNER_ABSENT,        "Philips FQ1236 MK5"},
+       { TUNER_ABSENT,        "Unspecified"},
+       { TUNER_LG_PAL_TAPE,   "LG PAL (TAPE Series)"},
 };
 
 static char *sndtype[] = {
@@ -240,6 +244,7 @@ static int hasRadioTuner(int tunerType)
                 case 61: //PNPEnv_TUNER_TAPE_M001D_MK3:
                 case 78: //PNPEnv_TUNER_TDA8275C1_8290_FM:
                 case 89: //PNPEnv_TUNER_TCL_MFPE05_2:
+                case 92: //PNPEnv_TUNER_PHILIPS_FQ1236A_MK4:
                     return 1;
         }
         return 0;
@@ -255,8 +260,8 @@ void tveeprom_hauppauge_analog(struct tveeprom *tvee, unsigned char *eeprom_data
        ** if packet[0] & f8 == f8, then EOD and packet[1] == checksum
        **
        ** In our (ivtv) case we're interested in the following:
-       ** tuner type: tag [00].05 or [0a].01 (index into hauppauge_tuners)
-       ** tuner fmts: tag [00].04 or [0a].00 (bitmask index into hauppauge_fmts)
+       ** tuner type: tag [00].05 or [0a].01 (index into hauppauge_tuner)
+       ** tuner fmts: tag [00].04 or [0a].00 (bitmask index into hauppauge_tuner_fmt)
        ** radio:      tag [00].{last} or [0e].00  (bitmask.  bit2=FM)
        ** audio proc: tag [02].01 or [05].00 (lower nibble indexes lut?)
 
@@ -268,11 +273,11 @@ void tveeprom_hauppauge_analog(struct tveeprom *tvee, unsigned char *eeprom_data
        ** # of inputs/outputs ???
        */
 
-       int i, j, len, done, tag, tuner = 0, t_format = 0;
+       int i, j, len, done, beenhere, tag, tuner = 0, t_format = 0;
        char *t_name = NULL, *t_fmt_name = NULL;
 
        dprintk(1, "%s\n",__FUNCTION__);
-       tvee->revision = done = len = 0;
+       tvee->revision = done = len = beenhere = 0;
        for (i = 0; !done && i < 256; i += len) {
                dprintk(2, "processing pos = %02x (%02x, %02x)\n",
                        i, eeprom_data[i], eeprom_data[i + 1]);
@@ -341,9 +346,14 @@ void tveeprom_hauppauge_analog(struct tveeprom *tvee, unsigned char *eeprom_data
                                (eeprom_data[i+7] << 16);
                        break;
                case 0x0a:
-                       tuner = eeprom_data[i+2];
-                       t_format = eeprom_data[i+1];
-                       break;
+                       if(beenhere == 0) {
+                               tuner = eeprom_data[i+2];
+                               t_format = eeprom_data[i+1];
+                               beenhere = 1;
+                               break;
+                       } else {
+                               break;
+                       }
                case 0x0e:
                        tvee->has_radio = eeprom_data[i+1];
                        break;