linux/sound/oss/ad1848.c
<<
>>
Prefs
   1/*
   2 * sound/oss/ad1848.c
   3 *
   4 * The low level driver for the AD1848/CS4248 codec chip which
   5 * is used for example in the MS Sound System.
   6 *
   7 * The CS4231 which is used in the GUS MAX and some other cards is
   8 * upwards compatible with AD1848 and this driver is able to drive it.
   9 *
  10 * CS4231A and AD1845 are upward compatible with CS4231. However
  11 * the new features of these chips are different.
  12 *
  13 * CS4232 is a PnP audio chip which contains a CS4231A (and SB, MPU).
  14 * CS4232A is an improved version of CS4232.
  15 *
  16 *
  17 *
  18 * Copyright (C) by Hannu Savolainen 1993-1997
  19 *
  20 * OSS/Free for Linux is distributed under the GNU GENERAL PUBLIC LICENSE (GPL)
  21 * Version 2 (June 1991). See the "COPYING" file distributed with this software
  22 * for more info.
  23 *
  24 *
  25 * Thomas Sailer        : ioctl code reworked (vmalloc/vfree removed)
  26 *                        general sleep/wakeup clean up.
  27 * Alan Cox             : reformatted. Fixed SMP bugs. Moved to kernel alloc/free
  28 *                        of irqs. Use dev_id.
  29 * Christoph Hellwig    : adapted to module_init/module_exit
  30 * Aki Laukkanen        : added power management support
  31 * Arnaldo C. de Melo   : added missing restore_flags in ad1848_resume
  32 * Miguel Freitas       : added ISA PnP support
  33 * Alan Cox             : Added CS4236->4239 identification
  34 * Daniel T. Cobra      : Alernate config/mixer for later chips
  35 * Alan Cox             : Merged chip idents and config code
  36 *
  37 * TODO
  38 *              APM save restore assist code on IBM thinkpad
  39 *
  40 * Status:
  41 *              Tested. Believed fully functional.
  42 */
  43
  44#include <linux/init.h>
  45#include <linux/interrupt.h>
  46#include <linux/module.h>
  47#include <linux/stddef.h>
  48#include <linux/slab.h>
  49#include <linux/isapnp.h>
  50#include <linux/pnp.h>
  51#include <linux/spinlock.h>
  52
  53#include "sound_config.h"
  54
  55#include "ad1848.h"
  56#include "ad1848_mixer.h"
  57
  58typedef struct
  59{
  60        spinlock_t      lock;
  61        int             base;
  62        int             irq;
  63        int             dma1, dma2;
  64        int             dual_dma;       /* 1, when two DMA channels allocated */
  65        int             subtype;
  66        unsigned char   MCE_bit;
  67        unsigned char   saved_regs[64]; /* Includes extended register space */
  68        int             debug_flag;
  69
  70        int             audio_flags;
  71        int             record_dev, playback_dev;
  72
  73        int             xfer_count;
  74        int             audio_mode;
  75        int             open_mode;
  76        int             intr_active;
  77        char           *chip_name, *name;
  78        int             model;
  79#define MD_1848         1
  80#define MD_4231         2
  81#define MD_4231A        3
  82#define MD_1845         4
  83#define MD_4232         5
  84#define MD_C930         6
  85#define MD_IWAVE        7
  86#define MD_4235         8 /* Crystal Audio CS4235  */
  87#define MD_1845_SSCAPE  9 /* Ensoniq Soundscape PNP*/
  88#define MD_4236         10 /* 4236 and higher */
  89#define MD_42xB         11 /* CS 42xB */
  90#define MD_4239         12 /* CS4239 */
  91
  92        /* Mixer parameters */
  93        int             recmask;
  94        int             supported_devices, orig_devices;
  95        int             supported_rec_devices, orig_rec_devices;
  96        int            *levels;
  97        short           mixer_reroute[32];
  98        int             dev_no;
  99        volatile unsigned long timer_ticks;
 100        int             timer_running;
 101        int             irq_ok;
 102        mixer_ents     *mix_devices;
 103        int             mixer_output_port;
 104} ad1848_info;
 105
 106typedef struct ad1848_port_info
 107{
 108        int             open_mode;
 109        int             speed;
 110        unsigned char   speed_bits;
 111        int             channels;
 112        int             audio_format;
 113        unsigned char   format_bits;
 114}
 115ad1848_port_info;
 116
 117static struct address_info cfg;
 118static int nr_ad1848_devs;
 119
 120static bool deskpro_xl;
 121static bool deskpro_m;
 122static bool soundpro;
 123
 124static volatile signed char irq2dev[17] = {
 125        -1, -1, -1, -1, -1, -1, -1, -1,
 126        -1, -1, -1, -1, -1, -1, -1, -1, -1
 127};
 128
 129#ifndef EXCLUDE_TIMERS
 130static int timer_installed = -1;
 131#endif
 132
 133static int loaded;
 134
 135static int ad_format_mask[13 /*devc->model */ ] =
 136{
 137        0,
 138        AFMT_U8 | AFMT_S16_LE | AFMT_MU_LAW | AFMT_A_LAW,
 139        AFMT_U8 | AFMT_S16_LE | AFMT_MU_LAW | AFMT_A_LAW | AFMT_S16_BE | AFMT_IMA_ADPCM,
 140        AFMT_U8 | AFMT_S16_LE | AFMT_MU_LAW | AFMT_A_LAW | AFMT_S16_BE | AFMT_IMA_ADPCM,
 141        AFMT_U8 | AFMT_S16_LE | AFMT_MU_LAW | AFMT_A_LAW,       /* AD1845 */
 142        AFMT_U8 | AFMT_S16_LE | AFMT_MU_LAW | AFMT_A_LAW | AFMT_S16_BE | AFMT_IMA_ADPCM,
 143        AFMT_U8 | AFMT_S16_LE | AFMT_MU_LAW | AFMT_A_LAW | AFMT_S16_BE | AFMT_IMA_ADPCM,
 144        AFMT_U8 | AFMT_S16_LE | AFMT_MU_LAW | AFMT_A_LAW | AFMT_S16_BE | AFMT_IMA_ADPCM,
 145        AFMT_U8 | AFMT_S16_LE /* CS4235 */,
 146        AFMT_U8 | AFMT_S16_LE | AFMT_MU_LAW | AFMT_A_LAW        /* Ensoniq Soundscape*/,
 147        AFMT_U8 | AFMT_S16_LE | AFMT_MU_LAW | AFMT_A_LAW | AFMT_S16_BE | AFMT_IMA_ADPCM,
 148        AFMT_U8 | AFMT_S16_LE | AFMT_MU_LAW | AFMT_A_LAW | AFMT_S16_BE | AFMT_IMA_ADPCM,
 149        AFMT_U8 | AFMT_S16_LE | AFMT_MU_LAW | AFMT_A_LAW | AFMT_S16_BE | AFMT_IMA_ADPCM
 150};
 151
 152static ad1848_info adev_info[MAX_AUDIO_DEV];
 153
 154#define io_Index_Addr(d)        ((d)->base)
 155#define io_Indexed_Data(d)      ((d)->base+1)
 156#define io_Status(d)            ((d)->base+2)
 157#define io_Polled_IO(d)         ((d)->base+3)
 158
 159static struct {
 160     unsigned char flags;
 161#define CAP_F_TIMER 0x01     
 162} capabilities [10 /*devc->model */ ] = {
 163     {0}
 164    ,{0}           /* MD_1848  */
 165    ,{CAP_F_TIMER} /* MD_4231  */
 166    ,{CAP_F_TIMER} /* MD_4231A */
 167    ,{CAP_F_TIMER} /* MD_1845  */
 168    ,{CAP_F_TIMER} /* MD_4232  */
 169    ,{0}           /* MD_C930  */
 170    ,{CAP_F_TIMER} /* MD_IWAVE */
 171    ,{0}           /* MD_4235  */
 172    ,{CAP_F_TIMER} /* MD_1845_SSCAPE */
 173};
 174
 175#ifdef CONFIG_PNP
 176static int isapnp       = 1;
 177static int isapnpjump;
 178static bool reverse;
 179
 180static int audio_activated;
 181#else
 182static int isapnp;
 183#endif
 184
 185
 186
 187static int      ad1848_open(int dev, int mode);
 188static void     ad1848_close(int dev);
 189static void     ad1848_output_block(int dev, unsigned long buf, int count, int intrflag);
 190static void     ad1848_start_input(int dev, unsigned long buf, int count, int intrflag);
 191static int      ad1848_prepare_for_output(int dev, int bsize, int bcount);
 192static int      ad1848_prepare_for_input(int dev, int bsize, int bcount);
 193static void     ad1848_halt(int dev);
 194static void     ad1848_halt_input(int dev);
 195static void     ad1848_halt_output(int dev);
 196static void     ad1848_trigger(int dev, int bits);
 197static irqreturn_t adintr(int irq, void *dev_id);
 198
 199#ifndef EXCLUDE_TIMERS
 200static int ad1848_tmr_install(int dev);
 201static void ad1848_tmr_reprogram(int dev);
 202#endif
 203
 204static int ad_read(ad1848_info * devc, int reg)
 205{
 206        int x;
 207        int timeout = 900000;
 208
 209        while (timeout > 0 && inb(devc->base) == 0x80)  /*Are we initializing */
 210                timeout--;
 211
 212        if(reg < 32)
 213        {
 214                outb(((unsigned char) (reg & 0xff) | devc->MCE_bit), io_Index_Addr(devc));
 215                x = inb(io_Indexed_Data(devc));
 216        }
 217        else
 218        {
 219                int xreg, xra;
 220
 221                xreg = (reg & 0xff) - 32;
 222                xra = (((xreg & 0x0f) << 4) & 0xf0) | 0x08 | ((xreg & 0x10) >> 2);
 223                outb(((unsigned char) (23 & 0xff) | devc->MCE_bit), io_Index_Addr(devc));
 224                outb(((unsigned char) (xra & 0xff)), io_Indexed_Data(devc));
 225                x = inb(io_Indexed_Data(devc));
 226        }
 227
 228        return x;
 229}
 230
 231static void ad_write(ad1848_info * devc, int reg, int data)
 232{
 233        int timeout = 900000;
 234
 235        while (timeout > 0 && inb(devc->base) == 0x80)  /* Are we initializing */
 236                timeout--;
 237
 238        if(reg < 32)
 239        {
 240                outb(((unsigned char) (reg & 0xff) | devc->MCE_bit), io_Index_Addr(devc));
 241                outb(((unsigned char) (data & 0xff)), io_Indexed_Data(devc));
 242        }
 243        else
 244        {
 245                int xreg, xra;
 246                
 247                xreg = (reg & 0xff) - 32;
 248                xra = (((xreg & 0x0f) << 4) & 0xf0) | 0x08 | ((xreg & 0x10) >> 2);
 249                outb(((unsigned char) (23 & 0xff) | devc->MCE_bit), io_Index_Addr(devc));
 250                outb(((unsigned char) (xra & 0xff)), io_Indexed_Data(devc));
 251                outb((unsigned char) (data & 0xff), io_Indexed_Data(devc));
 252        }
 253}
 254
 255static void wait_for_calibration(ad1848_info * devc)
 256{
 257        int timeout = 0;
 258
 259        /*
 260         * Wait until the auto calibration process has finished.
 261         *
 262         * 1)       Wait until the chip becomes ready (reads don't return 0x80).
 263         * 2)       Wait until the ACI bit of I11 gets on and then off.
 264         */
 265
 266        timeout = 100000;
 267        while (timeout > 0 && inb(devc->base) == 0x80)
 268                timeout--;
 269        if (inb(devc->base) & 0x80)
 270                printk(KERN_WARNING "ad1848: Auto calibration timed out(1).\n");
 271
 272        timeout = 100;
 273        while (timeout > 0 && !(ad_read(devc, 11) & 0x20))
 274                timeout--;
 275        if (!(ad_read(devc, 11) & 0x20))
 276                return;
 277
 278        timeout = 80000;
 279        while (timeout > 0 && (ad_read(devc, 11) & 0x20))
 280                timeout--;
 281        if (ad_read(devc, 11) & 0x20)
 282                if ((devc->model != MD_1845) && (devc->model != MD_1845_SSCAPE))
 283                        printk(KERN_WARNING "ad1848: Auto calibration timed out(3).\n");
 284}
 285
 286static void ad_mute(ad1848_info * devc)
 287{
 288        int i;
 289        unsigned char prev;
 290
 291        /*
 292         * Save old register settings and mute output channels
 293         */
 294         
 295        for (i = 6; i < 8; i++)
 296        {
 297                prev = devc->saved_regs[i] = ad_read(devc, i);
 298        }
 299
 300}
 301
 302static void ad_unmute(ad1848_info * devc)
 303{
 304}
 305
 306static void ad_enter_MCE(ad1848_info * devc)
 307{
 308        int timeout = 1000;
 309        unsigned short prev;
 310
 311        while (timeout > 0 && inb(devc->base) == 0x80)  /*Are we initializing */
 312                timeout--;
 313
 314        devc->MCE_bit = 0x40;
 315        prev = inb(io_Index_Addr(devc));
 316        if (prev & 0x40)
 317        {
 318                return;
 319        }
 320        outb((devc->MCE_bit), io_Index_Addr(devc));
 321}
 322
 323static void ad_leave_MCE(ad1848_info * devc)
 324{
 325        unsigned char prev, acal;
 326        int timeout = 1000;
 327
 328        while (timeout > 0 && inb(devc->base) == 0x80)  /*Are we initializing */
 329                timeout--;
 330
 331        acal = ad_read(devc, 9);
 332
 333        devc->MCE_bit = 0x00;
 334        prev = inb(io_Index_Addr(devc));
 335        outb((0x00), io_Index_Addr(devc));      /* Clear the MCE bit */
 336
 337        if ((prev & 0x40) == 0) /* Not in MCE mode */
 338        {
 339                return;
 340        }
 341        outb((0x00), io_Index_Addr(devc));      /* Clear the MCE bit */
 342        if (acal & 0x08)        /* Auto calibration is enabled */
 343                wait_for_calibration(devc);
 344}
 345
 346static int ad1848_set_recmask(ad1848_info * devc, int mask)
 347{
 348        unsigned char   recdev;
 349        int             i, n;
 350        unsigned long flags;
 351
 352        mask &= devc->supported_rec_devices;
 353
 354        /* Rename the mixer bits if necessary */
 355        for (i = 0; i < 32; i++)
 356        {
 357                if (devc->mixer_reroute[i] != i)
 358                {
 359                        if (mask & (1 << i))
 360                        {
 361                                mask &= ~(1 << i);
 362                                mask |= (1 << devc->mixer_reroute[i]);
 363                        }
 364                }
 365        }
 366        
 367        n = 0;
 368        for (i = 0; i < 32; i++)        /* Count selected device bits */
 369                if (mask & (1 << i))
 370                        n++;
 371
 372        spin_lock_irqsave(&devc->lock,flags);
 373        if (!soundpro) {
 374                if (n == 0)
 375                        mask = SOUND_MASK_MIC;
 376                else if (n != 1) {      /* Too many devices selected */
 377                        mask &= ~devc->recmask; /* Filter out active settings */
 378
 379                        n = 0;
 380                        for (i = 0; i < 32; i++)        /* Count selected device bits */
 381                                if (mask & (1 << i))
 382                                        n++;
 383
 384                        if (n != 1)
 385                                mask = SOUND_MASK_MIC;
 386                }
 387                switch (mask) {
 388                case SOUND_MASK_MIC:
 389                        recdev = 2;
 390                        break;
 391
 392                case SOUND_MASK_LINE:
 393                case SOUND_MASK_LINE3:
 394                        recdev = 0;
 395                        break;
 396
 397                case SOUND_MASK_CD:
 398                case SOUND_MASK_LINE1:
 399                        recdev = 1;
 400                        break;
 401
 402                case SOUND_MASK_IMIX:
 403                        recdev = 3;
 404                        break;
 405
 406                default:
 407                        mask = SOUND_MASK_MIC;
 408                        recdev = 2;
 409                }
 410
 411                recdev <<= 6;
 412                ad_write(devc, 0, (ad_read(devc, 0) & 0x3f) | recdev);
 413                ad_write(devc, 1, (ad_read(devc, 1) & 0x3f) | recdev);
 414        } else { /* soundpro */
 415                unsigned char val;
 416                int set_rec_bit;
 417                int j;
 418
 419                for (i = 0; i < 32; i++) {      /* For each bit */
 420                        if ((devc->supported_rec_devices & (1 << i)) == 0)
 421                                continue;       /* Device not supported */
 422
 423                        for (j = LEFT_CHN; j <= RIGHT_CHN; j++) {
 424                                if (devc->mix_devices[i][j].nbits == 0) /* Inexistent channel */
 425                                        continue;
 426
 427                                /*
 428                                 * This is tricky:
 429                                 * set_rec_bit becomes 1 if the corresponding bit in mask is set
 430                                 * then it gets flipped if the polarity is inverse
 431                                 */
 432                                set_rec_bit = ((mask & (1 << i)) != 0) ^ devc->mix_devices[i][j].recpol;
 433
 434                                val = ad_read(devc, devc->mix_devices[i][j].recreg);
 435                                val &= ~(1 << devc->mix_devices[i][j].recpos);
 436                                val |= (set_rec_bit << devc->mix_devices[i][j].recpos);
 437                                ad_write(devc, devc->mix_devices[i][j].recreg, val);
 438                        }
 439                }
 440        }
 441        spin_unlock_irqrestore(&devc->lock,flags);
 442
 443        /* Rename the mixer bits back if necessary */
 444        for (i = 0; i < 32; i++)
 445        {
 446                if (devc->mixer_reroute[i] != i)
 447                {
 448                        if (mask & (1 << devc->mixer_reroute[i]))
 449                        {
 450                                mask &= ~(1 << devc->mixer_reroute[i]);
 451                                mask |= (1 << i);
 452                        }
 453                }
 454        }
 455        devc->recmask = mask;
 456        return mask;
 457}
 458
 459static void oss_change_bits(ad1848_info *devc, unsigned char *regval,
 460                        unsigned char *muteval, int dev, int chn, int newval)
 461{
 462        unsigned char mask;
 463        int shift;
 464        int mute;
 465        int mutemask;
 466        int set_mute_bit;
 467
 468        set_mute_bit = (newval == 0) ^ devc->mix_devices[dev][chn].mutepol;
 469
 470        if (devc->mix_devices[dev][chn].polarity == 1)  /* Reverse */
 471                newval = 100 - newval;
 472
 473        mask = (1 << devc->mix_devices[dev][chn].nbits) - 1;
 474        shift = devc->mix_devices[dev][chn].bitpos;
 475
 476        if (devc->mix_devices[dev][chn].mutepos == 8)
 477        {                       /* if there is no mute bit */
 478                mute = 0;       /* No mute bit; do nothing special */
 479                mutemask = ~0;  /* No mute bit; do nothing special */
 480        }
 481        else
 482        {
 483                mute = (set_mute_bit << devc->mix_devices[dev][chn].mutepos);
 484                mutemask = ~(1 << devc->mix_devices[dev][chn].mutepos);
 485        }
 486
 487        newval = (int) ((newval * mask) + 50) / 100;    /* Scale it */
 488        *regval &= ~(mask << shift);                    /* Clear bits */
 489        *regval |= (newval & mask) << shift;            /* Set new value */
 490
 491        *muteval &= mutemask;
 492        *muteval |= mute;
 493}
 494
 495static int ad1848_mixer_get(ad1848_info * devc, int dev)
 496{
 497        if (!((1 << dev) & devc->supported_devices))
 498                return -EINVAL;
 499
 500        dev = devc->mixer_reroute[dev];
 501
 502        return devc->levels[dev];
 503}
 504
 505static void ad1848_mixer_set_channel(ad1848_info *devc, int dev, int value, int channel)
 506{
 507        int regoffs, muteregoffs;
 508        unsigned char val, muteval;
 509        unsigned long flags;
 510
 511        regoffs = devc->mix_devices[dev][channel].regno;
 512        muteregoffs = devc->mix_devices[dev][channel].mutereg;
 513        val = ad_read(devc, regoffs);
 514
 515        if (muteregoffs != regoffs) {
 516                muteval = ad_read(devc, muteregoffs);
 517                oss_change_bits(devc, &val, &muteval, dev, channel, value);
 518        }
 519        else
 520                oss_change_bits(devc, &val, &val, dev, channel, value);
 521
 522        spin_lock_irqsave(&devc->lock,flags);
 523        ad_write(devc, regoffs, val);
 524        devc->saved_regs[regoffs] = val;
 525        if (muteregoffs != regoffs) {
 526                ad_write(devc, muteregoffs, muteval);
 527                devc->saved_regs[muteregoffs] = muteval;
 528        }
 529        spin_unlock_irqrestore(&devc->lock,flags);
 530}
 531
 532static int ad1848_mixer_set(ad1848_info * devc, int dev, int value)
 533{
 534        int left = value & 0x000000ff;
 535        int right = (value & 0x0000ff00) >> 8;
 536        int retvol;
 537
 538        if (dev > 31)
 539                return -EINVAL;
 540
 541        if (!(devc->supported_devices & (1 << dev)))
 542                return -EINVAL;
 543
 544        dev = devc->mixer_reroute[dev];
 545
 546        if (devc->mix_devices[dev][LEFT_CHN].nbits == 0)
 547                return -EINVAL;
 548
 549        if (left > 100)
 550                left = 100;
 551        if (right > 100)
 552                right = 100;
 553
 554        if (devc->mix_devices[dev][RIGHT_CHN].nbits == 0)       /* Mono control */
 555                right = left;
 556
 557        retvol = left | (right << 8);
 558
 559        /* Scale volumes */
 560        left = mix_cvt[left];
 561        right = mix_cvt[right];
 562
 563        devc->levels[dev] = retvol;
 564
 565        /*
 566         * Set the left channel
 567         */
 568        ad1848_mixer_set_channel(devc, dev, left, LEFT_CHN);
 569
 570        /*
 571         * Set the right channel
 572         */
 573        if (devc->mix_devices[dev][RIGHT_CHN].nbits == 0)
 574                goto out;
 575        ad1848_mixer_set_channel(devc, dev, right, RIGHT_CHN);
 576
 577 out:
 578        return retvol;
 579}
 580
 581static void ad1848_mixer_reset(ad1848_info * devc)
 582{
 583        int i;
 584        char name[32];
 585        unsigned long flags;
 586
 587        devc->mix_devices = &(ad1848_mix_devices[0]);
 588
 589        sprintf(name, "%s_%d", devc->chip_name, nr_ad1848_devs);
 590
 591        for (i = 0; i < 32; i++)
 592                devc->mixer_reroute[i] = i;
 593
 594        devc->supported_rec_devices = MODE1_REC_DEVICES;
 595
 596        switch (devc->model)
 597        {
 598                case MD_4231:
 599                case MD_4231A:
 600                case MD_1845:
 601                case MD_1845_SSCAPE:
 602                        devc->supported_devices = MODE2_MIXER_DEVICES;
 603                        break;
 604
 605                case MD_C930:
 606                        devc->supported_devices = C930_MIXER_DEVICES;
 607                        devc->mix_devices = &(c930_mix_devices[0]);
 608                        break;
 609
 610                case MD_IWAVE:
 611                        devc->supported_devices = MODE3_MIXER_DEVICES;
 612                        devc->mix_devices = &(iwave_mix_devices[0]);
 613                        break;
 614
 615                case MD_42xB:
 616                case MD_4239:
 617                        devc->mix_devices = &(cs42xb_mix_devices[0]);
 618                        devc->supported_devices = MODE3_MIXER_DEVICES;
 619                        break;
 620                case MD_4232:
 621                case MD_4235:
 622                case MD_4236:
 623                        devc->supported_devices = MODE3_MIXER_DEVICES;
 624                        break;
 625
 626                case MD_1848:
 627                        if (soundpro) {
 628                                devc->supported_devices = SPRO_MIXER_DEVICES;
 629                                devc->supported_rec_devices = SPRO_REC_DEVICES;
 630                                devc->mix_devices = &(spro_mix_devices[0]);
 631                                break;
 632                        }
 633
 634                default:
 635                        devc->supported_devices = MODE1_MIXER_DEVICES;
 636        }
 637
 638        devc->orig_devices = devc->supported_devices;
 639        devc->orig_rec_devices = devc->supported_rec_devices;
 640
 641        devc->levels = load_mixer_volumes(name, default_mixer_levels, 1);
 642
 643        for (i = 0; i < SOUND_MIXER_NRDEVICES; i++)
 644        {
 645                if (devc->supported_devices & (1 << i))
 646                        ad1848_mixer_set(devc, i, devc->levels[i]);
 647        }
 648        
 649        ad1848_set_recmask(devc, SOUND_MASK_MIC);
 650        
 651        devc->mixer_output_port = devc->levels[31] | AUDIO_HEADPHONE | AUDIO_LINE_OUT;
 652
 653        spin_lock_irqsave(&devc->lock,flags);
 654        if (!soundpro) {
 655                if (devc->mixer_output_port & AUDIO_SPEAKER)
 656                        ad_write(devc, 26, ad_read(devc, 26) & ~0x40);  /* Unmute mono out */
 657                else
 658                        ad_write(devc, 26, ad_read(devc, 26) | 0x40);   /* Mute mono out */
 659        } else {
 660                /*
 661                 * From the "wouldn't it be nice if the mixer API had (better)
 662                 * support for custom stuff" category
 663                 */
 664                /* Enable surround mode and SB16 mixer */
 665                ad_write(devc, 16, 0x60);
 666        }
 667        spin_unlock_irqrestore(&devc->lock,flags);
 668}
 669
 670static int ad1848_mixer_ioctl(int dev, unsigned int cmd, void __user *arg)
 671{
 672        ad1848_info *devc = mixer_devs[dev]->devc;
 673        int val;
 674
 675        if (cmd == SOUND_MIXER_PRIVATE1) 
 676        {
 677                if (get_user(val, (int __user *)arg))
 678                        return -EFAULT;
 679
 680                if (val != 0xffff) 
 681                {
 682                        unsigned long flags;
 683                        val &= (AUDIO_SPEAKER | AUDIO_HEADPHONE | AUDIO_LINE_OUT);
 684                        devc->mixer_output_port = val;
 685                        val |= AUDIO_HEADPHONE | AUDIO_LINE_OUT;        /* Always on */
 686                        devc->mixer_output_port = val;
 687                        spin_lock_irqsave(&devc->lock,flags);
 688                        if (val & AUDIO_SPEAKER)
 689                                ad_write(devc, 26, ad_read(devc, 26) & ~0x40);  /* Unmute mono out */
 690                        else
 691                                ad_write(devc, 26, ad_read(devc, 26) | 0x40);           /* Mute mono out */
 692                        spin_unlock_irqrestore(&devc->lock,flags);
 693                }
 694                val = devc->mixer_output_port;
 695                return put_user(val, (int __user *)arg);
 696        }
 697        if (cmd == SOUND_MIXER_PRIVATE2)
 698        {
 699                if (get_user(val, (int __user *)arg))
 700                        return -EFAULT;
 701                return(ad1848_control(AD1848_MIXER_REROUTE, val));
 702        }
 703        if (((cmd >> 8) & 0xff) == 'M') 
 704        {
 705                if (_SIOC_DIR(cmd) & _SIOC_WRITE)
 706                {
 707                        switch (cmd & 0xff) 
 708                        {
 709                                case SOUND_MIXER_RECSRC:
 710                                        if (get_user(val, (int __user *)arg))
 711                                                return -EFAULT;
 712                                        val = ad1848_set_recmask(devc, val);
 713                                        break;
 714                                
 715                                default:
 716                                        if (get_user(val, (int __user *)arg))
 717                                                return -EFAULT;
 718                                        val = ad1848_mixer_set(devc, cmd & 0xff, val);
 719                                        break;
 720                        } 
 721                        return put_user(val, (int __user *)arg);
 722                }
 723                else
 724                {
 725                        switch (cmd & 0xff) 
 726                        {
 727                                /*
 728                                 * Return parameters
 729                                 */
 730                            
 731                                case SOUND_MIXER_RECSRC:
 732                                        val = devc->recmask;
 733                                        break;
 734                                
 735                                case SOUND_MIXER_DEVMASK:
 736                                        val = devc->supported_devices;
 737                                        break;
 738                                
 739                                case SOUND_MIXER_STEREODEVS:
 740                                        val = devc->supported_devices;
 741                                        if (devc->model != MD_C930)
 742                                                val &= ~(SOUND_MASK_SPEAKER | SOUND_MASK_IMIX);
 743                                        break;
 744                                
 745                                case SOUND_MIXER_RECMASK:
 746                                        val = devc->supported_rec_devices;
 747                                        break;
 748
 749                                case SOUND_MIXER_CAPS:
 750                                        val=SOUND_CAP_EXCL_INPUT;
 751                                        break;
 752
 753                                default:
 754                                        val = ad1848_mixer_get(devc, cmd & 0xff);
 755                                        break;
 756                        }
 757                        return put_user(val, (int __user *)arg);
 758                }
 759        }
 760        else
 761                return -EINVAL;
 762}
 763
 764static int ad1848_set_speed(int dev, int arg)
 765{
 766        ad1848_info *devc = (ad1848_info *) audio_devs[dev]->devc;
 767        ad1848_port_info *portc = (ad1848_port_info *) audio_devs[dev]->portc;
 768
 769        /*
 770         * The sampling speed is encoded in the least significant nibble of I8. The
 771         * LSB selects the clock source (0=24.576 MHz, 1=16.9344 MHz) and other
 772         * three bits select the divisor (indirectly):
 773         *
 774         * The available speeds are in the following table. Keep the speeds in
 775         * the increasing order.
 776         */
 777        typedef struct
 778        {
 779                int             speed;
 780                unsigned char   bits;
 781        }
 782        speed_struct;
 783
 784        static speed_struct speed_table[] =
 785        {
 786                {5510, (0 << 1) | 1},
 787                {5510, (0 << 1) | 1},
 788                {6620, (7 << 1) | 1},
 789                {8000, (0 << 1) | 0},
 790                {9600, (7 << 1) | 0},
 791                {11025, (1 << 1) | 1},
 792                {16000, (1 << 1) | 0},
 793                {18900, (2 << 1) | 1},
 794                {22050, (3 << 1) | 1},
 795                {27420, (2 << 1) | 0},
 796                {32000, (3 << 1) | 0},
 797                {33075, (6 << 1) | 1},
 798                {37800, (4 << 1) | 1},
 799                {44100, (5 << 1) | 1},
 800                {48000, (6 << 1) | 0}
 801        };
 802
 803        int i, n, selected = -1;
 804
 805        n = sizeof(speed_table) / sizeof(speed_struct);
 806
 807        if (arg <= 0)
 808                return portc->speed;
 809
 810        if (devc->model == MD_1845 || devc->model == MD_1845_SSCAPE)    /* AD1845 has different timer than others */
 811        {
 812                if (arg < 4000)
 813                        arg = 4000;
 814                if (arg > 50000)
 815                        arg = 50000;
 816
 817                portc->speed = arg;
 818                portc->speed_bits = speed_table[3].bits;
 819                return portc->speed;
 820        }
 821        if (arg < speed_table[0].speed)
 822                selected = 0;
 823        if (arg > speed_table[n - 1].speed)
 824                selected = n - 1;
 825
 826        for (i = 1 /*really */ ; selected == -1 && i < n; i++)
 827        {
 828                if (speed_table[i].speed == arg)
 829                        selected = i;
 830                else if (speed_table[i].speed > arg)
 831                {
 832                        int diff1, diff2;
 833
 834                        diff1 = arg - speed_table[i - 1].speed;
 835                        diff2 = speed_table[i].speed - arg;
 836
 837                        if (diff1 < diff2)
 838                                selected = i - 1;
 839                        else
 840                                selected = i;
 841                }
 842        }
 843        if (selected == -1)
 844        {
 845                printk(KERN_WARNING "ad1848: Can't find speed???\n");
 846                selected = 3;
 847        }
 848        portc->speed = speed_table[selected].speed;
 849        portc->speed_bits = speed_table[selected].bits;
 850        return portc->speed;
 851}
 852
 853static short ad1848_set_channels(int dev, short arg)
 854{
 855        ad1848_port_info *portc = (ad1848_port_info *) audio_devs[dev]->portc;
 856
 857        if (arg != 1 && arg != 2)
 858                return portc->channels;
 859
 860        portc->channels = arg;
 861        return arg;
 862}
 863
 864static unsigned int ad1848_set_bits(int dev, unsigned int arg)
 865{
 866        ad1848_info    *devc = (ad1848_info *) audio_devs[dev]->devc;
 867        ad1848_port_info *portc = (ad1848_port_info *) audio_devs[dev]->portc;
 868
 869        static struct format_tbl
 870        {
 871                  int             format;
 872                  unsigned char   bits;
 873        }
 874        format2bits[] =
 875        {
 876                {
 877                        0, 0
 878                }
 879                ,
 880                {
 881                        AFMT_MU_LAW, 1
 882                }
 883                ,
 884                {
 885                        AFMT_A_LAW, 3
 886                }
 887                ,
 888                {
 889                        AFMT_IMA_ADPCM, 5
 890                }
 891                ,
 892                {
 893                        AFMT_U8, 0
 894                }
 895                ,
 896                {
 897                        AFMT_S16_LE, 2
 898                }
 899                ,
 900                {
 901                        AFMT_S16_BE, 6
 902                }
 903                ,
 904                {
 905                        AFMT_S8, 0
 906                }
 907                ,
 908                {
 909                        AFMT_U16_LE, 0
 910                }
 911                ,
 912                {
 913                        AFMT_U16_BE, 0
 914                }
 915        };
 916        int i, n = sizeof(format2bits) / sizeof(struct format_tbl);
 917
 918        if (arg == 0)
 919                return portc->audio_format;
 920
 921        if (!(arg & ad_format_mask[devc->model]))
 922                arg = AFMT_U8;
 923
 924        portc->audio_format = arg;
 925
 926        for (i = 0; i < n; i++)
 927                if (format2bits[i].format == arg)
 928                {
 929                        if ((portc->format_bits = format2bits[i].bits) == 0)
 930                                return portc->audio_format = AFMT_U8;           /* Was not supported */
 931
 932                        return arg;
 933                }
 934        /* Still hanging here. Something must be terribly wrong */
 935        portc->format_bits = 0;
 936        return portc->audio_format = AFMT_U8;
 937}
 938
 939static struct audio_driver ad1848_audio_driver =
 940{
 941        .owner                  = THIS_MODULE,
 942        .open                   = ad1848_open,
 943        .close                  = ad1848_close,
 944        .output_block           = ad1848_output_block,
 945        .start_input            = ad1848_start_input,
 946        .prepare_for_input      = ad1848_prepare_for_input,
 947        .prepare_for_output     = ad1848_prepare_for_output,
 948        .halt_io                = ad1848_halt,
 949        .halt_input             = ad1848_halt_input,
 950        .halt_output            = ad1848_halt_output,
 951        .trigger                = ad1848_trigger,
 952        .set_speed              = ad1848_set_speed,
 953        .set_bits               = ad1848_set_bits,
 954        .set_channels           = ad1848_set_channels
 955};
 956
 957static struct mixer_operations ad1848_mixer_operations =
 958{
 959        .owner  = THIS_MODULE,
 960        .id     = "SOUNDPORT",
 961        .name   = "AD1848/CS4248/CS4231",
 962        .ioctl  = ad1848_mixer_ioctl
 963};
 964
 965static int ad1848_open(int dev, int mode)
 966{
 967        ad1848_info    *devc;
 968        ad1848_port_info *portc;
 969        unsigned long   flags;
 970
 971        if (dev < 0 || dev >= num_audiodevs)
 972                return -ENXIO;
 973
 974        devc = (ad1848_info *) audio_devs[dev]->devc;
 975        portc = (ad1848_port_info *) audio_devs[dev]->portc;
 976
 977        /* here we don't have to protect against intr */
 978        spin_lock(&devc->lock);
 979        if (portc->open_mode || (devc->open_mode & mode))
 980        {
 981                spin_unlock(&devc->lock);
 982                return -EBUSY;
 983        }
 984        devc->dual_dma = 0;
 985
 986        if (audio_devs[dev]->flags & DMA_DUPLEX)
 987        {
 988                devc->dual_dma = 1;
 989        }
 990        devc->intr_active = 0;
 991        devc->audio_mode = 0;
 992        devc->open_mode |= mode;
 993        portc->open_mode = mode;
 994        spin_unlock(&devc->lock);
 995        ad1848_trigger(dev, 0);
 996
 997        if (mode & OPEN_READ)
 998                devc->record_dev = dev;
 999        if (mode & OPEN_WRITE)
1000                devc->playback_dev = dev;
1001/*
1002 * Mute output until the playback really starts. This decreases clicking (hope so).
1003 */
1004        spin_lock_irqsave(&devc->lock,flags);
1005        ad_mute(devc);
1006        spin_unlock_irqrestore(&devc->lock,flags);
1007
1008        return 0;
1009}
1010
1011static void ad1848_close(int dev)
1012{
1013        unsigned long   flags;
1014        ad1848_info    *devc = (ad1848_info *) audio_devs[dev]->devc;
1015        ad1848_port_info *portc = (ad1848_port_info *) audio_devs[dev]->portc;
1016
1017        devc->intr_active = 0;
1018        ad1848_halt(dev);
1019
1020        spin_lock_irqsave(&devc->lock,flags);
1021
1022        devc->audio_mode = 0;
1023        devc->open_mode &= ~portc->open_mode;
1024        portc->open_mode = 0;
1025
1026        ad_unmute(devc);
1027        spin_unlock_irqrestore(&devc->lock,flags);
1028}
1029
1030static void ad1848_output_block(int dev, unsigned long buf, int count, int intrflag)
1031{
1032        unsigned long   flags, cnt;
1033        ad1848_info    *devc = (ad1848_info *) audio_devs[dev]->devc;
1034        ad1848_port_info *portc = (ad1848_port_info *) audio_devs[dev]->portc;
1035
1036        cnt = count;
1037
1038        if (portc->audio_format == AFMT_IMA_ADPCM)
1039        {
1040                cnt /= 4;
1041        }
1042        else
1043        {
1044                if (portc->audio_format & (AFMT_S16_LE | AFMT_S16_BE))  /* 16 bit data */
1045                        cnt >>= 1;
1046        }
1047        if (portc->channels > 1)
1048                cnt >>= 1;
1049        cnt--;
1050
1051        if ((devc->audio_mode & PCM_ENABLE_OUTPUT) && (audio_devs[dev]->flags & DMA_AUTOMODE) &&
1052            intrflag &&
1053            cnt == devc->xfer_count)
1054        {
1055                devc->audio_mode |= PCM_ENABLE_OUTPUT;
1056                devc->intr_active = 1;
1057                return; /*
1058                         * Auto DMA mode on. No need to react
1059                         */
1060        }
1061        spin_lock_irqsave(&devc->lock,flags);
1062
1063        ad_write(devc, 15, (unsigned char) (cnt & 0xff));
1064        ad_write(devc, 14, (unsigned char) ((cnt >> 8) & 0xff));
1065
1066        devc->xfer_count = cnt;
1067        devc->audio_mode |= PCM_ENABLE_OUTPUT;
1068        devc->intr_active = 1;
1069        spin_unlock_irqrestore(&devc->lock,flags);
1070}
1071
1072static void ad1848_start_input(int dev, unsigned long buf, int count, int intrflag)
1073{
1074        unsigned long   flags, cnt;
1075        ad1848_info    *devc = (ad1848_info *) audio_devs[dev]->devc;
1076        ad1848_port_info *portc = (ad1848_port_info *) audio_devs[dev]->portc;
1077
1078        cnt = count;
1079        if (portc->audio_format == AFMT_IMA_ADPCM)
1080        {
1081                cnt /= 4;
1082        }
1083        else
1084        {
1085                if (portc->audio_format & (AFMT_S16_LE | AFMT_S16_BE))  /* 16 bit data */
1086                        cnt >>= 1;
1087        }
1088        if (portc->channels > 1)
1089                cnt >>= 1;
1090        cnt--;
1091
1092        if ((devc->audio_mode & PCM_ENABLE_INPUT) && (audio_devs[dev]->flags & DMA_AUTOMODE) &&
1093                intrflag &&
1094                cnt == devc->xfer_count)
1095        {
1096                devc->audio_mode |= PCM_ENABLE_INPUT;
1097                devc->intr_active = 1;
1098                return; /*
1099                         * Auto DMA mode on. No need to react
1100                         */
1101        }
1102        spin_lock_irqsave(&devc->lock,flags);
1103
1104        if (devc->model == MD_1848)
1105        {
1106                  ad_write(devc, 15, (unsigned char) (cnt & 0xff));
1107                  ad_write(devc, 14, (unsigned char) ((cnt >> 8) & 0xff));
1108        }
1109        else
1110        {
1111                  ad_write(devc, 31, (unsigned char) (cnt & 0xff));
1112                  ad_write(devc, 30, (unsigned char) ((cnt >> 8) & 0xff));
1113        }
1114
1115        ad_unmute(devc);
1116
1117        devc->xfer_count = cnt;
1118        devc->audio_mode |= PCM_ENABLE_INPUT;
1119        devc->intr_active = 1;
1120        spin_unlock_irqrestore(&devc->lock,flags);
1121}
1122
1123static int ad1848_prepare_for_output(int dev, int bsize, int bcount)
1124{
1125        int             timeout;
1126        unsigned char   fs, old_fs, tmp = 0;
1127        unsigned long   flags;
1128        ad1848_info    *devc = (ad1848_info *) audio_devs[dev]->devc;
1129        ad1848_port_info *portc = (ad1848_port_info *) audio_devs[dev]->portc;
1130
1131        ad_mute(devc);
1132
1133        spin_lock_irqsave(&devc->lock,flags);
1134        fs = portc->speed_bits | (portc->format_bits << 5);
1135
1136        if (portc->channels > 1)
1137                fs |= 0x10;
1138
1139        ad_enter_MCE(devc);     /* Enables changes to the format select reg */
1140
1141        if (devc->model == MD_1845 || devc->model == MD_1845_SSCAPE) /* Use alternate speed select registers */
1142        {
1143                fs &= 0xf0;     /* Mask off the rate select bits */
1144
1145                ad_write(devc, 22, (portc->speed >> 8) & 0xff); /* Speed MSB */
1146                ad_write(devc, 23, portc->speed & 0xff);        /* Speed LSB */
1147        }
1148        old_fs = ad_read(devc, 8);
1149
1150        if (devc->model == MD_4232 || devc->model >= MD_4236)
1151        {
1152                tmp = ad_read(devc, 16);
1153                ad_write(devc, 16, tmp | 0x30);
1154        }
1155        if (devc->model == MD_IWAVE)
1156                ad_write(devc, 17, 0xc2);       /* Disable variable frequency select */
1157
1158        ad_write(devc, 8, fs);
1159
1160        /*
1161         * Write to I8 starts resynchronization. Wait until it completes.
1162         */
1163
1164        timeout = 0;
1165        while (timeout < 100 && inb(devc->base) != 0x80)
1166                timeout++;
1167        timeout = 0;
1168        while (timeout < 10000 && inb(devc->base) == 0x80)
1169                timeout++;
1170
1171        if (devc->model >= MD_4232)
1172                ad_write(devc, 16, tmp & ~0x30);
1173
1174        ad_leave_MCE(devc);     /*
1175                                 * Starts the calibration process.
1176                                 */
1177        spin_unlock_irqrestore(&devc->lock,flags);
1178        devc->xfer_count = 0;
1179
1180#ifndef EXCLUDE_TIMERS
1181        if (dev == timer_installed && devc->timer_running)
1182                if ((fs & 0x01) != (old_fs & 0x01))
1183                {
1184                        ad1848_tmr_reprogram(dev);
1185                }
1186#endif
1187        ad1848_halt_output(dev);
1188        return 0;
1189}
1190
1191static int ad1848_prepare_for_input(int dev, int bsize, int bcount)
1192{
1193        int timeout;
1194        unsigned char fs, old_fs, tmp = 0;
1195        unsigned long flags;
1196        ad1848_info *devc = (ad1848_info *) audio_devs[dev]->devc;
1197        ad1848_port_info *portc = (ad1848_port_info *) audio_devs[dev]->portc;
1198
1199        if (devc->audio_mode)
1200                return 0;
1201
1202        spin_lock_irqsave(&devc->lock,flags);
1203        fs = portc->speed_bits | (portc->format_bits << 5);
1204
1205        if (portc->channels > 1)
1206                fs |= 0x10;
1207
1208        ad_enter_MCE(devc);     /* Enables changes to the format select reg */
1209
1210        if ((devc->model == MD_1845) || (devc->model == MD_1845_SSCAPE))        /* Use alternate speed select registers */
1211        {
1212                fs &= 0xf0;     /* Mask off the rate select bits */
1213
1214                ad_write(devc, 22, (portc->speed >> 8) & 0xff); /* Speed MSB */
1215                ad_write(devc, 23, portc->speed & 0xff);        /* Speed LSB */
1216        }
1217        if (devc->model == MD_4232)
1218        {
1219                tmp = ad_read(devc, 16);
1220                ad_write(devc, 16, tmp | 0x30);
1221        }
1222        if (devc->model == MD_IWAVE)
1223                ad_write(devc, 17, 0xc2);       /* Disable variable frequency select */
1224
1225        /*
1226         * If mode >= 2 (CS4231), set I28. It's the capture format register.
1227         */
1228        
1229        if (devc->model != MD_1848)
1230        {
1231                old_fs = ad_read(devc, 28);
1232                ad_write(devc, 28, fs);
1233
1234                /*
1235                 * Write to I28 starts resynchronization. Wait until it completes.
1236                 */
1237                
1238                timeout = 0;
1239                while (timeout < 100 && inb(devc->base) != 0x80)
1240                        timeout++;
1241
1242                timeout = 0;
1243                while (timeout < 10000 && inb(devc->base) == 0x80)
1244                        timeout++;
1245
1246                if (devc->model != MD_1848 && devc->model != MD_1845 && devc->model != MD_1845_SSCAPE)
1247                {
1248                        /*
1249                         * CS4231 compatible devices don't have separate sampling rate selection
1250                         * register for recording an playback. The I8 register is shared so we have to
1251                         * set the speed encoding bits of it too.
1252                         */
1253                        unsigned char   tmp = portc->speed_bits | (ad_read(devc, 8) & 0xf0);
1254
1255                        ad_write(devc, 8, tmp);
1256                        /*
1257                         * Write to I8 starts resynchronization. Wait until it completes.
1258                         */
1259                        timeout = 0;
1260                        while (timeout < 100 && inb(devc->base) != 0x80)
1261                                timeout++;
1262
1263                        timeout = 0;
1264                        while (timeout < 10000 && inb(devc->base) == 0x80)
1265                                timeout++;
1266                }
1267        }
1268        else
1269        {                       /* For AD1848 set I8. */
1270
1271                old_fs = ad_read(devc, 8);
1272                ad_write(devc, 8, fs);
1273                /*
1274                 * Write to I8 starts resynchronization. Wait until it completes.
1275                 */
1276                timeout = 0;
1277                while (timeout < 100 && inb(devc->base) != 0x80)
1278                        timeout++;
1279                timeout = 0;
1280                while (timeout < 10000 && inb(devc->base) == 0x80)
1281                        timeout++;
1282        }
1283
1284        if (devc->model == MD_4232)
1285                ad_write(devc, 16, tmp & ~0x30);
1286
1287        ad_leave_MCE(devc);     /*
1288                                 * Starts the calibration process.
1289                                 */
1290        spin_unlock_irqrestore(&devc->lock,flags);
1291        devc->xfer_count = 0;
1292
1293#ifndef EXCLUDE_TIMERS
1294        if (dev == timer_installed && devc->timer_running)
1295        {
1296                if ((fs & 0x01) != (old_fs & 0x01))
1297                {
1298                        ad1848_tmr_reprogram(dev);
1299                }
1300        }
1301#endif
1302        ad1848_halt_input(dev);
1303        return 0;
1304}
1305
1306static void ad1848_halt(int dev)
1307{
1308        ad1848_info *devc = (ad1848_info *) audio_devs[dev]->devc;
1309        ad1848_port_info *portc = (ad1848_port_info *) audio_devs[dev]->portc;
1310
1311        unsigned char   bits = ad_read(devc, 9);
1312
1313        if (bits & 0x01 && (portc->open_mode & OPEN_WRITE))
1314                ad1848_halt_output(dev);
1315
1316        if (bits & 0x02 && (portc->open_mode & OPEN_READ))
1317                ad1848_halt_input(dev);
1318        devc->audio_mode = 0;
1319}
1320
1321static void ad1848_halt_input(int dev)
1322{
1323        ad1848_info    *devc = (ad1848_info *) audio_devs[dev]->devc;
1324        unsigned long   flags;
1325
1326        if (!(ad_read(devc, 9) & 0x02))
1327                return;         /* Capture not enabled */
1328
1329        spin_lock_irqsave(&devc->lock,flags);
1330
1331        ad_mute(devc);
1332
1333        {
1334                int             tmout;
1335                
1336                if(!isa_dma_bridge_buggy)
1337                        disable_dma(audio_devs[dev]->dmap_in->dma);
1338
1339                for (tmout = 0; tmout < 100000; tmout++)
1340                        if (ad_read(devc, 11) & 0x10)
1341                                break;
1342                ad_write(devc, 9, ad_read(devc, 9) & ~0x02);    /* Stop capture */
1343
1344                if(!isa_dma_bridge_buggy)
1345                        enable_dma(audio_devs[dev]->dmap_in->dma);
1346                devc->audio_mode &= ~PCM_ENABLE_INPUT;
1347        }
1348
1349        outb(0, io_Status(devc));       /* Clear interrupt status */
1350        outb(0, io_Status(devc));       /* Clear interrupt status */
1351
1352        devc->audio_mode &= ~PCM_ENABLE_INPUT;
1353
1354        spin_unlock_irqrestore(&devc->lock,flags);
1355}
1356
1357static void ad1848_halt_output(int dev)
1358{
1359        ad1848_info *devc = (ad1848_info *) audio_devs[dev]->devc;
1360        unsigned long flags;
1361
1362        if (!(ad_read(devc, 9) & 0x01))
1363                return;         /* Playback not enabled */
1364
1365        spin_lock_irqsave(&devc->lock,flags);
1366
1367        ad_mute(devc);
1368        {
1369                int             tmout;
1370
1371                if(!isa_dma_bridge_buggy)
1372                        disable_dma(audio_devs[dev]->dmap_out->dma);
1373
1374                for (tmout = 0; tmout < 100000; tmout++)
1375                        if (ad_read(devc, 11) & 0x10)
1376                                break;
1377                ad_write(devc, 9, ad_read(devc, 9) & ~0x01);    /* Stop playback */
1378
1379                if(!isa_dma_bridge_buggy)
1380                       enable_dma(audio_devs[dev]->dmap_out->dma);
1381
1382                devc->audio_mode &= ~PCM_ENABLE_OUTPUT;
1383        }
1384
1385        outb((0), io_Status(devc));     /* Clear interrupt status */
1386        outb((0), io_Status(devc));     /* Clear interrupt status */
1387
1388        devc->audio_mode &= ~PCM_ENABLE_OUTPUT;
1389
1390        spin_unlock_irqrestore(&devc->lock,flags);
1391}
1392
1393static void ad1848_trigger(int dev, int state)
1394{
1395        ad1848_info    *devc = (ad1848_info *) audio_devs[dev]->devc;
1396        ad1848_port_info *portc = (ad1848_port_info *) audio_devs[dev]->portc;
1397        unsigned long   flags;
1398        unsigned char   tmp, old;
1399
1400        spin_lock_irqsave(&devc->lock,flags);
1401        state &= devc->audio_mode;
1402
1403        tmp = old = ad_read(devc, 9);
1404
1405        if (portc->open_mode & OPEN_READ)
1406        {
1407                  if (state & PCM_ENABLE_INPUT)
1408                          tmp |= 0x02;
1409                  else
1410                          tmp &= ~0x02;
1411        }
1412        if (portc->open_mode & OPEN_WRITE)
1413        {
1414                if (state & PCM_ENABLE_OUTPUT)
1415                        tmp |= 0x01;
1416                else
1417                        tmp &= ~0x01;
1418        }
1419        /* ad_mute(devc); */
1420        if (tmp != old)
1421        {
1422                  ad_write(devc, 9, tmp);
1423                  ad_unmute(devc);
1424        }
1425        spin_unlock_irqrestore(&devc->lock,flags);
1426}
1427
1428static void ad1848_init_hw(ad1848_info * devc)
1429{
1430        int i;
1431        int *init_values;
1432
1433        /*
1434         * Initial values for the indirect registers of CS4248/AD1848.
1435         */
1436        static int      init_values_a[] =
1437        {
1438                0xa8, 0xa8, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
1439                0x00, 0x0c, 0x02, 0x00, 0x8a, 0x01, 0x00, 0x00,
1440
1441        /* Positions 16 to 31 just for CS4231/2 and ad1845 */
1442                0x80, 0x00, 0x10, 0x10, 0x00, 0x00, 0x1f, 0x40,
1443                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
1444        };
1445
1446        static int      init_values_b[] =
1447        {
1448                /* 
1449                   Values for the newer chips
1450                   Some of the register initialization values were changed. In
1451                   order to get rid of the click that preceded PCM playback,
1452                   calibration was disabled on the 10th byte. On that same byte,
1453                   dual DMA was enabled; on the 11th byte, ADC dithering was
1454                   enabled, since that is theoretically desirable; on the 13th
1455                   byte, Mode 3 was selected, to enable access to extended
1456                   registers.
1457                 */
1458                0xa8, 0xa8, 0x08, 0x08, 0x08, 0x08, 0x00, 0x00,
1459                0x00, 0x00, 0x06, 0x00, 0xe0, 0x01, 0x00, 0x00,
1460                0x80, 0x00, 0x10, 0x10, 0x00, 0x00, 0x1f, 0x40,
1461                0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
1462        };
1463
1464        /*
1465         *      Select initialisation data
1466         */
1467         
1468        init_values = init_values_a;
1469        if(devc->model >= MD_4236)
1470                init_values = init_values_b;
1471
1472        for (i = 0; i < 16; i++)
1473                ad_write(devc, i, init_values[i]);
1474
1475
1476        ad_mute(devc);          /* Initialize some variables */
1477        ad_unmute(devc);        /* Leave it unmuted now */
1478
1479        if (devc->model > MD_1848)
1480        {
1481                if (devc->model == MD_1845_SSCAPE)
1482                        ad_write(devc, 12, ad_read(devc, 12) | 0x50);
1483                else 
1484                        ad_write(devc, 12, ad_read(devc, 12) | 0x40);           /* Mode2 = enabled */
1485
1486                if (devc->model == MD_IWAVE)
1487                        ad_write(devc, 12, 0x6c);       /* Select codec mode 3 */
1488
1489                if (devc->model != MD_1845_SSCAPE)
1490                        for (i = 16; i < 32; i++)
1491                                ad_write(devc, i, init_values[i]);
1492
1493                if (devc->model == MD_IWAVE)
1494                        ad_write(devc, 16, 0x30);       /* Playback and capture counters enabled */
1495        }
1496        if (devc->model > MD_1848)
1497        {
1498                if (devc->audio_flags & DMA_DUPLEX)
1499                        ad_write(devc, 9, ad_read(devc, 9) & ~0x04);    /* Dual DMA mode */
1500                else
1501                        ad_write(devc, 9, ad_read(devc, 9) | 0x04);     /* Single DMA mode */
1502
1503                if (devc->model == MD_1845 || devc->model == MD_1845_SSCAPE)
1504                        ad_write(devc, 27, ad_read(devc, 27) | 0x08);           /* Alternate freq select enabled */
1505
1506                if (devc->model == MD_IWAVE)
1507                {               /* Some magic Interwave specific initialization */
1508                        ad_write(devc, 12, 0x6c);       /* Select codec mode 3 */
1509                        ad_write(devc, 16, 0x30);       /* Playback and capture counters enabled */
1510                        ad_write(devc, 17, 0xc2);       /* Alternate feature enable */
1511                }
1512        }
1513        else
1514        {
1515                  devc->audio_flags &= ~DMA_DUPLEX;
1516                  ad_write(devc, 9, ad_read(devc, 9) | 0x04);   /* Single DMA mode */
1517                  if (soundpro)
1518                          ad_write(devc, 12, ad_read(devc, 12) | 0x40); /* Mode2 = enabled */
1519        }
1520
1521        outb((0), io_Status(devc));     /* Clear pending interrupts */
1522
1523        /*
1524         * Toggle the MCE bit. It completes the initialization phase.
1525         */
1526
1527        ad_enter_MCE(devc);     /* In case the bit was off */
1528        ad_leave_MCE(devc);
1529
1530        ad1848_mixer_reset(devc);
1531}
1532
1533int ad1848_detect(struct resource *ports, int *ad_flags, int *osp)
1534{
1535        unsigned char tmp;
1536        ad1848_info *devc = &adev_info[nr_ad1848_devs];
1537        unsigned char tmp1 = 0xff, tmp2 = 0xff;
1538        int optiC930 = 0;       /* OPTi 82C930 flag */
1539        int interwave = 0;
1540        int ad1847_flag = 0;
1541        int cs4248_flag = 0;
1542        int sscape_flag = 0;
1543        int io_base = ports->start;
1544
1545        int i;
1546
1547        DDB(printk("ad1848_detect(%x)\n", io_base));
1548
1549        if (ad_flags)
1550        {
1551                if (*ad_flags == 0x12345678)
1552                {
1553                        interwave = 1;
1554                        *ad_flags = 0;
1555                }
1556                
1557                if (*ad_flags == 0x87654321)
1558                {
1559                        sscape_flag = 1;
1560                        *ad_flags = 0;
1561                }
1562                
1563                if (*ad_flags == 0x12345677)
1564                {
1565                    cs4248_flag = 1;
1566                    *ad_flags = 0;
1567                }
1568        }
1569        if (nr_ad1848_devs >= MAX_AUDIO_DEV)
1570        {
1571                printk(KERN_ERR "ad1848 - Too many audio devices\n");
1572                return 0;
1573        }
1574        spin_lock_init(&devc->lock);
1575        devc->base = io_base;
1576        devc->irq_ok = 0;
1577        devc->timer_running = 0;
1578        devc->MCE_bit = 0x40;
1579        devc->irq = 0;
1580        devc->open_mode = 0;
1581        devc->chip_name = devc->name = "AD1848";
1582        devc->model = MD_1848;  /* AD1848 or CS4248 */
1583        devc->levels = NULL;
1584        devc->debug_flag = 0;
1585
1586        /*
1587         * Check that the I/O address is in use.
1588         *
1589         * The bit 0x80 of the base I/O port is known to be 0 after the
1590         * chip has performed its power on initialization. Just assume
1591         * this has happened before the OS is starting.
1592         *
1593         * If the I/O address is unused, it typically returns 0xff.
1594         */
1595
1596        if (inb(devc->base) == 0xff)
1597        {
1598                DDB(printk("ad1848_detect: The base I/O address appears to be dead\n"));
1599        }
1600
1601        /*
1602         * Wait for the device to stop initialization
1603         */
1604        
1605        DDB(printk("ad1848_detect() - step 0\n"));
1606
1607        for (i = 0; i < 10000000; i++)
1608        {
1609                unsigned char   x = inb(devc->base);
1610
1611                if (x == 0xff || !(x & 0x80))
1612                        break;
1613        }
1614
1615        DDB(printk("ad1848_detect() - step A\n"));
1616
1617        if (inb(devc->base) == 0x80)    /* Not ready. Let's wait */
1618                ad_leave_MCE(devc);
1619
1620        if ((inb(devc->base) & 0x80) != 0x00)   /* Not a AD1848 */
1621        {
1622                DDB(printk("ad1848 detect error - step A (%02x)\n", (int) inb(devc->base)));
1623                return 0;
1624        }
1625        
1626        /*
1627         * Test if it's possible to change contents of the indirect registers.
1628         * Registers 0 and 1 are ADC volume registers. The bit 0x10 is read only
1629         * so try to avoid using it.
1630         */
1631
1632        DDB(printk("ad1848_detect() - step B\n"));
1633        ad_write(devc, 0, 0xaa);
1634        ad_write(devc, 1, 0x45);        /* 0x55 with bit 0x10 clear */
1635
1636        if ((tmp1 = ad_read(devc, 0)) != 0xaa || (tmp2 = ad_read(devc, 1)) != 0x45)
1637        {
1638                if (tmp2 == 0x65)       /* AD1847 has couple of bits hardcoded to 1 */
1639                        ad1847_flag = 1;
1640                else
1641                {
1642                        DDB(printk("ad1848 detect error - step B (%x/%x)\n", tmp1, tmp2));
1643                        return 0;
1644                }
1645        }
1646        DDB(printk("ad1848_detect() - step C\n"));
1647        ad_write(devc, 0, 0x45);
1648        ad_write(devc, 1, 0xaa);
1649
1650        if ((tmp1 = ad_read(devc, 0)) != 0x45 || (tmp2 = ad_read(devc, 1)) != 0xaa)
1651        {
1652                if (tmp2 == 0x8a)       /* AD1847 has few bits hardcoded to 1 */
1653                        ad1847_flag = 1;
1654                else
1655                {
1656                        DDB(printk("ad1848 detect error - step C (%x/%x)\n", tmp1, tmp2));
1657                        return 0;
1658                }
1659        }
1660
1661        /*
1662         * The indirect register I12 has some read only bits. Let's
1663         * try to change them.
1664         */
1665
1666        DDB(printk("ad1848_detect() - step D\n"));
1667        tmp = ad_read(devc, 12);
1668        ad_write(devc, 12, (~tmp) & 0x0f);
1669
1670        if ((tmp & 0x0f) != ((tmp1 = ad_read(devc, 12)) & 0x0f))
1671        {
1672                DDB(printk("ad1848 detect error - step D (%x)\n", tmp1));
1673                return 0;
1674        }
1675        
1676        /*
1677         * NOTE! Last 4 bits of the reg I12 tell the chip revision.
1678         *   0x01=RevB and 0x0A=RevC.
1679         */
1680
1681        /*
1682         * The original AD1848/CS4248 has just 15 indirect registers. This means
1683         * that I0 and I16 should return the same value (etc.).
1684         * However this doesn't work with CS4248. Actually it seems to be impossible
1685         * to detect if the chip is a CS4231 or CS4248.
1686         * Ensure that the Mode2 enable bit of I12 is 0. Otherwise this test fails
1687         * with CS4231.
1688         */
1689
1690        /*
1691         * OPTi 82C930 has mode2 control bit in another place. This test will fail
1692         * with it. Accept this situation as a possible indication of this chip.
1693         */
1694
1695        DDB(printk("ad1848_detect() - step F\n"));
1696        ad_write(devc, 12, 0);  /* Mode2=disabled */
1697
1698        for (i = 0; i < 16; i++)
1699        {
1700                if ((tmp1 = ad_read(devc, i)) != (tmp2 = ad_read(devc, i + 16)))
1701                {
1702                        DDB(printk("ad1848 detect step F(%d/%x/%x) - OPTi chip???\n", i, tmp1, tmp2));
1703                        if (!ad1847_flag)
1704                                optiC930 = 1;
1705                        break;
1706                }
1707        }
1708
1709        /*
1710         * Try to switch the chip to mode2 (CS4231) by setting the MODE2 bit (0x40).
1711         * The bit 0x80 is always 1 in CS4248 and CS4231.
1712         */
1713
1714        DDB(printk("ad1848_detect() - step G\n"));
1715
1716        if (ad_flags && *ad_flags == 400)
1717                *ad_flags = 0;
1718        else
1719                ad_write(devc, 12, 0x40);       /* Set mode2, clear 0x80 */
1720
1721
1722        if (ad_flags)
1723                *ad_flags = 0;
1724
1725        tmp1 = ad_read(devc, 12);
1726        if (tmp1 & 0x80)
1727        {
1728                if (ad_flags)
1729                        *ad_flags |= AD_F_CS4248;
1730
1731                devc->chip_name = "CS4248";     /* Our best knowledge just now */
1732        }
1733        if (optiC930 || (tmp1 & 0xc0) == (0x80 | 0x40))
1734        {
1735                /*
1736                 *      CS4231 detected - is it?
1737                 *
1738                 *      Verify that setting I0 doesn't change I16.
1739                 */
1740                
1741                DDB(printk("ad1848_detect() - step H\n"));
1742                ad_write(devc, 16, 0);  /* Set I16 to known value */
1743
1744                ad_write(devc, 0, 0x45);
1745                if ((tmp1 = ad_read(devc, 16)) != 0x45) /* No change -> CS4231? */
1746                {
1747                        ad_write(devc, 0, 0xaa);
1748                        if ((tmp1 = ad_read(devc, 16)) == 0xaa) /* Rotten bits? */
1749                        {
1750                                DDB(printk("ad1848 detect error - step H(%x)\n", tmp1));
1751                                return 0;
1752                        }
1753                        
1754                        /*
1755                         * Verify that some bits of I25 are read only.
1756                         */
1757
1758                        DDB(printk("ad1848_detect() - step I\n"));
1759                        tmp1 = ad_read(devc, 25);       /* Original bits */
1760                        ad_write(devc, 25, ~tmp1);      /* Invert all bits */
1761                        if ((ad_read(devc, 25) & 0xe7) == (tmp1 & 0xe7))
1762                        {
1763                                int id;
1764
1765                                /*
1766                                 *      It's at least CS4231
1767                                 */
1768
1769                                devc->chip_name = "CS4231";
1770                                devc->model = MD_4231;
1771                                
1772                                /*
1773                                 * It could be an AD1845 or CS4231A as well.
1774                                 * CS4231 and AD1845 report the same revision info in I25
1775                                 * while the CS4231A reports different.
1776                                 */
1777
1778                                id = ad_read(devc, 25);
1779                                if ((id & 0xe7) == 0x80)        /* Device busy??? */
1780                                        id = ad_read(devc, 25);
1781                                if ((id & 0xe7) == 0x80)        /* Device still busy??? */
1782                                        id = ad_read(devc, 25);
1783                                DDB(printk("ad1848_detect() - step J (%02x/%02x)\n", id, ad_read(devc, 25)));
1784
1785                                if ((id & 0xe7) == 0x80) {
1786                                        /* 
1787                                         * It must be a CS4231 or AD1845. The register I23 of
1788                                         * CS4231 is undefined and it appears to be read only.
1789                                         * AD1845 uses I23 for setting sample rate. Assume
1790                                         * the chip is AD1845 if I23 is changeable.
1791                                         */
1792
1793                                        unsigned char   tmp = ad_read(devc, 23);
1794                                        ad_write(devc, 23, ~tmp);
1795
1796                                        if (interwave)
1797                                        {
1798                                                devc->model = MD_IWAVE;
1799                                                devc->chip_name = "IWave";
1800                                        }
1801                                        else if (ad_read(devc, 23) != tmp)      /* AD1845 ? */
1802                                        {
1803                                                devc->chip_name = "AD1845";
1804                                                devc->model = MD_1845;
1805                                        }
1806                                        else if (cs4248_flag)
1807                                        {
1808                                                if (ad_flags)
1809                                                          *ad_flags |= AD_F_CS4248;
1810                                                devc->chip_name = "CS4248";
1811                                                devc->model = MD_1848;
1812                                                ad_write(devc, 12, ad_read(devc, 12) & ~0x40);  /* Mode2 off */
1813                                        }
1814                                        ad_write(devc, 23, tmp);        /* Restore */
1815                                }
1816                                else
1817                                {
1818                                        switch (id & 0x1f) {
1819                                        case 3: /* CS4236/CS4235/CS42xB/CS4239 */
1820                                                {
1821                                                        int xid;
1822                                                        ad_write(devc, 12, ad_read(devc, 12) | 0x60); /* switch to mode 3 */
1823                                                        ad_write(devc, 23, 0x9c); /* select extended register 25 */
1824                                                        xid = inb(io_Indexed_Data(devc));
1825                                                        ad_write(devc, 12, ad_read(devc, 12) & ~0x60); /* back to mode 0 */
1826                                                        switch (xid & 0x1f)
1827                                                        {
1828                                                                case 0x00:
1829                                                                        devc->chip_name = "CS4237B(B)";
1830                                                                        devc->model = MD_42xB;
1831                                                                        break;
1832                                                                case 0x08:
1833                                                                        /* Seems to be a 4238 ?? */
1834                                                                        devc->chip_name = "CS4238";
1835                                                                        devc->model = MD_42xB;
1836                                                                        break;
1837                                                                case 0x09:
1838                                                                        devc->chip_name = "CS4238B";
1839                                                                        devc->model = MD_42xB;
1840                                                                        break;
1841                                                                case 0x0b:
1842                                                                        devc->chip_name = "CS4236B";
1843                                                                        devc->model = MD_4236;
1844                                                                        break;
1845                                                                case 0x10:
1846                                                                        devc->chip_name = "CS4237B";
1847                                                                        devc->model = MD_42xB;
1848                                                                        break;
1849                                                                case 0x1d:
1850                                                                        devc->chip_name = "CS4235";
1851                                                                        devc->model = MD_4235;
1852                                                                        break;
1853                                                                case 0x1e:
1854                                                                        devc->chip_name = "CS4239";
1855                                                                        devc->model = MD_4239;
1856                                                                        break;
1857                                                                default:
1858                                                                        printk("Chip ident is %X.\n", xid&0x1F);
1859                                                                        devc->chip_name = "CS42xx";
1860                                                                        devc->model = MD_4232;
1861                                                                        break;
1862                                                        }
1863                                                }
1864                                                break;
1865
1866                                        case 2: /* CS4232/CS4232A */
1867                                                devc->chip_name = "CS4232";
1868                                                devc->model = MD_4232;
1869                                                break;
1870                                
1871                                        case 0:
1872                                                if ((id & 0xe0) == 0xa0)
1873                                                {
1874                                                        devc->chip_name = "CS4231A";
1875                                                        devc->model = MD_4231A;
1876                                                }
1877                                                else
1878                                                {
1879                                                        devc->chip_name = "CS4321";
1880                                                        devc->model = MD_4231;
1881                                                }
1882                                                break;
1883
1884                                        default: /* maybe */
1885                                                DDB(printk("ad1848: I25 = %02x/%02x\n", ad_read(devc, 25), ad_read(devc, 25) & 0xe7));
1886                                                if (optiC930)
1887                                                {
1888                                                        devc->chip_name = "82C930";
1889                                                        devc->model = MD_C930;
1890                                                }
1891                                                else
1892                                                {
1893                                                        devc->chip_name = "CS4231";
1894                                                        devc->model = MD_4231;
1895                                                }
1896                                        }
1897                                }
1898                        }
1899                        ad_write(devc, 25, tmp1);       /* Restore bits */
1900
1901                        DDB(printk("ad1848_detect() - step K\n"));
1902                }
1903        } else if (tmp1 == 0x0a) {
1904                /*
1905                 * Is it perhaps a SoundPro CMI8330?
1906                 * If so, then we should be able to change indirect registers
1907                 * greater than I15 after activating MODE2, even though reading
1908                 * back I12 does not show it.
1909                 */
1910
1911                /*
1912                 * Let's try comparing register values
1913                 */
1914                for (i = 0; i < 16; i++) {
1915                        if ((tmp1 = ad_read(devc, i)) != (tmp2 = ad_read(devc, i + 16))) {
1916                                DDB(printk("ad1848 detect step H(%d/%x/%x) - SoundPro chip?\n", i, tmp1, tmp2));
1917                                soundpro = 1;
1918                                devc->chip_name = "SoundPro CMI 8330";
1919                                break;
1920                        }
1921                }
1922        }
1923
1924        DDB(printk("ad1848_detect() - step L\n"));
1925        if (ad_flags)
1926        {
1927                  if (devc->model != MD_1848)
1928                          *ad_flags |= AD_F_CS4231;
1929        }
1930        DDB(printk("ad1848_detect() - Detected OK\n"));
1931
1932        if (devc->model == MD_1848 && ad1847_flag)
1933                devc->chip_name = "AD1847";
1934
1935
1936        if (sscape_flag == 1)
1937                devc->model = MD_1845_SSCAPE;
1938
1939        return 1;
1940}
1941
1942int ad1848_init (char *name, struct resource *ports, int irq, int dma_playback,
1943                int dma_capture, int share_dma, int *osp, struct module *owner)
1944{
1945        /*
1946         * NOTE! If irq < 0, there is another driver which has allocated the IRQ
1947         *   so that this driver doesn't need to allocate/deallocate it.
1948         *   The actually used IRQ is ABS(irq).
1949         */
1950
1951        int my_dev;
1952        char dev_name[100];
1953        int e;
1954
1955        ad1848_info  *devc = &adev_info[nr_ad1848_devs];
1956
1957        ad1848_port_info *portc = NULL;
1958
1959        devc->irq = (irq > 0) ? irq : 0;
1960        devc->open_mode = 0;
1961        devc->timer_ticks = 0;
1962        devc->dma1 = dma_playback;
1963        devc->dma2 = dma_capture;
1964        devc->subtype = cfg.card_subtype;
1965        devc->audio_flags = DMA_AUTOMODE;
1966        devc->playback_dev = devc->record_dev = 0;
1967        if (name != NULL)
1968                devc->name = name;
1969
1970        if (name != NULL && name[0] != 0)
1971                sprintf(dev_name,
1972                        "%s (%s)", name, devc->chip_name);
1973        else
1974                sprintf(dev_name,
1975                        "Generic audio codec (%s)", devc->chip_name);
1976
1977        rename_region(ports, devc->name);
1978
1979        conf_printf2(dev_name, devc->base, devc->irq, dma_playback, dma_capture);
1980
1981        if (devc->model == MD_1848 || devc->model == MD_C930)
1982                devc->audio_flags |= DMA_HARDSTOP;
1983
1984        if (devc->model > MD_1848)
1985        {
1986                if (devc->dma1 == devc->dma2 || devc->dma2 == -1 || devc->dma1 == -1)
1987                        devc->audio_flags &= ~DMA_DUPLEX;
1988                else
1989                        devc->audio_flags |= DMA_DUPLEX;
1990        }
1991
1992        portc = kmalloc(sizeof(ad1848_port_info), GFP_KERNEL);
1993        if(portc==NULL) {
1994                release_region(devc->base, 4);
1995                return -1;
1996        }
1997
1998        if ((my_dev = sound_install_audiodrv(AUDIO_DRIVER_VERSION,
1999                                             dev_name,
2000                                             &ad1848_audio_driver,
2001                                             sizeof(struct audio_driver),
2002                                             devc->audio_flags,
2003                                             ad_format_mask[devc->model],
2004                                             devc,
2005                                             dma_playback,
2006                                             dma_capture)) < 0)
2007        {
2008                release_region(devc->base, 4);
2009                kfree(portc);
2010                return -1;
2011        }
2012        
2013        audio_devs[my_dev]->portc = portc;
2014        audio_devs[my_dev]->mixer_dev = -1;
2015        if (owner)
2016                audio_devs[my_dev]->d->owner = owner;
2017        memset((char *) portc, 0, sizeof(*portc));
2018
2019        nr_ad1848_devs++;
2020
2021        ad1848_init_hw(devc);
2022
2023        if (irq > 0)
2024        {
2025                devc->dev_no = my_dev;
2026                if (request_irq(devc->irq, adintr, 0, devc->name,
2027                                (void *)(long)my_dev) < 0)
2028                {
2029                        printk(KERN_WARNING "ad1848: Unable to allocate IRQ\n");
2030                        /* Don't free it either then.. */
2031                        devc->irq = 0;
2032                }
2033                if (capabilities[devc->model].flags & CAP_F_TIMER)
2034                {
2035#ifndef CONFIG_SMP
2036                        int x;
2037                        unsigned char tmp = ad_read(devc, 16);
2038#endif                  
2039
2040                        devc->timer_ticks = 0;
2041
2042                        ad_write(devc, 21, 0x00);       /* Timer MSB */
2043                        ad_write(devc, 20, 0x10);       /* Timer LSB */
2044#ifndef CONFIG_SMP
2045                        ad_write(devc, 16, tmp | 0x40); /* Enable timer */
2046                        for (x = 0; x < 100000 && devc->timer_ticks == 0; x++);
2047                        ad_write(devc, 16, tmp & ~0x40);        /* Disable timer */
2048
2049                        if (devc->timer_ticks == 0)
2050                                printk(KERN_WARNING "ad1848: Interrupt test failed (IRQ%d)\n", irq);
2051                        else
2052                        {
2053                                DDB(printk("Interrupt test OK\n"));
2054                                devc->irq_ok = 1;
2055                        }
2056#else
2057                        devc->irq_ok = 1;
2058#endif                  
2059                }
2060                else
2061                        devc->irq_ok = 1;       /* Couldn't test. assume it's OK */
2062        } else if (irq < 0)
2063                irq2dev[-irq] = devc->dev_no = my_dev;
2064
2065#ifndef EXCLUDE_TIMERS
2066        if ((capabilities[devc->model].flags & CAP_F_TIMER) &&
2067            devc->irq_ok)
2068                ad1848_tmr_install(my_dev);
2069#endif
2070
2071        if (!share_dma)
2072        {
2073                if (sound_alloc_dma(dma_playback, devc->name))
2074                        printk(KERN_WARNING "ad1848.c: Can't allocate DMA%d\n", dma_playback);
2075
2076                if (dma_capture != dma_playback)
2077                        if (sound_alloc_dma(dma_capture, devc->name))
2078                                printk(KERN_WARNING "ad1848.c: Can't allocate DMA%d\n", dma_capture);
2079        }
2080
2081        if ((e = sound_install_mixer(MIXER_DRIVER_VERSION,
2082                                     dev_name,
2083                                     &ad1848_mixer_operations,
2084                                     sizeof(struct mixer_operations),
2085                                     devc)) >= 0)
2086        {
2087                audio_devs[my_dev]->mixer_dev = e;
2088                if (owner)
2089                        mixer_devs[e]->owner = owner;
2090        }
2091        return my_dev;
2092}
2093
2094int ad1848_control(int cmd, int arg)
2095{
2096        ad1848_info *devc;
2097        unsigned long flags;
2098
2099        if (nr_ad1848_devs < 1)
2100                return -ENODEV;
2101
2102        devc = &adev_info[nr_ad1848_devs - 1];
2103
2104        switch (cmd)
2105        {
2106                case AD1848_SET_XTAL:   /* Change clock frequency of AD1845 (only ) */
2107                        if (devc->model != MD_1845 && devc->model != MD_1845_SSCAPE)
2108                                return -EINVAL;
2109                        spin_lock_irqsave(&devc->lock,flags);
2110                        ad_enter_MCE(devc);
2111                        ad_write(devc, 29, (ad_read(devc, 29) & 0x1f) | (arg << 5));
2112                        ad_leave_MCE(devc);
2113                        spin_unlock_irqrestore(&devc->lock,flags);
2114                        break;
2115
2116                case AD1848_MIXER_REROUTE:
2117                {
2118                        int o = (arg >> 8) & 0xff;
2119                        int n = arg & 0xff;
2120
2121                        if (o < 0 || o >= SOUND_MIXER_NRDEVICES)
2122                                return -EINVAL;
2123
2124                        if (!(devc->supported_devices & (1 << o)) &&
2125                            !(devc->supported_rec_devices & (1 << o)))
2126                                return -EINVAL;
2127
2128                        if (n == SOUND_MIXER_NONE)
2129                        {       /* Just hide this control */
2130                                ad1848_mixer_set(devc, o, 0);   /* Shut up it */
2131                                devc->supported_devices &= ~(1 << o);
2132                                devc->supported_rec_devices &= ~(1 << o);
2133                                break;
2134                        }
2135
2136                        /* Make the mixer control identified by o to appear as n */
2137                        if (n < 0 || n >= SOUND_MIXER_NRDEVICES)
2138                                return -EINVAL;
2139
2140                        devc->mixer_reroute[n] = o;     /* Rename the control */
2141                        if (devc->supported_devices & (1 << o))
2142                                devc->supported_devices |= (1 << n);
2143                        if (devc->supported_rec_devices & (1 << o))
2144                                devc->supported_rec_devices |= (1 << n);
2145
2146                        devc->supported_devices &= ~(1 << o);
2147                        devc->supported_rec_devices &= ~(1 << o);
2148                }
2149                break;
2150        }
2151        return 0;
2152}
2153
2154void ad1848_unload(int io_base, int irq, int dma_playback, int dma_capture, int share_dma)
2155{
2156        int i, mixer, dev = 0;
2157        ad1848_info *devc = NULL;
2158
2159        for (i = 0; devc == NULL && i < nr_ad1848_devs; i++)
2160        {
2161                if (adev_info[i].base == io_base)
2162                {
2163                        devc = &adev_info[i];
2164                        dev = devc->dev_no;
2165                }
2166        }
2167                
2168        if (devc != NULL)
2169        {
2170                kfree(audio_devs[dev]->portc);
2171                release_region(devc->base, 4);
2172
2173                if (!share_dma)
2174                {
2175                        if (devc->irq > 0) /* There is no point in freeing irq, if it wasn't allocated */
2176                                free_irq(devc->irq, (void *)(long)devc->dev_no);
2177
2178                        sound_free_dma(dma_playback);
2179
2180                        if (dma_playback != dma_capture)
2181                                sound_free_dma(dma_capture);
2182
2183                }
2184                mixer = audio_devs[devc->dev_no]->mixer_dev;
2185                if(mixer>=0)
2186                        sound_unload_mixerdev(mixer);
2187
2188                nr_ad1848_devs--;
2189                for ( ; i < nr_ad1848_devs ; i++)
2190                        adev_info[i] = adev_info[i+1];
2191        }
2192        else
2193                printk(KERN_ERR "ad1848: Can't find device to be unloaded. Base=%x\n", io_base);
2194}
2195
2196static irqreturn_t adintr(int irq, void *dev_id)
2197{
2198        unsigned char status;
2199        ad1848_info *devc;
2200        int dev;
2201        int alt_stat = 0xff;
2202        unsigned char c930_stat = 0;
2203        int cnt = 0;
2204
2205        dev = (long)dev_id;
2206        devc = (ad1848_info *) audio_devs[dev]->devc;
2207
2208interrupt_again:                /* Jump back here if int status doesn't reset */
2209
2210        status = inb(io_Status(devc));
2211
2212        if (status == 0x80)
2213                printk(KERN_DEBUG "adintr: Why?\n");
2214        if (devc->model == MD_1848)
2215                outb((0), io_Status(devc));     /* Clear interrupt status */
2216
2217        if (status & 0x01)
2218        {
2219                if (devc->model == MD_C930)
2220                {               /* 82C930 has interrupt status register in MAD16 register MC11 */
2221
2222                        spin_lock(&devc->lock);
2223
2224                        /* 0xe0e is C930 address port
2225                         * 0xe0f is C930 data port
2226                         */
2227                        outb(11, 0xe0e);
2228                        c930_stat = inb(0xe0f);
2229                        outb((~c930_stat), 0xe0f);
2230
2231                        spin_unlock(&devc->lock);
2232
2233                        alt_stat = (c930_stat << 2) & 0x30;
2234                }
2235                else if (devc->model != MD_1848)
2236                {
2237                        spin_lock(&devc->lock);
2238                        alt_stat = ad_read(devc, 24);
2239                        ad_write(devc, 24, ad_read(devc, 24) & ~alt_stat);      /* Selective ack */
2240                        spin_unlock(&devc->lock);
2241                }
2242
2243                if ((devc->open_mode & OPEN_READ) && (devc->audio_mode & PCM_ENABLE_INPUT) && (alt_stat & 0x20))
2244                {
2245                        DMAbuf_inputintr(devc->record_dev);
2246                }
2247                if ((devc->open_mode & OPEN_WRITE) && (devc->audio_mode & PCM_ENABLE_OUTPUT) &&
2248                      (alt_stat & 0x10))
2249                {
2250                        DMAbuf_outputintr(devc->playback_dev, 1);
2251                }
2252                if (devc->model != MD_1848 && (alt_stat & 0x40))        /* Timer interrupt */
2253                {
2254                        devc->timer_ticks++;
2255#ifndef EXCLUDE_TIMERS
2256                        if (timer_installed == dev && devc->timer_running)
2257                                sound_timer_interrupt();
2258#endif
2259                }
2260        }
2261/*
2262 * Sometimes playback or capture interrupts occur while a timer interrupt
2263 * is being handled. The interrupt will not be retriggered if we don't
2264 * handle it now. Check if an interrupt is still pending and restart
2265 * the handler in this case.
2266 */
2267        if (inb(io_Status(devc)) & 0x01 && cnt++ < 4)
2268        {
2269                  goto interrupt_again;
2270        }
2271        return IRQ_HANDLED;
2272}
2273
2274/*
2275 *      Experimental initialization sequence for the integrated sound system
2276 *      of the Compaq Deskpro M.
2277 */
2278
2279static int init_deskpro_m(struct address_info *hw_config)
2280{
2281        unsigned char   tmp;
2282
2283        if ((tmp = inb(0xc44)) == 0xff)
2284        {
2285                DDB(printk("init_deskpro_m: Dead port 0xc44\n"));
2286                return 0;
2287        }
2288
2289        outb(0x10, 0xc44);
2290        outb(0x40, 0xc45);
2291        outb(0x00, 0xc46);
2292        outb(0xe8, 0xc47);
2293        outb(0x14, 0xc44);
2294        outb(0x40, 0xc45);
2295        outb(0x00, 0xc46);
2296        outb(0xe8, 0xc47);
2297        outb(0x10, 0xc44);
2298
2299        return 1;
2300}
2301
2302/*
2303 *      Experimental initialization sequence for the integrated sound system
2304 *      of Compaq Deskpro XL.
2305 */
2306
2307static int init_deskpro(struct address_info *hw_config)
2308{
2309        unsigned char   tmp;
2310
2311        if ((tmp = inb(0xc44)) == 0xff)
2312        {
2313                DDB(printk("init_deskpro: Dead port 0xc44\n"));
2314                return 0;
2315        }
2316        outb((tmp | 0x04), 0xc44);      /* Select bank 1 */
2317        if (inb(0xc44) != 0x04)
2318        {
2319                DDB(printk("init_deskpro: Invalid bank1 signature in port 0xc44\n"));
2320                return 0;
2321        }
2322        /*
2323         * OK. It looks like a Deskpro so let's proceed.
2324         */
2325
2326        /*
2327         * I/O port 0xc44 Audio configuration register.
2328         *
2329         * bits 0xc0:   Audio revision bits
2330         *              0x00 = Compaq Business Audio
2331         *              0x40 = MS Sound System Compatible (reset default)
2332         *              0x80 = Reserved
2333         *              0xc0 = Reserved
2334         * bit 0x20:    No Wait State Enable
2335         *              0x00 = Disabled (reset default, DMA mode)
2336         *              0x20 = Enabled (programmed I/O mode)
2337         * bit 0x10:    MS Sound System Decode Enable
2338         *              0x00 = Decoding disabled (reset default)
2339         *              0x10 = Decoding enabled
2340         * bit 0x08:    FM Synthesis Decode Enable
2341         *              0x00 = Decoding Disabled (reset default)
2342         *              0x08 = Decoding enabled
2343         * bit 0x04     Bank select
2344         *              0x00 = Bank 0
2345         *              0x04 = Bank 1
2346         * bits 0x03    MSS Base address
2347         *              0x00 = 0x530 (reset default)
2348         *              0x01 = 0x604
2349         *              0x02 = 0xf40
2350         *              0x03 = 0xe80
2351         */
2352
2353#ifdef DEBUGXL
2354        /* Debug printing */
2355        printk("Port 0xc44 (before): ");
2356        outb((tmp & ~0x04), 0xc44);
2357        printk("%02x ", inb(0xc44));
2358        outb((tmp | 0x04), 0xc44);
2359        printk("%02x\n", inb(0xc44));
2360#endif
2361
2362        /* Set bank 1 of the register */
2363        tmp = 0x58;             /* MSS Mode, MSS&FM decode enabled */
2364
2365        switch (hw_config->io_base)
2366        {
2367                case 0x530:
2368                        tmp |= 0x00;
2369                        break;
2370                case 0x604:
2371                        tmp |= 0x01;
2372                        break;
2373                case 0xf40:
2374                        tmp |= 0x02;
2375                        break;
2376                case 0xe80:
2377                        tmp |= 0x03;
2378                        break;
2379                default:
2380                        DDB(printk("init_deskpro: Invalid MSS port %x\n", hw_config->io_base));
2381                        return 0;
2382        }
2383        outb((tmp & ~0x04), 0xc44);     /* Write to bank=0 */
2384
2385#ifdef DEBUGXL
2386        /* Debug printing */
2387        printk("Port 0xc44 (after): ");
2388        outb((tmp & ~0x04), 0xc44);     /* Select bank=0 */
2389        printk("%02x ", inb(0xc44));
2390        outb((tmp | 0x04), 0xc44);      /* Select bank=1 */
2391        printk("%02x\n", inb(0xc44));
2392#endif
2393
2394        /*
2395         * I/O port 0xc45 FM Address Decode/MSS ID Register.
2396         *
2397         * bank=0, bits 0xfe:   FM synthesis Decode Compare bits 7:1 (default=0x88)
2398         * bank=0, bit 0x01:    SBIC Power Control Bit
2399         *                      0x00 = Powered up
2400         *                      0x01 = Powered down
2401         * bank=1, bits 0xfc:   MSS ID (default=0x40)
2402         */
2403
2404#ifdef DEBUGXL
2405        /* Debug printing */
2406        printk("Port 0xc45 (before): ");
2407        outb((tmp & ~0x04), 0xc44);     /* Select bank=0 */
2408        printk("%02x ", inb(0xc45));
2409        outb((tmp | 0x04), 0xc44);      /* Select bank=1 */
2410        printk("%02x\n", inb(0xc45));
2411#endif
2412
2413        outb((tmp & ~0x04), 0xc44);     /* Select bank=0 */
2414        outb((0x88), 0xc45);    /* FM base 7:0 = 0x88 */
2415        outb((tmp | 0x04), 0xc44);      /* Select bank=1 */
2416        outb((0x10), 0xc45);    /* MSS ID = 0x10 (MSS port returns 0x04) */
2417
2418#ifdef DEBUGXL
2419        /* Debug printing */
2420        printk("Port 0xc45 (after): ");
2421        outb((tmp & ~0x04), 0xc44);     /* Select bank=0 */
2422        printk("%02x ", inb(0xc45));
2423        outb((tmp | 0x04), 0xc44);      /* Select bank=1 */
2424        printk("%02x\n", inb(0xc45));
2425#endif
2426
2427
2428        /*
2429         * I/O port 0xc46 FM Address Decode/Address ASIC Revision Register.
2430         *
2431         * bank=0, bits 0xff:   FM synthesis Decode Compare bits 15:8 (default=0x03)
2432         * bank=1, bits 0xff:   Audio addressing ASIC id
2433         */
2434
2435#ifdef DEBUGXL
2436        /* Debug printing */
2437        printk("Port 0xc46 (before): ");
2438        outb((tmp & ~0x04), 0xc44);     /* Select bank=0 */
2439        printk("%02x ", inb(0xc46));
2440        outb((tmp | 0x04), 0xc44);      /* Select bank=1 */
2441        printk("%02x\n", inb(0xc46));
2442#endif
2443
2444        outb((tmp & ~0x04), 0xc44);     /* Select bank=0 */
2445        outb((0x03), 0xc46);    /* FM base 15:8 = 0x03 */
2446        outb((tmp | 0x04), 0xc44);      /* Select bank=1 */
2447        outb((0x11), 0xc46);    /* ASIC ID = 0x11 */
2448
2449#ifdef DEBUGXL
2450        /* Debug printing */
2451        printk("Port 0xc46 (after): ");
2452        outb((tmp & ~0x04), 0xc44);     /* Select bank=0 */
2453        printk("%02x ", inb(0xc46));
2454        outb((tmp | 0x04), 0xc44);      /* Select bank=1 */
2455        printk("%02x\n", inb(0xc46));
2456#endif
2457
2458        /*
2459         * I/O port 0xc47 FM Address Decode Register.
2460         *
2461         * bank=0, bits 0xff:   Decode enable selection for various FM address bits
2462         * bank=1, bits 0xff:   Reserved
2463         */
2464
2465#ifdef DEBUGXL
2466        /* Debug printing */
2467        printk("Port 0xc47 (before): ");
2468        outb((tmp & ~0x04), 0xc44);     /* Select bank=0 */
2469        printk("%02x ", inb(0xc47));
2470        outb((tmp | 0x04), 0xc44);      /* Select bank=1 */
2471        printk("%02x\n", inb(0xc47));
2472#endif
2473
2474        outb((tmp & ~0x04), 0xc44);     /* Select bank=0 */
2475        outb((0x7c), 0xc47);    /* FM decode enable bits = 0x7c */
2476        outb((tmp | 0x04), 0xc44);      /* Select bank=1 */
2477        outb((0x00), 0xc47);    /* Reserved bank1 = 0x00 */
2478
2479#ifdef DEBUGXL
2480        /* Debug printing */
2481        printk("Port 0xc47 (after): ");
2482        outb((tmp & ~0x04), 0xc44);     /* Select bank=0 */
2483        printk("%02x ", inb(0xc47));
2484        outb((tmp | 0x04), 0xc44);      /* Select bank=1 */
2485        printk("%02x\n", inb(0xc47));
2486#endif
2487
2488        /*
2489         * I/O port 0xc6f = Audio Disable Function Register
2490         */
2491
2492#ifdef DEBUGXL
2493        printk("Port 0xc6f (before) = %02x\n", inb(0xc6f));
2494#endif
2495
2496        outb((0x80), 0xc6f);
2497
2498#ifdef DEBUGXL
2499        printk("Port 0xc6f (after) = %02x\n", inb(0xc6f));
2500#endif
2501
2502        return 1;
2503}
2504
2505int probe_ms_sound(struct address_info *hw_config, struct resource *ports)
2506{
2507        unsigned char   tmp;
2508
2509        DDB(printk("Entered probe_ms_sound(%x, %d)\n", hw_config->io_base, hw_config->card_subtype));
2510
2511        if (hw_config->card_subtype == 1)       /* Has no IRQ/DMA registers */
2512        {
2513                /* check_opl3(0x388, hw_config); */
2514                return ad1848_detect(ports, NULL, hw_config->osp);
2515        }
2516
2517        if (deskpro_xl && hw_config->card_subtype == 2) /* Compaq Deskpro XL */
2518        {
2519                if (!init_deskpro(hw_config))
2520                        return 0;
2521        }
2522
2523        if (deskpro_m)  /* Compaq Deskpro M */
2524        {
2525                if (!init_deskpro_m(hw_config))
2526                        return 0;
2527        }
2528
2529        /*
2530           * Check if the IO port returns valid signature. The original MS Sound
2531           * system returns 0x04 while some cards (AudioTrix Pro for example)
2532           * return 0x00 or 0x0f.
2533         */
2534
2535        if ((tmp = inb(hw_config->io_base + 3)) == 0xff)        /* Bus float */
2536        {
2537                  int             ret;
2538
2539                  DDB(printk("I/O address is inactive (%x)\n", tmp));
2540                  if (!(ret = ad1848_detect(ports, NULL, hw_config->osp)))
2541                          return 0;
2542                  return 1;
2543        }
2544        DDB(printk("MSS signature = %x\n", tmp & 0x3f));
2545        if ((tmp & 0x3f) != 0x04 &&
2546            (tmp & 0x3f) != 0x0f &&
2547            (tmp & 0x3f) != 0x00)
2548        {
2549                int ret;
2550
2551                MDB(printk(KERN_ERR "No MSS signature detected on port 0x%x (0x%x)\n", hw_config->io_base, (int) inb(hw_config->io_base + 3)));
2552                DDB(printk("Trying to detect codec anyway but IRQ/DMA may not work\n"));
2553                if (!(ret = ad1848_detect(ports, NULL, hw_config->osp)))
2554                        return 0;
2555
2556                hw_config->card_subtype = 1;
2557                return 1;
2558        }
2559        if ((hw_config->irq != 5)  &&
2560            (hw_config->irq != 7)  &&
2561            (hw_config->irq != 9)  &&
2562            (hw_config->irq != 10) &&
2563            (hw_config->irq != 11) &&
2564            (hw_config->irq != 12))
2565        {
2566                printk(KERN_ERR "MSS: Bad IRQ %d\n", hw_config->irq);
2567                return 0;
2568        }
2569        if (hw_config->dma != 0 && hw_config->dma != 1 && hw_config->dma != 3)
2570        {
2571                  printk(KERN_ERR "MSS: Bad DMA %d\n", hw_config->dma);
2572                  return 0;
2573        }
2574        /*
2575         * Check that DMA0 is not in use with a 8 bit board.
2576         */
2577
2578        if (hw_config->dma == 0 && inb(hw_config->io_base + 3) & 0x80)
2579        {
2580                printk(KERN_ERR "MSS: Can't use DMA0 with a 8 bit card/slot\n");
2581                return 0;
2582        }
2583        if (hw_config->irq > 7 && hw_config->irq != 9 && inb(hw_config->io_base + 3) & 0x80)
2584        {
2585                printk(KERN_ERR "MSS: Can't use IRQ%d with a 8 bit card/slot\n", hw_config->irq);
2586                return 0;
2587        }
2588        return ad1848_detect(ports, NULL, hw_config->osp);
2589}
2590
2591void attach_ms_sound(struct address_info *hw_config, struct resource *ports, struct module *owner)
2592{
2593        static signed char interrupt_bits[12] =
2594        {
2595                -1, -1, -1, -1, -1, 0x00, -1, 0x08, -1, 0x10, 0x18, 0x20
2596        };
2597        signed char     bits;
2598        char            dma2_bit = 0;
2599
2600        static char     dma_bits[4] =
2601        {
2602                1, 2, 0, 3
2603        };
2604
2605        int config_port = hw_config->io_base + 0;
2606        int version_port = hw_config->io_base + 3;
2607        int dma = hw_config->dma;
2608        int dma2 = hw_config->dma2;
2609
2610        if (hw_config->card_subtype == 1)       /* Has no IRQ/DMA registers */
2611        {
2612                hw_config->slots[0] = ad1848_init("MS Sound System", ports,
2613                                                    hw_config->irq,
2614                                                    hw_config->dma,
2615                                                    hw_config->dma2, 0, 
2616                                                    hw_config->osp,
2617                                                    owner);
2618                return;
2619        }
2620        /*
2621         * Set the IRQ and DMA addresses.
2622         */
2623
2624        bits = interrupt_bits[hw_config->irq];
2625        if (bits == -1)
2626        {
2627                printk(KERN_ERR "MSS: Bad IRQ %d\n", hw_config->irq);
2628                release_region(ports->start, 4);
2629                release_region(ports->start - 4, 4);
2630                return;
2631        }
2632        outb((bits | 0x40), config_port);
2633        if ((inb(version_port) & 0x40) == 0)
2634                printk(KERN_ERR "[MSS: IRQ Conflict?]\n");
2635
2636/*
2637 * Handle the capture DMA channel
2638 */
2639
2640        if (dma2 != -1 && dma2 != dma)
2641        {
2642                if (!((dma == 0 && dma2 == 1) ||
2643                        (dma == 1 && dma2 == 0) ||
2644                        (dma == 3 && dma2 == 0)))
2645                {       /* Unsupported combination. Try to swap channels */
2646                        int tmp = dma;
2647
2648                        dma = dma2;
2649                        dma2 = tmp;
2650                }
2651                if ((dma == 0 && dma2 == 1) ||
2652                        (dma == 1 && dma2 == 0) ||
2653                        (dma == 3 && dma2 == 0))
2654                {
2655                        dma2_bit = 0x04;        /* Enable capture DMA */
2656                }
2657                else
2658                {
2659                        printk(KERN_WARNING "MSS: Invalid capture DMA\n");
2660                        dma2 = dma;
2661                }
2662        }
2663        else
2664        {
2665                dma2 = dma;
2666        }
2667
2668        hw_config->dma = dma;
2669        hw_config->dma2 = dma2;
2670
2671        outb((bits | dma_bits[dma] | dma2_bit), config_port);   /* Write IRQ+DMA setup */
2672
2673        hw_config->slots[0] = ad1848_init("MS Sound System", ports,
2674                                          hw_config->irq,
2675                                          dma, dma2, 0,
2676                                          hw_config->osp,
2677                                          THIS_MODULE);
2678}
2679
2680void unload_ms_sound(struct address_info *hw_config)
2681{
2682        ad1848_unload(hw_config->io_base + 4,
2683                      hw_config->irq,
2684                      hw_config->dma,
2685                      hw_config->dma2, 0);
2686        sound_unload_audiodev(hw_config->slots[0]);
2687        release_region(hw_config->io_base, 4);
2688}
2689
2690#ifndef EXCLUDE_TIMERS
2691
2692/*
2693 * Timer stuff (for /dev/music).
2694 */
2695
2696static unsigned int current_interval;
2697
2698static unsigned int ad1848_tmr_start(int dev, unsigned int usecs)
2699{
2700        unsigned long   flags;
2701        ad1848_info    *devc = (ad1848_info *) audio_devs[dev]->devc;
2702        unsigned long   xtal_nsecs;     /* nanoseconds per xtal oscillator tick */
2703        unsigned long   divider;
2704
2705        spin_lock_irqsave(&devc->lock,flags);
2706
2707        /*
2708         * Length of the timer interval (in nanoseconds) depends on the
2709         * selected crystal oscillator. Check this from bit 0x01 of I8.
2710         *
2711         * AD1845 has just one oscillator which has cycle time of 10.050 us
2712         * (when a 24.576 MHz xtal oscillator is used).
2713         *
2714         * Convert requested interval to nanoseconds before computing
2715         * the timer divider.
2716         */
2717
2718        if (devc->model == MD_1845 || devc->model == MD_1845_SSCAPE)
2719                xtal_nsecs = 10050;
2720        else if (ad_read(devc, 8) & 0x01)
2721                xtal_nsecs = 9920;
2722        else
2723                xtal_nsecs = 9969;
2724
2725        divider = (usecs * 1000 + xtal_nsecs / 2) / xtal_nsecs;
2726
2727        if (divider < 100)      /* Don't allow shorter intervals than about 1ms */
2728                divider = 100;
2729
2730        if (divider > 65535)    /* Overflow check */
2731                divider = 65535;
2732
2733        ad_write(devc, 21, (divider >> 8) & 0xff);      /* Set upper bits */
2734        ad_write(devc, 20, divider & 0xff);     /* Set lower bits */
2735        ad_write(devc, 16, ad_read(devc, 16) | 0x40);   /* Start the timer */
2736        devc->timer_running = 1;
2737        spin_unlock_irqrestore(&devc->lock,flags);
2738
2739        return current_interval = (divider * xtal_nsecs + 500) / 1000;
2740}
2741
2742static void ad1848_tmr_reprogram(int dev)
2743{
2744        /*
2745         *    Audio driver has changed sampling rate so that a different xtal
2746         *      oscillator was selected. We have to reprogram the timer rate.
2747         */
2748
2749        ad1848_tmr_start(dev, current_interval);
2750        sound_timer_syncinterval(current_interval);
2751}
2752
2753static void ad1848_tmr_disable(int dev)
2754{
2755        unsigned long   flags;
2756        ad1848_info    *devc = (ad1848_info *) audio_devs[dev]->devc;
2757
2758        spin_lock_irqsave(&devc->lock,flags);
2759        ad_write(devc, 16, ad_read(devc, 16) & ~0x40);
2760        devc->timer_running = 0;
2761        spin_unlock_irqrestore(&devc->lock,flags);
2762}
2763
2764static void ad1848_tmr_restart(int dev)
2765{
2766        unsigned long   flags;
2767        ad1848_info    *devc = (ad1848_info *) audio_devs[dev]->devc;
2768
2769        if (current_interval == 0)
2770                return;
2771
2772        spin_lock_irqsave(&devc->lock,flags);
2773        ad_write(devc, 16, ad_read(devc, 16) | 0x40);
2774        devc->timer_running = 1;
2775        spin_unlock_irqrestore(&devc->lock,flags);
2776}
2777
2778static struct sound_lowlev_timer ad1848_tmr =
2779{
2780        0,
2781        2,
2782        ad1848_tmr_start,
2783        ad1848_tmr_disable,
2784        ad1848_tmr_restart
2785};
2786
2787static int ad1848_tmr_install(int dev)
2788{
2789        if (timer_installed != -1)
2790                return 0;       /* Don't install another timer */
2791
2792        timer_installed = ad1848_tmr.dev = dev;
2793        sound_timer_init(&ad1848_tmr, audio_devs[dev]->name);
2794
2795        return 1;
2796}
2797#endif /* EXCLUDE_TIMERS */
2798
2799EXPORT_SYMBOL(ad1848_detect);
2800EXPORT_SYMBOL(ad1848_init);
2801EXPORT_SYMBOL(ad1848_unload);
2802EXPORT_SYMBOL(ad1848_control);
2803EXPORT_SYMBOL(probe_ms_sound);
2804EXPORT_SYMBOL(attach_ms_sound);
2805EXPORT_SYMBOL(unload_ms_sound);
2806
2807static int __initdata io = -1;
2808static int __initdata irq = -1;
2809static int __initdata dma = -1;
2810static int __initdata dma2 = -1;
2811static int __initdata type = 0;
2812
2813module_param(io, int, 0);               /* I/O for a raw AD1848 card */
2814module_param(irq, int, 0);              /* IRQ to use */
2815module_param(dma, int, 0);              /* First DMA channel */
2816module_param(dma2, int, 0);             /* Second DMA channel */
2817module_param(type, int, 0);             /* Card type */
2818module_param(deskpro_xl, bool, 0);      /* Special magic for Deskpro XL boxen */
2819module_param(deskpro_m, bool, 0);       /* Special magic for Deskpro M box */
2820module_param(soundpro, bool, 0);        /* More special magic for SoundPro chips */
2821
2822#ifdef CONFIG_PNP
2823module_param(isapnp, int, 0);
2824module_param(isapnpjump, int, 0);
2825module_param(reverse, bool, 0);
2826MODULE_PARM_DESC(isapnp,        "When set to 0, Plug & Play support will be disabled");
2827MODULE_PARM_DESC(isapnpjump,    "Jumps to a specific slot in the driver's PnP table. Use the source, Luke.");
2828MODULE_PARM_DESC(reverse,       "When set to 1, will reverse ISAPnP search order");
2829
2830static struct pnp_dev   *ad1848_dev  = NULL;
2831
2832/* Please add new entries at the end of the table */
2833static struct {
2834        char *name;
2835        unsigned short  card_vendor, card_device,
2836                        vendor, function;
2837        short mss_io, irq, dma, dma2;   /* index into isapnp table */
2838        int type;
2839} ad1848_isapnp_list[] __initdata = {
2840        {"CMI 8330 SoundPRO",
2841                ISAPNP_VENDOR('C','M','I'), ISAPNP_DEVICE(0x0001),
2842                ISAPNP_VENDOR('@','@','@'), ISAPNP_FUNCTION(0x0001),
2843                0, 0, 0,-1, 0},
2844        {"CS4232 based card",
2845                ISAPNP_ANY_ID, ISAPNP_ANY_ID,
2846                ISAPNP_VENDOR('C','S','C'), ISAPNP_FUNCTION(0x0000),
2847                0, 0, 0, 1, 0},
2848        {"CS4232 based card",
2849                ISAPNP_ANY_ID, ISAPNP_ANY_ID,
2850                ISAPNP_VENDOR('C','S','C'), ISAPNP_FUNCTION(0x0100),
2851                0, 0, 0, 1, 0},
2852        {"OPL3-SA2 WSS mode",
2853                ISAPNP_ANY_ID, ISAPNP_ANY_ID,
2854                ISAPNP_VENDOR('Y','M','H'), ISAPNP_FUNCTION(0x0021),
2855                1, 0, 0, 1, 1},
2856        {"Advanced Gravis InterWave Audio",
2857                ISAPNP_VENDOR('G','R','V'), ISAPNP_DEVICE(0x0001),
2858                ISAPNP_VENDOR('G','R','V'), ISAPNP_FUNCTION(0x0000),
2859                0, 0, 0, 1, 0},
2860        {NULL}
2861};
2862
2863#ifdef MODULE
2864static struct isapnp_device_id id_table[] = {
2865        {       ISAPNP_VENDOR('C','M','I'), ISAPNP_DEVICE(0x0001),
2866                ISAPNP_VENDOR('@','@','@'), ISAPNP_FUNCTION(0x0001), 0 },
2867        {       ISAPNP_ANY_ID, ISAPNP_ANY_ID,
2868                ISAPNP_VENDOR('C','S','C'), ISAPNP_FUNCTION(0x0000), 0 },
2869        {       ISAPNP_ANY_ID, ISAPNP_ANY_ID,
2870                ISAPNP_VENDOR('C','S','C'), ISAPNP_FUNCTION(0x0100), 0 },
2871        /* The main driver for this card is opl3sa2
2872        {       ISAPNP_ANY_ID, ISAPNP_ANY_ID,
2873                ISAPNP_VENDOR('Y','M','H'), ISAPNP_FUNCTION(0x0021), 0 },
2874        */
2875        {       ISAPNP_VENDOR('G','R','V'), ISAPNP_DEVICE(0x0001),
2876                ISAPNP_VENDOR('G','R','V'), ISAPNP_FUNCTION(0x0000), 0 },
2877        {0}
2878};
2879
2880MODULE_DEVICE_TABLE(isapnp, id_table);
2881#endif
2882
2883static struct pnp_dev *activate_dev(char *devname, char *resname, struct pnp_dev *dev)
2884{
2885        int err;
2886
2887        err = pnp_device_attach(dev);
2888        if (err < 0)
2889                return(NULL);
2890
2891        if((err = pnp_activate_dev(dev)) < 0) {
2892                printk(KERN_ERR "ad1848: %s %s config failed (out of resources?)[%d]\n", devname, resname, err);
2893
2894                pnp_device_detach(dev);
2895
2896                return(NULL);
2897        }
2898        audio_activated = 1;
2899        return(dev);
2900}
2901
2902static struct pnp_dev __init *ad1848_init_generic(struct pnp_card *bus,
2903                                struct address_info *hw_config, int slot)
2904{
2905
2906        /* Configure Audio device */
2907        if((ad1848_dev = pnp_find_dev(bus, ad1848_isapnp_list[slot].vendor, ad1848_isapnp_list[slot].function, NULL)))
2908        {
2909                if((ad1848_dev = activate_dev(ad1848_isapnp_list[slot].name, "ad1848", ad1848_dev)))
2910                {
2911                        hw_config->io_base      = pnp_port_start(ad1848_dev, ad1848_isapnp_list[slot].mss_io);
2912                        hw_config->irq          = pnp_irq(ad1848_dev, ad1848_isapnp_list[slot].irq);
2913                        hw_config->dma          = pnp_dma(ad1848_dev, ad1848_isapnp_list[slot].dma);
2914                        if(ad1848_isapnp_list[slot].dma2 != -1)
2915                                hw_config->dma2 = pnp_dma(ad1848_dev, ad1848_isapnp_list[slot].dma2);
2916                        else
2917                                hw_config->dma2 = -1;
2918                        hw_config->card_subtype = ad1848_isapnp_list[slot].type;
2919                } else
2920                        return(NULL);
2921        } else
2922                return(NULL);
2923
2924        return(ad1848_dev);
2925}
2926
2927static int __init ad1848_isapnp_init(struct address_info *hw_config, struct pnp_card *bus, int slot)
2928{
2929        char *busname = bus->name[0] ? bus->name : ad1848_isapnp_list[slot].name;
2930
2931        /* Initialize this baby. */
2932
2933        if(ad1848_init_generic(bus, hw_config, slot)) {
2934                /* We got it. */
2935
2936                printk(KERN_NOTICE "ad1848: PnP reports '%s' at i/o %#x, irq %d, dma %d, %d\n",
2937                       busname,
2938                       hw_config->io_base, hw_config->irq, hw_config->dma,
2939                       hw_config->dma2);
2940                return 1;
2941        }
2942        return 0;
2943}
2944
2945static int __init ad1848_isapnp_probe(struct address_info *hw_config)
2946{
2947        static int first = 1;
2948        int i;
2949
2950        /* Count entries in sb_isapnp_list */
2951        for (i = 0; ad1848_isapnp_list[i].card_vendor != 0; i++);
2952        i--;
2953
2954        /* Check and adjust isapnpjump */
2955        if( isapnpjump < 0 || isapnpjump > i) {
2956                isapnpjump = reverse ? i : 0;
2957                printk(KERN_ERR "ad1848: Valid range for isapnpjump is 0-%d. Adjusted to %d.\n", i, isapnpjump);
2958        }
2959
2960        if(!first || !reverse)
2961                i = isapnpjump;
2962        first = 0;
2963        while(ad1848_isapnp_list[i].card_vendor != 0) {
2964                static struct pnp_card *bus = NULL;
2965
2966                while ((bus = pnp_find_card(
2967                                ad1848_isapnp_list[i].card_vendor,
2968                                ad1848_isapnp_list[i].card_device,
2969                                bus))) {
2970
2971                        if(ad1848_isapnp_init(hw_config, bus, i)) {
2972                                isapnpjump = i; /* start next search from here */
2973                                return 0;
2974                        }
2975                }
2976                i += reverse ? -1 : 1;
2977        }
2978
2979        return -ENODEV;
2980}
2981#endif
2982
2983
2984static int __init init_ad1848(void)
2985{
2986        printk(KERN_INFO "ad1848/cs4248 codec driver Copyright (C) by Hannu Savolainen 1993-1996\n");
2987
2988#ifdef CONFIG_PNP
2989        if(isapnp && (ad1848_isapnp_probe(&cfg) < 0) ) {
2990                printk(KERN_NOTICE "ad1848: No ISAPnP cards found, trying standard ones...\n");
2991                isapnp = 0;
2992        }
2993#endif
2994
2995        if(io != -1) {
2996                struct resource *ports;
2997                if( isapnp == 0 )
2998                {
2999                        if(irq == -1 || dma == -1) {
3000                                printk(KERN_WARNING "ad1848: must give I/O , IRQ and DMA.\n");
3001                                return -EINVAL;
3002                        }
3003
3004                        cfg.irq = irq;
3005                        cfg.io_base = io;
3006                        cfg.dma = dma;
3007                        cfg.dma2 = dma2;
3008                        cfg.card_subtype = type;
3009                }
3010
3011                ports = request_region(io + 4, 4, "ad1848");
3012
3013                if (!ports)
3014                        return -EBUSY;
3015
3016                if (!request_region(io, 4, "WSS config")) {
3017                        release_region(io + 4, 4);
3018                        return -EBUSY;
3019                }
3020
3021                if (!probe_ms_sound(&cfg, ports)) {
3022                        release_region(io + 4, 4);
3023                        release_region(io, 4);
3024                        return -ENODEV;
3025                }
3026                attach_ms_sound(&cfg, ports, THIS_MODULE);
3027                loaded = 1;
3028        }
3029        return 0;
3030}
3031
3032static void __exit cleanup_ad1848(void)
3033{
3034        if(loaded)
3035                unload_ms_sound(&cfg);
3036
3037#ifdef CONFIG_PNP
3038        if(ad1848_dev){
3039                if(audio_activated)
3040                        pnp_device_detach(ad1848_dev);
3041        }
3042#endif
3043}
3044
3045module_init(init_ad1848);
3046module_exit(cleanup_ad1848);
3047
3048#ifndef MODULE
3049static int __init setup_ad1848(char *str)
3050{
3051        /* io, irq, dma, dma2, type */
3052        int ints[6];
3053        
3054        str = get_options(str, ARRAY_SIZE(ints), ints);
3055
3056        io      = ints[1];
3057        irq     = ints[2];
3058        dma     = ints[3];
3059        dma2    = ints[4];
3060        type    = ints[5];
3061
3062        return 1;
3063}
3064
3065__setup("ad1848=", setup_ad1848);       
3066#endif
3067MODULE_LICENSE("GPL");
3068