[ALSA] Change an arugment of snd_mpu401_uart_new() to bit flags
[powerpc.git] / sound / pci / via82xx.c
index 1b740dd..12ce22e 100644 (file)
@@ -396,7 +396,7 @@ struct via82xx {
 #endif
 };
 
-static struct pci_device_id snd_via82xx_ids[] = {
+static struct pci_device_id snd_via82xx_ids[] __devinitdata = {
        /* 0x1106, 0x3058 */
        { PCI_VENDOR_ID_VIA, PCI_DEVICE_ID_VIA_82C686_5, PCI_ANY_ID, PCI_ANY_ID, 0, 0, TYPE_CARD_VIA686, },     /* 686A */
        /* 0x1106, 0x3059 */
@@ -863,16 +863,14 @@ static snd_pcm_uframes_t snd_via8233_pcm_pointer(struct snd_pcm_substream *subst
        if (!status)
                status = inb(VIADEV_REG(viadev, OFFSET_STATUS));
 
+       /* An apparent bug in the 8251 is worked around by sending a 
+        * REG_CTRL_START. */
+       if (chip->revision == VIA_REV_8251 && (status & VIA_REG_STAT_EOL))
+               snd_via82xx_pcm_trigger(substream, SNDRV_PCM_TRIGGER_START);
+
        if (!(status & VIA_REG_STAT_ACTIVE)) {
-               /* An apparent bug in the 8251 is worked around by sending
-                * a REG_CTRL_START. */
-               if (chip->revision == VIA_REV_8251)
-                       snd_via82xx_pcm_trigger(substream,
-                                               SNDRV_PCM_TRIGGER_START);
-               else {
-                       res = 0;
-                       goto unlock;
-               }
+               res = 0;
+               goto unlock;
        }
        if (count & 0xffffff) {
                idx = count >> 24;
@@ -1975,7 +1973,7 @@ static int __devinit snd_via686_init_misc(struct via82xx *chip)
        pci_write_config_byte(chip->pci, VIA_PNP_CONTROL, legacy_cfg);
        if (chip->mpu_res) {
                if (snd_mpu401_uart_new(chip->card, 0, MPU401_HW_VIA686A,
-                                       mpu_port, 1,
+                                       mpu_port, MPU401_INFO_INTEGRATED,
                                        chip->irq, 0, &chip->rmidi) < 0) {
                        printk(KERN_WARNING "unable to initialize MPU-401"
                               " at 0x%lx, skipping\n", mpu_port);
@@ -2017,7 +2015,7 @@ static void __devinit snd_via82xx_proc_init(struct via82xx *chip)
        struct snd_info_entry *entry;
 
        if (! snd_card_proc_new(chip->card, "via82xx", &entry))
-               snd_info_set_text_ops(entry, chip, 1024, snd_via82xx_proc_read);
+               snd_info_set_text_ops(entry, chip, snd_via82xx_proc_read);
 }
 
 /*
@@ -2334,7 +2332,7 @@ struct dxs_whitelist {
        short action;   /* new dxs_support value */
 };
 
-static int __devinit check_dxs_list(struct pci_dev *pci)
+static int __devinit check_dxs_list(struct pci_dev *pci, int revision)
 {
        static struct dxs_whitelist whitelist[] = {
                { .subvendor = 0x1005, .subdevice = 0x4710, .action = VIA_DXS_ENABLE }, /* Avance Logic Mobo */
@@ -2415,6 +2413,10 @@ static int __devinit check_dxs_list(struct pci_dev *pci)
                }
        }
 
+       /* for newer revision, default to DXS_SRC */
+       if (revision >= VIA_REV_8235)
+               return VIA_DXS_SRC;
+
        /*
         * not detected, try 48k rate only to be sure.
         */
@@ -2459,7 +2461,7 @@ static int __devinit snd_via82xx_probe(struct pci_dev *pci,
                }
                if (chip_type != TYPE_VIA8233A) {
                        if (dxs_support == VIA_DXS_AUTO)
-                               dxs_support = check_dxs_list(pci);
+                               dxs_support = check_dxs_list(pci, revision);
                        /* force to use VIA8233 or 8233A model according to
                         * dxs_support module option
                         */