4  * The low level driver for the Personal Sound System (ECHO ESC614).
 
   7  * Copyright (C) by Hannu Savolainen 1993-1997
 
   9  * OSS/Free for Linux is distributed under the GNU GENERAL PUBLIC LICENSE (GPL)
 
  10  * Version 2 (June 1991). See the "COPYING" file distributed with this software
 
  14  * Thomas Sailer        ioctl code reworked (vmalloc/vfree removed)
 
  15  * Alan Cox             modularisation, clean up.
 
  17  * 98-02-21: Vladimir Michl <vladimir.michl@upol.cz>
 
  18  *          Added mixer device for Beethoven ADSP-16 (master volume,
 
  19  *          bass, treble, synth), only for speakers.
 
  20  *          Fixed bug in pss_write (exchange parameters)
 
  21  *          Fixed config port of SB
 
  22  *          Requested two regions for PSS (PSS mixer, PSS config)
 
  23  *          Modified pss_download_boot
 
  24  *          To probe_pss_mss added test for initialize AD1848
 
  25  * 98-05-28: Vladimir Michl <vladimir.michl@upol.cz>
 
  26  *          Fixed computation of mixer volumes
 
  27  * 04-05-1999: Anthony Barbachan <barbcode@xmen.cis.fordham.edu>
 
  28  *          Added code that allows the user to enable his cdrom and/or 
 
  29  *          joystick through the module parameters pss_cdrom_port and 
 
  30  *          pss_enable_joystick.  pss_cdrom_port takes a port address as its
 
  31  *          argument.  pss_enable_joystick takes either a 0 or a non-0 as its
 
  33  * 04-06-1999: Anthony Barbachan <barbcode@xmen.cis.fordham.edu>
 
  34  *          Separated some code into new functions for easier reuse.  
 
  35  *          Cleaned up and streamlined new code.  Added code to allow a user 
 
  36  *          to only use this driver for enabling non-sound components 
 
  37  *          through the new module parameter pss_no_sound (flag).  Added 
 
  38  *          code that would allow a user to decide whether the driver should 
 
  39  *          reset the configured hardware settings for the PSS board through 
 
  40  *          the module parameter pss_keep_settings (flag).   This flag will 
 
  41  *          allow a user to free up resources in use by this card if needbe, 
 
  42  *          furthermore it allows him to use this driver to just enable the 
 
  43  *          emulations and then be unloaded as it is no longer needed.  Both 
 
  44  *          new settings are only available to this driver if compiled as a 
 
  45  *          module.  The default settings of all new parameters are set to 
 
  46  *          load the driver as it did in previous versions.
 
  47  * 04-07-1999: Anthony Barbachan <barbcode@xmen.cis.fordham.edu>
 
  48  *          Added module parameter pss_firmware to allow the user to tell 
 
  49  *          the driver where the fireware file is located.  The default 
 
  50  *          setting is the previous hardcoded setting "/etc/sound/pss_synth".
 
  51  * 00-03-03: Christoph Hellwig <chhellwig@infradead.org>
 
  52  *          Adapted to module_init/module_exit
 
  53  * 11-10-2000: Bartlomiej Zolnierkiewicz <bkz@linux-ide.org>
 
  54  *          Added __init to probe_pss(), attach_pss() and probe_pss_mpu()
 
  55  * 02-Jan-2001: Chris Rankin
 
  56  *          Specify that this module owns the coprocessor
 
  60 #include <linux/init.h>
 
  61 #include <linux/module.h>
 
  62 #include <linux/spinlock.h>
 
  64 #include "sound_config.h"
 
  65 #include "sound_firmware.h"
 
  73 #define REG(x)  (devc->base+x)
 
  87 #define CONF_CDROM      0x16
 
  88 #define CONF_MIDI       0x18
 
  93 #define PSS_FLAG3     0x0800
 
  94 #define PSS_FLAG2     0x0400
 
  95 #define PSS_FLAG1     0x1000
 
  96 #define PSS_FLAG0     0x0800
 
  97 #define PSS_WRITE_EMPTY  0x8000
 
  98 #define PSS_READ_FULL    0x4000
 
 109 #define WSS_INITIALIZING 0x80
 
 110 #define WSS_AUTOCALIBRATION 0x20
 
 112 #define NO_WSS_MIXER    -1
 
 116 #include "pss_boot.h"
 
 118 /* If compiled into kernel, it enable or disable pss mixer */
 
 119 #ifdef CONFIG_PSS_MIXER
 
 120 static int pss_mixer = 1;
 
 122 static int pss_mixer;
 
 126 typedef struct pss_mixerdata {
 
 127         unsigned int volume_l;
 
 128         unsigned int volume_r;
 
 134 typedef struct pss_confdata {
 
 143 static pss_confdata pss_data;
 
 144 static pss_confdata *devc = &pss_data;
 
 145 static DEFINE_SPINLOCK(lock);
 
 147 static int      pss_initialized;
 
 148 static int      nonstandard_microcode;
 
 149 static int      pss_cdrom_port = -1;    /* Parameter for the PSS cdrom port */
 
 150 static int      pss_enable_joystick;    /* Parameter for enabling the joystick */
 
 151 static coproc_operations pss_coproc_operations;
 
 153 static void pss_write(pss_confdata *devc, int data)
 
 155         unsigned long i, limit;
 
 157         limit = jiffies + HZ/10;        /* The timeout is 0.1 seconds */
 
 159          * Note! the i<5000000 is an emergency exit. The dsp_command() is sometimes
 
 160          * called while interrupts are disabled. This means that the timer is
 
 161          * disabled also. However the timeout situation is a abnormal condition.
 
 162          * Normally the DSP should be ready to accept commands after just couple of
 
 166         for (i = 0; i < 5000000 && time_before(jiffies, limit); i++)
 
 168                 if (inw(REG(PSS_STATUS)) & PSS_WRITE_EMPTY)
 
 170                         outw(data, REG(PSS_DATA));
 
 174         printk(KERN_WARNING "PSS: DSP Command (%04x) Timeout.\n", data);
 
 177 static int __init probe_pss(struct address_info *hw_config)
 
 182         devc->base = hw_config->io_base;
 
 183         irq = devc->irq = hw_config->irq;
 
 184         dma = devc->dma = hw_config->dma;
 
 185         devc->osp = hw_config->osp;
 
 187         if (devc->base != 0x220 && devc->base != 0x240)
 
 188                 if (devc->base != 0x230 && devc->base != 0x250)         /* Some cards use these */
 
 191         if (!request_region(devc->base, 0x10, "PSS mixer, SB emulation")) {
 
 192                 printk(KERN_ERR "PSS: I/O port conflict\n");
 
 195         id = inw(REG(PSS_ID));
 
 196         if ((id >> 8) != 'E') {
 
 197                 printk(KERN_ERR "No PSS signature detected at 0x%x (0x%x)\n",  devc->base,  id); 
 
 198                 release_region(devc->base, 0x10);
 
 201         if (!request_region(devc->base + 0x10, 0x9, "PSS config")) {
 
 202                 printk(KERN_ERR "PSS: I/O port conflict\n");
 
 203                 release_region(devc->base, 0x10);
 
 209 static int set_irq(pss_confdata * devc, int dev, int irq)
 
 211         static unsigned short irq_bits[16] =
 
 213                 0x0000, 0x0000, 0x0000, 0x0008,
 
 214                 0x0000, 0x0010, 0x0000, 0x0018,
 
 215                 0x0000, 0x0020, 0x0028, 0x0030,
 
 216                 0x0038, 0x0000, 0x0000, 0x0000
 
 219         unsigned short  tmp, bits;
 
 221         if (irq < 0 || irq > 15)
 
 224         tmp = inw(REG(dev)) & ~0x38;    /* Load confreg, mask IRQ bits out */
 
 226         if ((bits = irq_bits[irq]) == 0 && irq != 0)
 
 228                 printk(KERN_ERR "PSS: Invalid IRQ %d\n", irq);
 
 231         outw(tmp | bits, REG(dev));
 
 235 static int set_io_base(pss_confdata * devc, int dev, int base)
 
 237         unsigned short  tmp = inw(REG(dev)) & 0x003f;
 
 238         unsigned short  bits = (base & 0x0ffc) << 4;
 
 240         outw(bits | tmp, REG(dev));
 
 245 static int set_dma(pss_confdata * devc, int dev, int dma)
 
 247         static unsigned short dma_bits[8] =
 
 249                 0x0001, 0x0002, 0x0000, 0x0003,
 
 250                 0x0000, 0x0005, 0x0006, 0x0007
 
 253         unsigned short  tmp, bits;
 
 255         if (dma < 0 || dma > 7)
 
 258         tmp = inw(REG(dev)) & ~0x07;    /* Load confreg, mask DMA bits out */
 
 260         if ((bits = dma_bits[dma]) == 0 && dma != 4)
 
 262                   printk(KERN_ERR "PSS: Invalid DMA %d\n", dma);
 
 265         outw(tmp | bits, REG(dev));
 
 269 static int pss_reset_dsp(pss_confdata * devc)
 
 271         unsigned long   i, limit = jiffies + HZ/10;
 
 273         outw(0x2000, REG(PSS_CONTROL));
 
 274         for (i = 0; i < 32768 && (limit-jiffies >= 0); i++)
 
 275                 inw(REG(PSS_CONTROL));
 
 276         outw(0x0000, REG(PSS_CONTROL));
 
 280 static int pss_put_dspword(pss_confdata * devc, unsigned short word)
 
 284         for (i = 0; i < 327680; i++)
 
 286                 val = inw(REG(PSS_STATUS));
 
 287                 if (val & PSS_WRITE_EMPTY)
 
 289                         outw(word, REG(PSS_DATA));
 
 296 static int pss_get_dspword(pss_confdata * devc, unsigned short *word)
 
 300         for (i = 0; i < 327680; i++)
 
 302                 val = inw(REG(PSS_STATUS));
 
 303                 if (val & PSS_READ_FULL)
 
 305                         *word = inw(REG(PSS_DATA));
 
 312 static int pss_download_boot(pss_confdata * devc, unsigned char *block, int size, int flags)
 
 317         if (flags & CPF_FIRST)
 
 319 /*_____ Warn DSP software that a boot is coming */
 
 320                 outw(0x00fe, REG(PSS_DATA));
 
 322                 limit = jiffies + HZ/10;
 
 323                 for (i = 0; i < 32768 && time_before(jiffies, limit); i++)
 
 324                         if (inw(REG(PSS_DATA)) == 0x5500)
 
 327                 outw(*block++, REG(PSS_DATA));
 
 331         while ((flags&CPF_LAST) || count<size )
 
 335                 for (j = 0; j < 327670; j++)
 
 337 /*_____ Wait for BG to appear */
 
 338                         if (inw(REG(PSS_STATUS)) & PSS_FLAG3)
 
 344                         /* It's ok we timed out when the file was empty */
 
 345                         if (count >= size && flags & CPF_LAST)
 
 350                                 printk(KERN_ERR "PSS: Download timeout problems, byte %d=%d\n", count, size);
 
 354 /*_____ Send the next byte */
 
 357                         /* If not data in block send 0xffff */
 
 358                         outw (0xffff, REG (PSS_DATA));
 
 362                         /*_____ Send the next byte */
 
 363                         outw (*block++, REG (PSS_DATA));
 
 368         if (flags & CPF_LAST)
 
 371                 outw(0, REG(PSS_DATA));
 
 373                 limit = jiffies + HZ/10;
 
 374                 for (i = 0; i < 32768 && (limit - jiffies >= 0); i++)
 
 375                         val = inw(REG(PSS_STATUS));
 
 377                 limit = jiffies + HZ/10;
 
 378                 for (i = 0; i < 32768 && (limit-jiffies >= 0); i++)
 
 380                         val = inw(REG(PSS_STATUS));
 
 385                 /* now read the version */
 
 386                 for (i = 0; i < 32000; i++)
 
 388                         val = inw(REG(PSS_STATUS));
 
 389                         if (val & PSS_READ_FULL)
 
 395                 val = inw(REG(PSS_DATA));
 
 396                 /* printk( "<PSS: microcode version %d.%d loaded>",  val/16,  val % 16); */
 
 402 static void set_master_volume(pss_confdata *devc, int left, int right)
 
 404         static unsigned char log_scale[101] =  {
 
 405                 0xdb, 0xe0, 0xe3, 0xe5, 0xe7, 0xe9, 0xea, 0xeb, 0xec, 0xed, 0xed, 0xee,
 
 406                 0xef, 0xef, 0xf0, 0xf0, 0xf1, 0xf1, 0xf2, 0xf2, 0xf2, 0xf3, 0xf3, 0xf3,
 
 407                 0xf4, 0xf4, 0xf4, 0xf5, 0xf5, 0xf5, 0xf5, 0xf6, 0xf6, 0xf6, 0xf6, 0xf7,
 
 408                 0xf7, 0xf7, 0xf7, 0xf7, 0xf8, 0xf8, 0xf8, 0xf8, 0xf8, 0xf9, 0xf9, 0xf9,
 
 409                 0xf9, 0xf9, 0xf9, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfa, 0xfb, 0xfb,
 
 410                 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfb, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc, 0xfc,
 
 411                 0xfc, 0xfc, 0xfc, 0xfc, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd, 0xfd,
 
 412                 0xfd, 0xfd, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe, 0xfe,
 
 413                 0xfe, 0xfe, 0xff, 0xff, 0xff
 
 415         pss_write(devc, 0x0010);
 
 416         pss_write(devc, log_scale[left] | 0x0000);
 
 417         pss_write(devc, 0x0010);
 
 418         pss_write(devc, log_scale[right] | 0x0100);
 
 421 static void set_synth_volume(pss_confdata *devc, int volume)
 
 423         int vol = ((0x8000*volume)/100L);
 
 424         pss_write(devc, 0x0080);
 
 425         pss_write(devc, vol);
 
 426         pss_write(devc, 0x0081);
 
 427         pss_write(devc, vol);
 
 430 static void set_bass(pss_confdata *devc, int level)
 
 432         int vol = (int)(((0xfd - 0xf0) * level)/100L) + 0xf0;
 
 433         pss_write(devc, 0x0010);
 
 434         pss_write(devc, vol | 0x0200);
 
 437 static void set_treble(pss_confdata *devc, int level)
 
 439         int vol = (((0xfd - 0xf0) * level)/100L) + 0xf0;
 
 440         pss_write(devc, 0x0010);
 
 441         pss_write(devc, vol | 0x0300);
 
 444 static void pss_mixer_reset(pss_confdata *devc)
 
 446         set_master_volume(devc, 33, 33);
 
 448         set_treble(devc, 50);
 
 449         set_synth_volume(devc, 30);
 
 450         pss_write (devc, 0x0010);
 
 451         pss_write (devc, 0x0800 | 0xce);        /* Stereo */
 
 455                 devc->mixer.volume_l = devc->mixer.volume_r = 33;
 
 456                 devc->mixer.bass = 50;
 
 457                 devc->mixer.treble = 50;
 
 458                 devc->mixer.synth = 30;
 
 462 static int set_volume_mono(unsigned __user *p, int *aleft)
 
 466         if (get_user(volume, p))
 
 469         left = volume & 0xff;
 
 476 static int set_volume_stereo(unsigned __user *p, int *aleft, int *aright)
 
 480         if (get_user(volume, p))
 
 483         left = volume & 0xff;
 
 486         right = (volume >> 8) & 0xff;
 
 494 static int ret_vol_mono(int left)
 
 496         return ((left << 8) | left);
 
 499 static int ret_vol_stereo(int left, int right)
 
 501         return ((right << 8) | left);
 
 504 static int call_ad_mixer(pss_confdata *devc,unsigned int cmd, void __user *arg)
 
 506         if (devc->ad_mixer_dev != NO_WSS_MIXER) 
 
 507                 return mixer_devs[devc->ad_mixer_dev]->ioctl(devc->ad_mixer_dev, cmd, arg);
 
 512 static int pss_mixer_ioctl (int dev, unsigned int cmd, void __user *arg)
 
 514         pss_confdata *devc = mixer_devs[dev]->devc;
 
 515         int cmdf = cmd & 0xff;
 
 517         if ((cmdf != SOUND_MIXER_VOLUME) && (cmdf != SOUND_MIXER_BASS) &&
 
 518                 (cmdf != SOUND_MIXER_TREBLE) && (cmdf != SOUND_MIXER_SYNTH) &&
 
 519                 (cmdf != SOUND_MIXER_DEVMASK) && (cmdf != SOUND_MIXER_STEREODEVS) &&
 
 520                 (cmdf != SOUND_MIXER_RECMASK) && (cmdf != SOUND_MIXER_CAPS) &&
 
 521                 (cmdf != SOUND_MIXER_RECSRC)) 
 
 523                 return call_ad_mixer(devc, cmd, arg);
 
 526         if (((cmd >> 8) & 0xff) != 'M') 
 
 529         if (_SIOC_DIR (cmd) & _SIOC_WRITE)
 
 533                         case SOUND_MIXER_RECSRC:
 
 534                                 if (devc->ad_mixer_dev != NO_WSS_MIXER)
 
 535                                         return call_ad_mixer(devc, cmd, arg);
 
 539                                         if (get_user(v, (int __user *)arg))
 
 545                         case SOUND_MIXER_VOLUME:
 
 546                                 if (set_volume_stereo(arg,
 
 547                                         &devc->mixer.volume_l,
 
 548                                         &devc->mixer.volume_r))
 
 550                                 set_master_volume(devc, devc->mixer.volume_l,
 
 551                                         devc->mixer.volume_r);
 
 552                                 return ret_vol_stereo(devc->mixer.volume_l,
 
 553                                         devc->mixer.volume_r);
 
 555                         case SOUND_MIXER_BASS:
 
 556                                 if (set_volume_mono(arg, &devc->mixer.bass))
 
 558                                 set_bass(devc, devc->mixer.bass);
 
 559                                 return ret_vol_mono(devc->mixer.bass);
 
 561                         case SOUND_MIXER_TREBLE:
 
 562                                 if (set_volume_mono(arg, &devc->mixer.treble))
 
 564                                 set_treble(devc, devc->mixer.treble);
 
 565                                 return ret_vol_mono(devc->mixer.treble);
 
 567                         case SOUND_MIXER_SYNTH:
 
 568                                 if (set_volume_mono(arg, &devc->mixer.synth))
 
 570                                 set_synth_volume(devc, devc->mixer.synth);
 
 571                                 return ret_vol_mono(devc->mixer.synth);
 
 579                 int val, and_mask = 0, or_mask = 0;
 
 585                         case SOUND_MIXER_DEVMASK:
 
 586                                 if (call_ad_mixer(devc, cmd, arg) == -EINVAL)
 
 589                                 or_mask = SOUND_MASK_VOLUME | SOUND_MASK_BASS | SOUND_MASK_TREBLE | SOUND_MASK_SYNTH;
 
 592                         case SOUND_MIXER_STEREODEVS:
 
 593                                 if (call_ad_mixer(devc, cmd, arg) == -EINVAL)
 
 596                                 or_mask = SOUND_MASK_VOLUME;
 
 599                         case SOUND_MIXER_RECMASK:
 
 600                                 if (devc->ad_mixer_dev != NO_WSS_MIXER)
 
 601                                         return call_ad_mixer(devc, cmd, arg);
 
 604                         case SOUND_MIXER_CAPS:
 
 605                                 if (devc->ad_mixer_dev != NO_WSS_MIXER)
 
 606                                         return call_ad_mixer(devc, cmd, arg);
 
 607                                 or_mask = SOUND_CAP_EXCL_INPUT;
 
 610                         case SOUND_MIXER_RECSRC:
 
 611                                 if (devc->ad_mixer_dev != NO_WSS_MIXER)
 
 612                                         return call_ad_mixer(devc, cmd, arg);
 
 615                         case SOUND_MIXER_VOLUME:
 
 616                                 or_mask =  ret_vol_stereo(devc->mixer.volume_l, devc->mixer.volume_r);
 
 619                         case SOUND_MIXER_BASS:
 
 620                                 or_mask =  ret_vol_mono(devc->mixer.bass);
 
 623                         case SOUND_MIXER_TREBLE:
 
 624                                 or_mask = ret_vol_mono(devc->mixer.treble);
 
 627                         case SOUND_MIXER_SYNTH:
 
 628                                 or_mask = ret_vol_mono(devc->mixer.synth);
 
 633                 if (get_user(val, (int __user *)arg))
 
 637                 if (put_user(val, (int __user *)arg))
 
 643 static struct mixer_operations pss_mixer_operations =
 
 645         .owner  = THIS_MODULE,
 
 647         .name   = "PSS-AD1848",
 
 648         .ioctl  = pss_mixer_ioctl
 
 651 static void disable_all_emulations(void)
 
 653         outw(0x0000, REG(CONF_PSS));    /* 0x0400 enables joystick */
 
 654         outw(0x0000, REG(CONF_WSS));
 
 655         outw(0x0000, REG(CONF_SB));
 
 656         outw(0x0000, REG(CONF_MIDI));
 
 657         outw(0x0000, REG(CONF_CDROM));
 
 660 static void configure_nonsound_components(void)
 
 662         /* Configure Joystick port */
 
 664         if(pss_enable_joystick)
 
 666                 outw(0x0400, REG(CONF_PSS));    /* 0x0400 enables joystick */
 
 667                 printk(KERN_INFO "PSS: joystick enabled.\n");
 
 671                 printk(KERN_INFO "PSS: joystick port not enabled.\n");
 
 674         /* Configure CDROM port */
 
 676         if(pss_cdrom_port == -1)        /* If cdrom port enablation wasn't requested */
 
 678                 printk(KERN_INFO "PSS: CDROM port not enabled.\n");
 
 680         else if(check_region(pss_cdrom_port, 2))
 
 682                 printk(KERN_ERR "PSS: CDROM I/O port conflict.\n");
 
 684         else if(!set_io_base(devc, CONF_CDROM, pss_cdrom_port))
 
 686                 printk(KERN_ERR "PSS: CDROM I/O port could not be set.\n");
 
 688         else                                    /* CDROM port successfully configured */
 
 690                 printk(KERN_INFO "PSS: CDROM I/O port set to 0x%x.\n", pss_cdrom_port);
 
 694 static int __init attach_pss(struct address_info *hw_config)
 
 699         devc->base = hw_config->io_base;
 
 700         devc->irq = hw_config->irq;
 
 701         devc->dma = hw_config->dma;
 
 702         devc->osp = hw_config->osp;
 
 703         devc->ad_mixer_dev = NO_WSS_MIXER;
 
 705         if (!probe_pss(hw_config))
 
 708         id = inw(REG(PSS_ID)) & 0x00ff;
 
 711          * Disable all emulations. Will be enabled later (if required).
 
 714         disable_all_emulations();
 
 716 #ifdef YOU_REALLY_WANT_TO_ALLOCATE_THESE_RESOURCES
 
 717         if (sound_alloc_dma(hw_config->dma, "PSS"))
 
 719                 printk("pss.c: Can't allocate DMA channel.\n");
 
 720                 release_region(hw_config->io_base, 0x10);
 
 721                 release_region(hw_config->io_base+0x10, 0x9);
 
 724         if (!set_irq(devc, CONF_PSS, devc->irq))
 
 726                 printk("PSS: IRQ allocation error.\n");
 
 727                 release_region(hw_config->io_base, 0x10);
 
 728                 release_region(hw_config->io_base+0x10, 0x9);
 
 731         if (!set_dma(devc, CONF_PSS, devc->dma))
 
 733                 printk(KERN_ERR "PSS: DMA allocation error\n");
 
 734                 release_region(hw_config->io_base, 0x10);
 
 735                 release_region(hw_config->io_base+0x10, 0x9);
 
 740         configure_nonsound_components();
 
 742         sprintf(tmp, "ECHO-PSS  Rev. %d", id);
 
 743         conf_printf(tmp, hw_config);
 
 747 static int __init probe_pss_mpu(struct address_info *hw_config)
 
 749         struct resource *ports;
 
 752         if (!pss_initialized)
 
 755         ports = request_region(hw_config->io_base, 2, "mpu401");
 
 758                 printk(KERN_ERR "PSS: MPU I/O port conflict\n");
 
 761         if (!set_io_base(devc, CONF_MIDI, hw_config->io_base)) {
 
 762                 printk(KERN_ERR "PSS: MIDI base could not be set.\n");
 
 765         if (!set_irq(devc, CONF_MIDI, hw_config->irq)) {
 
 766                 printk(KERN_ERR "PSS: MIDI IRQ allocation error.\n");
 
 770                 printk(KERN_ERR "PSS: Can't enable MPU. MIDI synth microcode not available.\n");
 
 773         if (!pss_download_boot(devc, pss_synth, pss_synthLen, CPF_FIRST | CPF_LAST)) {
 
 774                 printk(KERN_ERR "PSS: Unable to load MIDI synth microcode to DSP.\n");
 
 779          * Finally wait until the DSP algorithm has initialized itself and
 
 780          * deactivates receive interrupt.
 
 783         for (timeout = 900000; timeout > 0; timeout--)
 
 785                 if ((inb(hw_config->io_base + 1) & 0x80) == 0)  /* Input data avail */
 
 786                         inb(hw_config->io_base);        /* Discard it */
 
 788                         break;  /* No more input */
 
 791         if (!probe_mpu401(hw_config, ports))
 
 794         attach_mpu401(hw_config, THIS_MODULE);  /* Slot 1 */
 
 795         if (hw_config->slots[1] != -1)  /* The MPU driver installed itself */
 
 796                 midi_devs[hw_config->slots[1]]->coproc = &pss_coproc_operations;
 
 799         release_region(hw_config->io_base, 2);
 
 803 static int pss_coproc_open(void *dev_info, int sub_device)
 
 808                         if (pss_synthLen == 0)
 
 810                                 printk(KERN_ERR "PSS: MIDI synth microcode not available.\n");
 
 813                         if (nonstandard_microcode)
 
 814                                 if (!pss_download_boot(devc, pss_synth, pss_synthLen, CPF_FIRST | CPF_LAST))
 
 816                                 printk(KERN_ERR "PSS: Unable to load MIDI synth microcode to DSP.\n");
 
 819                         nonstandard_microcode = 0;
 
 828 static void pss_coproc_close(void *dev_info, int sub_device)
 
 833 static void pss_coproc_reset(void *dev_info)
 
 836                 if (!pss_download_boot(devc, pss_synth, pss_synthLen, CPF_FIRST | CPF_LAST))
 
 838                         printk(KERN_ERR "PSS: Unable to load MIDI synth microcode to DSP.\n");
 
 840         nonstandard_microcode = 0;
 
 843 static int download_boot_block(void *dev_info, copr_buffer * buf)
 
 845         if (buf->len <= 0 || buf->len > sizeof(buf->data))
 
 848         if (!pss_download_boot(devc, buf->data, buf->len, buf->flags))
 
 850                 printk(KERN_ERR "PSS: Unable to load microcode block to DSP.\n");
 
 853         nonstandard_microcode = 1;      /* The MIDI microcode has been overwritten */
 
 857 static int pss_coproc_ioctl(void *dev_info, unsigned int cmd, void __user *arg, int local)
 
 864         unsigned short *data;
 
 866         /* printk( "PSS coproc ioctl %x %x %d\n",  cmd,  arg,  local); */
 
 870                 case SNDCTL_COPR_RESET:
 
 871                         pss_coproc_reset(dev_info);
 
 874                 case SNDCTL_COPR_LOAD:
 
 875                         buf = (copr_buffer *) vmalloc(sizeof(copr_buffer));
 
 878                         if (copy_from_user(buf, arg, sizeof(copr_buffer))) {
 
 882                         err = download_boot_block(dev_info, buf);
 
 886                 case SNDCTL_COPR_SENDMSG:
 
 887                         mbuf = (copr_msg *)vmalloc(sizeof(copr_msg));
 
 890                         if (copy_from_user(mbuf, arg, sizeof(copr_msg))) {
 
 894                         data = (unsigned short *)(mbuf->data);
 
 895                         spin_lock_irqsave(&lock, flags);
 
 896                         for (i = 0; i < mbuf->len; i++) {
 
 897                                 if (!pss_put_dspword(devc, *data++)) {
 
 898                                         spin_unlock_irqrestore(&lock,flags);
 
 899                                         mbuf->len = i;  /* feed back number of WORDs sent */
 
 900                                         err = copy_to_user(arg, mbuf, sizeof(copr_msg));
 
 902                                         return err ? -EFAULT : -EIO;
 
 905                         spin_unlock_irqrestore(&lock,flags);
 
 909                 case SNDCTL_COPR_RCVMSG:
 
 911                         mbuf = (copr_msg *)vmalloc(sizeof(copr_msg));
 
 914                         data = (unsigned short *)mbuf->data;
 
 915                         spin_lock_irqsave(&lock, flags);
 
 916                         for (i = 0; i < sizeof(mbuf->data)/sizeof(unsigned short); i++) {
 
 917                                 mbuf->len = i;  /* feed back number of WORDs read */
 
 918                                 if (!pss_get_dspword(devc, data++)) {
 
 924                         spin_unlock_irqrestore(&lock,flags);
 
 925                         if (copy_to_user(arg, mbuf, sizeof(copr_msg)))
 
 930                 case SNDCTL_COPR_RDATA:
 
 931                         if (copy_from_user(&dbuf, arg, sizeof(dbuf)))
 
 933                         spin_lock_irqsave(&lock, flags);
 
 934                         if (!pss_put_dspword(devc, 0x00d0)) {
 
 935                                 spin_unlock_irqrestore(&lock,flags);
 
 938                         if (!pss_put_dspword(devc, (unsigned short)(dbuf.parm1 & 0xffff))) {
 
 939                                 spin_unlock_irqrestore(&lock,flags);
 
 942                         if (!pss_get_dspword(devc, &tmp)) {
 
 943                                 spin_unlock_irqrestore(&lock,flags);
 
 947                         spin_unlock_irqrestore(&lock,flags);
 
 948                         if (copy_to_user(arg, &dbuf, sizeof(dbuf)))
 
 952                 case SNDCTL_COPR_WDATA:
 
 953                         if (copy_from_user(&dbuf, arg, sizeof(dbuf)))
 
 955                         spin_lock_irqsave(&lock, flags);
 
 956                         if (!pss_put_dspword(devc, 0x00d1)) {
 
 957                                 spin_unlock_irqrestore(&lock,flags);
 
 960                         if (!pss_put_dspword(devc, (unsigned short) (dbuf.parm1 & 0xffff))) {
 
 961                                 spin_unlock_irqrestore(&lock,flags);
 
 964                         tmp = (unsigned int)dbuf.parm2 & 0xffff;
 
 965                         if (!pss_put_dspword(devc, tmp)) {
 
 966                                 spin_unlock_irqrestore(&lock,flags);
 
 969                         spin_unlock_irqrestore(&lock,flags);
 
 972                 case SNDCTL_COPR_WCODE:
 
 973                         if (copy_from_user(&dbuf, arg, sizeof(dbuf)))
 
 975                         spin_lock_irqsave(&lock, flags);
 
 976                         if (!pss_put_dspword(devc, 0x00d3)) {
 
 977                                 spin_unlock_irqrestore(&lock,flags);
 
 980                         if (!pss_put_dspword(devc, (unsigned short)(dbuf.parm1 & 0xffff))) {
 
 981                                 spin_unlock_irqrestore(&lock,flags);
 
 984                         tmp = (unsigned int)dbuf.parm2 & 0x00ff;
 
 985                         if (!pss_put_dspword(devc, tmp)) {
 
 986                                 spin_unlock_irqrestore(&lock,flags);
 
 989                         tmp = ((unsigned int)dbuf.parm2 >> 8) & 0xffff;
 
 990                         if (!pss_put_dspword(devc, tmp)) {
 
 991                                 spin_unlock_irqrestore(&lock,flags);
 
 994                         spin_unlock_irqrestore(&lock,flags);
 
 997                 case SNDCTL_COPR_RCODE:
 
 998                         if (copy_from_user(&dbuf, arg, sizeof(dbuf)))
 
1000                         spin_lock_irqsave(&lock, flags);
 
1001                         if (!pss_put_dspword(devc, 0x00d2)) {
 
1002                                 spin_unlock_irqrestore(&lock,flags);
 
1005                         if (!pss_put_dspword(devc, (unsigned short)(dbuf.parm1 & 0xffff))) {
 
1006                                 spin_unlock_irqrestore(&lock,flags);
 
1009                         if (!pss_get_dspword(devc, &tmp)) { /* Read MSB */
 
1010                                 spin_unlock_irqrestore(&lock,flags);
 
1013                         dbuf.parm1 = tmp << 8;
 
1014                         if (!pss_get_dspword(devc, &tmp)) { /* Read LSB */
 
1015                                 spin_unlock_irqrestore(&lock,flags);
 
1018                         dbuf.parm1 |= tmp & 0x00ff;
 
1019                         spin_unlock_irqrestore(&lock,flags);
 
1020                         if (copy_to_user(arg, &dbuf, sizeof(dbuf)))
 
1030 static coproc_operations pss_coproc_operations =
 
1041 static int __init probe_pss_mss(struct address_info *hw_config)
 
1043         volatile int timeout;
 
1044         struct resource *ports;
 
1045         int        my_mix = -999;       /* gcc shut up */
 
1047         if (!pss_initialized)
 
1050         if (!request_region(hw_config->io_base, 4, "WSS config")) {
 
1051                 printk(KERN_ERR "PSS: WSS I/O port conflicts.\n");
 
1054         ports = request_region(hw_config->io_base + 4, 4, "ad1848");
 
1056                 printk(KERN_ERR "PSS: WSS I/O port conflicts.\n");
 
1057                 release_region(hw_config->io_base, 4);
 
1060         if (!set_io_base(devc, CONF_WSS, hw_config->io_base)) {
 
1061                 printk("PSS: WSS base not settable.\n");
 
1064         if (!set_irq(devc, CONF_WSS, hw_config->irq)) {
 
1065                 printk("PSS: WSS IRQ allocation error.\n");
 
1068         if (!set_dma(devc, CONF_WSS, hw_config->dma)) {
 
1069                 printk(KERN_ERR "PSS: WSS DMA allocation error\n");
 
1073          * For some reason the card returns 0xff in the WSS status register
 
1074          * immediately after boot. Probably MIDI+SB emulation algorithm
 
1075          * downloaded to the ADSP2115 spends some time initializing the card.
 
1076          * Let's try to wait until it finishes this task.
 
1078         for (timeout = 0; timeout < 100000 && (inb(hw_config->io_base + WSS_INDEX) &
 
1079           WSS_INITIALIZING); timeout++)
 
1082         outb((0x0b), hw_config->io_base + WSS_INDEX);   /* Required by some cards */
 
1084         for (timeout = 0; (inb(hw_config->io_base + WSS_DATA) & WSS_AUTOCALIBRATION) &&
 
1085           (timeout < 100000); timeout++)
 
1088         if (!probe_ms_sound(hw_config, ports))
 
1091         devc->ad_mixer_dev = NO_WSS_MIXER;
 
1094                 if ((my_mix = sound_install_mixer (MIXER_DRIVER_VERSION,
 
1095                         "PSS-SPEAKERS and AD1848 (through MSS audio codec)",
 
1096                         &pss_mixer_operations,
 
1097                         sizeof (struct mixer_operations),
 
1100                         printk(KERN_ERR "Could not install PSS mixer\n");
 
1104         pss_mixer_reset(devc);
 
1105         attach_ms_sound(hw_config, ports, THIS_MODULE); /* Slot 0 */
 
1107         if (hw_config->slots[0] != -1)
 
1109                 /* The MSS driver installed itself */
 
1110                 audio_devs[hw_config->slots[0]]->coproc = &pss_coproc_operations;
 
1111                 if (pss_mixer && (num_mixers == (my_mix + 2)))
 
1113                         /* The MSS mixer installed */
 
1114                         devc->ad_mixer_dev = audio_devs[hw_config->slots[0]]->mixer_dev;
 
1119         release_region(hw_config->io_base + 4, 4);
 
1120         release_region(hw_config->io_base, 4);
 
1124 static inline void __exit unload_pss(struct address_info *hw_config)
 
1126         release_region(hw_config->io_base, 0x10);
 
1127         release_region(hw_config->io_base+0x10, 0x9);
 
1130 static inline void __exit unload_pss_mpu(struct address_info *hw_config)
 
1132         unload_mpu401(hw_config);
 
1135 static inline void __exit unload_pss_mss(struct address_info *hw_config)
 
1137         unload_ms_sound(hw_config);
 
1141 static struct address_info cfg;
 
1142 static struct address_info cfg2;
 
1143 static struct address_info cfg_mpu;
 
1145 static int pss_io __initdata    = -1;
 
1146 static int mss_io __initdata    = -1;
 
1147 static int mss_irq __initdata   = -1;
 
1148 static int mss_dma __initdata   = -1;
 
1149 static int mpu_io __initdata    = -1;
 
1150 static int mpu_irq __initdata   = -1;
 
1151 static int pss_no_sound = 0;    /* Just configure non-sound components */
 
1152 static int pss_keep_settings  = 1;      /* Keep hardware settings at module exit */
 
1153 static char *pss_firmware = "/etc/sound/pss_synth";
 
1155 module_param(pss_io, int, 0);
 
1156 MODULE_PARM_DESC(pss_io, "Set i/o base of PSS card (probably 0x220 or 0x240)");
 
1157 module_param(mss_io, int, 0);
 
1158 MODULE_PARM_DESC(mss_io, "Set WSS (audio) i/o base (0x530, 0x604, 0xE80, 0xF40, or other. Address must end in 0 or 4 and must be from 0x100 to 0xFF4)");
 
1159 module_param(mss_irq, int, 0);
 
1160 MODULE_PARM_DESC(mss_irq, "Set WSS (audio) IRQ (3, 5, 7, 9, 10, 11, 12)");
 
1161 module_param(mss_dma, int, 0);
 
1162 MODULE_PARM_DESC(mss_dma, "Set WSS (audio) DMA (0, 1, 3)");
 
1163 module_param(mpu_io, int, 0);
 
1164 MODULE_PARM_DESC(mpu_io, "Set MIDI i/o base (0x330 or other. Address must be on 4 location boundaries and must be from 0x100 to 0xFFC)");
 
1165 module_param(mpu_irq, int, 0);
 
1166 MODULE_PARM_DESC(mpu_irq, "Set MIDI IRQ (3, 5, 7, 9, 10, 11, 12)");
 
1167 module_param(pss_cdrom_port, int, 0);
 
1168 MODULE_PARM_DESC(pss_cdrom_port, "Set the PSS CDROM port i/o base (0x340 or other)");
 
1169 module_param(pss_enable_joystick, bool, 0);
 
1170 MODULE_PARM_DESC(pss_enable_joystick, "Enables the PSS joystick port (1 to enable, 0 to disable)");
 
1171 module_param(pss_no_sound, bool, 0);
 
1172 MODULE_PARM_DESC(pss_no_sound, "Configure sound compoents (0 - no, 1 - yes)");
 
1173 module_param(pss_keep_settings, bool, 0);
 
1174 MODULE_PARM_DESC(pss_keep_settings, "Keep hardware setting at driver unloading (0 - no, 1 - yes)");
 
1175 module_param(pss_firmware, charp, 0);
 
1176 MODULE_PARM_DESC(pss_firmware, "Location of the firmware file (default - /etc/sound/pss_synth)");
 
1177 module_param(pss_mixer, bool, 0);
 
1178 MODULE_PARM_DESC(pss_mixer, "Enable (1) or disable (0) PSS mixer (controlling of output volume, bass, treble, synth volume). The mixer is not available on all PSS cards.");
 
1179 MODULE_AUTHOR("Hannu Savolainen, Vladimir Michl");
 
1180 MODULE_DESCRIPTION("Module for PSS sound cards (based on AD1848, ADSP-2115 and ESC614). This module includes control of output amplifier and synth volume of the Beethoven ADSP-16 card (this may work with other PSS cards).");
 
1181 MODULE_LICENSE("GPL");
 
1184 static int fw_load = 0;
 
1185 static int pssmpu = 0, pssmss = 0;
 
1188  *    Load a PSS sound card module
 
1191 static int __init init_pss(void)
 
1194         if(pss_no_sound)                /* If configuring only nonsound components */
 
1196                 cfg.io_base = pss_io;
 
1197                 if(!probe_pss(&cfg))
 
1199                 printk(KERN_INFO "ECHO-PSS  Rev. %d\n", inw(REG(PSS_ID)) & 0x00ff);
 
1200                 printk(KERN_INFO "PSS: loading in no sound mode.\n");
 
1201                 disable_all_emulations();
 
1202                 configure_nonsound_components();
 
1203                 release_region(pss_io, 0x10);
 
1204                 release_region(pss_io + 0x10, 0x9);
 
1208         cfg.io_base = pss_io;
 
1210         cfg2.io_base = mss_io;
 
1214         cfg_mpu.io_base = mpu_io;
 
1215         cfg_mpu.irq = mpu_irq;
 
1217         if (cfg.io_base == -1 || cfg2.io_base == -1 || cfg2.irq == -1 || cfg.dma == -1) {
 
1218                 printk(KERN_INFO "pss: mss_io, mss_dma, mss_irq and pss_io must be set.\n");
 
1224                 pss_synthLen = mod_firmware_load(pss_firmware, (void *) &pss_synth);
 
1226         if (!attach_pss(&cfg))
 
1231         if (probe_pss_mpu(&cfg_mpu))
 
1234         if (probe_pss_mss(&cfg2))
 
1240 static void __exit cleanup_pss(void)
 
1244                 if(fw_load && pss_synth)
 
1247                         unload_pss_mss(&cfg2);
 
1249                         unload_pss_mpu(&cfg_mpu);
 
1253         if(!pss_keep_settings)  /* Keep hardware settings if asked */
 
1255                 disable_all_emulations();
 
1256                 printk(KERN_INFO "Resetting PSS sound card configurations.\n");
 
1260 module_init(init_pss);
 
1261 module_exit(cleanup_pss);
 
1264 static int __init setup_pss(char *str)
 
1266         /* io, mss_io, mss_irq, mss_dma, mpu_io, mpu_irq */
 
1269         str = get_options(str, ARRAY_SIZE(ints), ints);
 
1281 __setup("pss=", setup_pss);