These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / drivers / media / pci / saa7134 / saa7134-cards.c
index 3ca0780..29d2094 100644 (file)
  *  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
  */
 
+#include "saa7134.h"
+#include "saa7134-reg.h"
+
 #include <linux/init.h>
 #include <linux/module.h>
 #include <linux/i2c.h>
 #include <linux/i2c-algo-bit.h>
 
-#include "saa7134-reg.h"
-#include "saa7134.h"
 #include "tuner-xc2028.h"
 #include <media/v4l2-common.h>
 #include <media/tveeprom.h>
@@ -5850,6 +5851,75 @@ struct saa7134_board saa7134_boards[] = {
                .amux = LINE1,
                } },
        },
+       [SAA7134_BOARD_AVERMEDIA_505] = {
+               /* much like the "studio" version but without radio
+               * and another tuner (dbaryshkov@gmail.com) */
+               .name           = "AverMedia AverTV/505",
+               .audio_clock    = 0x00187de7,
+               .tuner_type     = TUNER_PHILIPS_FQ1216ME,
+               .radio_type     = UNSET,
+               .tuner_addr     = ADDR_UNSET,
+               .radio_addr     = ADDR_UNSET,
+               .tda9887_conf   = TDA9887_PRESENT,
+               .inputs         = {{
+                       .name = name_tv,
+                       .vmux = 1,
+                       .amux = LINE2,
+                       .tv   = 1,
+               }, {
+                       .name = name_comp1,
+                       .vmux = 0,
+                       .amux = LINE2,
+               }, {
+                       .name = name_comp2,
+                       .vmux = 3,
+                       .amux = LINE2,
+               }, {
+                       .name = name_svideo,
+                       .vmux = 8,
+                       .amux = LINE2,
+               } },
+               .mute = {
+                       .name = name_mute,
+                       .amux = LINE1,
+               },
+       },
+       [SAA7134_BOARD_LEADTEK_WINFAST_TV2100_FM] = {
+               .name           = "Leadtek Winfast TV2100 FM",
+               .audio_clock    = 0x00187de7,
+               .tuner_type     = TUNER_TNF_5335MF,
+               .radio_type     = UNSET,
+               .tuner_addr     = ADDR_UNSET,
+               .radio_addr     = ADDR_UNSET,
+               .gpiomask       = 0x0d,
+               .inputs         = {{
+                       .name = name_tv_mono,
+                       .vmux = 1,
+                       .amux = LINE1,
+                       .gpio = 0x00,
+                       .tv   = 1,
+               }, {
+                       .name = name_comp1,
+                       .vmux = 3,
+                       .amux = LINE2,
+                       .gpio = 0x08,
+               }, {
+                       .name = name_svideo,
+                       .vmux = 8,
+                       .amux = LINE2,
+                       .gpio = 0x08,
+               } },
+               .radio = {
+                       .name = name_radio,
+                       .amux = LINE1,
+                       .gpio = 0x04,
+               },
+               .mute = {
+                       .name = name_mute,
+                       .amux = LINE1,
+                       .gpio = 0x08,
+               },
+       },
 
 };
 
