usb: quickcam_messenger free urb cleanup
[safe/jmp/linux-2.6] / drivers / media / video / tveeprom.c
index 9bb3678..6b9ef73 100644 (file)
@@ -40,6 +40,7 @@
 
 #include <media/tuner.h>
 #include <media/tveeprom.h>
+#include <media/v4l2-common.h>
 #include <media/audiochip.h>
 
 MODULE_DESCRIPTION("i2c Hauppauge eeprom decoder driver");
@@ -52,16 +53,14 @@ MODULE_PARM_DESC(debug, "Debug level (0-1)");
 
 #define STRM(array,i) (i < sizeof(array)/sizeof(char*) ? array[i] : "unknown")
 
-#define tveeprom_info(fmt, arg...) do {\
-       printk(KERN_INFO "tveeprom %d-%04x: " fmt, \
-                       c->adapter->nr, c->addr , ##arg); } while (0)
-#define tveeprom_warn(fmt, arg...) do {\
-       printk(KERN_WARNING "tveeprom %d-%04x: " fmt, \
-                       c->adapter->nr, c->addr , ##arg); } while (0)
-#define tveeprom_dbg(fmt, arg...) do {\
+#define tveeprom_info(fmt, arg...) \
+       v4l_printk(KERN_INFO, "tveeprom", c->adapter, c->addr, fmt , ## arg)
+#define tveeprom_warn(fmt, arg...) \
+       v4l_printk(KERN_WARNING, "tveeprom", c->adapter, c->addr, fmt , ## arg)
+#define tveeprom_dbg(fmt, arg...) do { \
        if (debug) \
-               printk(KERN_INFO "tveeprom %d-%04x: " fmt, \
-                       c->adapter->nr, c->addr , ##arg); } while (0)
+               v4l_printk(KERN_DEBUG, "tveeprom", c->adapter, c->addr, fmt , ## arg); \
+       } while (0)
 
 /*
  * The Hauppauge eeprom uses an 8bit field to determine which
@@ -74,14 +73,14 @@ static struct HAUPPAUGE_TUNER_FMT
 }
 hauppauge_tuner_fmt[] =
 {
-       { V4L2_STD_UNKNOWN," UNKNOWN" },
-       { V4L2_STD_UNKNOWN," FM" },
-       { V4L2_STD_PAL_BG, " PAL(B/G)" },
-       { V4L2_STD_NTSC_M, " NTSC(M)" },
-       { V4L2_STD_PAL_I,  " PAL(I)" },
-       { V4L2_STD_SECAM_L," SECAM(L/L')" },
-       { V4L2_STD_PAL_DK, " PAL(D/D1/K)" },
-       { V4L2_STD_ATSC,   " ATSC/DVB Digital" },
+       { V4L2_STD_UNKNOWN,                   " UNKNOWN" },
+       { V4L2_STD_UNKNOWN,                   " FM" },
+       { V4L2_STD_B|V4L2_STD_GH,             " PAL(B/G)" },
+       { V4L2_STD_MN,                        " NTSC(M)" },
+       { V4L2_STD_PAL_I,                     " PAL(I)" },
+       { V4L2_STD_SECAM_L|V4L2_STD_SECAM_LC, " SECAM(L/L')" },
+       { V4L2_STD_DK,                        " PAL(D/D1/K)" },
+       { V4L2_STD_ATSC,                      " ATSC/DVB Digital" },
 };
 
 /* This is the full list of possible tuners. Many thanks to Hauppauge for
@@ -191,7 +190,7 @@ hauppauge_tuner[] =
        { TUNER_LG_PAL_NEW_TAPC, "TCL 2002MI 3"},
        { TUNER_TCL_2002N,     "TCL 2002N 6A"},
        { TUNER_PHILIPS_FM1236_MK3, "Philips FQ1236 MK3"},
-       { TUNER_ABSENT,        "Samsung TCPN 2121P30A"},
+       { TUNER_SAMSUNG_TCPN_2121P30A, "Samsung TCPN 2121P30A"},
        { TUNER_ABSENT,        "Samsung TCPE 4121P30A"},
        { TUNER_PHILIPS_FM1216ME_MK3, "TCL MFPE05 2"},
        /* 90-99 */
@@ -201,7 +200,7 @@ hauppauge_tuner[] =
        { TUNER_ABSENT,        "Philips FQ1286A MK4"},
        { TUNER_ABSENT,        "Philips FQ1216ME MK5"},
        { TUNER_ABSENT,        "Philips FQ1236 MK5"},
-       { TUNER_ABSENT,        "Samsung TCPG_6121P30A"},
+       { TUNER_SAMSUNG_TCPG_6121P30A, "Samsung TCPG 6121P30A"},
        { TUNER_TCL_2002MB,    "TCL 2002MB_3H"},
        { TUNER_ABSENT,        "TCL 2002MI_3H"},
        { TUNER_TCL_2002N,     "TCL 2002N 5H"},
@@ -219,12 +218,12 @@ hauppauge_tuner[] =
        /* 110-119 */
        { TUNER_ABSENT,        "Thompson DTT75105"},
        { TUNER_ABSENT,        "Conexant_CX24109"},
-       { TUNER_ABSENT,        "TCL M2523_5N_E"},
-       { TUNER_ABSENT,        "TCL M2523_3DB_E"},
+       { TUNER_TCL_2002N,     "TCL M2523_5N_E"},
+       { TUNER_TCL_2002MB,    "TCL M2523_3DB_E"},
        { TUNER_ABSENT,        "Philips 8275A"},
        { TUNER_ABSENT,        "Microtune MT2060"},
-       { TUNER_ABSENT,        "Philips FM1236 MK5"},
-       { TUNER_ABSENT,        "Philips FM1216ME MK5"},
+       { TUNER_PHILIPS_FM1236_MK3, "Philips FM1236 MK5"},
+       { TUNER_PHILIPS_FM1216ME_MK3, "Philips FM1216ME MK5"},
        { TUNER_ABSENT,        "TCL M2523_3DI_E"},
        { TUNER_ABSENT,        "Samsung THPD5222FG30A"},
        /* 120-129 */
@@ -249,32 +248,32 @@ audioIC[] =
        {AUDIO_CHIP_MSP34XX,  "MSP3410D"},
        {AUDIO_CHIP_MSP34XX,  "MSP3415"},
        {AUDIO_CHIP_MSP34XX,  "MSP3430"},
-       {AUDIO_CHIP_UNKNOWN,  "MSP3438"},
+       {AUDIO_CHIP_MSP34XX,  "MSP3438"},
        {AUDIO_CHIP_UNKNOWN,  "CS5331"},
        /* 10-14 */
        {AUDIO_CHIP_MSP34XX,  "MSP3435"},
        {AUDIO_CHIP_MSP34XX,  "MSP3440"},
        {AUDIO_CHIP_MSP34XX,  "MSP3445"},
-       {AUDIO_CHIP_UNKNOWN,  "MSP3411"},
-       {AUDIO_CHIP_UNKNOWN,  "MSP3416"},
+       {AUDIO_CHIP_MSP34XX,  "MSP3411"},
+       {AUDIO_CHIP_MSP34XX,  "MSP3416"},
        /* 15-19 */
        {AUDIO_CHIP_MSP34XX,  "MSP3425"},
-       {AUDIO_CHIP_UNKNOWN,  "MSP3451"},
-       {AUDIO_CHIP_UNKNOWN,  "MSP3418"},
+       {AUDIO_CHIP_MSP34XX,  "MSP3451"},
+       {AUDIO_CHIP_MSP34XX,  "MSP3418"},
        {AUDIO_CHIP_UNKNOWN,  "Type 0x12"},
        {AUDIO_CHIP_UNKNOWN,  "OKI7716"},
        /* 20-24 */
-       {AUDIO_CHIP_UNKNOWN,  "MSP4410"},
-       {AUDIO_CHIP_UNKNOWN,  "MSP4420"},
-       {AUDIO_CHIP_UNKNOWN,  "MSP4440"},
-       {AUDIO_CHIP_UNKNOWN,  "MSP4450"},
-       {AUDIO_CHIP_UNKNOWN,  "MSP4408"},
+       {AUDIO_CHIP_MSP34XX,  "MSP4410"},
+       {AUDIO_CHIP_MSP34XX,  "MSP4420"},
+       {AUDIO_CHIP_MSP34XX,  "MSP4440"},
+       {AUDIO_CHIP_MSP34XX,  "MSP4450"},
+       {AUDIO_CHIP_MSP34XX,  "MSP4408"},
        /* 25-29 */
-       {AUDIO_CHIP_UNKNOWN,  "MSP4418"},
-       {AUDIO_CHIP_UNKNOWN,  "MSP4428"},
-       {AUDIO_CHIP_UNKNOWN,  "MSP4448"},
-       {AUDIO_CHIP_UNKNOWN,  "MSP4458"},
-       {AUDIO_CHIP_UNKNOWN,  "Type 0x1d"},
+       {AUDIO_CHIP_MSP34XX,  "MSP4418"},
+       {AUDIO_CHIP_MSP34XX,  "MSP4428"},
+       {AUDIO_CHIP_MSP34XX,  "MSP4448"},
+       {AUDIO_CHIP_MSP34XX,  "MSP4458"},
+       {AUDIO_CHIP_MSP34XX,  "Type 0x1d"},
        /* 30-34 */
        {AUDIO_CHIP_INTERNAL, "CX880"},
        {AUDIO_CHIP_INTERNAL, "CX881"},
@@ -469,7 +468,7 @@ void tveeprom_hauppauge_analog(struct i2c_client *c, struct tveeprom *tvee,
                                (eeprom_data[i+6] << 8) +
                                (eeprom_data[i+7] << 16);
 
-                               if ( (eeprom_data[i + 8] && 0xf0) &&
+                               if ( (eeprom_data[i + 8] & 0xf0) &&
                                        (tvee->serial_number < 0xffffff) ) {
                                        tvee->MAC_address[0] = 0x00;
                                        tvee->MAC_address[1] = 0x0D;
@@ -606,6 +605,8 @@ void tveeprom_hauppauge_analog(struct i2c_client *c, struct tveeprom *tvee,
                        tvee->tuner_formats |= hauppauge_tuner_fmt[i].id;
                        t_fmt_name1[j++] = hauppauge_tuner_fmt[i].name;
                }
+       }
+       for (i = j = 0; i < 8; i++) {
                if (t_format2 & (1 << i)) {
                        tvee->tuner2_formats |= hauppauge_tuner_fmt[i].id;
                        t_fmt_name2[j++] = hauppauge_tuner_fmt[i].name;
@@ -720,8 +721,7 @@ tveeprom_command(struct i2c_client *client,
 
        switch (cmd) {
        case 0:
-               buf = kmalloc(256,GFP_KERNEL);
-               memset(buf,0,256);
+               buf = kzalloc(256,GFP_KERNEL);
                tveeprom_read(client,buf,256);
                tveeprom_hauppauge_analog(client, &eeprom,buf);
                kfree(buf);
@@ -744,10 +744,9 @@ tveeprom_detect_client(struct i2c_adapter *adapter,
 {
        struct i2c_client *client;
 
-       client = kmalloc(sizeof(struct i2c_client), GFP_KERNEL);
+       client = kzalloc(sizeof(struct i2c_client), GFP_KERNEL);
        if (NULL == client)
                return -ENOMEM;
-       memset(client, 0, sizeof(struct i2c_client));
        client->addr = address;
        client->adapter = adapter;
        client->driver = &i2c_driver_tveeprom;
@@ -760,9 +759,9 @@ tveeprom_detect_client(struct i2c_adapter *adapter,
 static int
 tveeprom_attach_adapter (struct i2c_adapter *adapter)
 {
-       if (adapter->id != I2C_HW_B_BT848)
-               return 0;
-       return i2c_probe(adapter, &addr_data, tveeprom_detect_client);
+       if (adapter->class & I2C_CLASS_TV_ANALOG)
+               return i2c_probe(adapter, &addr_data, tveeprom_detect_client);
+       return 0;
 }
 
 static int