- if ((err = snd_es1688_create(card, port[dev], mpu_port[dev],
- xirq, xmpu_irq, xdma,
- ES1688_HW_AUTO, &chip)) < 0)
- goto _err;
+ if (port[dev] != SNDRV_AUTO_PORT) {
+ if ((err = snd_es1688_create(card, port[dev], mpu_port[dev],
+ xirq, xmpu_irq, xdma,
+ ES1688_HW_AUTO, &chip)) < 0)
+ goto _err;
+ } else {
+ /* auto-probe legacy ports */
+ static unsigned long possible_ports[] = {
+ 0x220, 0x240, 0x260,
+ };
+ int i;
+ for (i = 0; i < ARRAY_SIZE(possible_ports); i++) {
+ err = snd_es1688_create(card, possible_ports[i],
+ mpu_port[dev],
+ xirq, xmpu_irq, xdma,
+ ES1688_HW_AUTO, &chip);
+ if (err >= 0) {
+ port[dev] = possible_ports[i];
+ break;
+ }
+ }
+ if (i >= ARRAY_SIZE(possible_ports))
+ goto _err;
+ }