@@ -7108,6 +7178,18 @@ struct pci_device_id saa7134_pci_tbl[] = {
                .subvendor    = 0x1905, /* WIS */
                .subdevice    = 0x7007,
                .driver_data  = SAA7134_BOARD_WIS_VOYAGER,
+       }, {
+               .vendor       = PCI_VENDOR_ID_PHILIPS,
+               .device       = PCI_DEVICE_ID_PHILIPS_SAA7130,
+               .subvendor    = 0x1461, /* Avermedia Technologies Inc */
+               .subdevice    = 0xa10a,
+               .driver_data  = SAA7134_BOARD_AVERMEDIA_505,
+       }, {
+               .vendor       = PCI_VENDOR_ID_PHILIPS,
+               .device       = PCI_DEVICE_ID_PHILIPS_SAA7130,
+               .subvendor    = 0x107d,
+               .subdevice    = 0x6f3a,
+               .driver_data  = SAA7134_BOARD_LEADTEK_WINFAST_TV2100_FM,
        }, {
                /* --- boards without eeprom + subsystem ID --- */
                .vendor       = PCI_VENDOR_ID_PHILIPS,
@@ -7158,10 +7240,10 @@ MODULE_DEVICE_TABLE(pci, saa7134_pci_tbl);
 
 static void board_flyvideo(struct saa7134_dev *dev)
 {
-       printk("%s: there are different flyvideo cards with different tuners\n"
-              "%s: out there, you might have to use the tuner=<nr> insmod\n"
-              "%s: option to override the default value.\n",
-              dev->name, dev->name, dev->name);
+       pr_warn("%s: there are different flyvideo cards with different tuners\n"
+               "%s: out there, you might have to use the tuner=<nr> insmod\n"
+               "%s: option to override the default value.\n",
+               dev->name, dev->name, dev->name);
 }
 
 static int saa7134_xc2028_callback(struct saa7134_dev *dev,
@@ -7194,7 +7276,7 @@ static int saa7134_xc2028_callback(struct saa7134_dev *dev,
                        saa7134_set_gpio(dev, 20, 1);
                break;
                }
-       return 0;
+               return 0;
        }
        return -EINVAL;
 }
@@ -7380,7 +7462,7 @@ int saa7134_tuner_callback(void *priv, int component, int command, int arg)
                        return saa7134_xc5000_callback(dev, command, arg);
                }
        } else {
-               printk(KERN_ERR "saa7134: Error - device struct undefined.\n");
+               pr_err("saa7134: Error - device struct undefined.\n");
                return -EINVAL;
        }
        return -EINVAL;
@@ -7411,12 +7493,12 @@ static void hauppauge_eeprom(struct saa7134_dev *dev, u8 *eeprom_data)
        case 67659: /* WinTV-HVR1110 (OEM, no IR, hybrid, FM, SVid/Comp, RCA aud) */
                break;
        default:
-               printk(KERN_WARNING "%s: warning: "
+               pr_warn("%s: warning: "
                       "unknown hauppauge model #%d\n", dev->name, tv.model);
                break;
        }
 
-       printk(KERN_INFO "%s: hauppauge eeprom: model=%d\n",
+       pr_info("%s: hauppauge eeprom: model=%d\n",
               dev->name, tv.model);
 }
 
@@ -7427,7 +7509,7 @@ int saa7134_board_init1(struct saa7134_dev *dev)
        /* Always print gpio, often manufacturers encode tuner type and other info. */
        saa_writel(SAA7134_GPIO_GPMODE0 >> 2, 0);
        dev->gpio_value = saa_readl(SAA7134_GPIO_GPSTATUS0 >> 2);
