linux/sound/pci/es1968.c
<<
>>
Prefs
   1/*
   2 *  Driver for ESS Maestro 1/2/2E Sound Card (started 21.8.99)
   3 *  Copyright (c) by Matze Braun <MatzeBraun@gmx.de>.
   4 *                   Takashi Iwai <tiwai@suse.de>
   5 *                  
   6 *  Most of the driver code comes from Zach Brown(zab@redhat.com)
   7 *      Alan Cox OSS Driver
   8 *  Rewritted from card-es1938.c source.
   9 *
  10 *  TODO:
  11 *   Perhaps Synth
  12 *
  13 *   This program is free software; you can redistribute it and/or modify
  14 *   it under the terms of the GNU General Public License as published by
  15 *   the Free Software Foundation; either version 2 of the License, or
  16 *   (at your option) any later version.
  17 *
  18 *   This program is distributed in the hope that it will be useful,
  19 *   but WITHOUT ANY WARRANTY; without even the implied warranty of
  20 *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  21 *   GNU General Public License for more details.
  22 *
  23 *   You should have received a copy of the GNU General Public License
  24 *   along with this program; if not, write to the Free Software
  25 *   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
  26 *
  27 *
  28 *  Notes from Zach Brown about the driver code
  29 *
  30 *  Hardware Description
  31 *
  32 *      A working Maestro setup contains the Maestro chip wired to a 
  33 *      codec or 2.  In the Maestro we have the APUs, the ASSP, and the
  34 *      Wavecache.  The APUs can be though of as virtual audio routing
  35 *      channels.  They can take data from a number of sources and perform
  36 *      basic encodings of the data.  The wavecache is a storehouse for
  37 *      PCM data.  Typically it deals with PCI and interracts with the
  38 *      APUs.  The ASSP is a wacky DSP like device that ESS is loth
  39 *      to release docs on.  Thankfully it isn't required on the Maestro
  40 *      until you start doing insane things like FM emulation and surround
  41 *      encoding.  The codecs are almost always AC-97 compliant codecs, 
  42 *      but it appears that early Maestros may have had PT101 (an ESS
  43 *      part?) wired to them.  The only real difference in the Maestro
  44 *      families is external goop like docking capability, memory for
  45 *      the ASSP, and initialization differences.
  46 *
  47 *  Driver Operation
  48 *
  49 *      We only drive the APU/Wavecache as typical DACs and drive the
  50 *      mixers in the codecs.  There are 64 APUs.  We assign 6 to each
  51 *      /dev/dsp? device.  2 channels for output, and 4 channels for
  52 *      input.
  53 *
  54 *      Each APU can do a number of things, but we only really use
  55 *      3 basic functions.  For playback we use them to convert PCM
  56 *      data fetched over PCI by the wavecahche into analog data that
  57 *      is handed to the codec.  One APU for mono, and a pair for stereo.
  58 *      When in stereo, the combination of smarts in the APU and Wavecache
  59 *      decide which wavecache gets the left or right channel.
  60 *
  61 *      For record we still use the old overly mono system.  For each in
  62 *      coming channel the data comes in from the codec, through a 'input'
  63 *      APU, through another rate converter APU, and then into memory via
  64 *      the wavecache and PCI.  If its stereo, we mash it back into LRLR in
  65 *      software.  The pass between the 2 APUs is supposedly what requires us
  66 *      to have a 512 byte buffer sitting around in wavecache/memory.
  67 *
  68 *      The wavecache makes our life even more fun.  First off, it can
  69 *      only address the first 28 bits of PCI address space, making it
  70 *      useless on quite a few architectures.  Secondly, its insane.
  71 *      It claims to fetch from 4 regions of PCI space, each 4 meg in length.
  72 *      But that doesn't really work.  You can only use 1 region.  So all our
  73 *      allocations have to be in 4meg of each other.  Booo.  Hiss.
  74 *      So we have a module parameter, dsps_order, that is the order of
  75 *      the number of dsps to provide.  All their buffer space is allocated
  76 *      on open time.  The sonicvibes OSS routines we inherited really want
  77 *      power of 2 buffers, so we have all those next to each other, then
  78 *      512 byte regions for the recording wavecaches.  This ends up
  79 *      wasting quite a bit of memory.  The only fixes I can see would be 
  80 *      getting a kernel allocator that could work in zones, or figuring out
  81 *      just how to coerce the WP into doing what we want.
  82 *
  83 *      The indirection of the various registers means we have to spinlock
  84 *      nearly all register accesses.  We have the main register indirection
  85 *      like the wave cache, maestro registers, etc.  Then we have beasts
  86 *      like the APU interface that is indirect registers gotten at through
  87 *      the main maestro indirection.  Ouch.  We spinlock around the actual
  88 *      ports on a per card basis.  This means spinlock activity at each IO
  89 *      operation, but the only IO operation clusters are in non critical 
  90 *      paths and it makes the code far easier to follow.  Interrupts are
  91 *      blocked while holding the locks because the int handler has to
  92 *      get at some of them :(.  The mixer interface doesn't, however.
  93 *      We also have an OSS state lock that is thrown around in a few
  94 *      places.
  95 */
  96
  97#include <asm/io.h>
  98#include <linux/delay.h>
  99#include <linux/interrupt.h>
 100#include <linux/init.h>
 101#include <linux/pci.h>
 102#include <linux/dma-mapping.h>
 103#include <linux/slab.h>
 104#include <linux/gameport.h>
 105#include <linux/moduleparam.h>
 106#include <linux/mutex.h>
 107
 108#include <sound/core.h>
 109#include <sound/pcm.h>
 110#include <sound/mpu401.h>
 111#include <sound/ac97_codec.h>
 112#include <sound/initval.h>
 113
 114#define CARD_NAME "ESS Maestro1/2"
 115#define DRIVER_NAME "ES1968"
 116
 117MODULE_DESCRIPTION("ESS Maestro");
 118MODULE_LICENSE("GPL");
 119MODULE_SUPPORTED_DEVICE("{{ESS,Maestro 2e},"
 120                "{ESS,Maestro 2},"
 121                "{ESS,Maestro 1},"
 122                "{TerraTec,DMX}}");
 123
 124#if defined(CONFIG_GAMEPORT) || (defined(MODULE) && defined(CONFIG_GAMEPORT_MODULE))
 125#define SUPPORT_JOYSTICK 1
 126#endif
 127
 128static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;      /* Index 1-MAX */
 129static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;       /* ID for this card */
 130static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP;      /* Enable this card */
 131static int total_bufsize[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 1024 };
 132static int pcm_substreams_p[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 4 };
 133static int pcm_substreams_c[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 1 };
 134static int clock[SNDRV_CARDS];
 135static int use_pm[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 2};
 136static int enable_mpu[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 2};
 137#ifdef SUPPORT_JOYSTICK
 138static int joystick[SNDRV_CARDS];
 139#endif
 140
 141module_param_array(index, int, NULL, 0444);
 142MODULE_PARM_DESC(index, "Index value for " CARD_NAME " soundcard.");
 143module_param_array(id, charp, NULL, 0444);
 144MODULE_PARM_DESC(id, "ID string for " CARD_NAME " soundcard.");
 145module_param_array(enable, bool, NULL, 0444);
 146MODULE_PARM_DESC(enable, "Enable " CARD_NAME " soundcard.");
 147module_param_array(total_bufsize, int, NULL, 0444);
 148MODULE_PARM_DESC(total_bufsize, "Total buffer size in kB.");
 149module_param_array(pcm_substreams_p, int, NULL, 0444);
 150MODULE_PARM_DESC(pcm_substreams_p, "PCM Playback substreams for " CARD_NAME " soundcard.");
 151module_param_array(pcm_substreams_c, int, NULL, 0444);
 152MODULE_PARM_DESC(pcm_substreams_c, "PCM Capture substreams for " CARD_NAME " soundcard.");
 153module_param_array(clock, int, NULL, 0444);
 154MODULE_PARM_DESC(clock, "Clock on " CARD_NAME " soundcard.  (0 = auto-detect)");
 155module_param_array(use_pm, int, NULL, 0444);
 156MODULE_PARM_DESC(use_pm, "Toggle power-management.  (0 = off, 1 = on, 2 = auto)");
 157module_param_array(enable_mpu, int, NULL, 0444);
 158MODULE_PARM_DESC(enable_mpu, "Enable MPU401.  (0 = off, 1 = on, 2 = auto)");
 159#ifdef SUPPORT_JOYSTICK
 160module_param_array(joystick, bool, NULL, 0444);
 161MODULE_PARM_DESC(joystick, "Enable joystick.");
 162#endif
 163
 164
 165#define NR_APUS                 64
 166#define NR_APU_REGS             16
 167
 168/* NEC Versas ? */
 169#define NEC_VERSA_SUBID1        0x80581033
 170#define NEC_VERSA_SUBID2        0x803c1033
 171
 172/* Mode Flags */
 173#define ESS_FMT_STEREO          0x01
 174#define ESS_FMT_16BIT           0x02
 175
 176#define DAC_RUNNING             1
 177#define ADC_RUNNING             2
 178
 179/* Values for the ESM_LEGACY_AUDIO_CONTROL */
 180
 181#define ESS_DISABLE_AUDIO       0x8000
 182#define ESS_ENABLE_SERIAL_IRQ   0x4000
 183#define IO_ADRESS_ALIAS         0x0020
 184#define MPU401_IRQ_ENABLE       0x0010
 185#define MPU401_IO_ENABLE        0x0008
 186#define GAME_IO_ENABLE          0x0004
 187#define FM_IO_ENABLE            0x0002
 188#define SB_IO_ENABLE            0x0001
 189
 190/* Values for the ESM_CONFIG_A */
 191
 192#define PIC_SNOOP1              0x4000
 193#define PIC_SNOOP2              0x2000
 194#define SAFEGUARD               0x0800
 195#define DMA_CLEAR               0x0700
 196#define DMA_DDMA                0x0000
 197#define DMA_TDMA                0x0100
 198#define DMA_PCPCI               0x0200
 199#define POST_WRITE              0x0080
 200#define PCI_TIMING              0x0040
 201#define SWAP_LR                 0x0020
 202#define SUBTR_DECODE            0x0002
 203
 204/* Values for the ESM_CONFIG_B */
 205
 206#define SPDIF_CONFB             0x0100
 207#define HWV_CONFB               0x0080
 208#define DEBOUNCE                0x0040
 209#define GPIO_CONFB              0x0020
 210#define CHI_CONFB               0x0010
 211#define IDMA_CONFB              0x0008  /*undoc */
 212#define MIDI_FIX                0x0004  /*undoc */
 213#define IRQ_TO_ISA              0x0001  /*undoc */
 214
 215/* Values for Ring Bus Control B */
 216#define RINGB_2CODEC_ID_MASK    0x0003
 217#define RINGB_DIS_VALIDATION    0x0008
 218#define RINGB_EN_SPDIF          0x0010
 219#define RINGB_EN_2CODEC         0x0020
 220#define RINGB_SING_BIT_DUAL     0x0040
 221
 222/* ****Port Adresses**** */
 223
 224/*   Write & Read */
 225#define ESM_INDEX               0x02
 226#define ESM_DATA                0x00
 227
 228/*   AC97 + RingBus */
 229#define ESM_AC97_INDEX          0x30
 230#define ESM_AC97_DATA           0x32
 231#define ESM_RING_BUS_DEST       0x34
 232#define ESM_RING_BUS_CONTR_A    0x36
 233#define ESM_RING_BUS_CONTR_B    0x38
 234#define ESM_RING_BUS_SDO        0x3A
 235
 236/*   WaveCache*/
 237#define WC_INDEX                0x10
 238#define WC_DATA                 0x12
 239#define WC_CONTROL              0x14
 240
 241/*   ASSP*/
 242#define ASSP_INDEX              0x80
 243#define ASSP_MEMORY             0x82
 244#define ASSP_DATA               0x84
 245#define ASSP_CONTROL_A          0xA2
 246#define ASSP_CONTROL_B          0xA4
 247#define ASSP_CONTROL_C          0xA6
 248#define ASSP_HOSTW_INDEX        0xA8
 249#define ASSP_HOSTW_DATA         0xAA
 250#define ASSP_HOSTW_IRQ          0xAC
 251/* Midi */
 252#define ESM_MPU401_PORT         0x98
 253/* Others */
 254#define ESM_PORT_HOST_IRQ       0x18
 255
 256#define IDR0_DATA_PORT          0x00
 257#define IDR1_CRAM_POINTER       0x01
 258#define IDR2_CRAM_DATA          0x02
 259#define IDR3_WAVE_DATA          0x03
 260#define IDR4_WAVE_PTR_LOW       0x04
 261#define IDR5_WAVE_PTR_HI        0x05
 262#define IDR6_TIMER_CTRL         0x06
 263#define IDR7_WAVE_ROMRAM        0x07
 264
 265#define WRITEABLE_MAP           0xEFFFFF
 266#define READABLE_MAP            0x64003F
 267
 268/* PCI Register */
 269
 270#define ESM_LEGACY_AUDIO_CONTROL 0x40
 271#define ESM_ACPI_COMMAND        0x54
 272#define ESM_CONFIG_A            0x50
 273#define ESM_CONFIG_B            0x52
 274#define ESM_DDMA                0x60
 275
 276/* Bob Bits */
 277#define ESM_BOB_ENABLE          0x0001
 278#define ESM_BOB_START           0x0001
 279
 280/* Host IRQ Control Bits */
 281#define ESM_RESET_MAESTRO       0x8000
 282#define ESM_RESET_DIRECTSOUND   0x4000
 283#define ESM_HIRQ_ClkRun         0x0100
 284#define ESM_HIRQ_HW_VOLUME      0x0040
 285#define ESM_HIRQ_HARPO          0x0030  /* What's that? */
 286#define ESM_HIRQ_ASSP           0x0010
 287#define ESM_HIRQ_DSIE           0x0004
 288#define ESM_HIRQ_MPU401         0x0002
 289#define ESM_HIRQ_SB             0x0001
 290
 291/* Host IRQ Status Bits */
 292#define ESM_MPU401_IRQ          0x02
 293#define ESM_SB_IRQ              0x01
 294#define ESM_SOUND_IRQ           0x04
 295#define ESM_ASSP_IRQ            0x10
 296#define ESM_HWVOL_IRQ           0x40
 297
 298#define ESS_SYSCLK              50000000
 299#define ESM_BOB_FREQ            200
 300#define ESM_BOB_FREQ_MAX        800
 301
 302#define ESM_FREQ_ESM1           (49152000L / 1024L)     /* default rate 48000 */
 303#define ESM_FREQ_ESM2           (50000000L / 1024L)
 304
 305/* APU Modes: reg 0x00, bit 4-7 */
 306#define ESM_APU_MODE_SHIFT      4
 307#define ESM_APU_MODE_MASK       (0xf << 4)
 308#define ESM_APU_OFF             0x00
 309#define ESM_APU_16BITLINEAR     0x01    /* 16-Bit Linear Sample Player */
 310#define ESM_APU_16BITSTEREO     0x02    /* 16-Bit Stereo Sample Player */
 311#define ESM_APU_8BITLINEAR      0x03    /* 8-Bit Linear Sample Player */
 312#define ESM_APU_8BITSTEREO      0x04    /* 8-Bit Stereo Sample Player */
 313#define ESM_APU_8BITDIFF        0x05    /* 8-Bit Differential Sample Playrer */
 314#define ESM_APU_DIGITALDELAY    0x06    /* Digital Delay Line */
 315#define ESM_APU_DUALTAP         0x07    /* Dual Tap Reader */
 316#define ESM_APU_CORRELATOR      0x08    /* Correlator */
 317#define ESM_APU_INPUTMIXER      0x09    /* Input Mixer */
 318#define ESM_APU_WAVETABLE       0x0A    /* Wave Table Mode */
 319#define ESM_APU_SRCONVERTOR     0x0B    /* Sample Rate Convertor */
 320#define ESM_APU_16BITPINGPONG   0x0C    /* 16-Bit Ping-Pong Sample Player */
 321#define ESM_APU_RESERVED1       0x0D    /* Reserved 1 */
 322#define ESM_APU_RESERVED2       0x0E    /* Reserved 2 */
 323#define ESM_APU_RESERVED3       0x0F    /* Reserved 3 */
 324
 325/* reg 0x00 */
 326#define ESM_APU_FILTER_Q_SHIFT          0
 327#define ESM_APU_FILTER_Q_MASK           (3 << 0)
 328/* APU Filtey Q Control */
 329#define ESM_APU_FILTER_LESSQ    0x00
 330#define ESM_APU_FILTER_MOREQ    0x03
 331
 332#define ESM_APU_FILTER_TYPE_SHIFT       2
 333#define ESM_APU_FILTER_TYPE_MASK        (3 << 2)
 334#define ESM_APU_ENV_TYPE_SHIFT          8
 335#define ESM_APU_ENV_TYPE_MASK           (3 << 8)
 336#define ESM_APU_ENV_STATE_SHIFT         10
 337#define ESM_APU_ENV_STATE_MASK          (3 << 10)
 338#define ESM_APU_END_CURVE               (1 << 12)
 339#define ESM_APU_INT_ON_LOOP             (1 << 13)
 340#define ESM_APU_DMA_ENABLE              (1 << 14)
 341
 342/* reg 0x02 */
 343#define ESM_APU_SUBMIX_GROUP_SHIRT      0
 344#define ESM_APU_SUBMIX_GROUP_MASK       (7 << 0)
 345#define ESM_APU_SUBMIX_MODE             (1 << 3)
 346#define ESM_APU_6dB                     (1 << 4)
 347#define ESM_APU_DUAL_EFFECT             (1 << 5)
 348#define ESM_APU_EFFECT_CHANNELS_SHIFT   6
 349#define ESM_APU_EFFECT_CHANNELS_MASK    (3 << 6)
 350
 351/* reg 0x03 */
 352#define ESM_APU_STEP_SIZE_MASK          0x0fff
 353
 354/* reg 0x04 */
 355#define ESM_APU_PHASE_SHIFT             0
 356#define ESM_APU_PHASE_MASK              (0xff << 0)
 357#define ESM_APU_WAVE64K_PAGE_SHIFT      8       /* most 8bit of wave start offset */
 358#define ESM_APU_WAVE64K_PAGE_MASK       (0xff << 8)
 359
 360/* reg 0x05 - wave start offset */
 361/* reg 0x06 - wave end offset */
 362/* reg 0x07 - wave loop length */
 363
 364/* reg 0x08 */
 365#define ESM_APU_EFFECT_GAIN_SHIFT       0
 366#define ESM_APU_EFFECT_GAIN_MASK        (0xff << 0)
 367#define ESM_APU_TREMOLO_DEPTH_SHIFT     8
 368#define ESM_APU_TREMOLO_DEPTH_MASK      (0xf << 8)
 369#define ESM_APU_TREMOLO_RATE_SHIFT      12
 370#define ESM_APU_TREMOLO_RATE_MASK       (0xf << 12)
 371
 372/* reg 0x09 */
 373/* bit 0-7 amplitude dest? */
 374#define ESM_APU_AMPLITUDE_NOW_SHIFT     8
 375#define ESM_APU_AMPLITUDE_NOW_MASK      (0xff << 8)
 376
 377/* reg 0x0a */
 378#define ESM_APU_POLAR_PAN_SHIFT         0
 379#define ESM_APU_POLAR_PAN_MASK          (0x3f << 0)
 380/* Polar Pan Control */
 381#define ESM_APU_PAN_CENTER_CIRCLE               0x00
 382#define ESM_APU_PAN_MIDDLE_RADIUS               0x01
 383#define ESM_APU_PAN_OUTSIDE_RADIUS              0x02
 384
 385#define ESM_APU_FILTER_TUNING_SHIFT     8
 386#define ESM_APU_FILTER_TUNING_MASK      (0xff << 8)
 387
 388/* reg 0x0b */
 389#define ESM_APU_DATA_SRC_A_SHIFT        0
 390#define ESM_APU_DATA_SRC_A_MASK         (0x7f << 0)
 391#define ESM_APU_INV_POL_A               (1 << 7)
 392#define ESM_APU_DATA_SRC_B_SHIFT        8
 393#define ESM_APU_DATA_SRC_B_MASK         (0x7f << 8)
 394#define ESM_APU_INV_POL_B               (1 << 15)
 395
 396#define ESM_APU_VIBRATO_RATE_SHIFT      0
 397#define ESM_APU_VIBRATO_RATE_MASK       (0xf << 0)
 398#define ESM_APU_VIBRATO_DEPTH_SHIFT     4
 399#define ESM_APU_VIBRATO_DEPTH_MASK      (0xf << 4)
 400#define ESM_APU_VIBRATO_PHASE_SHIFT     8
 401#define ESM_APU_VIBRATO_PHASE_MASK      (0xff << 8)
 402
 403/* reg 0x0c */
 404#define ESM_APU_RADIUS_SELECT           (1 << 6)
 405
 406/* APU Filter Control */
 407#define ESM_APU_FILTER_2POLE_LOPASS     0x00
 408#define ESM_APU_FILTER_2POLE_BANDPASS   0x01
 409#define ESM_APU_FILTER_2POLE_HIPASS     0x02
 410#define ESM_APU_FILTER_1POLE_LOPASS     0x03
 411#define ESM_APU_FILTER_1POLE_HIPASS     0x04
 412#define ESM_APU_FILTER_OFF              0x05
 413
 414/* APU ATFP Type */
 415#define ESM_APU_ATFP_AMPLITUDE                  0x00
 416#define ESM_APU_ATFP_TREMELO                    0x01
 417#define ESM_APU_ATFP_FILTER                     0x02
 418#define ESM_APU_ATFP_PAN                        0x03
 419
 420/* APU ATFP Flags */
 421#define ESM_APU_ATFP_FLG_OFF                    0x00
 422#define ESM_APU_ATFP_FLG_WAIT                   0x01
 423#define ESM_APU_ATFP_FLG_DONE                   0x02
 424#define ESM_APU_ATFP_FLG_INPROCESS              0x03
 425
 426
 427/* capture mixing buffer size */
 428#define ESM_MEM_ALIGN           0x1000
 429#define ESM_MIXBUF_SIZE         0x400
 430
 431#define ESM_MODE_PLAY           0
 432#define ESM_MODE_CAPTURE        1
 433
 434
 435/* APU use in the driver */
 436enum snd_enum_apu_type {
 437        ESM_APU_PCM_PLAY,
 438        ESM_APU_PCM_CAPTURE,
 439        ESM_APU_PCM_RATECONV,
 440        ESM_APU_FREE
 441};
 442
 443/* chip type */
 444enum {
 445        TYPE_MAESTRO, TYPE_MAESTRO2, TYPE_MAESTRO2E
 446};
 447
 448/* DMA Hack! */
 449struct esm_memory {
 450        struct snd_dma_buffer buf;
 451        int empty;      /* status */
 452        struct list_head list;
 453};
 454
 455/* Playback Channel */
 456struct esschan {
 457        int running;
 458
 459        u8 apu[4];
 460        u8 apu_mode[4];
 461
 462        /* playback/capture pcm buffer */
 463        struct esm_memory *memory;
 464        /* capture mixer buffer */
 465        struct esm_memory *mixbuf;
 466
 467        unsigned int hwptr;     /* current hw pointer in bytes */
 468        unsigned int count;     /* sample counter in bytes */
 469        unsigned int dma_size;  /* total buffer size in bytes */
 470        unsigned int frag_size; /* period size in bytes */
 471        unsigned int wav_shift;
 472        u16 base[4];            /* offset for ptr */
 473
 474        /* stereo/16bit flag */
 475        unsigned char fmt;
 476        int mode;       /* playback / capture */
 477
 478        int bob_freq;   /* required timer frequency */
 479
 480        struct snd_pcm_substream *substream;
 481
 482        /* linked list */
 483        struct list_head list;
 484
 485#ifdef CONFIG_PM
 486        u16 wc_map[4];
 487#endif
 488};
 489
 490struct es1968 {
 491        /* Module Config */
 492        int total_bufsize;                      /* in bytes */
 493
 494        int playback_streams, capture_streams;
 495
 496        unsigned int clock;             /* clock */
 497        /* for clock measurement */
 498        unsigned int in_measurement: 1;
 499        unsigned int measure_apu;
 500        unsigned int measure_lastpos;
 501        unsigned int measure_count;
 502
 503        /* buffer */
 504        struct snd_dma_buffer dma;
 505
 506        /* Resources... */
 507        int irq;
 508        unsigned long io_port;
 509        int type;
 510        struct pci_dev *pci;
 511        struct snd_card *card;
 512        struct snd_pcm *pcm;
 513        int do_pm;              /* power-management enabled */
 514
 515        /* DMA memory block */
 516        struct list_head buf_list;
 517
 518        /* ALSA Stuff */
 519        struct snd_ac97 *ac97;
 520        struct snd_kcontrol *master_switch; /* for h/w volume control */
 521        struct snd_kcontrol *master_volume;
 522
 523        struct snd_rawmidi *rmidi;
 524
 525        spinlock_t reg_lock;
 526        spinlock_t ac97_lock;
 527        struct tasklet_struct hwvol_tq;
 528        unsigned int in_suspend;
 529
 530        /* Maestro Stuff */
 531        u16 maestro_map[32];
 532        int bobclient;          /* active timer instancs */
 533        int bob_freq;           /* timer frequency */
 534        struct mutex memory_mutex;      /* memory lock */
 535
 536        /* APU states */
 537        unsigned char apu[NR_APUS];
 538
 539        /* active substreams */
 540        struct list_head substream_list;
 541        spinlock_t substream_lock;
 542
 543#ifdef CONFIG_PM
 544        u16 apu_map[NR_APUS][NR_APU_REGS];
 545#endif
 546
 547#ifdef SUPPORT_JOYSTICK
 548        struct gameport *gameport;
 549#endif
 550};
 551
 552static irqreturn_t snd_es1968_interrupt(int irq, void *dev_id);
 553
 554static struct pci_device_id snd_es1968_ids[] = {
 555        /* Maestro 1 */
 556        { 0x1285, 0x0100, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_MULTIMEDIA_AUDIO << 8, 0xffff00, TYPE_MAESTRO },
 557        /* Maestro 2 */
 558        { 0x125d, 0x1968, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_MULTIMEDIA_AUDIO << 8, 0xffff00, TYPE_MAESTRO2 },
 559        /* Maestro 2E */
 560        { 0x125d, 0x1978, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_MULTIMEDIA_AUDIO << 8, 0xffff00, TYPE_MAESTRO2E },
 561        { 0, }
 562};
 563
 564MODULE_DEVICE_TABLE(pci, snd_es1968_ids);
 565
 566/* *********************
 567   * Low Level Funcs!  *
 568   *********************/
 569
 570/* no spinlock */
 571static void __maestro_write(struct es1968 *chip, u16 reg, u16 data)
 572{
 573        outw(reg, chip->io_port + ESM_INDEX);
 574        outw(data, chip->io_port + ESM_DATA);
 575        chip->maestro_map[reg] = data;
 576}
 577
 578static inline void maestro_write(struct es1968 *chip, u16 reg, u16 data)
 579{
 580        unsigned long flags;
 581        spin_lock_irqsave(&chip->reg_lock, flags);
 582        __maestro_write(chip, reg, data);
 583        spin_unlock_irqrestore(&chip->reg_lock, flags);
 584}
 585
 586/* no spinlock */
 587static u16 __maestro_read(struct es1968 *chip, u16 reg)
 588{
 589        if (READABLE_MAP & (1 << reg)) {
 590                outw(reg, chip->io_port + ESM_INDEX);
 591                chip->maestro_map[reg] = inw(chip->io_port + ESM_DATA);
 592        }
 593        return chip->maestro_map[reg];
 594}
 595
 596static inline u16 maestro_read(struct es1968 *chip, u16 reg)
 597{
 598        unsigned long flags;
 599        u16 result;
 600        spin_lock_irqsave(&chip->reg_lock, flags);
 601        result = __maestro_read(chip, reg);
 602        spin_unlock_irqrestore(&chip->reg_lock, flags);
 603        return result;
 604}
 605
 606/* Wait for the codec bus to be free */
 607static int snd_es1968_ac97_wait(struct es1968 *chip)
 608{
 609        int timeout = 100000;
 610
 611        while (timeout-- > 0) {
 612                if (!(inb(chip->io_port + ESM_AC97_INDEX) & 1))
 613                        return 0;
 614                cond_resched();
 615        }
 616        snd_printd("es1968: ac97 timeout\n");
 617        return 1; /* timeout */
 618}
 619
 620static int snd_es1968_ac97_wait_poll(struct es1968 *chip)
 621{
 622        int timeout = 100000;
 623
 624        while (timeout-- > 0) {
 625                if (!(inb(chip->io_port + ESM_AC97_INDEX) & 1))
 626                        return 0;
 627        }
 628        snd_printd("es1968: ac97 timeout\n");
 629        return 1; /* timeout */
 630}
 631
 632static void snd_es1968_ac97_write(struct snd_ac97 *ac97, unsigned short reg, unsigned short val)
 633{
 634        struct es1968 *chip = ac97->private_data;
 635        unsigned long flags;
 636
 637        snd_es1968_ac97_wait(chip);
 638
 639        /* Write the bus */
 640        spin_lock_irqsave(&chip->ac97_lock, flags);
 641        outw(val, chip->io_port + ESM_AC97_DATA);
 642        /*msleep(1);*/
 643        outb(reg, chip->io_port + ESM_AC97_INDEX);
 644        /*msleep(1);*/
 645        spin_unlock_irqrestore(&chip->ac97_lock, flags);
 646}
 647
 648static unsigned short snd_es1968_ac97_read(struct snd_ac97 *ac97, unsigned short reg)
 649{
 650        u16 data = 0;
 651        struct es1968 *chip = ac97->private_data;
 652        unsigned long flags;
 653
 654        snd_es1968_ac97_wait(chip);
 655
 656        spin_lock_irqsave(&chip->ac97_lock, flags);
 657        outb(reg | 0x80, chip->io_port + ESM_AC97_INDEX);
 658        /*msleep(1);*/
 659
 660        if (!snd_es1968_ac97_wait_poll(chip)) {
 661                data = inw(chip->io_port + ESM_AC97_DATA);
 662                /*msleep(1);*/
 663        }
 664        spin_unlock_irqrestore(&chip->ac97_lock, flags);
 665
 666        return data;
 667}
 668
 669/* no spinlock */
 670static void apu_index_set(struct es1968 *chip, u16 index)
 671{
 672        int i;
 673        __maestro_write(chip, IDR1_CRAM_POINTER, index);
 674        for (i = 0; i < 1000; i++)
 675                if (__maestro_read(chip, IDR1_CRAM_POINTER) == index)
 676                        return;
 677        snd_printd("es1968: APU register select failed. (Timeout)\n");
 678}
 679
 680/* no spinlock */
 681static void apu_data_set(struct es1968 *chip, u16 data)
 682{
 683        int i;
 684        for (i = 0; i < 1000; i++) {
 685                if (__maestro_read(chip, IDR0_DATA_PORT) == data)
 686                        return;
 687                __maestro_write(chip, IDR0_DATA_PORT, data);
 688        }
 689        snd_printd("es1968: APU register set probably failed (Timeout)!\n");
 690}
 691
 692/* no spinlock */
 693static void __apu_set_register(struct es1968 *chip, u16 channel, u8 reg, u16 data)
 694{
 695        snd_assert(channel < NR_APUS, return);
 696#ifdef CONFIG_PM
 697        chip->apu_map[channel][reg] = data;
 698#endif
 699        reg |= (channel << 4);
 700        apu_index_set(chip, reg);
 701        apu_data_set(chip, data);
 702}
 703
 704static void apu_set_register(struct es1968 *chip, u16 channel, u8 reg, u16 data)
 705{
 706        unsigned long flags;
 707        spin_lock_irqsave(&chip->reg_lock, flags);
 708        __apu_set_register(chip, channel, reg, data);
 709        spin_unlock_irqrestore(&chip->reg_lock, flags);
 710}
 711
 712static u16 __apu_get_register(struct es1968 *chip, u16 channel, u8 reg)
 713{
 714        snd_assert(channel < NR_APUS, return 0);
 715        reg |= (channel << 4);
 716        apu_index_set(chip, reg);
 717        return __maestro_read(chip, IDR0_DATA_PORT);
 718}
 719
 720static u16 apu_get_register(struct es1968 *chip, u16 channel, u8 reg)
 721{
 722        unsigned long flags;
 723        u16 v;
 724        spin_lock_irqsave(&chip->reg_lock, flags);
 725        v = __apu_get_register(chip, channel, reg);
 726        spin_unlock_irqrestore(&chip->reg_lock, flags);
 727        return v;
 728}
 729
 730#if 0 /* ASSP is not supported */
 731
 732static void assp_set_register(struct es1968 *chip, u32 reg, u32 value)
 733{
 734        unsigned long flags;
 735
 736        spin_lock_irqsave(&chip->reg_lock, flags);
 737        outl(reg, chip->io_port + ASSP_INDEX);
 738        outl(value, chip->io_port + ASSP_DATA);
 739        spin_unlock_irqrestore(&chip->reg_lock, flags);
 740}
 741
 742static u32 assp_get_register(struct es1968 *chip, u32 reg)
 743{
 744        unsigned long flags;
 745        u32 value;
 746
 747        spin_lock_irqsave(&chip->reg_lock, flags);
 748        outl(reg, chip->io_port + ASSP_INDEX);
 749        value = inl(chip->io_port + ASSP_DATA);
 750        spin_unlock_irqrestore(&chip->reg_lock, flags);
 751
 752        return value;
 753}
 754
 755#endif
 756
 757static void wave_set_register(struct es1968 *chip, u16 reg, u16 value)
 758{
 759        unsigned long flags;
 760
 761        spin_lock_irqsave(&chip->reg_lock, flags);
 762        outw(reg, chip->io_port + WC_INDEX);
 763        outw(value, chip->io_port + WC_DATA);
 764        spin_unlock_irqrestore(&chip->reg_lock, flags);
 765}
 766
 767static u16 wave_get_register(struct es1968 *chip, u16 reg)
 768{
 769        unsigned long flags;
 770        u16 value;
 771
 772        spin_lock_irqsave(&chip->reg_lock, flags);
 773        outw(reg, chip->io_port + WC_INDEX);
 774        value = inw(chip->io_port + WC_DATA);
 775        spin_unlock_irqrestore(&chip->reg_lock, flags);
 776
 777        return value;
 778}
 779
 780/* *******************
 781   * Bob the Timer!  *
 782   *******************/
 783
 784static void snd_es1968_bob_stop(struct es1968 *chip)
 785{
 786        u16 reg;
 787
 788        reg = __maestro_read(chip, 0x11);
 789        reg &= ~ESM_BOB_ENABLE;
 790        __maestro_write(chip, 0x11, reg);
 791        reg = __maestro_read(chip, 0x17);
 792        reg &= ~ESM_BOB_START;
 793        __maestro_write(chip, 0x17, reg);
 794}
 795
 796static void snd_es1968_bob_start(struct es1968 *chip)
 797{
 798        int prescale;
 799        int divide;
 800
 801        /* compute ideal interrupt frequency for buffer size & play rate */
 802        /* first, find best prescaler value to match freq */
 803        for (prescale = 5; prescale < 12; prescale++)
 804                if (chip->bob_freq > (ESS_SYSCLK >> (prescale + 9)))
 805                        break;
 806
 807        /* next, back off prescaler whilst getting divider into optimum range */
 808        divide = 1;
 809        while ((prescale > 5) && (divide < 32)) {
 810                prescale--;
 811                divide <<= 1;
 812        }
 813        divide >>= 1;
 814
 815        /* now fine-tune the divider for best match */
 816        for (; divide < 31; divide++)
 817                if (chip->bob_freq >
 818                    ((ESS_SYSCLK >> (prescale + 9)) / (divide + 1))) break;
 819
 820        /* divide = 0 is illegal, but don't let prescale = 4! */
 821        if (divide == 0) {
 822                divide++;
 823                if (prescale > 5)
 824                        prescale--;
 825        } else if (divide > 1)
 826                divide--;
 827
 828        __maestro_write(chip, 6, 0x9000 | (prescale << 5) | divide);    /* set reg */
 829
 830        /* Now set IDR 11/17 */
 831        __maestro_write(chip, 0x11, __maestro_read(chip, 0x11) | 1);
 832        __maestro_write(chip, 0x17, __maestro_read(chip, 0x17) | 1);
 833}
 834
 835/* call with substream spinlock */
 836static void snd_es1968_bob_inc(struct es1968 *chip, int freq)
 837{
 838        chip->bobclient++;
 839        if (chip->bobclient == 1) {
 840                chip->bob_freq = freq;
 841                snd_es1968_bob_start(chip);
 842        } else if (chip->bob_freq < freq) {
 843                snd_es1968_bob_stop(chip);
 844                chip->bob_freq = freq;
 845                snd_es1968_bob_start(chip);
 846        }
 847}
 848
 849/* call with substream spinlock */
 850static void snd_es1968_bob_dec(struct es1968 *chip)
 851{
 852        chip->bobclient--;
 853        if (chip->bobclient <= 0)
 854                snd_es1968_bob_stop(chip);
 855        else if (chip->bob_freq > ESM_BOB_FREQ) {
 856                /* check reduction of timer frequency */
 857                int max_freq = ESM_BOB_FREQ;
 858                struct esschan *es;
 859                list_for_each_entry(es, &chip->substream_list, list) {
 860                        if (max_freq < es->bob_freq)
 861                                max_freq = es->bob_freq;
 862                }
 863                if (max_freq != chip->bob_freq) {
 864                        snd_es1968_bob_stop(chip);
 865                        chip->bob_freq = max_freq;
 866                        snd_es1968_bob_start(chip);
 867                }
 868        }
 869}
 870
 871static int
 872snd_es1968_calc_bob_rate(struct es1968 *chip, struct esschan *es,
 873                         struct snd_pcm_runtime *runtime)
 874{
 875        /* we acquire 4 interrupts per period for precise control.. */
 876        int freq = runtime->rate * 4;
 877        if (es->fmt & ESS_FMT_STEREO)
 878                freq <<= 1;
 879        if (es->fmt & ESS_FMT_16BIT)
 880                freq <<= 1;
 881        freq /= es->frag_size;
 882        if (freq < ESM_BOB_FREQ)
 883                freq = ESM_BOB_FREQ;
 884        else if (freq > ESM_BOB_FREQ_MAX)
 885                freq = ESM_BOB_FREQ_MAX;
 886        return freq;
 887}
 888
 889
 890/*************
 891 *  PCM Part *
 892 *************/
 893
 894static u32 snd_es1968_compute_rate(struct es1968 *chip, u32 freq)
 895{
 896        u32 rate = (freq << 16) / chip->clock;
 897#if 0 /* XXX: do we need this? */ 
 898        if (rate > 0x10000)
 899                rate = 0x10000;
 900#endif
 901        return rate;
 902}
 903
 904/* get current pointer */
 905static inline unsigned int
 906snd_es1968_get_dma_ptr(struct es1968 *chip, struct esschan *es)
 907{
 908        unsigned int offset;
 909
 910        offset = apu_get_register(chip, es->apu[0], 5);
 911
 912        offset -= es->base[0];
 913
 914        return (offset & 0xFFFE);       /* hardware is in words */
 915}
 916
 917static void snd_es1968_apu_set_freq(struct es1968 *chip, int apu, int freq)
 918{
 919        apu_set_register(chip, apu, 2,
 920                           (apu_get_register(chip, apu, 2) & 0x00FF) |
 921                           ((freq & 0xff) << 8) | 0x10);
 922        apu_set_register(chip, apu, 3, freq >> 8);
 923}
 924
 925/* spin lock held */
 926static inline void snd_es1968_trigger_apu(struct es1968 *esm, int apu, int mode)
 927{
 928        /* set the APU mode */
 929        __apu_set_register(esm, apu, 0,
 930                           (__apu_get_register(esm, apu, 0) & 0xff0f) |
 931                           (mode << 4));
 932}
 933
 934static void snd_es1968_pcm_start(struct es1968 *chip, struct esschan *es)
 935{
 936        spin_lock(&chip->reg_lock);
 937        __apu_set_register(chip, es->apu[0], 5, es->base[0]);
 938        snd_es1968_trigger_apu(chip, es->apu[0], es->apu_mode[0]);
 939        if (es->mode == ESM_MODE_CAPTURE) {
 940                __apu_set_register(chip, es->apu[2], 5, es->base[2]);
 941                snd_es1968_trigger_apu(chip, es->apu[2], es->apu_mode[2]);
 942        }
 943        if (es->fmt & ESS_FMT_STEREO) {
 944                __apu_set_register(chip, es->apu[1], 5, es->base[1]);
 945                snd_es1968_trigger_apu(chip, es->apu[1], es->apu_mode[1]);
 946                if (es->mode == ESM_MODE_CAPTURE) {
 947                        __apu_set_register(chip, es->apu[3], 5, es->base[3]);
 948                        snd_es1968_trigger_apu(chip, es->apu[3], es->apu_mode[3]);
 949                }
 950        }
 951        spin_unlock(&chip->reg_lock);
 952}
 953
 954static void snd_es1968_pcm_stop(struct es1968 *chip, struct esschan *es)
 955{
 956        spin_lock(&chip->reg_lock);
 957        snd_es1968_trigger_apu(chip, es->apu[0], 0);
 958        snd_es1968_trigger_apu(chip, es->apu[1], 0);
 959        if (es->mode == ESM_MODE_CAPTURE) {
 960                snd_es1968_trigger_apu(chip, es->apu[2], 0);
 961                snd_es1968_trigger_apu(chip, es->apu[3], 0);
 962        }
 963        spin_unlock(&chip->reg_lock);
 964}
 965
 966/* set the wavecache control reg */
 967static void snd_es1968_program_wavecache(struct es1968 *chip, struct esschan *es,
 968                                         int channel, u32 addr, int capture)
 969{
 970        u32 tmpval = (addr - 0x10) & 0xFFF8;
 971
 972        if (! capture) {
 973                if (!(es->fmt & ESS_FMT_16BIT))
 974                        tmpval |= 4;    /* 8bit */
 975                if (es->fmt & ESS_FMT_STEREO)
 976                        tmpval |= 2;    /* stereo */
 977        }
 978
 979        /* set the wavecache control reg */
 980        wave_set_register(chip, es->apu[channel] << 3, tmpval);
 981
 982#ifdef CONFIG_PM
 983        es->wc_map[channel] = tmpval;
 984#endif
 985}
 986
 987
 988static void snd_es1968_playback_setup(struct es1968 *chip, struct esschan *es,
 989                                      struct snd_pcm_runtime *runtime)
 990{
 991        u32 pa;
 992        int high_apu = 0;
 993        int channel, apu;
 994        int i, size;
 995        unsigned long flags;
 996        u32 freq;
 997
 998        size = es->dma_size >> es->wav_shift;
 999
1000        if (es->fmt & ESS_FMT_STEREO)
1001                high_apu++;
1002
1003        for (channel = 0; channel <= high_apu; channel++) {
1004                apu = es->apu[channel];
1005
1006                snd_es1968_program_wavecache(chip, es, channel, es->memory->buf.addr, 0);
1007
1008                /* Offset to PCMBAR */
1009                pa = es->memory->buf.addr;
1010                pa -= chip->dma.addr;
1011                pa >>= 1;       /* words */
1012
1013                pa |= 0x00400000;       /* System RAM (Bit 22) */
1014
1015                if (es->fmt & ESS_FMT_STEREO) {
1016                        /* Enable stereo */
1017                        if (channel)
1018                                pa |= 0x00800000;       /* (Bit 23) */
1019                        if (es->fmt & ESS_FMT_16BIT)
1020                                pa >>= 1;
1021                }
1022
1023                /* base offset of dma calcs when reading the pointer
1024                   on this left one */
1025                es->base[channel] = pa & 0xFFFF;
1026
1027                for (i = 0; i < 16; i++)
1028                        apu_set_register(chip, apu, i, 0x0000);
1029
1030                /* Load the buffer into the wave engine */
1031                apu_set_register(chip, apu, 4, ((pa >> 16) & 0xFF) << 8);
1032                apu_set_register(chip, apu, 5, pa & 0xFFFF);
1033                apu_set_register(chip, apu, 6, (pa + size) & 0xFFFF);
1034                /* setting loop == sample len */
1035                apu_set_register(chip, apu, 7, size);
1036
1037                /* clear effects/env.. */
1038                apu_set_register(chip, apu, 8, 0x0000);
1039                /* set amp now to 0xd0 (?), low byte is 'amplitude dest'? */
1040                apu_set_register(chip, apu, 9, 0xD000);
1041
1042                /* clear routing stuff */
1043                apu_set_register(chip, apu, 11, 0x0000);
1044                /* dma on, no envelopes, filter to all 1s) */
1045                apu_set_register(chip, apu, 0, 0x400F);
1046
1047                if (es->fmt & ESS_FMT_16BIT)
1048                        es->apu_mode[channel] = ESM_APU_16BITLINEAR;
1049                else
1050                        es->apu_mode[channel] = ESM_APU_8BITLINEAR;
1051
1052                if (es->fmt & ESS_FMT_STEREO) {
1053                        /* set panning: left or right */
1054                        /* Check: different panning. On my Canyon 3D Chipset the
1055                           Channels are swapped. I don't know, about the output
1056                           to the SPDif Link. Perhaps you have to change this
1057                           and not the APU Regs 4-5. */
1058                        apu_set_register(chip, apu, 10,
1059                                         0x8F00 | (channel ? 0 : 0x10));
1060                        es->apu_mode[channel] += 1;     /* stereo */
1061                } else
1062                        apu_set_register(chip, apu, 10, 0x8F08);
1063        }
1064
1065        spin_lock_irqsave(&chip->reg_lock, flags);
1066        /* clear WP interrupts */
1067        outw(1, chip->io_port + 0x04);
1068        /* enable WP ints */
1069        outw(inw(chip->io_port + ESM_PORT_HOST_IRQ) | ESM_HIRQ_DSIE, chip->io_port + ESM_PORT_HOST_IRQ);
1070        spin_unlock_irqrestore(&chip->reg_lock, flags);
1071
1072        freq = runtime->rate;
1073        /* set frequency */
1074        if (freq > 48000)
1075                freq = 48000;
1076        if (freq < 4000)
1077                freq = 4000;
1078
1079        /* hmmm.. */
1080        if (!(es->fmt & ESS_FMT_16BIT) && !(es->fmt & ESS_FMT_STEREO))
1081                freq >>= 1;
1082
1083        freq = snd_es1968_compute_rate(chip, freq);
1084
1085        /* Load the frequency, turn on 6dB */
1086        snd_es1968_apu_set_freq(chip, es->apu[0], freq);
1087        snd_es1968_apu_set_freq(chip, es->apu[1], freq);
1088}
1089
1090
1091static void init_capture_apu(struct es1968 *chip, struct esschan *es, int channel,
1092                             unsigned int pa, unsigned int bsize,
1093                             int mode, int route)
1094{
1095        int i, apu = es->apu[channel];
1096
1097        es->apu_mode[channel] = mode;
1098
1099        /* set the wavecache control reg */
1100        snd_es1968_program_wavecache(chip, es, channel, pa, 1);
1101
1102        /* Offset to PCMBAR */
1103        pa -= chip->dma.addr;
1104        pa >>= 1;       /* words */
1105
1106        /* base offset of dma calcs when reading the pointer
1107           on this left one */
1108        es->base[channel] = pa & 0xFFFF;
1109        pa |= 0x00400000;       /* bit 22 -> System RAM */
1110
1111        /* Begin loading the APU */
1112        for (i = 0; i < 16; i++)
1113                apu_set_register(chip, apu, i, 0x0000);
1114
1115        /* need to enable subgroups.. and we should probably
1116           have different groups for different /dev/dsps..  */
1117        apu_set_register(chip, apu, 2, 0x8);
1118
1119        /* Load the buffer into the wave engine */
1120        apu_set_register(chip, apu, 4, ((pa >> 16) & 0xFF) << 8);
1121        apu_set_register(chip, apu, 5, pa & 0xFFFF);
1122        apu_set_register(chip, apu, 6, (pa + bsize) & 0xFFFF);
1123        apu_set_register(chip, apu, 7, bsize);
1124        /* clear effects/env.. */
1125        apu_set_register(chip, apu, 8, 0x00F0);
1126        /* amplitude now?  sure.  why not.  */
1127        apu_set_register(chip, apu, 9, 0x0000);
1128        /* set filter tune, radius, polar pan */
1129        apu_set_register(chip, apu, 10, 0x8F08);
1130        /* route input */
1131        apu_set_register(chip, apu, 11, route);
1132        /* dma on, no envelopes, filter to all 1s) */
1133        apu_set_register(chip, apu, 0, 0x400F);
1134}
1135
1136static void snd_es1968_capture_setup(struct es1968 *chip, struct esschan *es,
1137                                     struct snd_pcm_runtime *runtime)
1138{
1139        int size;
1140        u32 freq;
1141        unsigned long flags;
1142
1143        size = es->dma_size >> es->wav_shift;
1144
1145        /* APU assignments:
1146           0 = mono/left SRC
1147           1 = right SRC
1148           2 = mono/left Input Mixer
1149           3 = right Input Mixer
1150        */
1151        /* data seems to flow from the codec, through an apu into
1152           the 'mixbuf' bit of page, then through the SRC apu
1153           and out to the real 'buffer'.  ok.  sure.  */
1154
1155        /* input mixer (left/mono) */
1156        /* parallel in crap, see maestro reg 0xC [8-11] */
1157        init_capture_apu(chip, es, 2,
1158                         es->mixbuf->buf.addr, ESM_MIXBUF_SIZE/4, /* in words */
1159                         ESM_APU_INPUTMIXER, 0x14);
1160        /* SRC (left/mono); get input from inputing apu */
1161        init_capture_apu(chip, es, 0, es->memory->buf.addr, size,
1162                         ESM_APU_SRCONVERTOR, es->apu[2]);
1163        if (es->fmt & ESS_FMT_STEREO) {
1164                /* input mixer (right) */
1165                init_capture_apu(chip, es, 3,
1166                                 es->mixbuf->buf.addr + ESM_MIXBUF_SIZE/2,
1167                                 ESM_MIXBUF_SIZE/4, /* in words */
1168                                 ESM_APU_INPUTMIXER, 0x15);
1169                /* SRC (right) */
1170                init_capture_apu(chip, es, 1,
1171                                 es->memory->buf.addr + size*2, size,
1172                                 ESM_APU_SRCONVERTOR, es->apu[3]);
1173        }
1174
1175        freq = runtime->rate;
1176        /* Sample Rate conversion APUs don't like 0x10000 for their rate */
1177        if (freq > 47999)
1178                freq = 47999;
1179        if (freq < 4000)
1180                freq = 4000;
1181
1182        freq = snd_es1968_compute_rate(chip, freq);
1183
1184        /* Load the frequency, turn on 6dB */
1185        snd_es1968_apu_set_freq(chip, es->apu[0], freq);
1186        snd_es1968_apu_set_freq(chip, es->apu[1], freq);
1187
1188        /* fix mixer rate at 48khz.  and its _must_ be 0x10000. */
1189        freq = 0x10000;
1190        snd_es1968_apu_set_freq(chip, es->apu[2], freq);
1191        snd_es1968_apu_set_freq(chip, es->apu[3], freq);
1192
1193        spin_lock_irqsave(&chip->reg_lock, flags);
1194        /* clear WP interrupts */
1195        outw(1, chip->io_port + 0x04);
1196        /* enable WP ints */
1197        outw(inw(chip->io_port + ESM_PORT_HOST_IRQ) | ESM_HIRQ_DSIE, chip->io_port + ESM_PORT_HOST_IRQ);
1198        spin_unlock_irqrestore(&chip->reg_lock, flags);
1199}
1200
1201/*******************
1202 *  ALSA Interface *
1203 *******************/
1204
1205static int snd_es1968_pcm_prepare(struct snd_pcm_substream *substream)
1206{
1207        struct es1968 *chip = snd_pcm_substream_chip(substream);
1208        struct snd_pcm_runtime *runtime = substream->runtime;
1209        struct esschan *es = runtime->private_data;
1210
1211        es->dma_size = snd_pcm_lib_buffer_bytes(substream);
1212        es->frag_size = snd_pcm_lib_period_bytes(substream);
1213
1214        es->wav_shift = 1; /* maestro handles always 16bit */
1215        es->fmt = 0;
1216        if (snd_pcm_format_width(runtime->format) == 16)
1217                es->fmt |= ESS_FMT_16BIT;
1218        if (runtime->channels > 1) {
1219                es->fmt |= ESS_FMT_STEREO;
1220                if (es->fmt & ESS_FMT_16BIT) /* 8bit is already word shifted */
1221                        es->wav_shift++;
1222        }
1223        es->bob_freq = snd_es1968_calc_bob_rate(chip, es, runtime);
1224
1225        switch (es->mode) {
1226        case ESM_MODE_PLAY:
1227                snd_es1968_playback_setup(chip, es, runtime);
1228                break;
1229        case ESM_MODE_CAPTURE:
1230                snd_es1968_capture_setup(chip, es, runtime);
1231                break;
1232        }
1233
1234        return 0;
1235}
1236
1237static int snd_es1968_pcm_trigger(struct snd_pcm_substream *substream, int cmd)
1238{
1239        struct es1968 *chip = snd_pcm_substream_chip(substream);
1240        struct esschan *es = substream->runtime->private_data;
1241
1242        spin_lock(&chip->substream_lock);
1243        switch (cmd) {
1244        case SNDRV_PCM_TRIGGER_START:
1245        case SNDRV_PCM_TRIGGER_RESUME:
1246                if (es->running)
1247                        break;
1248                snd_es1968_bob_inc(chip, es->bob_freq);
1249                es->count = 0;
1250                es->hwptr = 0;
1251                snd_es1968_pcm_start(chip, es);
1252                es->running = 1;
1253                break;
1254        case SNDRV_PCM_TRIGGER_STOP:
1255        case SNDRV_PCM_TRIGGER_SUSPEND:
1256                if (! es->running)
1257                        break;
1258                snd_es1968_pcm_stop(chip, es);
1259                es->running = 0;
1260                snd_es1968_bob_dec(chip);
1261                break;
1262        }
1263        spin_unlock(&chip->substream_lock);
1264        return 0;
1265}
1266
1267static snd_pcm_uframes_t snd_es1968_pcm_pointer(struct snd_pcm_substream *substream)
1268{
1269        struct es1968 *chip = snd_pcm_substream_chip(substream);
1270        struct esschan *es = substream->runtime->private_data;
1271        unsigned int ptr;
1272
1273        ptr = snd_es1968_get_dma_ptr(chip, es) << es->wav_shift;
1274        
1275        return bytes_to_frames(substream->runtime, ptr % es->dma_size);
1276}
1277
1278static struct snd_pcm_hardware snd_es1968_playback = {
1279        .info =                 (SNDRV_PCM_INFO_MMAP |
1280                                 SNDRV_PCM_INFO_MMAP_VALID |
1281                                 SNDRV_PCM_INFO_INTERLEAVED |
1282                                 SNDRV_PCM_INFO_BLOCK_TRANSFER |
1283                                 /*SNDRV_PCM_INFO_PAUSE |*/
1284                                 SNDRV_PCM_INFO_RESUME),
1285        .formats =              SNDRV_PCM_FMTBIT_U8 | SNDRV_PCM_FMTBIT_S16_LE,
1286        .rates =                SNDRV_PCM_RATE_CONTINUOUS | SNDRV_PCM_RATE_8000_48000,
1287        .rate_min =             4000,
1288        .rate_max =             48000,
1289        .channels_min =         1,
1290        .channels_max =         2,
1291        .buffer_bytes_max =     65536,
1292        .period_bytes_min =     256,
1293        .period_bytes_max =     65536,
1294        .periods_min =          1,
1295        .periods_max =          1024,
1296        .fifo_size =            0,
1297};
1298
1299static struct snd_pcm_hardware snd_es1968_capture = {
1300        .info =                 (SNDRV_PCM_INFO_NONINTERLEAVED |
1301                                 SNDRV_PCM_INFO_MMAP |
1302                                 SNDRV_PCM_INFO_MMAP_VALID |
1303                                 SNDRV_PCM_INFO_BLOCK_TRANSFER |
1304                                 /*SNDRV_PCM_INFO_PAUSE |*/
1305                                 SNDRV_PCM_INFO_RESUME),
1306        .formats =              /*SNDRV_PCM_FMTBIT_U8 |*/ SNDRV_PCM_FMTBIT_S16_LE,
1307        .rates =                SNDRV_PCM_RATE_CONTINUOUS | SNDRV_PCM_RATE_8000_48000,
1308        .rate_min =             4000,
1309        .rate_max =             48000,
1310        .channels_min =         1,
1311        .channels_max =         2,
1312        .buffer_bytes_max =     65536,
1313        .period_bytes_min =     256,
1314        .period_bytes_max =     65536,
1315        .periods_min =          1,
1316        .periods_max =          1024,
1317        .fifo_size =            0,
1318};
1319
1320/* *************************
1321   * DMA memory management *
1322   *************************/
1323
1324/* Because the Maestro can only take addresses relative to the PCM base address
1325   register :( */
1326
1327static int calc_available_memory_size(struct es1968 *chip)
1328{
1329        int max_size = 0;
1330        struct esm_memory *buf;
1331
1332        mutex_lock(&chip->memory_mutex);
1333        list_for_each_entry(buf, &chip->buf_list, list) {
1334                if (buf->empty && buf->buf.bytes > max_size)
1335                        max_size = buf->buf.bytes;
1336        }
1337        mutex_unlock(&chip->memory_mutex);
1338        if (max_size >= 128*1024)
1339                max_size = 127*1024;
1340        return max_size;
1341}
1342
1343/* allocate a new memory chunk with the specified size */
1344static struct esm_memory *snd_es1968_new_memory(struct es1968 *chip, int size)
1345{
1346        struct esm_memory *buf;
1347
1348        size = ALIGN(size, ESM_MEM_ALIGN);
1349        mutex_lock(&chip->memory_mutex);
1350        list_for_each_entry(buf, &chip->buf_list, list) {
1351                if (buf->empty && buf->buf.bytes >= size)
1352                        goto __found;
1353        }
1354        mutex_unlock(&chip->memory_mutex);
1355        return NULL;
1356
1357__found:
1358        if (buf->buf.bytes > size) {
1359                struct esm_memory *chunk = kmalloc(sizeof(*chunk), GFP_KERNEL);
1360                if (chunk == NULL) {
1361                        mutex_unlock(&chip->memory_mutex);
1362                        return NULL;
1363                }
1364                chunk->buf = buf->buf;
1365                chunk->buf.bytes -= size;
1366                chunk->buf.area += size;
1367                chunk->buf.addr += size;
1368                chunk->empty = 1;
1369                buf->buf.bytes = size;
1370                list_add(&chunk->list, &buf->list);
1371        }
1372        buf->empty = 0;
1373        mutex_unlock(&chip->memory_mutex);
1374        return buf;
1375}
1376
1377/* free a memory chunk */
1378static void snd_es1968_free_memory(struct es1968 *chip, struct esm_memory *buf)
1379{
1380        struct esm_memory *chunk;
1381
1382        mutex_lock(&chip->memory_mutex);
1383        buf->empty = 1;
1384        if (buf->list.prev != &chip->buf_list) {
1385                chunk = list_entry(buf->list.prev, struct esm_memory, list);
1386                if (chunk->empty) {
1387                        chunk->buf.bytes += buf->buf.bytes;
1388                        list_del(&buf->list);
1389                        kfree(buf);
1390                        buf = chunk;
1391                }
1392        }
1393        if (buf->list.next != &chip->buf_list) {
1394                chunk = list_entry(buf->list.next, struct esm_memory, list);
1395                if (chunk->empty) {
1396                        buf->buf.bytes += chunk->buf.bytes;
1397                        list_del(&chunk->list);
1398                        kfree(chunk);
1399                }
1400        }
1401        mutex_unlock(&chip->memory_mutex);
1402}
1403
1404static void snd_es1968_free_dmabuf(struct es1968 *chip)
1405{
1406        struct list_head *p;
1407
1408        if (! chip->dma.area)
1409                return;
1410        snd_dma_reserve_buf(&chip->dma, snd_dma_pci_buf_id(chip->pci));
1411        while ((p = chip->buf_list.next) != &chip->buf_list) {
1412                struct esm_memory *chunk = list_entry(p, struct esm_memory, list);
1413                list_del(p);
1414                kfree(chunk);
1415        }
1416}
1417
1418static int __devinit
1419snd_es1968_init_dmabuf(struct es1968 *chip)
1420{
1421        int err;
1422        struct esm_memory *chunk;
1423
1424        chip->dma.dev.type = SNDRV_DMA_TYPE_DEV;
1425        chip->dma.dev.dev = snd_dma_pci_data(chip->pci);
1426        if (! snd_dma_get_reserved_buf(&chip->dma, snd_dma_pci_buf_id(chip->pci))) {
1427                err = snd_dma_alloc_pages_fallback(SNDRV_DMA_TYPE_DEV,
1428                                                   snd_dma_pci_data(chip->pci),
1429                                                   chip->total_bufsize, &chip->dma);
1430                if (err < 0 || ! chip->dma.area) {
1431                        snd_printk(KERN_ERR "es1968: can't allocate dma pages for size %d\n",
1432                                   chip->total_bufsize);
1433                        return -ENOMEM;
1434                }
1435                if ((chip->dma.addr + chip->dma.bytes - 1) & ~((1 << 28) - 1)) {
1436                        snd_dma_free_pages(&chip->dma);
1437                        snd_printk(KERN_ERR "es1968: DMA buffer beyond 256MB.\n");
1438                        return -ENOMEM;
1439                }
1440        }
1441
1442        INIT_LIST_HEAD(&chip->buf_list);
1443        /* allocate an empty chunk */
1444        chunk = kmalloc(sizeof(*chunk), GFP_KERNEL);
1445        if (chunk == NULL) {
1446                snd_es1968_free_dmabuf(chip);
1447                return -ENOMEM;
1448        }
1449        memset(chip->dma.area, 0, ESM_MEM_ALIGN);
1450        chunk->buf = chip->dma;
1451        chunk->buf.area += ESM_MEM_ALIGN;
1452        chunk->buf.addr += ESM_MEM_ALIGN;
1453        chunk->buf.bytes -= ESM_MEM_ALIGN;
1454        chunk->empty = 1;
1455        list_add(&chunk->list, &chip->buf_list);
1456
1457        return 0;
1458}
1459
1460/* setup the dma_areas */
1461/* buffer is extracted from the pre-allocated memory chunk */
1462static int snd_es1968_hw_params(struct snd_pcm_substream *substream,
1463                                struct snd_pcm_hw_params *hw_params)
1464{
1465        struct es1968 *chip = snd_pcm_substream_chip(substream);
1466        struct snd_pcm_runtime *runtime = substream->runtime;
1467        struct esschan *chan = runtime->private_data;
1468        int size = params_buffer_bytes(hw_params);
1469
1470        if (chan->memory) {
1471                if (chan->memory->buf.bytes >= size) {
1472                        runtime->dma_bytes = size;
1473                        return 0;
1474                }
1475                snd_es1968_free_memory(chip, chan->memory);
1476        }
1477        chan->memory = snd_es1968_new_memory(chip, size);
1478        if (chan->memory == NULL) {
1479                // snd_printd("cannot allocate dma buffer: size = %d\n", size);
1480                return -ENOMEM;
1481        }
1482        snd_pcm_set_runtime_buffer(substream, &chan->memory->buf);
1483        return 1; /* area was changed */
1484}
1485
1486/* remove dma areas if allocated */
1487static int snd_es1968_hw_free(struct snd_pcm_substream *substream)
1488{
1489        struct es1968 *chip = snd_pcm_substream_chip(substream);
1490        struct snd_pcm_runtime *runtime = substream->runtime;
1491        struct esschan *chan;
1492        
1493        if (runtime->private_data == NULL)
1494                return 0;
1495        chan = runtime->private_data;
1496        if (chan->memory) {
1497                snd_es1968_free_memory(chip, chan->memory);
1498                chan->memory = NULL;
1499        }
1500        return 0;
1501}
1502
1503
1504/*
1505 * allocate APU pair
1506 */
1507static int snd_es1968_alloc_apu_pair(struct es1968 *chip, int type)
1508{
1509        int apu;
1510
1511        for (apu = 0; apu < NR_APUS; apu += 2) {
1512                if (chip->apu[apu] == ESM_APU_FREE &&
1513                    chip->apu[apu + 1] == ESM_APU_FREE) {
1514                        chip->apu[apu] = chip->apu[apu + 1] = type;
1515                        return apu;
1516                }
1517        }
1518        return -EBUSY;
1519}
1520
1521/*
1522 * release APU pair
1523 */
1524static void snd_es1968_free_apu_pair(struct es1968 *chip, int apu)
1525{
1526        chip->apu[apu] = chip->apu[apu + 1] = ESM_APU_FREE;
1527}
1528
1529
1530/******************
1531 * PCM open/close *
1532 ******************/
1533
1534static int snd_es1968_playback_open(struct snd_pcm_substream *substream)
1535{
1536        struct es1968 *chip = snd_pcm_substream_chip(substream);
1537        struct snd_pcm_runtime *runtime = substream->runtime;
1538        struct esschan *es;
1539        int apu1;
1540
1541        /* search 2 APUs */
1542        apu1 = snd_es1968_alloc_apu_pair(chip, ESM_APU_PCM_PLAY);
1543        if (apu1 < 0)
1544                return apu1;
1545
1546        es = kzalloc(sizeof(*es), GFP_KERNEL);
1547        if (!es) {
1548                snd_es1968_free_apu_pair(chip, apu1);
1549                return -ENOMEM;
1550        }
1551
1552        es->apu[0] = apu1;
1553        es->apu[1] = apu1 + 1;
1554        es->apu_mode[0] = 0;
1555        es->apu_mode[1] = 0;
1556        es->running = 0;
1557        es->substream = substream;
1558        es->mode = ESM_MODE_PLAY;
1559
1560        runtime->private_data = es;
1561        runtime->hw = snd_es1968_playback;
1562        runtime->hw.buffer_bytes_max = runtime->hw.period_bytes_max =
1563                calc_available_memory_size(chip);
1564
1565        spin_lock_irq(&chip->substream_lock);
1566        list_add(&es->list, &chip->substream_list);
1567        spin_unlock_irq(&chip->substream_lock);
1568
1569        return 0;
1570}
1571
1572static int snd_es1968_capture_open(struct snd_pcm_substream *substream)
1573{
1574        struct snd_pcm_runtime *runtime = substream->runtime;
1575        struct es1968 *chip = snd_pcm_substream_chip(substream);
1576        struct esschan *es;
1577        int apu1, apu2;
1578
1579        apu1 = snd_es1968_alloc_apu_pair(chip, ESM_APU_PCM_CAPTURE);
1580        if (apu1 < 0)
1581                return apu1;
1582        apu2 = snd_es1968_alloc_apu_pair(chip, ESM_APU_PCM_RATECONV);
1583        if (apu2 < 0) {
1584                snd_es1968_free_apu_pair(chip, apu1);
1585                return apu2;
1586        }
1587        
1588        es = kzalloc(sizeof(*es), GFP_KERNEL);
1589        if (!es) {
1590                snd_es1968_free_apu_pair(chip, apu1);
1591                snd_es1968_free_apu_pair(chip, apu2);
1592                return -ENOMEM;
1593        }
1594
1595        es->apu[0] = apu1;
1596        es->apu[1] = apu1 + 1;
1597        es->apu[2] = apu2;
1598        es->apu[3] = apu2 + 1;
1599        es->apu_mode[0] = 0;
1600        es->apu_mode[1] = 0;
1601        es->apu_mode[2] = 0;
1602        es->apu_mode[3] = 0;
1603        es->running = 0;
1604        es->substream = substream;
1605        es->mode = ESM_MODE_CAPTURE;
1606
1607        /* get mixbuffer */
1608        if ((es->mixbuf = snd_es1968_new_memory(chip, ESM_MIXBUF_SIZE)) == NULL) {
1609                snd_es1968_free_apu_pair(chip, apu1);
1610                snd_es1968_free_apu_pair(chip, apu2);
1611                kfree(es);
1612                return -ENOMEM;
1613        }
1614        memset(es->mixbuf->buf.area, 0, ESM_MIXBUF_SIZE);
1615
1616        runtime->private_data = es;
1617        runtime->hw = snd_es1968_capture;
1618        runtime->hw.buffer_bytes_max = runtime->hw.period_bytes_max =
1619                calc_available_memory_size(chip) - 1024; /* keep MIXBUF size */
1620        snd_pcm_hw_constraint_pow2(runtime, 0, SNDRV_PCM_HW_PARAM_BUFFER_BYTES);
1621
1622        spin_lock_irq(&chip->substream_lock);
1623        list_add(&es->list, &chip->substream_list);
1624        spin_unlock_irq(&chip->substream_lock);
1625
1626        return 0;
1627}
1628
1629static int snd_es1968_playback_close(struct snd_pcm_substream *substream)
1630{
1631        struct es1968 *chip = snd_pcm_substream_chip(substream);
1632        struct esschan *es;
1633
1634        if (substream->runtime->private_data == NULL)
1635                return 0;
1636        es = substream->runtime->private_data;
1637        spin_lock_irq(&chip->substream_lock);
1638        list_del(&es->list);
1639        spin_unlock_irq(&chip->substream_lock);
1640        snd_es1968_free_apu_pair(chip, es->apu[0]);
1641        kfree(es);
1642
1643        return 0;
1644}
1645
1646static int snd_es1968_capture_close(struct snd_pcm_substream *substream)
1647{
1648        struct es1968 *chip = snd_pcm_substream_chip(substream);
1649        struct esschan *es;
1650
1651        if (substream->runtime->private_data == NULL)
1652                return 0;
1653        es = substream->runtime->private_data;
1654        spin_lock_irq(&chip->substream_lock);
1655        list_del(&es->list);
1656        spin_unlock_irq(&chip->substream_lock);
1657        snd_es1968_free_memory(chip, es->mixbuf);
1658        snd_es1968_free_apu_pair(chip, es->apu[0]);
1659        snd_es1968_free_apu_pair(chip, es->apu[2]);
1660        kfree(es);
1661
1662        return 0;
1663}
1664
1665static struct snd_pcm_ops snd_es1968_playback_ops = {
1666        .open =         snd_es1968_playback_open,
1667        .close =        snd_es1968_playback_close,
1668        .ioctl =        snd_pcm_lib_ioctl,
1669        .hw_params =    snd_es1968_hw_params,
1670        .hw_free =      snd_es1968_hw_free,
1671        .prepare =      snd_es1968_pcm_prepare,
1672        .trigger =      snd_es1968_pcm_trigger,
1673        .pointer =      snd_es1968_pcm_pointer,
1674};
1675
1676static struct snd_pcm_ops snd_es1968_capture_ops = {
1677        .open =         snd_es1968_capture_open,
1678        .close =        snd_es1968_capture_close,
1679        .ioctl =        snd_pcm_lib_ioctl,
1680        .hw_params =    snd_es1968_hw_params,
1681        .hw_free =      snd_es1968_hw_free,
1682        .prepare =      snd_es1968_pcm_prepare,
1683        .trigger =      snd_es1968_pcm_trigger,
1684        .pointer =      snd_es1968_pcm_pointer,
1685};
1686
1687
1688/*
1689 * measure clock
1690 */
1691#define CLOCK_MEASURE_BUFSIZE   16768   /* enough large for a single shot */
1692
1693static void __devinit es1968_measure_clock(struct es1968 *chip)
1694{
1695        int i, apu;
1696        unsigned int pa, offset, t;
1697        struct esm_memory *memory;
1698        struct timeval start_time, stop_time;
1699
1700        if (chip->clock == 0)
1701                chip->clock = 48000; /* default clock value */
1702
1703        /* search 2 APUs (although one apu is enough) */
1704        if ((apu = snd_es1968_alloc_apu_pair(chip, ESM_APU_PCM_PLAY)) < 0) {
1705                snd_printk(KERN_ERR "Hmm, cannot find empty APU pair!?\n");
1706                return;
1707        }
1708        if ((memory = snd_es1968_new_memory(chip, CLOCK_MEASURE_BUFSIZE)) == NULL) {
1709                snd_printk(KERN_ERR "cannot allocate dma buffer - using default clock %d\n", chip->clock);
1710                snd_es1968_free_apu_pair(chip, apu);
1711                return;
1712        }
1713
1714        memset(memory->buf.area, 0, CLOCK_MEASURE_BUFSIZE);
1715
1716        wave_set_register(chip, apu << 3, (memory->buf.addr - 0x10) & 0xfff8);
1717
1718        pa = (unsigned int)((memory->buf.addr - chip->dma.addr) >> 1);
1719        pa |= 0x00400000;       /* System RAM (Bit 22) */
1720
1721        /* initialize apu */
1722        for (i = 0; i < 16; i++)
1723                apu_set_register(chip, apu, i, 0x0000);
1724
1725        apu_set_register(chip, apu, 0, 0x400f);
1726        apu_set_register(chip, apu, 4, ((pa >> 16) & 0xff) << 8);
1727        apu_set_register(chip, apu, 5, pa & 0xffff);
1728        apu_set_register(chip, apu, 6, (pa + CLOCK_MEASURE_BUFSIZE/2) & 0xffff);
1729        apu_set_register(chip, apu, 7, CLOCK_MEASURE_BUFSIZE/2);
1730        apu_set_register(chip, apu, 8, 0x0000);
1731        apu_set_register(chip, apu, 9, 0xD000);
1732        apu_set_register(chip, apu, 10, 0x8F08);
1733        apu_set_register(chip, apu, 11, 0x0000);
1734        spin_lock_irq(&chip->reg_lock);
1735        outw(1, chip->io_port + 0x04); /* clear WP interrupts */
1736        outw(inw(chip->io_port + ESM_PORT_HOST_IRQ) | ESM_HIRQ_DSIE, chip->io_port + ESM_PORT_HOST_IRQ); /* enable WP ints */
1737        spin_unlock_irq(&chip->reg_lock);
1738
1739        snd_es1968_apu_set_freq(chip, apu, ((unsigned int)48000 << 16) / chip->clock); /* 48000 Hz */
1740
1741        chip->in_measurement = 1;
1742        chip->measure_apu = apu;
1743        spin_lock_irq(&chip->reg_lock);
1744        snd_es1968_bob_inc(chip, ESM_BOB_FREQ);
1745        __apu_set_register(chip, apu, 5, pa & 0xffff);
1746        snd_es1968_trigger_apu(chip, apu, ESM_APU_16BITLINEAR);
1747        do_gettimeofday(&start_time);
1748        spin_unlock_irq(&chip->reg_lock);
1749        msleep(50);
1750        spin_lock_irq(&chip->reg_lock);
1751        offset = __apu_get_register(chip, apu, 5);
1752        do_gettimeofday(&stop_time);
1753        snd_es1968_trigger_apu(chip, apu, 0); /* stop */
1754        snd_es1968_bob_dec(chip);
1755        chip->in_measurement = 0;
1756        spin_unlock_irq(&chip->reg_lock);
1757
1758        /* check the current position */
1759        offset -= (pa & 0xffff);
1760        offset &= 0xfffe;
1761        offset += chip->measure_count * (CLOCK_MEASURE_BUFSIZE/2);
1762
1763        t = stop_time.tv_sec - start_time.tv_sec;
1764        t *= 1000000;
1765        if (stop_time.tv_usec < start_time.tv_usec)
1766                t -= start_time.tv_usec - stop_time.tv_usec;
1767        else
1768                t += stop_time.tv_usec - start_time.tv_usec;
1769        if (t == 0) {
1770                snd_printk(KERN_ERR "?? calculation error..\n");
1771        } else {
1772                offset *= 1000;
1773                offset = (offset / t) * 1000 + ((offset % t) * 1000) / t;
1774                if (offset < 47500 || offset > 48500) {
1775                        if (offset >= 40000 && offset <= 50000)
1776                                chip->clock = (chip->clock * offset) / 48000;
1777                }
1778                printk(KERN_INFO "es1968: clocking to %d\n", chip->clock);
1779        }
1780        snd_es1968_free_memory(chip, memory);
1781        snd_es1968_free_apu_pair(chip, apu);
1782}
1783
1784
1785/*
1786 */
1787
1788static void snd_es1968_pcm_free(struct snd_pcm *pcm)
1789{
1790        struct es1968 *esm = pcm->private_data;
1791        snd_es1968_free_dmabuf(esm);
1792        esm->pcm = NULL;
1793}
1794
1795static int __devinit
1796snd_es1968_pcm(struct es1968 *chip, int device)
1797{
1798        struct snd_pcm *pcm;
1799        int err;
1800
1801        /* get DMA buffer */
1802        if ((err = snd_es1968_init_dmabuf(chip)) < 0)
1803                return err;
1804
1805        /* set PCMBAR */
1806        wave_set_register(chip, 0x01FC, chip->dma.addr >> 12);
1807        wave_set_register(chip, 0x01FD, chip->dma.addr >> 12);
1808        wave_set_register(chip, 0x01FE, chip->dma.addr >> 12);
1809        wave_set_register(chip, 0x01FF, chip->dma.addr >> 12);
1810
1811        if ((err = snd_pcm_new(chip->card, "ESS Maestro", device,
1812                               chip->playback_streams,
1813                               chip->capture_streams, &pcm)) < 0)
1814                return err;
1815
1816        pcm->private_data = chip;
1817        pcm->private_free = snd_es1968_pcm_free;
1818
1819        snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &snd_es1968_playback_ops);
1820        snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &snd_es1968_capture_ops);
1821
1822        pcm->info_flags = 0;
1823
1824        strcpy(pcm->name, "ESS Maestro");
1825
1826        chip->pcm = pcm;
1827
1828        return 0;
1829}
1830/*
1831 * suppress jitter on some maestros when playing stereo
1832 */
1833static void snd_es1968_suppress_jitter(struct es1968 *chip, struct esschan *es)
1834{
1835        unsigned int cp1;
1836        unsigned int cp2;
1837        unsigned int diff;
1838
1839        cp1 = __apu_get_register(chip, 0, 5);
1840        cp2 = __apu_get_register(chip, 1, 5);
1841        diff = (cp1 > cp2 ? cp1 - cp2 : cp2 - cp1);
1842
1843        if (diff > 1)
1844                __maestro_write(chip, IDR0_DATA_PORT, cp1);
1845}
1846
1847/*
1848 * update pointer
1849 */
1850static void snd_es1968_update_pcm(struct es1968 *chip, struct esschan *es)
1851{
1852        unsigned int hwptr;
1853        unsigned int diff;
1854        struct snd_pcm_substream *subs = es->substream;
1855        
1856        if (subs == NULL || !es->running)
1857                return;
1858
1859        hwptr = snd_es1968_get_dma_ptr(chip, es) << es->wav_shift;
1860        hwptr %= es->dma_size;
1861
1862        diff = (es->dma_size + hwptr - es->hwptr) % es->dma_size;
1863
1864        es->hwptr = hwptr;
1865        es->count += diff;
1866
1867        if (es->count > es->frag_size) {
1868                spin_unlock(&chip->substream_lock);
1869                snd_pcm_period_elapsed(subs);
1870                spin_lock(&chip->substream_lock);
1871                es->count %= es->frag_size;
1872        }
1873}
1874
1875/*
1876 */
1877static void es1968_update_hw_volume(unsigned long private_data)
1878{
1879        struct es1968 *chip = (struct es1968 *) private_data;
1880        int x, val;
1881        unsigned long flags;
1882
1883        /* Figure out which volume control button was pushed,
1884           based on differences from the default register
1885           values. */
1886        x = inb(chip->io_port + 0x1c) & 0xee;
1887        /* Reset the volume control registers. */
1888        outb(0x88, chip->io_port + 0x1c);
1889        outb(0x88, chip->io_port + 0x1d);
1890        outb(0x88, chip->io_port + 0x1e);
1891        outb(0x88, chip->io_port + 0x1f);
1892
1893        if (chip->in_suspend)
1894                return;
1895
1896        if (! chip->master_switch || ! chip->master_volume)
1897                return;
1898
1899        /* FIXME: we can't call snd_ac97_* functions since here is in tasklet. */
1900        spin_lock_irqsave(&chip->ac97_lock, flags);
1901        val = chip->ac97->regs[AC97_MASTER];
1902        switch (x) {
1903        case 0x88:
1904                /* mute */
1905                val ^= 0x8000;
1906                chip->ac97->regs[AC97_MASTER] = val;
1907                outw(val, chip->io_port + ESM_AC97_DATA);
1908                outb(AC97_MASTER, chip->io_port + ESM_AC97_INDEX);
1909                snd_ctl_notify(chip->card, SNDRV_CTL_EVENT_MASK_VALUE,
1910                               &chip->master_switch->id);
1911                break;
1912        case 0xaa:
1913                /* volume up */
1914                if ((val & 0x7f) > 0)
1915                        val--;
1916                if ((val & 0x7f00) > 0)
1917                        val -= 0x0100;
1918                chip->ac97->regs[AC97_MASTER] = val;
1919                outw(val, chip->io_port + ESM_AC97_DATA);
1920                outb(AC97_MASTER, chip->io_port + ESM_AC97_INDEX);
1921                snd_ctl_notify(chip->card, SNDRV_CTL_EVENT_MASK_VALUE,
1922                               &chip->master_volume->id);
1923                break;
1924        case 0x66:
1925                /* volume down */
1926                if ((val & 0x7f) < 0x1f)
1927                        val++;
1928                if ((val & 0x7f00) < 0x1f00)
1929                        val += 0x0100;
1930                chip->ac97->regs[AC97_MASTER] = val;
1931                outw(val, chip->io_port + ESM_AC97_DATA);
1932                outb(AC97_MASTER, chip->io_port + ESM_AC97_INDEX);
1933                snd_ctl_notify(chip->card, SNDRV_CTL_EVENT_MASK_VALUE,
1934                               &chip->master_volume->id);
1935                break;
1936        }
1937        spin_unlock_irqrestore(&chip->ac97_lock, flags);
1938}
1939
1940/*
1941 * interrupt handler
1942 */
1943static irqreturn_t snd_es1968_interrupt(int irq, void *dev_id)
1944{
1945        struct es1968 *chip = dev_id;
1946        u32 event;
1947
1948        if (!(event = inb(chip->io_port + 0x1A)))
1949                return IRQ_NONE;
1950
1951        outw(inw(chip->io_port + 4) & 1, chip->io_port + 4);
1952
1953        if (event & ESM_HWVOL_IRQ)
1954                tasklet_hi_schedule(&chip->hwvol_tq); /* we'll do this later */
1955
1956        /* else ack 'em all, i imagine */
1957        outb(0xFF, chip->io_port + 0x1A);
1958
1959        if ((event & ESM_MPU401_IRQ) && chip->rmidi) {
1960                snd_mpu401_uart_interrupt(irq, chip->rmidi->private_data);
1961        }
1962
1963        if (event & ESM_SOUND_IRQ) {
1964                struct esschan *es;
1965                spin_lock(&chip->substream_lock);
1966                list_for_each_entry(es, &chip->substream_list, list) {
1967                        if (es->running) {
1968                                snd_es1968_update_pcm(chip, es);
1969                                if (es->fmt & ESS_FMT_STEREO)
1970                                        snd_es1968_suppress_jitter(chip, es);
1971                        }
1972                }
1973                spin_unlock(&chip->substream_lock);
1974                if (chip->in_measurement) {
1975                        unsigned int curp = __apu_get_register(chip, chip->measure_apu, 5);
1976                        if (curp < chip->measure_lastpos)
1977                                chip->measure_count++;
1978                        chip->measure_lastpos = curp;
1979                }
1980        }
1981
1982        return IRQ_HANDLED;
1983}
1984
1985/*
1986 *  Mixer stuff
1987 */
1988
1989static int __devinit
1990snd_es1968_mixer(struct es1968 *chip)
1991{
1992        struct snd_ac97_bus *pbus;
1993        struct snd_ac97_template ac97;
1994        struct snd_ctl_elem_id elem_id;
1995        int err;
1996        static struct snd_ac97_bus_ops ops = {
1997                .write = snd_es1968_ac97_write,
1998                .read = snd_es1968_ac97_read,
1999        };
2000
2001        if ((err = snd_ac97_bus(chip->card, 0, &ops, NULL, &pbus)) < 0)
2002                return err;
2003        pbus->no_vra = 1; /* ES1968 doesn't need VRA */
2004
2005        memset(&ac97, 0, sizeof(ac97));
2006        ac97.private_data = chip;
2007        if ((err = snd_ac97_mixer(pbus, &ac97, &chip->ac97)) < 0)
2008                return err;
2009
2010        /* attach master switch / volumes for h/w volume control */
2011        memset(&elem_id, 0, sizeof(elem_id));
2012        elem_id.iface = SNDRV_CTL_ELEM_IFACE_MIXER;
2013        strcpy(elem_id.name, "Master Playback Switch");
2014        chip->master_switch = snd_ctl_find_id(chip->card, &elem_id);
2015        memset(&elem_id, 0, sizeof(elem_id));
2016        elem_id.iface = SNDRV_CTL_ELEM_IFACE_MIXER;
2017        strcpy(elem_id.name, "Master Playback Volume");
2018        chip->master_volume = snd_ctl_find_id(chip->card, &elem_id);
2019
2020        return 0;
2021}
2022
2023/*
2024 * reset ac97 codec
2025 */
2026
2027static void snd_es1968_ac97_reset(struct es1968 *chip)
2028{
2029        unsigned long ioaddr = chip->io_port;
2030
2031        unsigned short save_ringbus_a;
2032        unsigned short save_68;
2033        unsigned short w;
2034        unsigned int vend;
2035
2036        /* save configuration */
2037        save_ringbus_a = inw(ioaddr + 0x36);
2038
2039        //outw(inw(ioaddr + 0x38) & 0xfffc, ioaddr + 0x38); /* clear second codec id? */
2040        /* set command/status address i/o to 1st codec */
2041        outw(inw(ioaddr + 0x3a) & 0xfffc, ioaddr + 0x3a);
2042        outw(inw(ioaddr + 0x3c) & 0xfffc, ioaddr + 0x3c);
2043
2044        /* disable ac link */
2045        outw(0x0000, ioaddr + 0x36);
2046        save_68 = inw(ioaddr + 0x68);
2047        pci_read_config_word(chip->pci, 0x58, &w);      /* something magical with gpio and bus arb. */
2048        pci_read_config_dword(chip->pci, PCI_SUBSYSTEM_VENDOR_ID, &vend);
2049        if (w & 1)
2050                save_68 |= 0x10;
2051        outw(0xfffe, ioaddr + 0x64);    /* unmask gpio 0 */
2052        outw(0x0001, ioaddr + 0x68);    /* gpio write */
2053        outw(0x0000, ioaddr + 0x60);    /* write 0 to gpio 0 */
2054        udelay(20);
2055        outw(0x0001, ioaddr + 0x60);    /* write 1 to gpio 1 */
2056        msleep(20);
2057
2058        outw(save_68 | 0x1, ioaddr + 0x68);     /* now restore .. */
2059        outw((inw(ioaddr + 0x38) & 0xfffc) | 0x1, ioaddr + 0x38);
2060        outw((inw(ioaddr + 0x3a) & 0xfffc) | 0x1, ioaddr + 0x3a);
2061        outw((inw(ioaddr + 0x3c) & 0xfffc) | 0x1, ioaddr + 0x3c);
2062
2063        /* now the second codec */
2064        /* disable ac link */
2065        outw(0x0000, ioaddr + 0x36);
2066        outw(0xfff7, ioaddr + 0x64);    /* unmask gpio 3 */
2067        save_68 = inw(ioaddr + 0x68);
2068        outw(0x0009, ioaddr + 0x68);    /* gpio write 0 & 3 ?? */
2069        outw(0x0001, ioaddr + 0x60);    /* write 1 to gpio */
2070        udelay(20);
2071        outw(0x0009, ioaddr + 0x60);    /* write 9 to gpio */
2072        msleep(500);
2073        //outw(inw(ioaddr + 0x38) & 0xfffc, ioaddr + 0x38);
2074        outw(inw(ioaddr + 0x3a) & 0xfffc, ioaddr + 0x3a);
2075        outw(inw(ioaddr + 0x3c) & 0xfffc, ioaddr + 0x3c);
2076
2077#if 0                           /* the loop here needs to be much better if we want it.. */
2078        snd_printk(KERN_INFO "trying software reset\n");
2079        /* try and do a software reset */
2080        outb(0x80 | 0x7c, ioaddr + 0x30);
2081        for (w = 0;; w++) {
2082                if ((inw(ioaddr + 0x30) & 1) == 0) {
2083                        if (inb(ioaddr + 0x32) != 0)
2084                                break;
2085
2086                        outb(0x80 | 0x7d, ioaddr + 0x30);
2087                        if (((inw(ioaddr + 0x30) & 1) == 0)
2088                            && (inb(ioaddr + 0x32) != 0))
2089                                break;
2090                        outb(0x80 | 0x7f, ioaddr + 0x30);
2091                        if (((inw(ioaddr + 0x30) & 1) == 0)
2092                            && (inb(ioaddr + 0x32) != 0))
2093                                break;
2094                }
2095
2096                if (w > 10000) {
2097                        outb(inb(ioaddr + 0x37) | 0x08, ioaddr + 0x37); /* do a software reset */
2098                        msleep(500);    /* oh my.. */
2099                        outb(inb(ioaddr + 0x37) & ~0x08,
2100                                ioaddr + 0x37);
2101                        udelay(1);
2102                        outw(0x80, ioaddr + 0x30);
2103                        for (w = 0; w < 10000; w++) {
2104                                if ((inw(ioaddr + 0x30) & 1) == 0)
2105                                        break;
2106                        }
2107                }
2108        }
2109#endif
2110        if (vend == NEC_VERSA_SUBID1 || vend == NEC_VERSA_SUBID2) {
2111                /* turn on external amp? */
2112                outw(0xf9ff, ioaddr + 0x64);
2113                outw(inw(ioaddr + 0x68) | 0x600, ioaddr + 0x68);
2114                outw(0x0209, ioaddr + 0x60);
2115        }
2116
2117        /* restore.. */
2118        outw(save_ringbus_a, ioaddr + 0x36);
2119
2120        /* Turn on the 978 docking chip.
2121           First frob the "master output enable" bit,
2122           then set most of the playback volume control registers to max. */
2123        outb(inb(ioaddr+0xc0)|(1<<5), ioaddr+0xc0);
2124        outb(0xff, ioaddr+0xc3);
2125        outb(0xff, ioaddr+0xc4);
2126        outb(0xff, ioaddr+0xc6);
2127        outb(0xff, ioaddr+0xc8);
2128        outb(0x3f, ioaddr+0xcf);
2129        outb(0x3f, ioaddr+0xd0);
2130}
2131
2132static void snd_es1968_reset(struct es1968 *chip)
2133{
2134        /* Reset */
2135        outw(ESM_RESET_MAESTRO | ESM_RESET_DIRECTSOUND,
2136             chip->io_port + ESM_PORT_HOST_IRQ);
2137        udelay(10);
2138        outw(0x0000, chip->io_port + ESM_PORT_HOST_IRQ);
2139        udelay(10);
2140}
2141
2142/*
2143 * initialize maestro chip
2144 */
2145static void snd_es1968_chip_init(struct es1968 *chip)
2146{
2147        struct pci_dev *pci = chip->pci;
2148        int i;
2149        unsigned long iobase  = chip->io_port;
2150        u16 w;
2151        u32 n;
2152
2153        /* We used to muck around with pci config space that
2154         * we had no business messing with.  We don't know enough
2155         * about the machine to know which DMA mode is appropriate, 
2156         * etc.  We were guessing wrong on some machines and making
2157         * them unhappy.  We now trust in the BIOS to do things right,
2158         * which almost certainly means a new host of problems will
2159         * arise with broken BIOS implementations.  screw 'em. 
2160         * We're already intolerant of machines that don't assign
2161         * IRQs.
2162         */
2163        
2164        /* Config Reg A */
2165        pci_read_config_word(pci, ESM_CONFIG_A, &w);
2166
2167        w &= ~DMA_CLEAR;        /* Clear DMA bits */
2168        w &= ~(PIC_SNOOP1 | PIC_SNOOP2);        /* Clear Pic Snoop Mode Bits */
2169        w &= ~SAFEGUARD;        /* Safeguard off */
2170        w |= POST_WRITE;        /* Posted write */
2171        w |= PCI_TIMING;        /* PCI timing on */
2172        /* XXX huh?  claims to be reserved.. */
2173        w &= ~SWAP_LR;          /* swap left/right 
2174                                   seems to only have effect on SB
2175                                   Emulation */
2176        w &= ~SUBTR_DECODE;     /* Subtractive decode off */
2177
2178        pci_write_config_word(pci, ESM_CONFIG_A, w);
2179
2180        /* Config Reg B */
2181
2182        pci_read_config_word(pci, ESM_CONFIG_B, &w);
2183
2184        w &= ~(1 << 15);        /* Turn off internal clock multiplier */
2185        /* XXX how do we know which to use? */
2186        w &= ~(1 << 14);        /* External clock */
2187
2188        w &= ~SPDIF_CONFB;      /* disable S/PDIF output */
2189        w |= HWV_CONFB;         /* HWV on */
2190        w |= DEBOUNCE;          /* Debounce off: easier to push the HW buttons */
2191        w &= ~GPIO_CONFB;       /* GPIO 4:5 */
2192        w |= CHI_CONFB;         /* Disconnect from the CHI.  Enabling this made a dell 7500 work. */
2193        w &= ~IDMA_CONFB;       /* IDMA off (undocumented) */
2194        w &= ~MIDI_FIX;         /* MIDI fix off (undoc) */
2195        w &= ~(1 << 1);         /* reserved, always write 0 */
2196        w &= ~IRQ_TO_ISA;       /* IRQ to ISA off (undoc) */
2197
2198        pci_write_config_word(pci, ESM_CONFIG_B, w);
2199
2200        /* DDMA off */
2201
2202        pci_read_config_word(pci, ESM_DDMA, &w);
2203        w &= ~(1 << 0);
2204        pci_write_config_word(pci, ESM_DDMA, w);
2205
2206        /*
2207         *      Legacy mode
2208         */
2209
2210        pci_read_config_word(pci, ESM_LEGACY_AUDIO_CONTROL, &w);
2211
2212        w |= ESS_DISABLE_AUDIO; /* Disable Legacy Audio */
2213        w &= ~ESS_ENABLE_SERIAL_IRQ;    /* Disable SIRQ */
2214        w &= ~(0x1f);           /* disable mpu irq/io, game port, fm, SB */
2215
2216        pci_write_config_word(pci, ESM_LEGACY_AUDIO_CONTROL, w);
2217
2218        /* Set up 978 docking control chip. */
2219        pci_read_config_word(pci, 0x58, &w);
2220        w|=1<<2;        /* Enable 978. */
2221        w|=1<<3;        /* Turn on 978 hardware volume control. */
2222        w&=~(1<<11);    /* Turn on 978 mixer volume control. */
2223        pci_write_config_word(pci, 0x58, w);
2224        
2225        /* Sound Reset */
2226
2227        snd_es1968_reset(chip);
2228
2229        /*
2230         *      Ring Bus Setup
2231         */
2232
2233        /* setup usual 0x34 stuff.. 0x36 may be chip specific */
2234        outw(0xC090, iobase + ESM_RING_BUS_DEST); /* direct sound, stereo */
2235        udelay(20);
2236        outw(0x3000, iobase + ESM_RING_BUS_CONTR_A); /* enable ringbus/serial */
2237        udelay(20);
2238
2239        /*
2240         *      Reset the CODEC
2241         */
2242         
2243        snd_es1968_ac97_reset(chip);
2244
2245        /* Ring Bus Control B */
2246
2247        n = inl(iobase + ESM_RING_BUS_CONTR_B);
2248        n &= ~RINGB_EN_SPDIF;   /* SPDIF off */
2249        //w |= RINGB_EN_2CODEC; /* enable 2nd codec */
2250        outl(n, iobase + ESM_RING_BUS_CONTR_B);
2251
2252        /* Set hardware volume control registers to midpoints.
2253           We can tell which button was pushed based on how they change. */
2254        outb(0x88, iobase+0x1c);
2255        outb(0x88, iobase+0x1d);
2256        outb(0x88, iobase+0x1e);
2257        outb(0x88, iobase+0x1f);
2258
2259        /* it appears some maestros (dell 7500) only work if these are set,
2260           regardless of wether we use the assp or not. */
2261
2262        outb(0, iobase + ASSP_CONTROL_B);
2263        outb(3, iobase + ASSP_CONTROL_A);       /* M: Reserved bits... */
2264        outb(0, iobase + ASSP_CONTROL_C);       /* M: Disable ASSP, ASSP IRQ's and FM Port */
2265
2266        /*
2267         * set up wavecache
2268         */
2269        for (i = 0; i < 16; i++) {
2270                /* Write 0 into the buffer area 0x1E0->1EF */
2271                outw(0x01E0 + i, iobase + WC_INDEX);
2272                outw(0x0000, iobase + WC_DATA);
2273
2274                /* The 1.10 test program seem to write 0 into the buffer area
2275                 * 0x1D0-0x1DF too.*/
2276                outw(0x01D0 + i, iobase + WC_INDEX);
2277                outw(0x0000, iobase + WC_DATA);
2278        }
2279        wave_set_register(chip, IDR7_WAVE_ROMRAM,
2280                          (wave_get_register(chip, IDR7_WAVE_ROMRAM) & 0xFF00));
2281        wave_set_register(chip, IDR7_WAVE_ROMRAM,
2282                          wave_get_register(chip, IDR7_WAVE_ROMRAM) | 0x100);
2283        wave_set_register(chip, IDR7_WAVE_ROMRAM,
2284                          wave_get_register(chip, IDR7_WAVE_ROMRAM) & ~0x200);
2285        wave_set_register(chip, IDR7_WAVE_ROMRAM,
2286                          wave_get_register(chip, IDR7_WAVE_ROMRAM) | ~0x400);
2287
2288
2289        maestro_write(chip, IDR2_CRAM_DATA, 0x0000);
2290        /* Now back to the DirectSound stuff */
2291        /* audio serial configuration.. ? */
2292        maestro_write(chip, 0x08, 0xB004);
2293        maestro_write(chip, 0x09, 0x001B);
2294        maestro_write(chip, 0x0A, 0x8000);
2295        maestro_write(chip, 0x0B, 0x3F37);
2296        maestro_write(chip, 0x0C, 0x0098);
2297
2298        /* parallel in, has something to do with recording :) */
2299        maestro_write(chip, 0x0C,
2300                      (maestro_read(chip, 0x0C) & ~0xF000) | 0x8000);
2301        /* parallel out */
2302        maestro_write(chip, 0x0C,
2303                      (maestro_read(chip, 0x0C) & ~0x0F00) | 0x0500);
2304
2305        maestro_write(chip, 0x0D, 0x7632);
2306
2307        /* Wave cache control on - test off, sg off, 
2308           enable, enable extra chans 1Mb */
2309
2310        w = inw(iobase + WC_CONTROL);
2311
2312        w &= ~0xFA00;           /* Seems to be reserved? I don't know */
2313        w |= 0xA000;            /* reserved... I don't know */
2314        w &= ~0x0200;           /* Channels 56,57,58,59 as Extra Play,Rec Channel enable
2315                                   Seems to crash the Computer if enabled... */
2316        w |= 0x0100;            /* Wave Cache Operation Enabled */
2317        w |= 0x0080;            /* Channels 60/61 as Placback/Record enabled */
2318        w &= ~0x0060;           /* Clear Wavtable Size */
2319        w |= 0x0020;            /* Wavetable Size : 1MB */
2320        /* Bit 4 is reserved */
2321        w &= ~0x000C;           /* DMA Stuff? I don't understand what the datasheet means */
2322        /* Bit 1 is reserved */
2323        w &= ~0x0001;           /* Test Mode off */
2324
2325        outw(w, iobase + WC_CONTROL);
2326
2327        /* Now clear the APU control ram */
2328        for (i = 0; i < NR_APUS; i++) {
2329                for (w = 0; w < NR_APU_REGS; w++)
2330                        apu_set_register(chip, i, w, 0);
2331
2332        }
2333}
2334
2335/* Enable IRQ's */
2336static void snd_es1968_start_irq(struct es1968 *chip)
2337{
2338        unsigned short w;
2339        w = ESM_HIRQ_DSIE | ESM_HIRQ_HW_VOLUME;
2340        if (chip->rmidi)
2341                w |= ESM_HIRQ_MPU401;
2342        outw(w, chip->io_port + ESM_PORT_HOST_IRQ);
2343}
2344
2345#ifdef CONFIG_PM
2346/*
2347 * PM support
2348 */
2349static int es1968_suspend(struct pci_dev *pci, pm_message_t state)
2350{
2351        struct snd_card *card = pci_get_drvdata(pci);
2352        struct es1968 *chip = card->private_data;
2353
2354        if (! chip->do_pm)
2355                return 0;
2356
2357        chip->in_suspend = 1;
2358        snd_power_change_state(card, SNDRV_CTL_POWER_D3hot);
2359        snd_pcm_suspend_all(chip->pcm);
2360        snd_ac97_suspend(chip->ac97);
2361        snd_es1968_bob_stop(chip);
2362
2363        pci_disable_device(pci);
2364        pci_save_state(pci);
2365        pci_set_power_state(pci, pci_choose_state(pci, state));
2366        return 0;
2367}
2368
2369static int es1968_resume(struct pci_dev *pci)
2370{
2371        struct snd_card *card = pci_get_drvdata(pci);
2372        struct es1968 *chip = card->private_data;
2373        struct esschan *es;
2374
2375        if (! chip->do_pm)
2376                return 0;
2377
2378        /* restore all our config */
2379        pci_set_power_state(pci, PCI_D0);
2380        pci_restore_state(pci);
2381        if (pci_enable_device(pci) < 0) {
2382                printk(KERN_ERR "es1968: pci_enable_device failed, "
2383                       "disabling device\n");
2384                snd_card_disconnect(card);
2385                return -EIO;
2386        }
2387        pci_set_master(pci);
2388
2389        snd_es1968_chip_init(chip);
2390
2391        /* need to restore the base pointers.. */ 
2392        if (chip->dma.addr) {
2393                /* set PCMBAR */
2394                wave_set_register(chip, 0x01FC, chip->dma.addr >> 12);
2395        }
2396
2397        snd_es1968_start_irq(chip);
2398
2399        /* restore ac97 state */
2400        snd_ac97_resume(chip->ac97);
2401
2402        list_for_each_entry(es, &chip->substream_list, list) {
2403                switch (es->mode) {
2404                case ESM_MODE_PLAY:
2405                        snd_es1968_playback_setup(chip, es, es->substream->runtime);
2406                        break;
2407                case ESM_MODE_CAPTURE:
2408                        snd_es1968_capture_setup(chip, es, es->substream->runtime);
2409                        break;
2410                }
2411        }
2412
2413        /* start timer again */
2414        if (chip->bobclient)
2415                snd_es1968_bob_start(chip);
2416
2417        snd_power_change_state(card, SNDRV_CTL_POWER_D0);
2418        chip->in_suspend = 0;
2419        return 0;
2420}
2421#endif /* CONFIG_PM */
2422
2423#ifdef SUPPORT_JOYSTICK
2424#define JOYSTICK_ADDR   0x200
2425static int __devinit snd_es1968_create_gameport(struct es1968 *chip, int dev)
2426{
2427        struct gameport *gp;
2428        struct resource *r;
2429        u16 val;
2430
2431        if (!joystick[dev])
2432                return -ENODEV;
2433
2434        r = request_region(JOYSTICK_ADDR, 8, "ES1968 gameport");
2435        if (!r)
2436                return -EBUSY;
2437
2438        chip->gameport = gp = gameport_allocate_port();
2439        if (!gp) {
2440                printk(KERN_ERR "es1968: cannot allocate memory for gameport\n");
2441                release_and_free_resource(r);
2442                return -ENOMEM;
2443        }
2444
2445        pci_read_config_word(chip->pci, ESM_LEGACY_AUDIO_CONTROL, &val);
2446        pci_write_config_word(chip->pci, ESM_LEGACY_AUDIO_CONTROL, val | 0x04);
2447
2448        gameport_set_name(gp, "ES1968 Gameport");
2449        gameport_set_phys(gp, "pci%s/gameport0", pci_name(chip->pci));
2450        gameport_set_dev_parent(gp, &chip->pci->dev);
2451        gp->io = JOYSTICK_ADDR;
2452        gameport_set_port_data(gp, r);
2453
2454        gameport_register_port(gp);
2455
2456        return 0;
2457}
2458
2459static void snd_es1968_free_gameport(struct es1968 *chip)
2460{
2461        if (chip->gameport) {
2462                struct resource *r = gameport_get_port_data(chip->gameport);
2463
2464                gameport_unregister_port(chip->gameport);
2465                chip->gameport = NULL;
2466
2467                release_and_free_resource(r);
2468        }
2469}
2470#else
2471static inline int snd_es1968_create_gameport(struct es1968 *chip, int dev) { return -ENOSYS; }
2472static inline void snd_es1968_free_gameport(struct es1968 *chip) { }
2473#endif
2474
2475static int snd_es1968_free(struct es1968 *chip)
2476{
2477        if (chip->io_port) {
2478                if (chip->irq >= 0)
2479                        synchronize_irq(chip->irq);
2480                outw(1, chip->io_port + 0x04); /* clear WP interrupts */
2481                outw(0, chip->io_port + ESM_PORT_HOST_IRQ); /* disable IRQ */
2482        }
2483
2484        if (chip->irq >= 0)
2485                free_irq(chip->irq, chip);
2486        snd_es1968_free_gameport(chip);
2487        chip->master_switch = NULL;
2488        chip->master_volume = NULL;
2489        pci_release_regions(chip->pci);
2490        pci_disable_device(chip->pci);
2491        kfree(chip);
2492        return 0;
2493}
2494
2495static int snd_es1968_dev_free(struct snd_device *device)
2496{
2497        struct es1968 *chip = device->device_data;
2498        return snd_es1968_free(chip);
2499}
2500
2501struct ess_device_list {
2502        unsigned short type;    /* chip type */
2503        unsigned short vendor;  /* subsystem vendor id */
2504};
2505
2506static struct ess_device_list pm_whitelist[] __devinitdata = {
2507        { TYPE_MAESTRO2E, 0x0e11 },     /* Compaq Armada */
2508        { TYPE_MAESTRO2E, 0x1028 },
2509        { TYPE_MAESTRO2E, 0x103c },
2510        { TYPE_MAESTRO2E, 0x1179 },
2511        { TYPE_MAESTRO2E, 0x14c0 },     /* HP omnibook 4150 */
2512        { TYPE_MAESTRO2E, 0x1558 },
2513};
2514
2515static struct ess_device_list mpu_blacklist[] __devinitdata = {
2516        { TYPE_MAESTRO2, 0x125d },
2517};
2518
2519static int __devinit snd_es1968_create(struct snd_card *card,
2520                                       struct pci_dev *pci,
2521                                       int total_bufsize,
2522                                       int play_streams,
2523                                       int capt_streams,
2524                                       int chip_type,
2525                                       int do_pm,
2526                                       struct es1968 **chip_ret)
2527{
2528        static struct snd_device_ops ops = {
2529                .dev_free =     snd_es1968_dev_free,
2530        };
2531        struct es1968 *chip;
2532        int i, err;
2533
2534        *chip_ret = NULL;
2535
2536        /* enable PCI device */
2537        if ((err = pci_enable_device(pci)) < 0)
2538                return err;
2539        /* check, if we can restrict PCI DMA transfers to 28 bits */
2540        if (pci_set_dma_mask(pci, DMA_28BIT_MASK) < 0 ||
2541            pci_set_consistent_dma_mask(pci, DMA_28BIT_MASK) < 0) {
2542                snd_printk(KERN_ERR "architecture does not support 28bit PCI busmaster DMA\n");
2543                pci_disable_device(pci);
2544                return -ENXIO;
2545        }
2546
2547        chip = kzalloc(sizeof(*chip), GFP_KERNEL);
2548        if (! chip) {
2549                pci_disable_device(pci);
2550                return -ENOMEM;
2551        }
2552
2553        /* Set Vars */
2554        chip->type = chip_type;
2555        spin_lock_init(&chip->reg_lock);
2556        spin_lock_init(&chip->substream_lock);
2557        INIT_LIST_HEAD(&chip->buf_list);
2558        INIT_LIST_HEAD(&chip->substream_list);
2559        spin_lock_init(&chip->ac97_lock);
2560        mutex_init(&chip->memory_mutex);
2561        tasklet_init(&chip->hwvol_tq, es1968_update_hw_volume, (unsigned long)chip);
2562        chip->card = card;
2563        chip->pci = pci;
2564        chip->irq = -1;
2565        chip->total_bufsize = total_bufsize;    /* in bytes */
2566        chip->playback_streams = play_streams;
2567        chip->capture_streams = capt_streams;
2568
2569        if ((err = pci_request_regions(pci, "ESS Maestro")) < 0) {
2570                kfree(chip);
2571                pci_disable_device(pci);
2572                return err;
2573        }
2574        chip->io_port = pci_resource_start(pci, 0);
2575        if (request_irq(pci->irq, snd_es1968_interrupt, IRQF_SHARED,
2576                        "ESS Maestro", chip)) {
2577                snd_printk(KERN_ERR "unable to grab IRQ %d\n", pci->irq);
2578                snd_es1968_free(chip);
2579                return -EBUSY;
2580        }
2581        chip->irq = pci->irq;
2582                
2583        /* Clear Maestro_map */
2584        for (i = 0; i < 32; i++)
2585                chip->maestro_map[i] = 0;
2586
2587        /* Clear Apu Map */
2588        for (i = 0; i < NR_APUS; i++)
2589                chip->apu[i] = ESM_APU_FREE;
2590
2591        /* just to be sure */
2592        pci_set_master(pci);
2593
2594        if (do_pm > 1) {
2595                /* disable power-management if not on the whitelist */
2596                unsigned short vend;
2597                pci_read_config_word(chip->pci, PCI_SUBSYSTEM_VENDOR_ID, &vend);
2598                for (i = 0; i < (int)ARRAY_SIZE(pm_whitelist); i++) {
2599                        if (chip->type == pm_whitelist[i].type &&
2600                            vend == pm_whitelist[i].vendor) {
2601                                do_pm = 1;
2602                                break;
2603                        }
2604                }
2605                if (do_pm > 1) {
2606                        /* not matched; disabling pm */
2607                        printk(KERN_INFO "es1968: not attempting power management.\n");
2608                        do_pm = 0;
2609                }
2610        }
2611        chip->do_pm = do_pm;
2612
2613        snd_es1968_chip_init(chip);
2614
2615        if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops)) < 0) {
2616                snd_es1968_free(chip);
2617                return err;
2618        }
2619
2620        snd_card_set_dev(card, &pci->dev);
2621
2622        *chip_ret = chip;
2623
2624        return 0;
2625}
2626
2627
2628/*
2629 */
2630static int __devinit snd_es1968_probe(struct pci_dev *pci,
2631                                      const struct pci_device_id *pci_id)
2632{
2633        static int dev;
2634        struct snd_card *card;
2635        struct es1968 *chip;
2636        unsigned int i;
2637        int err;
2638
2639        if (dev >= SNDRV_CARDS)
2640                return -ENODEV;
2641        if (!enable[dev]) {
2642                dev++;
2643                return -ENOENT;
2644        }
2645
2646        card = snd_card_new(index[dev], id[dev], THIS_MODULE, 0);
2647        if (!card)
2648                return -ENOMEM;
2649                
2650        if (total_bufsize[dev] < 128)
2651                total_bufsize[dev] = 128;
2652        if (total_bufsize[dev] > 4096)
2653                total_bufsize[dev] = 4096;
2654        if ((err = snd_es1968_create(card, pci,
2655                                     total_bufsize[dev] * 1024, /* in bytes */
2656                                     pcm_substreams_p[dev], 
2657                                     pcm_substreams_c[dev],
2658                                     pci_id->driver_data,
2659                                     use_pm[dev],
2660                                     &chip)) < 0) {
2661                snd_card_free(card);
2662                return err;
2663        }
2664        card->private_data = chip;
2665
2666        switch (chip->type) {
2667        case TYPE_MAESTRO2E:
2668                strcpy(card->driver, "ES1978");
2669                strcpy(card->shortname, "ESS ES1978 (Maestro 2E)");
2670                break;
2671        case TYPE_MAESTRO2:
2672                strcpy(card->driver, "ES1968");
2673                strcpy(card->shortname, "ESS ES1968 (Maestro 2)");
2674                break;
2675        case TYPE_MAESTRO:
2676                strcpy(card->driver, "ESM1");
2677                strcpy(card->shortname, "ESS Maestro 1");
2678                break;
2679        }
2680
2681        if ((err = snd_es1968_pcm(chip, 0)) < 0) {
2682                snd_card_free(card);
2683                return err;
2684        }
2685
2686        if ((err = snd_es1968_mixer(chip)) < 0) {
2687                snd_card_free(card);
2688                return err;
2689        }
2690
2691        if (enable_mpu[dev] == 2) {
2692                /* check the black list */
2693                unsigned short vend;
2694                pci_read_config_word(chip->pci, PCI_SUBSYSTEM_VENDOR_ID, &vend);
2695                for (i = 0; i < ARRAY_SIZE(mpu_blacklist); i++) {
2696                        if (chip->type == mpu_blacklist[i].type &&
2697                            vend == mpu_blacklist[i].vendor) {
2698                                enable_mpu[dev] = 0;
2699                                break;
2700                        }
2701                }
2702        }
2703        if (enable_mpu[dev]) {
2704                if ((err = snd_mpu401_uart_new(card, 0, MPU401_HW_MPU401,
2705                                               chip->io_port + ESM_MPU401_PORT,
2706                                               MPU401_INFO_INTEGRATED,
2707                                               chip->irq, 0, &chip->rmidi)) < 0) {
2708                        printk(KERN_WARNING "es1968: skipping MPU-401 MIDI support..\n");
2709                }
2710        }
2711
2712        snd_es1968_create_gameport(chip, dev);
2713
2714        snd_es1968_start_irq(chip);
2715
2716        chip->clock = clock[dev];
2717        if (! chip->clock)
2718                es1968_measure_clock(chip);
2719
2720        sprintf(card->longname, "%s at 0x%lx, irq %i",
2721                card->shortname, chip->io_port, chip->irq);
2722
2723        if ((err = snd_card_register(card)) < 0) {
2724                snd_card_free(card);
2725                return err;
2726        }
2727        pci_set_drvdata(pci, card);
2728        dev++;
2729        return 0;
2730}
2731
2732static void __devexit snd_es1968_remove(struct pci_dev *pci)
2733{
2734        snd_card_free(pci_get_drvdata(pci));
2735        pci_set_drvdata(pci, NULL);
2736}
2737
2738static struct pci_driver driver = {
2739        .name = "ES1968 (ESS Maestro)",
2740        .id_table = snd_es1968_ids,
2741        .probe = snd_es1968_probe,
2742        .remove = __devexit_p(snd_es1968_remove),
2743#ifdef CONFIG_PM
2744        .suspend = es1968_suspend,
2745        .resume = es1968_resume,
2746#endif
2747};
2748
2749static int __init alsa_card_es1968_init(void)
2750{
2751        return pci_register_driver(&driver);
2752}
2753
2754static void __exit alsa_card_es1968_exit(void)
2755{
2756        pci_unregister_driver(&driver);
2757}
2758
2759module_init(alsa_card_es1968_init)
2760module_exit(alsa_card_es1968_exit)
2761