-       printk(KERN_INFO "%s: board init: gpio is %x\n", dev->name, dev->gpio_value);
+       pr_info("%s: board init: gpio is %x\n", dev->name, dev->gpio_value);
 
        switch (dev->board) {
        case SAA7134_BOARD_FLYVIDEO2000:
@@ -7448,8 +7530,9 @@ int saa7134_board_init1(struct saa7134_dev *dev)
        case SAA7134_BOARD_KWORLD_VSTREAM_XPERT:
        case SAA7134_BOARD_KWORLD_XPERT:
        case SAA7134_BOARD_AVERMEDIA_STUDIO_305:
-       case SAA7134_BOARD_AVERMEDIA_STUDIO_505:
        case SAA7134_BOARD_AVERMEDIA_305:
+       case SAA7134_BOARD_AVERMEDIA_STUDIO_505:
+       case SAA7134_BOARD_AVERMEDIA_505:
        case SAA7134_BOARD_AVERMEDIA_STUDIO_307:
        case SAA7134_BOARD_AVERMEDIA_307:
        case SAA7134_BOARD_AVERMEDIA_STUDIO_507:
@@ -7504,6 +7587,7 @@ int saa7134_board_init1(struct saa7134_dev *dev)
        case SAA7134_BOARD_AVERMEDIA_GO_007_FM_PLUS:
        case SAA7134_BOARD_ROVERMEDIA_LINK_PRO_FM:
        case SAA7134_BOARD_LEADTEK_WINFAST_DTV1000S:
+       case SAA7134_BOARD_LEADTEK_WINFAST_TV2100_FM:
                dev->has_remote = SAA7134_REMOTE_GPIO;
                break;
        case SAA7134_BOARD_FLYDVBS_LR300:
@@ -7512,10 +7596,10 @@ int saa7134_board_init1(struct saa7134_dev *dev)
                dev->has_remote = SAA7134_REMOTE_GPIO;
                break;
        case SAA7134_BOARD_MD5044:
-               printk("%s: seems there are two different versions of the MD5044\n"
-                      "%s: (with the same ID) out there.  If sound doesn't work for\n"
-                      "%s: you try the audio_clock_override=0x200000 insmod option.\n",
-                      dev->name,dev->name,dev->name);
+               pr_warn("%s: seems there are two different versions of the MD5044\n"
+                       "%s: (with the same ID) out there.  If sound doesn't work for\n"
+                       "%s: you try the audio_clock_override=0x200000 insmod option.\n",
+                       dev->name, dev->name, dev->name);
                break;
        case SAA7134_BOARD_CINERGY400_CARDBUS:
                /* power-up tuner chip */
@@ -7640,10 +7724,10 @@ int saa7134_board_init1(struct saa7134_dev *dev)
                dev->has_remote = SAA7134_REMOTE_I2C;
                break;
        case SAA7134_BOARD_AVERMEDIA_A169_B:
-               printk("%s: %s: dual saa713x broadcast decoders\n"
-                      "%s: Sorry, none of the inputs to this chip are supported yet.\n"
-                      "%s: Dual decoder functionality is disabled for now, use the other chip.\n",
-                      dev->name,card(dev).name,dev->name,dev->name);
+               pr_warn("%s: %s: dual saa713x broadcast decoders\n"
+                       "%s: Sorry, none of the inputs to this chip are supported yet.\n"
+                       "%s: Dual decoder functionality is disabled for now, use the other chip.\n",
+                       dev->name, card(dev).name, dev->name, dev->name);
                break;
        case SAA7134_BOARD_AVERMEDIA_M102:
                /* enable tuner */
@@ -7789,7 +7873,7 @@ int saa7134_board_init2(struct saa7134_dev *dev)
                if (board == dev->board)
                        break;
                dev->board = board;
-               printk("%s: board type fixup: %s\n", dev->name,
+               pr_warn("%s: board type fixup: %s\n", dev->name,
                saa7134_boards[dev->board].name);
                dev->tuner_type = saa7134_boards[dev->board].tuner_type;
 
@@ -7797,10 +7881,11 @@ int saa7134_board_init2(struct saa7134_dev *dev)
        case SAA7134_BOARD_MD7134:
        {
                u8 subaddr;
-               u8 data[3];
+               u8 data[3], data1[] = { 0x09, 0x9f, 0x86, 0x11};
                int ret, tuner_t;
-               struct i2c_msg msg[] = {{.addr=0x50, .flags=0, .buf=&subaddr, .len = 1},
-                                       {.addr=0x50, .flags=I2C_M_RD, .buf=data, .len = 3}};
+               struct i2c_msg msg[] = {{.addr = 0x50, .flags = 0, .buf = &subaddr, .len = 1},
+                                       {.addr = 0x50, .flags = I2C_M_RD, .buf = data, .len = 3}},
+                               msg1 = {.addr = 0x61, .flags = 0, .buf = data1, .len = sizeof(data1)};
 
                subaddr= 0x14;
                tuner_t = 0;
@@ -7810,7 +7895,7 @@ int saa7134_board_init2(struct saa7134_dev *dev)
                 */
                ret = i2c_transfer(&dev->i2c_adap, msg, 2);
                if (ret != 2) {
-                       printk(KERN_ERR "EEPROM read failure\n");
+                       pr_err("EEPROM read failure\n");
                } else if ((data[0] != 0) && (data[0] != 0xff)) {
                        /* old config structure */
                        subaddr = data[0] + 2;
@@ -7825,7 +7910,8 @@ int saa7134_board_init2(struct saa7134_dev *dev)
                                dev->tuner_type = TUNER_PHILIPS_FM1216ME_MK3;
                                break;
                        default:
-                               printk(KERN_ERR "%s Can't determine tuner type %x from EEPROM\n", dev->name, tuner_t);
+                               pr_err("%s Can't determine tuner type %x from EEPROM\n",
+                                      dev->name, tuner_t);
                        }
                } else if ((data[1] != 0) && (data[1] != 0xff)) {
                        /* new config structure */
@@ -7842,16 +7928,28 @@ int saa7134_board_init2(struct saa7134_dev *dev)
                                break;
                        case 0x001d:
                                dev->tuner_type = TUNER_PHILIPS_FMD1216ME_MK3;
-                                       printk(KERN_INFO "%s Board has DVB-T\n", dev->name);
+                               pr_info("%s Board has DVB-T\n",
+                                      dev->name);
                                break;
                        default:
-                               printk(KERN_ERR "%s Can't determine tuner type %x from EEPROM\n", dev->name, tuner_t);
+                               pr_err("%s Can't determine tuner type %x from EEPROM\n",
+                                      dev->name, tuner_t);
                        }
                } else {
-                       printk(KERN_ERR "%s unexpected config structure\n", dev->name);
+                       pr_err("%s unexpected config structure\n", dev->name);
                }
 
-               printk(KERN_INFO "%s Tuner type is %d\n", dev->name, dev->tuner_type);
+               pr_info("%s Tuner type is %d\n", dev->name, dev->tuner_type);
+
+               /* The tuner TUNER_PHILIPS_FMD1216ME_MK3 after hardware    */
+               /* start has disabled IF and enabled DVB-T. When saa7134   */
+               /* scan I2C devices it will not detect IF tda9887 and can`t*/
+               /* watch TV without software reboot. To solve this problem */
+               /* switch the tuner to analog TV mode manually.            */
+               if (dev->tuner_type == TUNER_PHILIPS_FMD1216ME_MK3) {
+                       if (i2c_transfer(&dev->i2c_adap, &msg1, 1) != 1)
+                               printk(KERN_WARNING "%s: Unable to enable IF of the tuner.\n", dev->name);
+               }
                break;
        }
        case SAA7134_BOARD_PHILIPS_EUROPA:
@@ -7859,7 +7957,7 @@ int saa7134_board_init2(struct saa7134_dev *dev)
                        /* Reconfigure board as Snake reference design */
                        dev->board = SAA7134_BOARD_PHILIPS_SNAKE;
                        dev->tuner_type = saa7134_boards[dev->board].tuner_type;
-                       printk(KERN_INFO "%s: Reconfigured board as %s\n",
+                       pr_info("%s: Reconfigured board as %s\n",
                                dev->name, saa7134_boards[dev->board].name);
                        break;
                }
@@ -7887,7 +7985,7 @@ int saa7134_board_init2(struct saa7134_dev *dev)
                struct i2c_msg msg = {.addr=0x08, .flags=0, .buf=data, .len = sizeof(data)};
                if (dev->autodetected && (dev->eedata[0x49] == 0x50)) {
                        dev->board = SAA7134_BOARD_PHILIPS_TIGER_S;
-                       printk(KERN_INFO "%s: Reconfigured board as %s\n",
+                       pr_info("%s: Reconfigured board as %s\n",
                                dev->name, saa7134_boards[dev->board].name);
                }
                if (dev->board == SAA7134_BOARD_PHILIPS_TIGER_S) {
@@ -7903,13 +8001,14 @@ int saa7134_board_init2(struct saa7134_dev *dev)
        case SAA7134_BOARD_ASUSTeK_TVFM7135:
        /* The card below is detected as card=53, but is different */
               if (dev->autodetected && (dev->eedata[0x27] == 0x03)) {
-                      dev->board = SAA7134_BOARD_ASUSTeK_P7131_ANALOG;
-                      printk(KERN_INFO "%s: P7131 analog only, using "
-                                                      "entry of %s\n",
-                      dev->name, saa7134_boards[dev->board].name);
+                       dev->board = SAA7134_BOARD_ASUSTeK_P7131_ANALOG;
+                       pr_info("%s: P7131 analog only, using entry of %s\n",
+                               dev->name, saa7134_boards[dev->board].name);
 
-                       /* IR init has already happened for other cards, so
-                        * we have to catch up. */
+                       /*
+                        * IR init has already happened for other cards, so
+                        * we have to catch up.
+                        */
                        dev->has_remote = SAA7134_REMOTE_GPIO;
                        saa7134_input_init1(dev);
               }
@@ -7972,12 +8071,12 @@ int saa7134_board_init2(struct saa7134_dev *dev)
                msg.addr = 0x0b;
                msg.len = 1;
                if (1 != i2c_transfer(&dev->i2c_adap, &msg, 1)) {
-                       printk(KERN_WARNING "%s: send wake up byte to pic16C505"
+                       pr_warn("%s: send wake up byte to pic16C505"
                                        "(IR chip) failed\n", dev->name);
                } else {
                        msg.flags = I2C_M_RD;
                        rc = i2c_transfer(&dev->i2c_adap, &msg, 1);
-                       printk(KERN_INFO "%s: probe IR chip @ i2c 0x%02x: %s\n",
+                       pr_info("%s: probe IR chip @ i2c 0x%02x: %s\n",
                                   dev->name, msg.addr,
                                   (1 == rc) ? "yes" : "no");
                        if (rc == 1)
@@ -8018,10 +8117,10 @@ int saa7134_board_init2(struct saa7134_dev *dev)
                        dev->board = SAA7134_BOARD_VIDEOMATE_DVBT_200A;
                        dev->tuner_type   = saa7134_boards[dev->board].tuner_type;
                        dev->tda9887_conf = saa7134_boards[dev->board].tda9887_conf;
-                       printk(KERN_INFO "%s: Reconfigured board as %s\n",
+                       pr_info("%s: Reconfigured board as %s\n",
                                dev->name, saa7134_boards[dev->board].name);
                } else {
-                       printk(KERN_WARNING "%s: Unexpected tuner type info: %x in eeprom\n",
+                       pr_warn("%s: Unexpected tuner type info: %x in eeprom\n",
                                dev->name, dev->eedata[0x41]);
                        break;
                }
@@ -8043,9 +8142,8 @@ int saa7134_board_init2(struct saa7134_dev *dev)
                        msg.buf = &buffer[i][0];
                        msg.len = ARRAY_SIZE(buffer[0]);
                        if (i2c_transfer(&dev->i2c_adap, &msg, 1) != 1)
-                               printk(KERN_WARNING
-                                      "%s: Unable to enable tuner(%i).\n",
-                                      dev->name, i);
+                               pr_warn("%s: Unable to enable tuner(%i).\n",
+                                       dev->name, i);
                }
                break;
        }
@@ -8061,9 +8159,8 @@ int saa7134_board_init2(struct saa7134_dev *dev)
                /* watch TV without software reboot. For solve this problem */
                /* switch the tuner to analog TV mode manually.             */
                if (i2c_transfer(&dev->i2c_adap, &msg, 1) != 1)
-                               printk(KERN_WARNING
-                                     "%s: Unable to enable IF of the tuner.\n",
-                                      dev->name);
+                       pr_warn("%s: Unable to enable IF of the tuner.\n",
+                               dev->name);
                break;
        }
        case SAA7134_BOARD_KWORLD_PCI_SBTVD_FULLSEG: