Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0-or-later
0002 /*
0003  *  Driver for ESS Maestro 1/2/2E Sound Card (started 21.8.99)
0004  *  Copyright (c) by Matze Braun <MatzeBraun@gmx.de>.
0005  *                   Takashi Iwai <tiwai@suse.de>
0006  *                  
0007  *  Most of the driver code comes from Zach Brown(zab@redhat.com)
0008  *  Alan Cox OSS Driver
0009  *  Rewritted from card-es1938.c source.
0010  *
0011  *  TODO:
0012  *   Perhaps Synth
0013  *
0014  *  Notes from Zach Brown about the driver code
0015  *
0016  *  Hardware Description
0017  *
0018  *  A working Maestro setup contains the Maestro chip wired to a 
0019  *  codec or 2.  In the Maestro we have the APUs, the ASSP, and the
0020  *  Wavecache.  The APUs can be though of as virtual audio routing
0021  *  channels.  They can take data from a number of sources and perform
0022  *  basic encodings of the data.  The wavecache is a storehouse for
0023  *  PCM data.  Typically it deals with PCI and interracts with the
0024  *  APUs.  The ASSP is a wacky DSP like device that ESS is loth
0025  *  to release docs on.  Thankfully it isn't required on the Maestro
0026  *  until you start doing insane things like FM emulation and surround
0027  *  encoding.  The codecs are almost always AC-97 compliant codecs, 
0028  *  but it appears that early Maestros may have had PT101 (an ESS
0029  *  part?) wired to them.  The only real difference in the Maestro
0030  *  families is external goop like docking capability, memory for
0031  *  the ASSP, and initialization differences.
0032  *
0033  *  Driver Operation
0034  *
0035  *  We only drive the APU/Wavecache as typical DACs and drive the
0036  *  mixers in the codecs.  There are 64 APUs.  We assign 6 to each
0037  *  /dev/dsp? device.  2 channels for output, and 4 channels for
0038  *  input.
0039  *
0040  *  Each APU can do a number of things, but we only really use
0041  *  3 basic functions.  For playback we use them to convert PCM
0042  *  data fetched over PCI by the wavecahche into analog data that
0043  *  is handed to the codec.  One APU for mono, and a pair for stereo.
0044  *  When in stereo, the combination of smarts in the APU and Wavecache
0045  *  decide which wavecache gets the left or right channel.
0046  *
0047  *  For record we still use the old overly mono system.  For each in
0048  *  coming channel the data comes in from the codec, through a 'input'
0049  *  APU, through another rate converter APU, and then into memory via
0050  *  the wavecache and PCI.  If its stereo, we mash it back into LRLR in
0051  *  software.  The pass between the 2 APUs is supposedly what requires us
0052  *  to have a 512 byte buffer sitting around in wavecache/memory.
0053  *
0054  *  The wavecache makes our life even more fun.  First off, it can
0055  *  only address the first 28 bits of PCI address space, making it
0056  *  useless on quite a few architectures.  Secondly, its insane.
0057  *  It claims to fetch from 4 regions of PCI space, each 4 meg in length.
0058  *  But that doesn't really work.  You can only use 1 region.  So all our
0059  *  allocations have to be in 4meg of each other.  Booo.  Hiss.
0060  *  So we have a module parameter, dsps_order, that is the order of
0061  *  the number of dsps to provide.  All their buffer space is allocated
0062  *  on open time.  The sonicvibes OSS routines we inherited really want
0063  *  power of 2 buffers, so we have all those next to each other, then
0064  *  512 byte regions for the recording wavecaches.  This ends up
0065  *  wasting quite a bit of memory.  The only fixes I can see would be 
0066  *  getting a kernel allocator that could work in zones, or figuring out
0067  *  just how to coerce the WP into doing what we want.
0068  *
0069  *  The indirection of the various registers means we have to spinlock
0070  *  nearly all register accesses.  We have the main register indirection
0071  *  like the wave cache, maestro registers, etc.  Then we have beasts
0072  *  like the APU interface that is indirect registers gotten at through
0073  *  the main maestro indirection.  Ouch.  We spinlock around the actual
0074  *  ports on a per card basis.  This means spinlock activity at each IO
0075  *  operation, but the only IO operation clusters are in non critical 
0076  *  paths and it makes the code far easier to follow.  Interrupts are
0077  *  blocked while holding the locks because the int handler has to
0078  *  get at some of them :(.  The mixer interface doesn't, however.
0079  *  We also have an OSS state lock that is thrown around in a few
0080  *  places.
0081  */
0082 
0083 #include <linux/io.h>
0084 #include <linux/delay.h>
0085 #include <linux/interrupt.h>
0086 #include <linux/init.h>
0087 #include <linux/pci.h>
0088 #include <linux/dma-mapping.h>
0089 #include <linux/slab.h>
0090 #include <linux/gameport.h>
0091 #include <linux/module.h>
0092 #include <linux/mutex.h>
0093 #include <linux/input.h>
0094 
0095 #include <sound/core.h>
0096 #include <sound/pcm.h>
0097 #include <sound/mpu401.h>
0098 #include <sound/ac97_codec.h>
0099 #include <sound/initval.h>
0100 
0101 #ifdef CONFIG_SND_ES1968_RADIO
0102 #include <media/drv-intf/tea575x.h>
0103 #endif
0104 
0105 #define CARD_NAME "ESS Maestro1/2"
0106 #define DRIVER_NAME "ES1968"
0107 
0108 MODULE_DESCRIPTION("ESS Maestro");
0109 MODULE_LICENSE("GPL");
0110 
0111 #if IS_REACHABLE(CONFIG_GAMEPORT)
0112 #define SUPPORT_JOYSTICK 1
0113 #endif
0114 
0115 static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;  /* Index 1-MAX */
0116 static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;   /* ID for this card */
0117 static bool enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP; /* Enable this card */
0118 static int total_bufsize[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 1024 };
0119 static int pcm_substreams_p[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 4 };
0120 static int pcm_substreams_c[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 1 };
0121 static int clock[SNDRV_CARDS];
0122 static int use_pm[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 2};
0123 static int enable_mpu[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 2};
0124 #ifdef SUPPORT_JOYSTICK
0125 static bool joystick[SNDRV_CARDS];
0126 #endif
0127 static int radio_nr[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = -1};
0128 
0129 module_param_array(index, int, NULL, 0444);
0130 MODULE_PARM_DESC(index, "Index value for " CARD_NAME " soundcard.");
0131 module_param_array(id, charp, NULL, 0444);
0132 MODULE_PARM_DESC(id, "ID string for " CARD_NAME " soundcard.");
0133 module_param_array(enable, bool, NULL, 0444);
0134 MODULE_PARM_DESC(enable, "Enable " CARD_NAME " soundcard.");
0135 module_param_array(total_bufsize, int, NULL, 0444);
0136 MODULE_PARM_DESC(total_bufsize, "Total buffer size in kB.");
0137 module_param_array(pcm_substreams_p, int, NULL, 0444);
0138 MODULE_PARM_DESC(pcm_substreams_p, "PCM Playback substreams for " CARD_NAME " soundcard.");
0139 module_param_array(pcm_substreams_c, int, NULL, 0444);
0140 MODULE_PARM_DESC(pcm_substreams_c, "PCM Capture substreams for " CARD_NAME " soundcard.");
0141 module_param_array(clock, int, NULL, 0444);
0142 MODULE_PARM_DESC(clock, "Clock on " CARD_NAME " soundcard.  (0 = auto-detect)");
0143 module_param_array(use_pm, int, NULL, 0444);
0144 MODULE_PARM_DESC(use_pm, "Toggle power-management.  (0 = off, 1 = on, 2 = auto)");
0145 module_param_array(enable_mpu, int, NULL, 0444);
0146 MODULE_PARM_DESC(enable_mpu, "Enable MPU401.  (0 = off, 1 = on, 2 = auto)");
0147 #ifdef SUPPORT_JOYSTICK
0148 module_param_array(joystick, bool, NULL, 0444);
0149 MODULE_PARM_DESC(joystick, "Enable joystick.");
0150 #endif
0151 module_param_array(radio_nr, int, NULL, 0444);
0152 MODULE_PARM_DESC(radio_nr, "Radio device numbers");
0153 
0154 
0155 
0156 #define NR_APUS         64
0157 #define NR_APU_REGS     16
0158 
0159 /* NEC Versas ? */
0160 #define NEC_VERSA_SUBID1    0x80581033
0161 #define NEC_VERSA_SUBID2    0x803c1033
0162 
0163 /* Mode Flags */
0164 #define ESS_FMT_STEREO      0x01
0165 #define ESS_FMT_16BIT       0x02
0166 
0167 #define DAC_RUNNING     1
0168 #define ADC_RUNNING     2
0169 
0170 /* Values for the ESM_LEGACY_AUDIO_CONTROL */
0171 
0172 #define ESS_DISABLE_AUDIO   0x8000
0173 #define ESS_ENABLE_SERIAL_IRQ   0x4000
0174 #define IO_ADRESS_ALIAS     0x0020
0175 #define MPU401_IRQ_ENABLE   0x0010
0176 #define MPU401_IO_ENABLE    0x0008
0177 #define GAME_IO_ENABLE      0x0004
0178 #define FM_IO_ENABLE        0x0002
0179 #define SB_IO_ENABLE        0x0001
0180 
0181 /* Values for the ESM_CONFIG_A */
0182 
0183 #define PIC_SNOOP1      0x4000
0184 #define PIC_SNOOP2      0x2000
0185 #define SAFEGUARD       0x0800
0186 #define DMA_CLEAR       0x0700
0187 #define DMA_DDMA        0x0000
0188 #define DMA_TDMA        0x0100
0189 #define DMA_PCPCI       0x0200
0190 #define POST_WRITE      0x0080
0191 #define PCI_TIMING      0x0040
0192 #define SWAP_LR         0x0020
0193 #define SUBTR_DECODE        0x0002
0194 
0195 /* Values for the ESM_CONFIG_B */
0196 
0197 #define SPDIF_CONFB     0x0100
0198 #define HWV_CONFB       0x0080
0199 #define DEBOUNCE        0x0040
0200 #define GPIO_CONFB      0x0020
0201 #define CHI_CONFB       0x0010
0202 #define IDMA_CONFB      0x0008  /*undoc */
0203 #define MIDI_FIX        0x0004  /*undoc */
0204 #define IRQ_TO_ISA      0x0001  /*undoc */
0205 
0206 /* Values for Ring Bus Control B */
0207 #define RINGB_2CODEC_ID_MASK    0x0003
0208 #define RINGB_DIS_VALIDATION    0x0008
0209 #define RINGB_EN_SPDIF      0x0010
0210 #define RINGB_EN_2CODEC     0x0020
0211 #define RINGB_SING_BIT_DUAL 0x0040
0212 
0213 /* ****Port Addresses**** */
0214 
0215 /*   Write & Read */
0216 #define ESM_INDEX       0x02
0217 #define ESM_DATA        0x00
0218 
0219 /*   AC97 + RingBus */
0220 #define ESM_AC97_INDEX      0x30
0221 #define ESM_AC97_DATA       0x32
0222 #define ESM_RING_BUS_DEST   0x34
0223 #define ESM_RING_BUS_CONTR_A    0x36
0224 #define ESM_RING_BUS_CONTR_B    0x38
0225 #define ESM_RING_BUS_SDO    0x3A
0226 
0227 /*   WaveCache*/
0228 #define WC_INDEX        0x10
0229 #define WC_DATA         0x12
0230 #define WC_CONTROL      0x14
0231 
0232 /*   ASSP*/
0233 #define ASSP_INDEX      0x80
0234 #define ASSP_MEMORY     0x82
0235 #define ASSP_DATA       0x84
0236 #define ASSP_CONTROL_A      0xA2
0237 #define ASSP_CONTROL_B      0xA4
0238 #define ASSP_CONTROL_C      0xA6
0239 #define ASSP_HOSTW_INDEX    0xA8
0240 #define ASSP_HOSTW_DATA     0xAA
0241 #define ASSP_HOSTW_IRQ      0xAC
0242 /* Midi */
0243 #define ESM_MPU401_PORT     0x98
0244 /* Others */
0245 #define ESM_PORT_HOST_IRQ   0x18
0246 
0247 #define IDR0_DATA_PORT      0x00
0248 #define IDR1_CRAM_POINTER   0x01
0249 #define IDR2_CRAM_DATA      0x02
0250 #define IDR3_WAVE_DATA      0x03
0251 #define IDR4_WAVE_PTR_LOW   0x04
0252 #define IDR5_WAVE_PTR_HI    0x05
0253 #define IDR6_TIMER_CTRL     0x06
0254 #define IDR7_WAVE_ROMRAM    0x07
0255 
0256 #define WRITEABLE_MAP       0xEFFFFF
0257 #define READABLE_MAP        0x64003F
0258 
0259 /* PCI Register */
0260 
0261 #define ESM_LEGACY_AUDIO_CONTROL 0x40
0262 #define ESM_ACPI_COMMAND    0x54
0263 #define ESM_CONFIG_A        0x50
0264 #define ESM_CONFIG_B        0x52
0265 #define ESM_DDMA        0x60
0266 
0267 /* Bob Bits */
0268 #define ESM_BOB_ENABLE      0x0001
0269 #define ESM_BOB_START       0x0001
0270 
0271 /* Host IRQ Control Bits */
0272 #define ESM_RESET_MAESTRO   0x8000
0273 #define ESM_RESET_DIRECTSOUND   0x4000
0274 #define ESM_HIRQ_ClkRun     0x0100
0275 #define ESM_HIRQ_HW_VOLUME  0x0040
0276 #define ESM_HIRQ_HARPO      0x0030  /* What's that? */
0277 #define ESM_HIRQ_ASSP       0x0010
0278 #define ESM_HIRQ_DSIE       0x0004
0279 #define ESM_HIRQ_MPU401     0x0002
0280 #define ESM_HIRQ_SB     0x0001
0281 
0282 /* Host IRQ Status Bits */
0283 #define ESM_MPU401_IRQ      0x02
0284 #define ESM_SB_IRQ      0x01
0285 #define ESM_SOUND_IRQ       0x04
0286 #define ESM_ASSP_IRQ        0x10
0287 #define ESM_HWVOL_IRQ       0x40
0288 
0289 #define ESS_SYSCLK      50000000
0290 #define ESM_BOB_FREQ        200
0291 #define ESM_BOB_FREQ_MAX    800
0292 
0293 #define ESM_FREQ_ESM1       (49152000L / 1024L) /* default rate 48000 */
0294 #define ESM_FREQ_ESM2       (50000000L / 1024L)
0295 
0296 /* APU Modes: reg 0x00, bit 4-7 */
0297 #define ESM_APU_MODE_SHIFT  4
0298 #define ESM_APU_MODE_MASK   (0xf << 4)
0299 #define ESM_APU_OFF     0x00
0300 #define ESM_APU_16BITLINEAR 0x01    /* 16-Bit Linear Sample Player */
0301 #define ESM_APU_16BITSTEREO 0x02    /* 16-Bit Stereo Sample Player */
0302 #define ESM_APU_8BITLINEAR  0x03    /* 8-Bit Linear Sample Player */
0303 #define ESM_APU_8BITSTEREO  0x04    /* 8-Bit Stereo Sample Player */
0304 #define ESM_APU_8BITDIFF    0x05    /* 8-Bit Differential Sample Playrer */
0305 #define ESM_APU_DIGITALDELAY    0x06    /* Digital Delay Line */
0306 #define ESM_APU_DUALTAP     0x07    /* Dual Tap Reader */
0307 #define ESM_APU_CORRELATOR  0x08    /* Correlator */
0308 #define ESM_APU_INPUTMIXER  0x09    /* Input Mixer */
0309 #define ESM_APU_WAVETABLE   0x0A    /* Wave Table Mode */
0310 #define ESM_APU_SRCONVERTOR 0x0B    /* Sample Rate Convertor */
0311 #define ESM_APU_16BITPINGPONG   0x0C    /* 16-Bit Ping-Pong Sample Player */
0312 #define ESM_APU_RESERVED1   0x0D    /* Reserved 1 */
0313 #define ESM_APU_RESERVED2   0x0E    /* Reserved 2 */
0314 #define ESM_APU_RESERVED3   0x0F    /* Reserved 3 */
0315 
0316 /* reg 0x00 */
0317 #define ESM_APU_FILTER_Q_SHIFT      0
0318 #define ESM_APU_FILTER_Q_MASK       (3 << 0)
0319 /* APU Filtey Q Control */
0320 #define ESM_APU_FILTER_LESSQ    0x00
0321 #define ESM_APU_FILTER_MOREQ    0x03
0322 
0323 #define ESM_APU_FILTER_TYPE_SHIFT   2
0324 #define ESM_APU_FILTER_TYPE_MASK    (3 << 2)
0325 #define ESM_APU_ENV_TYPE_SHIFT      8
0326 #define ESM_APU_ENV_TYPE_MASK       (3 << 8)
0327 #define ESM_APU_ENV_STATE_SHIFT     10
0328 #define ESM_APU_ENV_STATE_MASK      (3 << 10)
0329 #define ESM_APU_END_CURVE       (1 << 12)
0330 #define ESM_APU_INT_ON_LOOP     (1 << 13)
0331 #define ESM_APU_DMA_ENABLE      (1 << 14)
0332 
0333 /* reg 0x02 */
0334 #define ESM_APU_SUBMIX_GROUP_SHIRT  0
0335 #define ESM_APU_SUBMIX_GROUP_MASK   (7 << 0)
0336 #define ESM_APU_SUBMIX_MODE     (1 << 3)
0337 #define ESM_APU_6dB         (1 << 4)
0338 #define ESM_APU_DUAL_EFFECT     (1 << 5)
0339 #define ESM_APU_EFFECT_CHANNELS_SHIFT   6
0340 #define ESM_APU_EFFECT_CHANNELS_MASK    (3 << 6)
0341 
0342 /* reg 0x03 */
0343 #define ESM_APU_STEP_SIZE_MASK      0x0fff
0344 
0345 /* reg 0x04 */
0346 #define ESM_APU_PHASE_SHIFT     0
0347 #define ESM_APU_PHASE_MASK      (0xff << 0)
0348 #define ESM_APU_WAVE64K_PAGE_SHIFT  8   /* most 8bit of wave start offset */
0349 #define ESM_APU_WAVE64K_PAGE_MASK   (0xff << 8)
0350 
0351 /* reg 0x05 - wave start offset */
0352 /* reg 0x06 - wave end offset */
0353 /* reg 0x07 - wave loop length */
0354 
0355 /* reg 0x08 */
0356 #define ESM_APU_EFFECT_GAIN_SHIFT   0
0357 #define ESM_APU_EFFECT_GAIN_MASK    (0xff << 0)
0358 #define ESM_APU_TREMOLO_DEPTH_SHIFT 8
0359 #define ESM_APU_TREMOLO_DEPTH_MASK  (0xf << 8)
0360 #define ESM_APU_TREMOLO_RATE_SHIFT  12
0361 #define ESM_APU_TREMOLO_RATE_MASK   (0xf << 12)
0362 
0363 /* reg 0x09 */
0364 /* bit 0-7 amplitude dest? */
0365 #define ESM_APU_AMPLITUDE_NOW_SHIFT 8
0366 #define ESM_APU_AMPLITUDE_NOW_MASK  (0xff << 8)
0367 
0368 /* reg 0x0a */
0369 #define ESM_APU_POLAR_PAN_SHIFT     0
0370 #define ESM_APU_POLAR_PAN_MASK      (0x3f << 0)
0371 /* Polar Pan Control */
0372 #define ESM_APU_PAN_CENTER_CIRCLE       0x00
0373 #define ESM_APU_PAN_MIDDLE_RADIUS       0x01
0374 #define ESM_APU_PAN_OUTSIDE_RADIUS      0x02
0375 
0376 #define ESM_APU_FILTER_TUNING_SHIFT 8
0377 #define ESM_APU_FILTER_TUNING_MASK  (0xff << 8)
0378 
0379 /* reg 0x0b */
0380 #define ESM_APU_DATA_SRC_A_SHIFT    0
0381 #define ESM_APU_DATA_SRC_A_MASK     (0x7f << 0)
0382 #define ESM_APU_INV_POL_A       (1 << 7)
0383 #define ESM_APU_DATA_SRC_B_SHIFT    8
0384 #define ESM_APU_DATA_SRC_B_MASK     (0x7f << 8)
0385 #define ESM_APU_INV_POL_B       (1 << 15)
0386 
0387 #define ESM_APU_VIBRATO_RATE_SHIFT  0
0388 #define ESM_APU_VIBRATO_RATE_MASK   (0xf << 0)
0389 #define ESM_APU_VIBRATO_DEPTH_SHIFT 4
0390 #define ESM_APU_VIBRATO_DEPTH_MASK  (0xf << 4)
0391 #define ESM_APU_VIBRATO_PHASE_SHIFT 8
0392 #define ESM_APU_VIBRATO_PHASE_MASK  (0xff << 8)
0393 
0394 /* reg 0x0c */
0395 #define ESM_APU_RADIUS_SELECT       (1 << 6)
0396 
0397 /* APU Filter Control */
0398 #define ESM_APU_FILTER_2POLE_LOPASS 0x00
0399 #define ESM_APU_FILTER_2POLE_BANDPASS   0x01
0400 #define ESM_APU_FILTER_2POLE_HIPASS 0x02
0401 #define ESM_APU_FILTER_1POLE_LOPASS 0x03
0402 #define ESM_APU_FILTER_1POLE_HIPASS 0x04
0403 #define ESM_APU_FILTER_OFF      0x05
0404 
0405 /* APU ATFP Type */
0406 #define ESM_APU_ATFP_AMPLITUDE          0x00
0407 #define ESM_APU_ATFP_TREMELO            0x01
0408 #define ESM_APU_ATFP_FILTER         0x02
0409 #define ESM_APU_ATFP_PAN            0x03
0410 
0411 /* APU ATFP Flags */
0412 #define ESM_APU_ATFP_FLG_OFF            0x00
0413 #define ESM_APU_ATFP_FLG_WAIT           0x01
0414 #define ESM_APU_ATFP_FLG_DONE           0x02
0415 #define ESM_APU_ATFP_FLG_INPROCESS      0x03
0416 
0417 
0418 /* capture mixing buffer size */
0419 #define ESM_MEM_ALIGN       0x1000
0420 #define ESM_MIXBUF_SIZE     0x400
0421 
0422 #define ESM_MODE_PLAY       0
0423 #define ESM_MODE_CAPTURE    1
0424 
0425 
0426 /* APU use in the driver */
0427 enum snd_enum_apu_type {
0428     ESM_APU_PCM_PLAY,
0429     ESM_APU_PCM_CAPTURE,
0430     ESM_APU_PCM_RATECONV,
0431     ESM_APU_FREE
0432 };
0433 
0434 /* chip type */
0435 enum {
0436     TYPE_MAESTRO, TYPE_MAESTRO2, TYPE_MAESTRO2E
0437 };
0438 
0439 /* DMA Hack! */
0440 struct esm_memory {
0441     struct snd_dma_buffer buf;
0442     int empty;  /* status */
0443     struct list_head list;
0444 };
0445 
0446 /* Playback Channel */
0447 struct esschan {
0448     int running;
0449 
0450     u8 apu[4];
0451     u8 apu_mode[4];
0452 
0453     /* playback/capture pcm buffer */
0454     struct esm_memory *memory;
0455     /* capture mixer buffer */
0456     struct esm_memory *mixbuf;
0457 
0458     unsigned int hwptr; /* current hw pointer in bytes */
0459     unsigned int count; /* sample counter in bytes */
0460     unsigned int dma_size;  /* total buffer size in bytes */
0461     unsigned int frag_size; /* period size in bytes */
0462     unsigned int wav_shift;
0463     u16 base[4];        /* offset for ptr */
0464 
0465     /* stereo/16bit flag */
0466     unsigned char fmt;
0467     int mode;   /* playback / capture */
0468 
0469     int bob_freq;   /* required timer frequency */
0470 
0471     struct snd_pcm_substream *substream;
0472 
0473     /* linked list */
0474     struct list_head list;
0475 
0476 #ifdef CONFIG_PM_SLEEP
0477     u16 wc_map[4];
0478 #endif
0479 };
0480 
0481 struct es1968 {
0482     /* Module Config */
0483     int total_bufsize;          /* in bytes */
0484 
0485     int playback_streams, capture_streams;
0486 
0487     unsigned int clock;     /* clock */
0488     /* for clock measurement */
0489     unsigned int in_measurement: 1;
0490     unsigned int measure_apu;
0491     unsigned int measure_lastpos;
0492     unsigned int measure_count;
0493 
0494     /* buffer */
0495     struct snd_dma_buffer dma;
0496 
0497     /* Resources... */
0498     int irq;
0499     unsigned long io_port;
0500     int type;
0501     struct pci_dev *pci;
0502     struct snd_card *card;
0503     struct snd_pcm *pcm;
0504     int do_pm;      /* power-management enabled */
0505 
0506     /* DMA memory block */
0507     struct list_head buf_list;
0508 
0509     /* ALSA Stuff */
0510     struct snd_ac97 *ac97;
0511     struct snd_rawmidi *rmidi;
0512 
0513     spinlock_t reg_lock;
0514     unsigned int in_suspend;
0515 
0516     /* Maestro Stuff */
0517     u16 maestro_map[32];
0518     int bobclient;      /* active timer instancs */
0519     int bob_freq;       /* timer frequency */
0520     struct mutex memory_mutex;  /* memory lock */
0521 
0522     /* APU states */
0523     unsigned char apu[NR_APUS];
0524 
0525     /* active substreams */
0526     struct list_head substream_list;
0527     spinlock_t substream_lock;
0528 
0529 #ifdef CONFIG_PM_SLEEP
0530     u16 apu_map[NR_APUS][NR_APU_REGS];
0531 #endif
0532 
0533 #ifdef SUPPORT_JOYSTICK
0534     struct gameport *gameport;
0535 #endif
0536 
0537 #ifdef CONFIG_SND_ES1968_INPUT
0538     struct input_dev *input_dev;
0539     char phys[64];          /* physical device path */
0540 #else
0541     struct snd_kcontrol *master_switch; /* for h/w volume control */
0542     struct snd_kcontrol *master_volume;
0543 #endif
0544     struct work_struct hwvol_work;
0545 
0546 #ifdef CONFIG_SND_ES1968_RADIO
0547     struct v4l2_device v4l2_dev;
0548     struct snd_tea575x tea;
0549     unsigned int tea575x_tuner;
0550 #endif
0551 };
0552 
0553 static irqreturn_t snd_es1968_interrupt(int irq, void *dev_id);
0554 
0555 static const struct pci_device_id snd_es1968_ids[] = {
0556     /* Maestro 1 */
0557         { 0x1285, 0x0100, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_MULTIMEDIA_AUDIO << 8, 0xffff00, TYPE_MAESTRO },
0558     /* Maestro 2 */
0559     { 0x125d, 0x1968, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_MULTIMEDIA_AUDIO << 8, 0xffff00, TYPE_MAESTRO2 },
0560     /* Maestro 2E */
0561         { 0x125d, 0x1978, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_MULTIMEDIA_AUDIO << 8, 0xffff00, TYPE_MAESTRO2E },
0562     { 0, }
0563 };
0564 
0565 MODULE_DEVICE_TABLE(pci, snd_es1968_ids);
0566 
0567 /* *********************
0568    * Low Level Funcs!  *
0569    *********************/
0570 
0571 /* no spinlock */
0572 static void __maestro_write(struct es1968 *chip, u16 reg, u16 data)
0573 {
0574     outw(reg, chip->io_port + ESM_INDEX);
0575     outw(data, chip->io_port + ESM_DATA);
0576     chip->maestro_map[reg] = data;
0577 }
0578 
0579 static inline void maestro_write(struct es1968 *chip, u16 reg, u16 data)
0580 {
0581     unsigned long flags;
0582     spin_lock_irqsave(&chip->reg_lock, flags);
0583     __maestro_write(chip, reg, data);
0584     spin_unlock_irqrestore(&chip->reg_lock, flags);
0585 }
0586 
0587 /* no spinlock */
0588 static u16 __maestro_read(struct es1968 *chip, u16 reg)
0589 {
0590     if (READABLE_MAP & (1 << reg)) {
0591         outw(reg, chip->io_port + ESM_INDEX);
0592         chip->maestro_map[reg] = inw(chip->io_port + ESM_DATA);
0593     }
0594     return chip->maestro_map[reg];
0595 }
0596 
0597 static inline u16 maestro_read(struct es1968 *chip, u16 reg)
0598 {
0599     unsigned long flags;
0600     u16 result;
0601     spin_lock_irqsave(&chip->reg_lock, flags);
0602     result = __maestro_read(chip, reg);
0603     spin_unlock_irqrestore(&chip->reg_lock, flags);
0604     return result;
0605 }
0606 
0607 /* Wait for the codec bus to be free */
0608 static int snd_es1968_ac97_wait(struct es1968 *chip)
0609 {
0610     int timeout = 100000;
0611 
0612     while (timeout-- > 0) {
0613         if (!(inb(chip->io_port + ESM_AC97_INDEX) & 1))
0614             return 0;
0615         cond_resched();
0616     }
0617     dev_dbg(chip->card->dev, "ac97 timeout\n");
0618     return 1; /* timeout */
0619 }
0620 
0621 static int snd_es1968_ac97_wait_poll(struct es1968 *chip)
0622 {
0623     int timeout = 100000;
0624 
0625     while (timeout-- > 0) {
0626         if (!(inb(chip->io_port + ESM_AC97_INDEX) & 1))
0627             return 0;
0628     }
0629     dev_dbg(chip->card->dev, "ac97 timeout\n");
0630     return 1; /* timeout */
0631 }
0632 
0633 static void snd_es1968_ac97_write(struct snd_ac97 *ac97, unsigned short reg, unsigned short val)
0634 {
0635     struct es1968 *chip = ac97->private_data;
0636 
0637     snd_es1968_ac97_wait(chip);
0638 
0639     /* Write the bus */
0640     outw(val, chip->io_port + ESM_AC97_DATA);
0641     /*msleep(1);*/
0642     outb(reg, chip->io_port + ESM_AC97_INDEX);
0643     /*msleep(1);*/
0644 }
0645 
0646 static unsigned short snd_es1968_ac97_read(struct snd_ac97 *ac97, unsigned short reg)
0647 {
0648     u16 data = 0;
0649     struct es1968 *chip = ac97->private_data;
0650 
0651     snd_es1968_ac97_wait(chip);
0652 
0653     outb(reg | 0x80, chip->io_port + ESM_AC97_INDEX);
0654     /*msleep(1);*/
0655 
0656     if (!snd_es1968_ac97_wait_poll(chip)) {
0657         data = inw(chip->io_port + ESM_AC97_DATA);
0658         /*msleep(1);*/
0659     }
0660 
0661     return data;
0662 }
0663 
0664 /* no spinlock */
0665 static void apu_index_set(struct es1968 *chip, u16 index)
0666 {
0667     int i;
0668     __maestro_write(chip, IDR1_CRAM_POINTER, index);
0669     for (i = 0; i < 1000; i++)
0670         if (__maestro_read(chip, IDR1_CRAM_POINTER) == index)
0671             return;
0672     dev_dbg(chip->card->dev, "APU register select failed. (Timeout)\n");
0673 }
0674 
0675 /* no spinlock */
0676 static void apu_data_set(struct es1968 *chip, u16 data)
0677 {
0678     int i;
0679     for (i = 0; i < 1000; i++) {
0680         if (__maestro_read(chip, IDR0_DATA_PORT) == data)
0681             return;
0682         __maestro_write(chip, IDR0_DATA_PORT, data);
0683     }
0684     dev_dbg(chip->card->dev, "APU register set probably failed (Timeout)!\n");
0685 }
0686 
0687 /* no spinlock */
0688 static void __apu_set_register(struct es1968 *chip, u16 channel, u8 reg, u16 data)
0689 {
0690     if (snd_BUG_ON(channel >= NR_APUS))
0691         return;
0692 #ifdef CONFIG_PM_SLEEP
0693     chip->apu_map[channel][reg] = data;
0694 #endif
0695     reg |= (channel << 4);
0696     apu_index_set(chip, reg);
0697     apu_data_set(chip, data);
0698 }
0699 
0700 static void apu_set_register(struct es1968 *chip, u16 channel, u8 reg, u16 data)
0701 {
0702     unsigned long flags;
0703     spin_lock_irqsave(&chip->reg_lock, flags);
0704     __apu_set_register(chip, channel, reg, data);
0705     spin_unlock_irqrestore(&chip->reg_lock, flags);
0706 }
0707 
0708 static u16 __apu_get_register(struct es1968 *chip, u16 channel, u8 reg)
0709 {
0710     if (snd_BUG_ON(channel >= NR_APUS))
0711         return 0;
0712     reg |= (channel << 4);
0713     apu_index_set(chip, reg);
0714     return __maestro_read(chip, IDR0_DATA_PORT);
0715 }
0716 
0717 static u16 apu_get_register(struct es1968 *chip, u16 channel, u8 reg)
0718 {
0719     unsigned long flags;
0720     u16 v;
0721     spin_lock_irqsave(&chip->reg_lock, flags);
0722     v = __apu_get_register(chip, channel, reg);
0723     spin_unlock_irqrestore(&chip->reg_lock, flags);
0724     return v;
0725 }
0726 
0727 #if 0 /* ASSP is not supported */
0728 
0729 static void assp_set_register(struct es1968 *chip, u32 reg, u32 value)
0730 {
0731     unsigned long flags;
0732 
0733     spin_lock_irqsave(&chip->reg_lock, flags);
0734     outl(reg, chip->io_port + ASSP_INDEX);
0735     outl(value, chip->io_port + ASSP_DATA);
0736     spin_unlock_irqrestore(&chip->reg_lock, flags);
0737 }
0738 
0739 static u32 assp_get_register(struct es1968 *chip, u32 reg)
0740 {
0741     unsigned long flags;
0742     u32 value;
0743 
0744     spin_lock_irqsave(&chip->reg_lock, flags);
0745     outl(reg, chip->io_port + ASSP_INDEX);
0746     value = inl(chip->io_port + ASSP_DATA);
0747     spin_unlock_irqrestore(&chip->reg_lock, flags);
0748 
0749     return value;
0750 }
0751 
0752 #endif
0753 
0754 static void wave_set_register(struct es1968 *chip, u16 reg, u16 value)
0755 {
0756     unsigned long flags;
0757 
0758     spin_lock_irqsave(&chip->reg_lock, flags);
0759     outw(reg, chip->io_port + WC_INDEX);
0760     outw(value, chip->io_port + WC_DATA);
0761     spin_unlock_irqrestore(&chip->reg_lock, flags);
0762 }
0763 
0764 static u16 wave_get_register(struct es1968 *chip, u16 reg)
0765 {
0766     unsigned long flags;
0767     u16 value;
0768 
0769     spin_lock_irqsave(&chip->reg_lock, flags);
0770     outw(reg, chip->io_port + WC_INDEX);
0771     value = inw(chip->io_port + WC_DATA);
0772     spin_unlock_irqrestore(&chip->reg_lock, flags);
0773 
0774     return value;
0775 }
0776 
0777 /* *******************
0778    * Bob the Timer!  *
0779    *******************/
0780 
0781 static void snd_es1968_bob_stop(struct es1968 *chip)
0782 {
0783     u16 reg;
0784 
0785     reg = __maestro_read(chip, 0x11);
0786     reg &= ~ESM_BOB_ENABLE;
0787     __maestro_write(chip, 0x11, reg);
0788     reg = __maestro_read(chip, 0x17);
0789     reg &= ~ESM_BOB_START;
0790     __maestro_write(chip, 0x17, reg);
0791 }
0792 
0793 static void snd_es1968_bob_start(struct es1968 *chip)
0794 {
0795     int prescale;
0796     int divide;
0797 
0798     /* compute ideal interrupt frequency for buffer size & play rate */
0799     /* first, find best prescaler value to match freq */
0800     for (prescale = 5; prescale < 12; prescale++)
0801         if (chip->bob_freq > (ESS_SYSCLK >> (prescale + 9)))
0802             break;
0803 
0804     /* next, back off prescaler whilst getting divider into optimum range */
0805     divide = 1;
0806     while ((prescale > 5) && (divide < 32)) {
0807         prescale--;
0808         divide <<= 1;
0809     }
0810     divide >>= 1;
0811 
0812     /* now fine-tune the divider for best match */
0813     for (; divide < 31; divide++)
0814         if (chip->bob_freq >
0815             ((ESS_SYSCLK >> (prescale + 9)) / (divide + 1))) break;
0816 
0817     /* divide = 0 is illegal, but don't let prescale = 4! */
0818     if (divide == 0) {
0819         divide++;
0820         if (prescale > 5)
0821             prescale--;
0822     } else if (divide > 1)
0823         divide--;
0824 
0825     __maestro_write(chip, 6, 0x9000 | (prescale << 5) | divide);    /* set reg */
0826 
0827     /* Now set IDR 11/17 */
0828     __maestro_write(chip, 0x11, __maestro_read(chip, 0x11) | 1);
0829     __maestro_write(chip, 0x17, __maestro_read(chip, 0x17) | 1);
0830 }
0831 
0832 /* call with substream spinlock */
0833 static void snd_es1968_bob_inc(struct es1968 *chip, int freq)
0834 {
0835     chip->bobclient++;
0836     if (chip->bobclient == 1) {
0837         chip->bob_freq = freq;
0838         snd_es1968_bob_start(chip);
0839     } else if (chip->bob_freq < freq) {
0840         snd_es1968_bob_stop(chip);
0841         chip->bob_freq = freq;
0842         snd_es1968_bob_start(chip);
0843     }
0844 }
0845 
0846 /* call with substream spinlock */
0847 static void snd_es1968_bob_dec(struct es1968 *chip)
0848 {
0849     chip->bobclient--;
0850     if (chip->bobclient <= 0)
0851         snd_es1968_bob_stop(chip);
0852     else if (chip->bob_freq > ESM_BOB_FREQ) {
0853         /* check reduction of timer frequency */
0854         int max_freq = ESM_BOB_FREQ;
0855         struct esschan *es;
0856         list_for_each_entry(es, &chip->substream_list, list) {
0857             if (max_freq < es->bob_freq)
0858                 max_freq = es->bob_freq;
0859         }
0860         if (max_freq != chip->bob_freq) {
0861             snd_es1968_bob_stop(chip);
0862             chip->bob_freq = max_freq;
0863             snd_es1968_bob_start(chip);
0864         }
0865     }
0866 }
0867 
0868 static int
0869 snd_es1968_calc_bob_rate(struct es1968 *chip, struct esschan *es,
0870              struct snd_pcm_runtime *runtime)
0871 {
0872     /* we acquire 4 interrupts per period for precise control.. */
0873     int freq = runtime->rate * 4;
0874     if (es->fmt & ESS_FMT_STEREO)
0875         freq <<= 1;
0876     if (es->fmt & ESS_FMT_16BIT)
0877         freq <<= 1;
0878     freq /= es->frag_size;
0879     if (freq < ESM_BOB_FREQ)
0880         freq = ESM_BOB_FREQ;
0881     else if (freq > ESM_BOB_FREQ_MAX)
0882         freq = ESM_BOB_FREQ_MAX;
0883     return freq;
0884 }
0885 
0886 
0887 /*************
0888  *  PCM Part *
0889  *************/
0890 
0891 static u32 snd_es1968_compute_rate(struct es1968 *chip, u32 freq)
0892 {
0893     u32 rate = (freq << 16) / chip->clock;
0894 #if 0 /* XXX: do we need this? */ 
0895     if (rate > 0x10000)
0896         rate = 0x10000;
0897 #endif
0898     return rate;
0899 }
0900 
0901 /* get current pointer */
0902 static inline unsigned int
0903 snd_es1968_get_dma_ptr(struct es1968 *chip, struct esschan *es)
0904 {
0905     unsigned int offset;
0906 
0907     offset = apu_get_register(chip, es->apu[0], 5);
0908 
0909     offset -= es->base[0];
0910 
0911     return (offset & 0xFFFE);   /* hardware is in words */
0912 }
0913 
0914 static void snd_es1968_apu_set_freq(struct es1968 *chip, int apu, int freq)
0915 {
0916     apu_set_register(chip, apu, 2,
0917                (apu_get_register(chip, apu, 2) & 0x00FF) |
0918                ((freq & 0xff) << 8) | 0x10);
0919     apu_set_register(chip, apu, 3, freq >> 8);
0920 }
0921 
0922 /* spin lock held */
0923 static inline void snd_es1968_trigger_apu(struct es1968 *esm, int apu, int mode)
0924 {
0925     /* set the APU mode */
0926     __apu_set_register(esm, apu, 0,
0927                (__apu_get_register(esm, apu, 0) & 0xff0f) |
0928                (mode << 4));
0929 }
0930 
0931 static void snd_es1968_pcm_start(struct es1968 *chip, struct esschan *es)
0932 {
0933     spin_lock(&chip->reg_lock);
0934     __apu_set_register(chip, es->apu[0], 5, es->base[0]);
0935     snd_es1968_trigger_apu(chip, es->apu[0], es->apu_mode[0]);
0936     if (es->mode == ESM_MODE_CAPTURE) {
0937         __apu_set_register(chip, es->apu[2], 5, es->base[2]);
0938         snd_es1968_trigger_apu(chip, es->apu[2], es->apu_mode[2]);
0939     }
0940     if (es->fmt & ESS_FMT_STEREO) {
0941         __apu_set_register(chip, es->apu[1], 5, es->base[1]);
0942         snd_es1968_trigger_apu(chip, es->apu[1], es->apu_mode[1]);
0943         if (es->mode == ESM_MODE_CAPTURE) {
0944             __apu_set_register(chip, es->apu[3], 5, es->base[3]);
0945             snd_es1968_trigger_apu(chip, es->apu[3], es->apu_mode[3]);
0946         }
0947     }
0948     spin_unlock(&chip->reg_lock);
0949 }
0950 
0951 static void snd_es1968_pcm_stop(struct es1968 *chip, struct esschan *es)
0952 {
0953     spin_lock(&chip->reg_lock);
0954     snd_es1968_trigger_apu(chip, es->apu[0], 0);
0955     snd_es1968_trigger_apu(chip, es->apu[1], 0);
0956     if (es->mode == ESM_MODE_CAPTURE) {
0957         snd_es1968_trigger_apu(chip, es->apu[2], 0);
0958         snd_es1968_trigger_apu(chip, es->apu[3], 0);
0959     }
0960     spin_unlock(&chip->reg_lock);
0961 }
0962 
0963 /* set the wavecache control reg */
0964 static void snd_es1968_program_wavecache(struct es1968 *chip, struct esschan *es,
0965                      int channel, u32 addr, int capture)
0966 {
0967     u32 tmpval = (addr - 0x10) & 0xFFF8;
0968 
0969     if (! capture) {
0970         if (!(es->fmt & ESS_FMT_16BIT))
0971             tmpval |= 4;    /* 8bit */
0972         if (es->fmt & ESS_FMT_STEREO)
0973             tmpval |= 2;    /* stereo */
0974     }
0975 
0976     /* set the wavecache control reg */
0977     wave_set_register(chip, es->apu[channel] << 3, tmpval);
0978 
0979 #ifdef CONFIG_PM_SLEEP
0980     es->wc_map[channel] = tmpval;
0981 #endif
0982 }
0983 
0984 
0985 static void snd_es1968_playback_setup(struct es1968 *chip, struct esschan *es,
0986                       struct snd_pcm_runtime *runtime)
0987 {
0988     u32 pa;
0989     int high_apu = 0;
0990     int channel, apu;
0991     int i, size;
0992     unsigned long flags;
0993     u32 freq;
0994 
0995     size = es->dma_size >> es->wav_shift;
0996 
0997     if (es->fmt & ESS_FMT_STEREO)
0998         high_apu++;
0999 
1000     for (channel = 0; channel <= high_apu; channel++) {
1001         apu = es->apu[channel];
1002 
1003         snd_es1968_program_wavecache(chip, es, channel, es->memory->buf.addr, 0);
1004 
1005         /* Offset to PCMBAR */
1006         pa = es->memory->buf.addr;
1007         pa -= chip->dma.addr;
1008         pa >>= 1;   /* words */
1009 
1010         pa |= 0x00400000;   /* System RAM (Bit 22) */
1011 
1012         if (es->fmt & ESS_FMT_STEREO) {
1013             /* Enable stereo */
1014             if (channel)
1015                 pa |= 0x00800000;   /* (Bit 23) */
1016             if (es->fmt & ESS_FMT_16BIT)
1017                 pa >>= 1;
1018         }
1019 
1020         /* base offset of dma calcs when reading the pointer
1021            on this left one */
1022         es->base[channel] = pa & 0xFFFF;
1023 
1024         for (i = 0; i < 16; i++)
1025             apu_set_register(chip, apu, i, 0x0000);
1026 
1027         /* Load the buffer into the wave engine */
1028         apu_set_register(chip, apu, 4, ((pa >> 16) & 0xFF) << 8);
1029         apu_set_register(chip, apu, 5, pa & 0xFFFF);
1030         apu_set_register(chip, apu, 6, (pa + size) & 0xFFFF);
1031         /* setting loop == sample len */
1032         apu_set_register(chip, apu, 7, size);
1033 
1034         /* clear effects/env.. */
1035         apu_set_register(chip, apu, 8, 0x0000);
1036         /* set amp now to 0xd0 (?), low byte is 'amplitude dest'? */
1037         apu_set_register(chip, apu, 9, 0xD000);
1038 
1039         /* clear routing stuff */
1040         apu_set_register(chip, apu, 11, 0x0000);
1041         /* dma on, no envelopes, filter to all 1s) */
1042         apu_set_register(chip, apu, 0, 0x400F);
1043 
1044         if (es->fmt & ESS_FMT_16BIT)
1045             es->apu_mode[channel] = ESM_APU_16BITLINEAR;
1046         else
1047             es->apu_mode[channel] = ESM_APU_8BITLINEAR;
1048 
1049         if (es->fmt & ESS_FMT_STEREO) {
1050             /* set panning: left or right */
1051             /* Check: different panning. On my Canyon 3D Chipset the
1052                Channels are swapped. I don't know, about the output
1053                to the SPDif Link. Perhaps you have to change this
1054                and not the APU Regs 4-5. */
1055             apu_set_register(chip, apu, 10,
1056                      0x8F00 | (channel ? 0 : 0x10));
1057             es->apu_mode[channel] += 1; /* stereo */
1058         } else
1059             apu_set_register(chip, apu, 10, 0x8F08);
1060     }
1061 
1062     spin_lock_irqsave(&chip->reg_lock, flags);
1063     /* clear WP interrupts */
1064     outw(1, chip->io_port + 0x04);
1065     /* enable WP ints */
1066     outw(inw(chip->io_port + ESM_PORT_HOST_IRQ) | ESM_HIRQ_DSIE, chip->io_port + ESM_PORT_HOST_IRQ);
1067     spin_unlock_irqrestore(&chip->reg_lock, flags);
1068 
1069     freq = runtime->rate;
1070     /* set frequency */
1071     if (freq > 48000)
1072         freq = 48000;
1073     if (freq < 4000)
1074         freq = 4000;
1075 
1076     /* hmmm.. */
1077     if (!(es->fmt & ESS_FMT_16BIT) && !(es->fmt & ESS_FMT_STEREO))
1078         freq >>= 1;
1079 
1080     freq = snd_es1968_compute_rate(chip, freq);
1081 
1082     /* Load the frequency, turn on 6dB */
1083     snd_es1968_apu_set_freq(chip, es->apu[0], freq);
1084     snd_es1968_apu_set_freq(chip, es->apu[1], freq);
1085 }
1086 
1087 
1088 static void init_capture_apu(struct es1968 *chip, struct esschan *es, int channel,
1089                  unsigned int pa, unsigned int bsize,
1090                  int mode, int route)
1091 {
1092     int i, apu = es->apu[channel];
1093 
1094     es->apu_mode[channel] = mode;
1095 
1096     /* set the wavecache control reg */
1097     snd_es1968_program_wavecache(chip, es, channel, pa, 1);
1098 
1099     /* Offset to PCMBAR */
1100     pa -= chip->dma.addr;
1101     pa >>= 1;   /* words */
1102 
1103     /* base offset of dma calcs when reading the pointer
1104        on this left one */
1105     es->base[channel] = pa & 0xFFFF;
1106     pa |= 0x00400000;   /* bit 22 -> System RAM */
1107 
1108     /* Begin loading the APU */
1109     for (i = 0; i < 16; i++)
1110         apu_set_register(chip, apu, i, 0x0000);
1111 
1112     /* need to enable subgroups.. and we should probably
1113        have different groups for different /dev/dsps..  */
1114     apu_set_register(chip, apu, 2, 0x8);
1115 
1116     /* Load the buffer into the wave engine */
1117     apu_set_register(chip, apu, 4, ((pa >> 16) & 0xFF) << 8);
1118     apu_set_register(chip, apu, 5, pa & 0xFFFF);
1119     apu_set_register(chip, apu, 6, (pa + bsize) & 0xFFFF);
1120     apu_set_register(chip, apu, 7, bsize);
1121     /* clear effects/env.. */
1122     apu_set_register(chip, apu, 8, 0x00F0);
1123     /* amplitude now?  sure.  why not.  */
1124     apu_set_register(chip, apu, 9, 0x0000);
1125     /* set filter tune, radius, polar pan */
1126     apu_set_register(chip, apu, 10, 0x8F08);
1127     /* route input */
1128     apu_set_register(chip, apu, 11, route);
1129     /* dma on, no envelopes, filter to all 1s) */
1130     apu_set_register(chip, apu, 0, 0x400F);
1131 }
1132 
1133 static void snd_es1968_capture_setup(struct es1968 *chip, struct esschan *es,
1134                      struct snd_pcm_runtime *runtime)
1135 {
1136     int size;
1137     u32 freq;
1138     unsigned long flags;
1139 
1140     size = es->dma_size >> es->wav_shift;
1141 
1142     /* APU assignments:
1143        0 = mono/left SRC
1144        1 = right SRC
1145        2 = mono/left Input Mixer
1146        3 = right Input Mixer
1147     */
1148     /* data seems to flow from the codec, through an apu into
1149        the 'mixbuf' bit of page, then through the SRC apu
1150        and out to the real 'buffer'.  ok.  sure.  */
1151 
1152     /* input mixer (left/mono) */
1153     /* parallel in crap, see maestro reg 0xC [8-11] */
1154     init_capture_apu(chip, es, 2,
1155              es->mixbuf->buf.addr, ESM_MIXBUF_SIZE/4, /* in words */
1156              ESM_APU_INPUTMIXER, 0x14);
1157     /* SRC (left/mono); get input from inputing apu */
1158     init_capture_apu(chip, es, 0, es->memory->buf.addr, size,
1159              ESM_APU_SRCONVERTOR, es->apu[2]);
1160     if (es->fmt & ESS_FMT_STEREO) {
1161         /* input mixer (right) */
1162         init_capture_apu(chip, es, 3,
1163                  es->mixbuf->buf.addr + ESM_MIXBUF_SIZE/2,
1164                  ESM_MIXBUF_SIZE/4, /* in words */
1165                  ESM_APU_INPUTMIXER, 0x15);
1166         /* SRC (right) */
1167         init_capture_apu(chip, es, 1,
1168                  es->memory->buf.addr + size*2, size,
1169                  ESM_APU_SRCONVERTOR, es->apu[3]);
1170     }
1171 
1172     freq = runtime->rate;
1173     /* Sample Rate conversion APUs don't like 0x10000 for their rate */
1174     if (freq > 47999)
1175         freq = 47999;
1176     if (freq < 4000)
1177         freq = 4000;
1178 
1179     freq = snd_es1968_compute_rate(chip, freq);
1180 
1181     /* Load the frequency, turn on 6dB */
1182     snd_es1968_apu_set_freq(chip, es->apu[0], freq);
1183     snd_es1968_apu_set_freq(chip, es->apu[1], freq);
1184 
1185     /* fix mixer rate at 48khz.  and its _must_ be 0x10000. */
1186     freq = 0x10000;
1187     snd_es1968_apu_set_freq(chip, es->apu[2], freq);
1188     snd_es1968_apu_set_freq(chip, es->apu[3], freq);
1189 
1190     spin_lock_irqsave(&chip->reg_lock, flags);
1191     /* clear WP interrupts */
1192     outw(1, chip->io_port + 0x04);
1193     /* enable WP ints */
1194     outw(inw(chip->io_port + ESM_PORT_HOST_IRQ) | ESM_HIRQ_DSIE, chip->io_port + ESM_PORT_HOST_IRQ);
1195     spin_unlock_irqrestore(&chip->reg_lock, flags);
1196 }
1197 
1198 /*******************
1199  *  ALSA Interface *
1200  *******************/
1201 
1202 static int snd_es1968_pcm_prepare(struct snd_pcm_substream *substream)
1203 {
1204     struct es1968 *chip = snd_pcm_substream_chip(substream);
1205     struct snd_pcm_runtime *runtime = substream->runtime;
1206     struct esschan *es = runtime->private_data;
1207 
1208     es->dma_size = snd_pcm_lib_buffer_bytes(substream);
1209     es->frag_size = snd_pcm_lib_period_bytes(substream);
1210 
1211     es->wav_shift = 1; /* maestro handles always 16bit */
1212     es->fmt = 0;
1213     if (snd_pcm_format_width(runtime->format) == 16)
1214         es->fmt |= ESS_FMT_16BIT;
1215     if (runtime->channels > 1) {
1216         es->fmt |= ESS_FMT_STEREO;
1217         if (es->fmt & ESS_FMT_16BIT) /* 8bit is already word shifted */
1218             es->wav_shift++;
1219     }
1220     es->bob_freq = snd_es1968_calc_bob_rate(chip, es, runtime);
1221 
1222     switch (es->mode) {
1223     case ESM_MODE_PLAY:
1224         snd_es1968_playback_setup(chip, es, runtime);
1225         break;
1226     case ESM_MODE_CAPTURE:
1227         snd_es1968_capture_setup(chip, es, runtime);
1228         break;
1229     }
1230 
1231     return 0;
1232 }
1233 
1234 static int snd_es1968_pcm_trigger(struct snd_pcm_substream *substream, int cmd)
1235 {
1236     struct es1968 *chip = snd_pcm_substream_chip(substream);
1237     struct esschan *es = substream->runtime->private_data;
1238 
1239     spin_lock(&chip->substream_lock);
1240     switch (cmd) {
1241     case SNDRV_PCM_TRIGGER_START:
1242     case SNDRV_PCM_TRIGGER_RESUME:
1243         if (es->running)
1244             break;
1245         snd_es1968_bob_inc(chip, es->bob_freq);
1246         es->count = 0;
1247         es->hwptr = 0;
1248         snd_es1968_pcm_start(chip, es);
1249         es->running = 1;
1250         break;
1251     case SNDRV_PCM_TRIGGER_STOP:
1252     case SNDRV_PCM_TRIGGER_SUSPEND:
1253         if (! es->running)
1254             break;
1255         snd_es1968_pcm_stop(chip, es);
1256         es->running = 0;
1257         snd_es1968_bob_dec(chip);
1258         break;
1259     }
1260     spin_unlock(&chip->substream_lock);
1261     return 0;
1262 }
1263 
1264 static snd_pcm_uframes_t snd_es1968_pcm_pointer(struct snd_pcm_substream *substream)
1265 {
1266     struct es1968 *chip = snd_pcm_substream_chip(substream);
1267     struct esschan *es = substream->runtime->private_data;
1268     unsigned int ptr;
1269 
1270     ptr = snd_es1968_get_dma_ptr(chip, es) << es->wav_shift;
1271     
1272     return bytes_to_frames(substream->runtime, ptr % es->dma_size);
1273 }
1274 
1275 static const struct snd_pcm_hardware snd_es1968_playback = {
1276     .info =         (SNDRV_PCM_INFO_MMAP |
1277                              SNDRV_PCM_INFO_MMAP_VALID |
1278                  SNDRV_PCM_INFO_INTERLEAVED |
1279                  SNDRV_PCM_INFO_BLOCK_TRANSFER |
1280                  /*SNDRV_PCM_INFO_PAUSE |*/
1281                  SNDRV_PCM_INFO_RESUME),
1282     .formats =      SNDRV_PCM_FMTBIT_U8 | SNDRV_PCM_FMTBIT_S16_LE,
1283     .rates =        SNDRV_PCM_RATE_CONTINUOUS | SNDRV_PCM_RATE_8000_48000,
1284     .rate_min =     4000,
1285     .rate_max =     48000,
1286     .channels_min =     1,
1287     .channels_max =     2,
1288     .buffer_bytes_max = 65536,
1289     .period_bytes_min = 256,
1290     .period_bytes_max = 65536,
1291     .periods_min =      1,
1292     .periods_max =      1024,
1293     .fifo_size =        0,
1294 };
1295 
1296 static const struct snd_pcm_hardware snd_es1968_capture = {
1297     .info =         (SNDRV_PCM_INFO_NONINTERLEAVED |
1298                  SNDRV_PCM_INFO_MMAP |
1299                  SNDRV_PCM_INFO_MMAP_VALID |
1300                  SNDRV_PCM_INFO_BLOCK_TRANSFER |
1301                  /*SNDRV_PCM_INFO_PAUSE |*/
1302                  SNDRV_PCM_INFO_RESUME),
1303     .formats =      /*SNDRV_PCM_FMTBIT_U8 |*/ SNDRV_PCM_FMTBIT_S16_LE,
1304     .rates =        SNDRV_PCM_RATE_CONTINUOUS | SNDRV_PCM_RATE_8000_48000,
1305     .rate_min =     4000,
1306     .rate_max =     48000,
1307     .channels_min =     1,
1308     .channels_max =     2,
1309     .buffer_bytes_max = 65536,
1310     .period_bytes_min = 256,
1311     .period_bytes_max = 65536,
1312     .periods_min =      1,
1313     .periods_max =      1024,
1314     .fifo_size =        0,
1315 };
1316 
1317 /* *************************
1318    * DMA memory management *
1319    *************************/
1320 
1321 /* Because the Maestro can only take addresses relative to the PCM base address
1322    register :( */
1323 
1324 static int calc_available_memory_size(struct es1968 *chip)
1325 {
1326     int max_size = 0;
1327     struct esm_memory *buf;
1328 
1329     mutex_lock(&chip->memory_mutex);
1330     list_for_each_entry(buf, &chip->buf_list, list) {
1331         if (buf->empty && buf->buf.bytes > max_size)
1332             max_size = buf->buf.bytes;
1333     }
1334     mutex_unlock(&chip->memory_mutex);
1335     if (max_size >= 128*1024)
1336         max_size = 127*1024;
1337     return max_size;
1338 }
1339 
1340 /* allocate a new memory chunk with the specified size */
1341 static struct esm_memory *snd_es1968_new_memory(struct es1968 *chip, int size)
1342 {
1343     struct esm_memory *buf;
1344 
1345     size = ALIGN(size, ESM_MEM_ALIGN);
1346     mutex_lock(&chip->memory_mutex);
1347     list_for_each_entry(buf, &chip->buf_list, list) {
1348         if (buf->empty && buf->buf.bytes >= size)
1349             goto __found;
1350     }
1351     mutex_unlock(&chip->memory_mutex);
1352     return NULL;
1353 
1354 __found:
1355     if (buf->buf.bytes > size) {
1356         struct esm_memory *chunk = kmalloc(sizeof(*chunk), GFP_KERNEL);
1357         if (chunk == NULL) {
1358             mutex_unlock(&chip->memory_mutex);
1359             return NULL;
1360         }
1361         chunk->buf = buf->buf;
1362         chunk->buf.bytes -= size;
1363         chunk->buf.area += size;
1364         chunk->buf.addr += size;
1365         chunk->empty = 1;
1366         buf->buf.bytes = size;
1367         list_add(&chunk->list, &buf->list);
1368     }
1369     buf->empty = 0;
1370     mutex_unlock(&chip->memory_mutex);
1371     return buf;
1372 }
1373 
1374 /* free a memory chunk */
1375 static void snd_es1968_free_memory(struct es1968 *chip, struct esm_memory *buf)
1376 {
1377     struct esm_memory *chunk;
1378 
1379     mutex_lock(&chip->memory_mutex);
1380     buf->empty = 1;
1381     if (buf->list.prev != &chip->buf_list) {
1382         chunk = list_entry(buf->list.prev, struct esm_memory, list);
1383         if (chunk->empty) {
1384             chunk->buf.bytes += buf->buf.bytes;
1385             list_del(&buf->list);
1386             kfree(buf);
1387             buf = chunk;
1388         }
1389     }
1390     if (buf->list.next != &chip->buf_list) {
1391         chunk = list_entry(buf->list.next, struct esm_memory, list);
1392         if (chunk->empty) {
1393             buf->buf.bytes += chunk->buf.bytes;
1394             list_del(&chunk->list);
1395             kfree(chunk);
1396         }
1397     }
1398     mutex_unlock(&chip->memory_mutex);
1399 }
1400 
1401 static void snd_es1968_free_dmabuf(struct es1968 *chip)
1402 {
1403     struct list_head *p;
1404 
1405     if (! chip->dma.area)
1406         return;
1407     snd_dma_free_pages(&chip->dma);
1408     while ((p = chip->buf_list.next) != &chip->buf_list) {
1409         struct esm_memory *chunk = list_entry(p, struct esm_memory, list);
1410         list_del(p);
1411         kfree(chunk);
1412     }
1413 }
1414 
1415 static int
1416 snd_es1968_init_dmabuf(struct es1968 *chip)
1417 {
1418     int err;
1419     struct esm_memory *chunk;
1420 
1421     err = snd_dma_alloc_pages_fallback(SNDRV_DMA_TYPE_DEV,
1422                        &chip->pci->dev,
1423                        chip->total_bufsize, &chip->dma);
1424     if (err < 0 || ! chip->dma.area) {
1425         dev_err(chip->card->dev,
1426             "can't allocate dma pages for size %d\n",
1427                chip->total_bufsize);
1428         return -ENOMEM;
1429     }
1430     if ((chip->dma.addr + chip->dma.bytes - 1) & ~((1 << 28) - 1)) {
1431         snd_dma_free_pages(&chip->dma);
1432         dev_err(chip->card->dev, "DMA buffer beyond 256MB.\n");
1433         return -ENOMEM;
1434     }
1435 
1436     INIT_LIST_HEAD(&chip->buf_list);
1437     /* allocate an empty chunk */
1438     chunk = kmalloc(sizeof(*chunk), GFP_KERNEL);
1439     if (chunk == NULL) {
1440         snd_es1968_free_dmabuf(chip);
1441         return -ENOMEM;
1442     }
1443     memset(chip->dma.area, 0, ESM_MEM_ALIGN);
1444     chunk->buf = chip->dma;
1445     chunk->buf.area += ESM_MEM_ALIGN;
1446     chunk->buf.addr += ESM_MEM_ALIGN;
1447     chunk->buf.bytes -= ESM_MEM_ALIGN;
1448     chunk->empty = 1;
1449     list_add(&chunk->list, &chip->buf_list);
1450 
1451     return 0;
1452 }
1453 
1454 /* setup the dma_areas */
1455 /* buffer is extracted from the pre-allocated memory chunk */
1456 static int snd_es1968_hw_params(struct snd_pcm_substream *substream,
1457                 struct snd_pcm_hw_params *hw_params)
1458 {
1459     struct es1968 *chip = snd_pcm_substream_chip(substream);
1460     struct snd_pcm_runtime *runtime = substream->runtime;
1461     struct esschan *chan = runtime->private_data;
1462     int size = params_buffer_bytes(hw_params);
1463 
1464     if (chan->memory) {
1465         if (chan->memory->buf.bytes >= size) {
1466             runtime->dma_bytes = size;
1467             return 0;
1468         }
1469         snd_es1968_free_memory(chip, chan->memory);
1470     }
1471     chan->memory = snd_es1968_new_memory(chip, size);
1472     if (chan->memory == NULL) {
1473         dev_dbg(chip->card->dev,
1474             "cannot allocate dma buffer: size = %d\n", size);
1475         return -ENOMEM;
1476     }
1477     snd_pcm_set_runtime_buffer(substream, &chan->memory->buf);
1478     return 1; /* area was changed */
1479 }
1480 
1481 /* remove dma areas if allocated */
1482 static int snd_es1968_hw_free(struct snd_pcm_substream *substream)
1483 {
1484     struct es1968 *chip = snd_pcm_substream_chip(substream);
1485     struct snd_pcm_runtime *runtime = substream->runtime;
1486     struct esschan *chan;
1487     
1488     if (runtime->private_data == NULL)
1489         return 0;
1490     chan = runtime->private_data;
1491     if (chan->memory) {
1492         snd_es1968_free_memory(chip, chan->memory);
1493         chan->memory = NULL;
1494     }
1495     return 0;
1496 }
1497 
1498 
1499 /*
1500  * allocate APU pair
1501  */
1502 static int snd_es1968_alloc_apu_pair(struct es1968 *chip, int type)
1503 {
1504     int apu;
1505 
1506     for (apu = 0; apu < NR_APUS; apu += 2) {
1507         if (chip->apu[apu] == ESM_APU_FREE &&
1508             chip->apu[apu + 1] == ESM_APU_FREE) {
1509             chip->apu[apu] = chip->apu[apu + 1] = type;
1510             return apu;
1511         }
1512     }
1513     return -EBUSY;
1514 }
1515 
1516 /*
1517  * release APU pair
1518  */
1519 static void snd_es1968_free_apu_pair(struct es1968 *chip, int apu)
1520 {
1521     chip->apu[apu] = chip->apu[apu + 1] = ESM_APU_FREE;
1522 }
1523 
1524 
1525 /******************
1526  * PCM open/close *
1527  ******************/
1528 
1529 static int snd_es1968_playback_open(struct snd_pcm_substream *substream)
1530 {
1531     struct es1968 *chip = snd_pcm_substream_chip(substream);
1532     struct snd_pcm_runtime *runtime = substream->runtime;
1533     struct esschan *es;
1534     int apu1;
1535 
1536     /* search 2 APUs */
1537     apu1 = snd_es1968_alloc_apu_pair(chip, ESM_APU_PCM_PLAY);
1538     if (apu1 < 0)
1539         return apu1;
1540 
1541     es = kzalloc(sizeof(*es), GFP_KERNEL);
1542     if (!es) {
1543         snd_es1968_free_apu_pair(chip, apu1);
1544         return -ENOMEM;
1545     }
1546 
1547     es->apu[0] = apu1;
1548     es->apu[1] = apu1 + 1;
1549     es->apu_mode[0] = 0;
1550     es->apu_mode[1] = 0;
1551     es->running = 0;
1552     es->substream = substream;
1553     es->mode = ESM_MODE_PLAY;
1554 
1555     runtime->private_data = es;
1556     runtime->hw = snd_es1968_playback;
1557     runtime->hw.buffer_bytes_max = runtime->hw.period_bytes_max =
1558         calc_available_memory_size(chip);
1559 
1560     spin_lock_irq(&chip->substream_lock);
1561     list_add(&es->list, &chip->substream_list);
1562     spin_unlock_irq(&chip->substream_lock);
1563 
1564     return 0;
1565 }
1566 
1567 static int snd_es1968_capture_open(struct snd_pcm_substream *substream)
1568 {
1569     struct snd_pcm_runtime *runtime = substream->runtime;
1570     struct es1968 *chip = snd_pcm_substream_chip(substream);
1571     struct esschan *es;
1572     int apu1, apu2;
1573 
1574     apu1 = snd_es1968_alloc_apu_pair(chip, ESM_APU_PCM_CAPTURE);
1575     if (apu1 < 0)
1576         return apu1;
1577     apu2 = snd_es1968_alloc_apu_pair(chip, ESM_APU_PCM_RATECONV);
1578     if (apu2 < 0) {
1579         snd_es1968_free_apu_pair(chip, apu1);
1580         return apu2;
1581     }
1582     
1583     es = kzalloc(sizeof(*es), GFP_KERNEL);
1584     if (!es) {
1585         snd_es1968_free_apu_pair(chip, apu1);
1586         snd_es1968_free_apu_pair(chip, apu2);
1587         return -ENOMEM;
1588     }
1589 
1590     es->apu[0] = apu1;
1591     es->apu[1] = apu1 + 1;
1592     es->apu[2] = apu2;
1593     es->apu[3] = apu2 + 1;
1594     es->apu_mode[0] = 0;
1595     es->apu_mode[1] = 0;
1596     es->apu_mode[2] = 0;
1597     es->apu_mode[3] = 0;
1598     es->running = 0;
1599     es->substream = substream;
1600     es->mode = ESM_MODE_CAPTURE;
1601 
1602     /* get mixbuffer */
1603     es->mixbuf = snd_es1968_new_memory(chip, ESM_MIXBUF_SIZE);
1604     if (!es->mixbuf) {
1605         snd_es1968_free_apu_pair(chip, apu1);
1606         snd_es1968_free_apu_pair(chip, apu2);
1607         kfree(es);
1608                 return -ENOMEM;
1609         }
1610     memset(es->mixbuf->buf.area, 0, ESM_MIXBUF_SIZE);
1611 
1612     runtime->private_data = es;
1613     runtime->hw = snd_es1968_capture;
1614     runtime->hw.buffer_bytes_max = runtime->hw.period_bytes_max =
1615         calc_available_memory_size(chip) - 1024; /* keep MIXBUF size */
1616     snd_pcm_hw_constraint_pow2(runtime, 0, SNDRV_PCM_HW_PARAM_BUFFER_BYTES);
1617 
1618     spin_lock_irq(&chip->substream_lock);
1619     list_add(&es->list, &chip->substream_list);
1620     spin_unlock_irq(&chip->substream_lock);
1621 
1622     return 0;
1623 }
1624 
1625 static int snd_es1968_playback_close(struct snd_pcm_substream *substream)
1626 {
1627     struct es1968 *chip = snd_pcm_substream_chip(substream);
1628     struct esschan *es;
1629 
1630     if (substream->runtime->private_data == NULL)
1631         return 0;
1632     es = substream->runtime->private_data;
1633     spin_lock_irq(&chip->substream_lock);
1634     list_del(&es->list);
1635     spin_unlock_irq(&chip->substream_lock);
1636     snd_es1968_free_apu_pair(chip, es->apu[0]);
1637     kfree(es);
1638 
1639     return 0;
1640 }
1641 
1642 static int snd_es1968_capture_close(struct snd_pcm_substream *substream)
1643 {
1644     struct es1968 *chip = snd_pcm_substream_chip(substream);
1645     struct esschan *es;
1646 
1647     if (substream->runtime->private_data == NULL)
1648         return 0;
1649     es = substream->runtime->private_data;
1650     spin_lock_irq(&chip->substream_lock);
1651     list_del(&es->list);
1652     spin_unlock_irq(&chip->substream_lock);
1653     snd_es1968_free_memory(chip, es->mixbuf);
1654     snd_es1968_free_apu_pair(chip, es->apu[0]);
1655     snd_es1968_free_apu_pair(chip, es->apu[2]);
1656     kfree(es);
1657 
1658     return 0;
1659 }
1660 
1661 static const struct snd_pcm_ops snd_es1968_playback_ops = {
1662     .open =     snd_es1968_playback_open,
1663     .close =    snd_es1968_playback_close,
1664     .hw_params =    snd_es1968_hw_params,
1665     .hw_free =  snd_es1968_hw_free,
1666     .prepare =  snd_es1968_pcm_prepare,
1667     .trigger =  snd_es1968_pcm_trigger,
1668     .pointer =  snd_es1968_pcm_pointer,
1669 };
1670 
1671 static const struct snd_pcm_ops snd_es1968_capture_ops = {
1672     .open =     snd_es1968_capture_open,
1673     .close =    snd_es1968_capture_close,
1674     .hw_params =    snd_es1968_hw_params,
1675     .hw_free =  snd_es1968_hw_free,
1676     .prepare =  snd_es1968_pcm_prepare,
1677     .trigger =  snd_es1968_pcm_trigger,
1678     .pointer =  snd_es1968_pcm_pointer,
1679 };
1680 
1681 
1682 /*
1683  * measure clock
1684  */
1685 #define CLOCK_MEASURE_BUFSIZE   16768   /* enough large for a single shot */
1686 
1687 static void es1968_measure_clock(struct es1968 *chip)
1688 {
1689     int i, apu;
1690     unsigned int pa, offset, t;
1691     struct esm_memory *memory;
1692     ktime_t start_time, stop_time;
1693     ktime_t diff;
1694 
1695     if (chip->clock == 0)
1696         chip->clock = 48000; /* default clock value */
1697 
1698     /* search 2 APUs (although one apu is enough) */
1699     apu = snd_es1968_alloc_apu_pair(chip, ESM_APU_PCM_PLAY);
1700     if (apu < 0) {
1701         dev_err(chip->card->dev, "Hmm, cannot find empty APU pair!?\n");
1702         return;
1703     }
1704     memory = snd_es1968_new_memory(chip, CLOCK_MEASURE_BUFSIZE);
1705     if (!memory) {
1706         dev_warn(chip->card->dev,
1707              "cannot allocate dma buffer - using default clock %d\n",
1708              chip->clock);
1709         snd_es1968_free_apu_pair(chip, apu);
1710         return;
1711     }
1712 
1713     memset(memory->buf.area, 0, CLOCK_MEASURE_BUFSIZE);
1714 
1715     wave_set_register(chip, apu << 3, (memory->buf.addr - 0x10) & 0xfff8);
1716 
1717     pa = (unsigned int)((memory->buf.addr - chip->dma.addr) >> 1);
1718     pa |= 0x00400000;   /* System RAM (Bit 22) */
1719 
1720     /* initialize apu */
1721     for (i = 0; i < 16; i++)
1722         apu_set_register(chip, apu, i, 0x0000);
1723 
1724     apu_set_register(chip, apu, 0, 0x400f);
1725     apu_set_register(chip, apu, 4, ((pa >> 16) & 0xff) << 8);
1726     apu_set_register(chip, apu, 5, pa & 0xffff);
1727     apu_set_register(chip, apu, 6, (pa + CLOCK_MEASURE_BUFSIZE/2) & 0xffff);
1728     apu_set_register(chip, apu, 7, CLOCK_MEASURE_BUFSIZE/2);
1729     apu_set_register(chip, apu, 8, 0x0000);
1730     apu_set_register(chip, apu, 9, 0xD000);
1731     apu_set_register(chip, apu, 10, 0x8F08);
1732     apu_set_register(chip, apu, 11, 0x0000);
1733     spin_lock_irq(&chip->reg_lock);
1734     outw(1, chip->io_port + 0x04); /* clear WP interrupts */
1735     outw(inw(chip->io_port + ESM_PORT_HOST_IRQ) | ESM_HIRQ_DSIE, chip->io_port + ESM_PORT_HOST_IRQ); /* enable WP ints */
1736     spin_unlock_irq(&chip->reg_lock);
1737 
1738     snd_es1968_apu_set_freq(chip, apu, ((unsigned int)48000 << 16) / chip->clock); /* 48000 Hz */
1739 
1740     chip->in_measurement = 1;
1741     chip->measure_apu = apu;
1742     spin_lock_irq(&chip->reg_lock);
1743     snd_es1968_bob_inc(chip, ESM_BOB_FREQ);
1744     __apu_set_register(chip, apu, 5, pa & 0xffff);
1745     snd_es1968_trigger_apu(chip, apu, ESM_APU_16BITLINEAR);
1746     start_time = ktime_get();
1747     spin_unlock_irq(&chip->reg_lock);
1748     msleep(50);
1749     spin_lock_irq(&chip->reg_lock);
1750     offset = __apu_get_register(chip, apu, 5);
1751     stop_time = ktime_get();
1752     snd_es1968_trigger_apu(chip, apu, 0); /* stop */
1753     snd_es1968_bob_dec(chip);
1754     chip->in_measurement = 0;
1755     spin_unlock_irq(&chip->reg_lock);
1756 
1757     /* check the current position */
1758     offset -= (pa & 0xffff);
1759     offset &= 0xfffe;
1760     offset += chip->measure_count * (CLOCK_MEASURE_BUFSIZE/2);
1761 
1762     diff = ktime_sub(stop_time, start_time);
1763     t = ktime_to_us(diff);
1764     if (t == 0) {
1765         dev_err(chip->card->dev, "?? calculation error..\n");
1766     } else {
1767         offset *= 1000;
1768         offset = (offset / t) * 1000 + ((offset % t) * 1000) / t;
1769         if (offset < 47500 || offset > 48500) {
1770             if (offset >= 40000 && offset <= 50000)
1771                 chip->clock = (chip->clock * offset) / 48000;
1772         }
1773         dev_info(chip->card->dev, "clocking to %d\n", chip->clock);
1774     }
1775     snd_es1968_free_memory(chip, memory);
1776     snd_es1968_free_apu_pair(chip, apu);
1777 }
1778 
1779 
1780 /*
1781  */
1782 
1783 static void snd_es1968_pcm_free(struct snd_pcm *pcm)
1784 {
1785     struct es1968 *esm = pcm->private_data;
1786     snd_es1968_free_dmabuf(esm);
1787     esm->pcm = NULL;
1788 }
1789 
1790 static int
1791 snd_es1968_pcm(struct es1968 *chip, int device)
1792 {
1793     struct snd_pcm *pcm;
1794     int err;
1795 
1796     /* get DMA buffer */
1797     err = snd_es1968_init_dmabuf(chip);
1798     if (err < 0)
1799         return err;
1800 
1801     /* set PCMBAR */
1802     wave_set_register(chip, 0x01FC, chip->dma.addr >> 12);
1803     wave_set_register(chip, 0x01FD, chip->dma.addr >> 12);
1804     wave_set_register(chip, 0x01FE, chip->dma.addr >> 12);
1805     wave_set_register(chip, 0x01FF, chip->dma.addr >> 12);
1806 
1807     err = snd_pcm_new(chip->card, "ESS Maestro", device,
1808               chip->playback_streams,
1809               chip->capture_streams, &pcm);
1810     if (err < 0)
1811         return err;
1812 
1813     pcm->private_data = chip;
1814     pcm->private_free = snd_es1968_pcm_free;
1815 
1816     snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &snd_es1968_playback_ops);
1817     snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &snd_es1968_capture_ops);
1818 
1819     pcm->info_flags = 0;
1820 
1821     strcpy(pcm->name, "ESS Maestro");
1822 
1823     chip->pcm = pcm;
1824 
1825     return 0;
1826 }
1827 /*
1828  * suppress jitter on some maestros when playing stereo
1829  */
1830 static void snd_es1968_suppress_jitter(struct es1968 *chip, struct esschan *es)
1831 {
1832     unsigned int cp1;
1833     unsigned int cp2;
1834     unsigned int diff;
1835 
1836     cp1 = __apu_get_register(chip, 0, 5);
1837     cp2 = __apu_get_register(chip, 1, 5);
1838     diff = (cp1 > cp2 ? cp1 - cp2 : cp2 - cp1);
1839 
1840     if (diff > 1)
1841         __maestro_write(chip, IDR0_DATA_PORT, cp1);
1842 }
1843 
1844 /*
1845  * update pointer
1846  */
1847 static void snd_es1968_update_pcm(struct es1968 *chip, struct esschan *es)
1848 {
1849     unsigned int hwptr;
1850     unsigned int diff;
1851     struct snd_pcm_substream *subs = es->substream;
1852         
1853     if (subs == NULL || !es->running)
1854         return;
1855 
1856     hwptr = snd_es1968_get_dma_ptr(chip, es) << es->wav_shift;
1857     hwptr %= es->dma_size;
1858 
1859     diff = (es->dma_size + hwptr - es->hwptr) % es->dma_size;
1860 
1861     es->hwptr = hwptr;
1862     es->count += diff;
1863 
1864     if (es->count > es->frag_size) {
1865         spin_unlock(&chip->substream_lock);
1866         snd_pcm_period_elapsed(subs);
1867         spin_lock(&chip->substream_lock);
1868         es->count %= es->frag_size;
1869     }
1870 }
1871 
1872 /* The hardware volume works by incrementing / decrementing 2 counters
1873    (without wrap around) in response to volume button presses and then
1874    generating an interrupt. The pair of counters is stored in bits 1-3 and 5-7
1875    of a byte wide register. The meaning of bits 0 and 4 is unknown. */
1876 static void es1968_update_hw_volume(struct work_struct *work)
1877 {
1878     struct es1968 *chip = container_of(work, struct es1968, hwvol_work);
1879     int x, val;
1880 
1881     /* Figure out which volume control button was pushed,
1882        based on differences from the default register
1883        values. */
1884     x = inb(chip->io_port + 0x1c) & 0xee;
1885     /* Reset the volume control registers. */
1886     outb(0x88, chip->io_port + 0x1c);
1887     outb(0x88, chip->io_port + 0x1d);
1888     outb(0x88, chip->io_port + 0x1e);
1889     outb(0x88, chip->io_port + 0x1f);
1890 
1891     if (chip->in_suspend)
1892         return;
1893 
1894 #ifndef CONFIG_SND_ES1968_INPUT
1895     if (! chip->master_switch || ! chip->master_volume)
1896         return;
1897 
1898     val = snd_ac97_read(chip->ac97, AC97_MASTER);
1899     switch (x) {
1900     case 0x88:
1901         /* mute */
1902         val ^= 0x8000;
1903         break;
1904     case 0xaa:
1905         /* volume up */
1906         if ((val & 0x7f) > 0)
1907             val--;
1908         if ((val & 0x7f00) > 0)
1909             val -= 0x0100;
1910         break;
1911     case 0x66:
1912         /* volume down */
1913         if ((val & 0x7f) < 0x1f)
1914             val++;
1915         if ((val & 0x7f00) < 0x1f00)
1916             val += 0x0100;
1917         break;
1918     }
1919     if (snd_ac97_update(chip->ac97, AC97_MASTER, val))
1920         snd_ctl_notify(chip->card, SNDRV_CTL_EVENT_MASK_VALUE,
1921                    &chip->master_volume->id);
1922 #else
1923     if (!chip->input_dev)
1924         return;
1925 
1926     val = 0;
1927     switch (x) {
1928     case 0x88:
1929         /* The counters have not changed, yet we've received a HV
1930            interrupt. According to tests run by various people this
1931            happens when pressing the mute button. */
1932         val = KEY_MUTE;
1933         break;
1934     case 0xaa:
1935         /* counters increased by 1 -> volume up */
1936         val = KEY_VOLUMEUP;
1937         break;
1938     case 0x66:
1939         /* counters decreased by 1 -> volume down */
1940         val = KEY_VOLUMEDOWN;
1941         break;
1942     }
1943 
1944     if (val) {
1945         input_report_key(chip->input_dev, val, 1);
1946         input_sync(chip->input_dev);
1947         input_report_key(chip->input_dev, val, 0);
1948         input_sync(chip->input_dev);
1949     }
1950 #endif
1951 }
1952 
1953 /*
1954  * interrupt handler
1955  */
1956 static irqreturn_t snd_es1968_interrupt(int irq, void *dev_id)
1957 {
1958     struct es1968 *chip = dev_id;
1959     u32 event;
1960 
1961     event = inb(chip->io_port + 0x1A);
1962     if (!event)
1963         return IRQ_NONE;
1964 
1965     outw(inw(chip->io_port + 4) & 1, chip->io_port + 4);
1966 
1967     if (event & ESM_HWVOL_IRQ)
1968         schedule_work(&chip->hwvol_work);
1969 
1970     /* else ack 'em all, i imagine */
1971     outb(0xFF, chip->io_port + 0x1A);
1972 
1973     if ((event & ESM_MPU401_IRQ) && chip->rmidi) {
1974         snd_mpu401_uart_interrupt(irq, chip->rmidi->private_data);
1975     }
1976 
1977     if (event & ESM_SOUND_IRQ) {
1978         struct esschan *es;
1979         spin_lock(&chip->substream_lock);
1980         list_for_each_entry(es, &chip->substream_list, list) {
1981             if (es->running) {
1982                 snd_es1968_update_pcm(chip, es);
1983                 if (es->fmt & ESS_FMT_STEREO)
1984                     snd_es1968_suppress_jitter(chip, es);
1985             }
1986         }
1987         spin_unlock(&chip->substream_lock);
1988         if (chip->in_measurement) {
1989             unsigned int curp = __apu_get_register(chip, chip->measure_apu, 5);
1990             if (curp < chip->measure_lastpos)
1991                 chip->measure_count++;
1992             chip->measure_lastpos = curp;
1993         }
1994     }
1995 
1996     return IRQ_HANDLED;
1997 }
1998 
1999 /*
2000  *  Mixer stuff
2001  */
2002 
2003 static int
2004 snd_es1968_mixer(struct es1968 *chip)
2005 {
2006     struct snd_ac97_bus *pbus;
2007     struct snd_ac97_template ac97;
2008 #ifndef CONFIG_SND_ES1968_INPUT
2009     struct snd_ctl_elem_id elem_id;
2010 #endif
2011     int err;
2012     static const struct snd_ac97_bus_ops ops = {
2013         .write = snd_es1968_ac97_write,
2014         .read = snd_es1968_ac97_read,
2015     };
2016 
2017     err = snd_ac97_bus(chip->card, 0, &ops, NULL, &pbus);
2018     if (err < 0)
2019         return err;
2020     pbus->no_vra = 1; /* ES1968 doesn't need VRA */
2021 
2022     memset(&ac97, 0, sizeof(ac97));
2023     ac97.private_data = chip;
2024     err = snd_ac97_mixer(pbus, &ac97, &chip->ac97);
2025     if (err < 0)
2026         return err;
2027 
2028 #ifndef CONFIG_SND_ES1968_INPUT
2029     /* attach master switch / volumes for h/w volume control */
2030     memset(&elem_id, 0, sizeof(elem_id));
2031     elem_id.iface = SNDRV_CTL_ELEM_IFACE_MIXER;
2032     strcpy(elem_id.name, "Master Playback Switch");
2033     chip->master_switch = snd_ctl_find_id(chip->card, &elem_id);
2034     memset(&elem_id, 0, sizeof(elem_id));
2035     elem_id.iface = SNDRV_CTL_ELEM_IFACE_MIXER;
2036     strcpy(elem_id.name, "Master Playback Volume");
2037     chip->master_volume = snd_ctl_find_id(chip->card, &elem_id);
2038 #endif
2039 
2040     return 0;
2041 }
2042 
2043 /*
2044  * reset ac97 codec
2045  */
2046 
2047 static void snd_es1968_ac97_reset(struct es1968 *chip)
2048 {
2049     unsigned long ioaddr = chip->io_port;
2050 
2051     unsigned short save_ringbus_a;
2052     unsigned short save_68;
2053     unsigned short w;
2054     unsigned int vend;
2055 
2056     /* save configuration */
2057     save_ringbus_a = inw(ioaddr + 0x36);
2058 
2059     //outw(inw(ioaddr + 0x38) & 0xfffc, ioaddr + 0x38); /* clear second codec id? */
2060     /* set command/status address i/o to 1st codec */
2061     outw(inw(ioaddr + 0x3a) & 0xfffc, ioaddr + 0x3a);
2062     outw(inw(ioaddr + 0x3c) & 0xfffc, ioaddr + 0x3c);
2063 
2064     /* disable ac link */
2065     outw(0x0000, ioaddr + 0x36);
2066     save_68 = inw(ioaddr + 0x68);
2067     pci_read_config_word(chip->pci, 0x58, &w);  /* something magical with gpio and bus arb. */
2068     pci_read_config_dword(chip->pci, PCI_SUBSYSTEM_VENDOR_ID, &vend);
2069     if (w & 1)
2070         save_68 |= 0x10;
2071     outw(0xfffe, ioaddr + 0x64);    /* unmask gpio 0 */
2072     outw(0x0001, ioaddr + 0x68);    /* gpio write */
2073     outw(0x0000, ioaddr + 0x60);    /* write 0 to gpio 0 */
2074     udelay(20);
2075     outw(0x0001, ioaddr + 0x60);    /* write 1 to gpio 1 */
2076     msleep(20);
2077 
2078     outw(save_68 | 0x1, ioaddr + 0x68); /* now restore .. */
2079     outw((inw(ioaddr + 0x38) & 0xfffc) | 0x1, ioaddr + 0x38);
2080     outw((inw(ioaddr + 0x3a) & 0xfffc) | 0x1, ioaddr + 0x3a);
2081     outw((inw(ioaddr + 0x3c) & 0xfffc) | 0x1, ioaddr + 0x3c);
2082 
2083     /* now the second codec */
2084     /* disable ac link */
2085     outw(0x0000, ioaddr + 0x36);
2086     outw(0xfff7, ioaddr + 0x64);    /* unmask gpio 3 */
2087     save_68 = inw(ioaddr + 0x68);
2088     outw(0x0009, ioaddr + 0x68);    /* gpio write 0 & 3 ?? */
2089     outw(0x0001, ioaddr + 0x60);    /* write 1 to gpio */
2090     udelay(20);
2091     outw(0x0009, ioaddr + 0x60);    /* write 9 to gpio */
2092     msleep(500);
2093     //outw(inw(ioaddr + 0x38) & 0xfffc, ioaddr + 0x38);
2094     outw(inw(ioaddr + 0x3a) & 0xfffc, ioaddr + 0x3a);
2095     outw(inw(ioaddr + 0x3c) & 0xfffc, ioaddr + 0x3c);
2096 
2097 #if 0               /* the loop here needs to be much better if we want it.. */
2098     dev_info(chip->card->dev, "trying software reset\n");
2099     /* try and do a software reset */
2100     outb(0x80 | 0x7c, ioaddr + 0x30);
2101     for (w = 0;; w++) {
2102         if ((inw(ioaddr + 0x30) & 1) == 0) {
2103             if (inb(ioaddr + 0x32) != 0)
2104                 break;
2105 
2106             outb(0x80 | 0x7d, ioaddr + 0x30);
2107             if (((inw(ioaddr + 0x30) & 1) == 0)
2108                 && (inb(ioaddr + 0x32) != 0))
2109                 break;
2110             outb(0x80 | 0x7f, ioaddr + 0x30);
2111             if (((inw(ioaddr + 0x30) & 1) == 0)
2112                 && (inb(ioaddr + 0x32) != 0))
2113                 break;
2114         }
2115 
2116         if (w > 10000) {
2117             outb(inb(ioaddr + 0x37) | 0x08, ioaddr + 0x37); /* do a software reset */
2118             msleep(500);    /* oh my.. */
2119             outb(inb(ioaddr + 0x37) & ~0x08,
2120                 ioaddr + 0x37);
2121             udelay(1);
2122             outw(0x80, ioaddr + 0x30);
2123             for (w = 0; w < 10000; w++) {
2124                 if ((inw(ioaddr + 0x30) & 1) == 0)
2125                     break;
2126             }
2127         }
2128     }
2129 #endif
2130     if (vend == NEC_VERSA_SUBID1 || vend == NEC_VERSA_SUBID2) {
2131         /* turn on external amp? */
2132         outw(0xf9ff, ioaddr + 0x64);
2133         outw(inw(ioaddr + 0x68) | 0x600, ioaddr + 0x68);
2134         outw(0x0209, ioaddr + 0x60);
2135     }
2136 
2137     /* restore.. */
2138     outw(save_ringbus_a, ioaddr + 0x36);
2139 
2140     /* Turn on the 978 docking chip.
2141        First frob the "master output enable" bit,
2142        then set most of the playback volume control registers to max. */
2143     outb(inb(ioaddr+0xc0)|(1<<5), ioaddr+0xc0);
2144     outb(0xff, ioaddr+0xc3);
2145     outb(0xff, ioaddr+0xc4);
2146     outb(0xff, ioaddr+0xc6);
2147     outb(0xff, ioaddr+0xc8);
2148     outb(0x3f, ioaddr+0xcf);
2149     outb(0x3f, ioaddr+0xd0);
2150 }
2151 
2152 static void snd_es1968_reset(struct es1968 *chip)
2153 {
2154     /* Reset */
2155     outw(ESM_RESET_MAESTRO | ESM_RESET_DIRECTSOUND,
2156          chip->io_port + ESM_PORT_HOST_IRQ);
2157     udelay(10);
2158     outw(0x0000, chip->io_port + ESM_PORT_HOST_IRQ);
2159     udelay(10);
2160 }
2161 
2162 /*
2163  * initialize maestro chip
2164  */
2165 static void snd_es1968_chip_init(struct es1968 *chip)
2166 {
2167     struct pci_dev *pci = chip->pci;
2168     int i;
2169     unsigned long iobase  = chip->io_port;
2170     u16 w;
2171     u32 n;
2172 
2173     /* We used to muck around with pci config space that
2174      * we had no business messing with.  We don't know enough
2175      * about the machine to know which DMA mode is appropriate, 
2176      * etc.  We were guessing wrong on some machines and making
2177      * them unhappy.  We now trust in the BIOS to do things right,
2178      * which almost certainly means a new host of problems will
2179      * arise with broken BIOS implementations.  screw 'em. 
2180      * We're already intolerant of machines that don't assign
2181      * IRQs.
2182      */
2183     
2184     /* Config Reg A */
2185     pci_read_config_word(pci, ESM_CONFIG_A, &w);
2186 
2187     w &= ~DMA_CLEAR;    /* Clear DMA bits */
2188     w &= ~(PIC_SNOOP1 | PIC_SNOOP2);    /* Clear Pic Snoop Mode Bits */
2189     w &= ~SAFEGUARD;    /* Safeguard off */
2190     w |= POST_WRITE;    /* Posted write */
2191     w |= PCI_TIMING;    /* PCI timing on */
2192     /* XXX huh?  claims to be reserved.. */
2193     w &= ~SWAP_LR;      /* swap left/right 
2194                    seems to only have effect on SB
2195                    Emulation */
2196     w &= ~SUBTR_DECODE; /* Subtractive decode off */
2197 
2198     pci_write_config_word(pci, ESM_CONFIG_A, w);
2199 
2200     /* Config Reg B */
2201 
2202     pci_read_config_word(pci, ESM_CONFIG_B, &w);
2203 
2204     w &= ~(1 << 15);    /* Turn off internal clock multiplier */
2205     /* XXX how do we know which to use? */
2206     w &= ~(1 << 14);    /* External clock */
2207 
2208     w &= ~SPDIF_CONFB;  /* disable S/PDIF output */
2209     w |= HWV_CONFB;     /* HWV on */
2210     w |= DEBOUNCE;      /* Debounce off: easier to push the HW buttons */
2211     w &= ~GPIO_CONFB;   /* GPIO 4:5 */
2212     w |= CHI_CONFB;     /* Disconnect from the CHI.  Enabling this made a dell 7500 work. */
2213     w &= ~IDMA_CONFB;   /* IDMA off (undocumented) */
2214     w &= ~MIDI_FIX;     /* MIDI fix off (undoc) */
2215     w &= ~(1 << 1);     /* reserved, always write 0 */
2216     w &= ~IRQ_TO_ISA;   /* IRQ to ISA off (undoc) */
2217 
2218     pci_write_config_word(pci, ESM_CONFIG_B, w);
2219 
2220     /* DDMA off */
2221 
2222     pci_read_config_word(pci, ESM_DDMA, &w);
2223     w &= ~(1 << 0);
2224     pci_write_config_word(pci, ESM_DDMA, w);
2225 
2226     /*
2227      *  Legacy mode
2228      */
2229 
2230     pci_read_config_word(pci, ESM_LEGACY_AUDIO_CONTROL, &w);
2231 
2232     w |= ESS_DISABLE_AUDIO; /* Disable Legacy Audio */
2233     w &= ~ESS_ENABLE_SERIAL_IRQ;    /* Disable SIRQ */
2234     w &= ~(0x1f);       /* disable mpu irq/io, game port, fm, SB */
2235 
2236     pci_write_config_word(pci, ESM_LEGACY_AUDIO_CONTROL, w);
2237 
2238     /* Set up 978 docking control chip. */
2239     pci_read_config_word(pci, 0x58, &w);
2240     w|=1<<2;    /* Enable 978. */
2241     w|=1<<3;    /* Turn on 978 hardware volume control. */
2242     w&=~(1<<11);    /* Turn on 978 mixer volume control. */
2243     pci_write_config_word(pci, 0x58, w);
2244     
2245     /* Sound Reset */
2246 
2247     snd_es1968_reset(chip);
2248 
2249     /*
2250      *  Ring Bus Setup
2251      */
2252 
2253     /* setup usual 0x34 stuff.. 0x36 may be chip specific */
2254     outw(0xC090, iobase + ESM_RING_BUS_DEST); /* direct sound, stereo */
2255     udelay(20);
2256     outw(0x3000, iobase + ESM_RING_BUS_CONTR_A); /* enable ringbus/serial */
2257     udelay(20);
2258 
2259     /*
2260      *  Reset the CODEC
2261      */
2262      
2263     snd_es1968_ac97_reset(chip);
2264 
2265     /* Ring Bus Control B */
2266 
2267     n = inl(iobase + ESM_RING_BUS_CONTR_B);
2268     n &= ~RINGB_EN_SPDIF;   /* SPDIF off */
2269     //w |= RINGB_EN_2CODEC; /* enable 2nd codec */
2270     outl(n, iobase + ESM_RING_BUS_CONTR_B);
2271 
2272     /* Set hardware volume control registers to midpoints.
2273        We can tell which button was pushed based on how they change. */
2274     outb(0x88, iobase+0x1c);
2275     outb(0x88, iobase+0x1d);
2276     outb(0x88, iobase+0x1e);
2277     outb(0x88, iobase+0x1f);
2278 
2279     /* it appears some maestros (dell 7500) only work if these are set,
2280        regardless of whether we use the assp or not. */
2281 
2282     outb(0, iobase + ASSP_CONTROL_B);
2283     outb(3, iobase + ASSP_CONTROL_A);   /* M: Reserved bits... */
2284     outb(0, iobase + ASSP_CONTROL_C);   /* M: Disable ASSP, ASSP IRQ's and FM Port */
2285 
2286     /*
2287      * set up wavecache
2288      */
2289     for (i = 0; i < 16; i++) {
2290         /* Write 0 into the buffer area 0x1E0->1EF */
2291         outw(0x01E0 + i, iobase + WC_INDEX);
2292         outw(0x0000, iobase + WC_DATA);
2293 
2294         /* The 1.10 test program seem to write 0 into the buffer area
2295          * 0x1D0-0x1DF too.*/
2296         outw(0x01D0 + i, iobase + WC_INDEX);
2297         outw(0x0000, iobase + WC_DATA);
2298     }
2299     wave_set_register(chip, IDR7_WAVE_ROMRAM,
2300               (wave_get_register(chip, IDR7_WAVE_ROMRAM) & 0xFF00));
2301     wave_set_register(chip, IDR7_WAVE_ROMRAM,
2302               wave_get_register(chip, IDR7_WAVE_ROMRAM) | 0x100);
2303     wave_set_register(chip, IDR7_WAVE_ROMRAM,
2304               wave_get_register(chip, IDR7_WAVE_ROMRAM) & ~0x200);
2305     wave_set_register(chip, IDR7_WAVE_ROMRAM,
2306               wave_get_register(chip, IDR7_WAVE_ROMRAM) | ~0x400);
2307 
2308 
2309     maestro_write(chip, IDR2_CRAM_DATA, 0x0000);
2310     /* Now back to the DirectSound stuff */
2311     /* audio serial configuration.. ? */
2312     maestro_write(chip, 0x08, 0xB004);
2313     maestro_write(chip, 0x09, 0x001B);
2314     maestro_write(chip, 0x0A, 0x8000);
2315     maestro_write(chip, 0x0B, 0x3F37);
2316     maestro_write(chip, 0x0C, 0x0098);
2317 
2318     /* parallel in, has something to do with recording :) */
2319     maestro_write(chip, 0x0C,
2320               (maestro_read(chip, 0x0C) & ~0xF000) | 0x8000);
2321     /* parallel out */
2322     maestro_write(chip, 0x0C,
2323               (maestro_read(chip, 0x0C) & ~0x0F00) | 0x0500);
2324 
2325     maestro_write(chip, 0x0D, 0x7632);
2326 
2327     /* Wave cache control on - test off, sg off, 
2328        enable, enable extra chans 1Mb */
2329 
2330     w = inw(iobase + WC_CONTROL);
2331 
2332     w &= ~0xFA00;       /* Seems to be reserved? I don't know */
2333     w |= 0xA000;        /* reserved... I don't know */
2334     w &= ~0x0200;       /* Channels 56,57,58,59 as Extra Play,Rec Channel enable
2335                    Seems to crash the Computer if enabled... */
2336     w |= 0x0100;        /* Wave Cache Operation Enabled */
2337     w |= 0x0080;        /* Channels 60/61 as Placback/Record enabled */
2338     w &= ~0x0060;       /* Clear Wavtable Size */
2339     w |= 0x0020;        /* Wavetable Size : 1MB */
2340     /* Bit 4 is reserved */
2341     w &= ~0x000C;       /* DMA Stuff? I don't understand what the datasheet means */
2342     /* Bit 1 is reserved */
2343     w &= ~0x0001;       /* Test Mode off */
2344 
2345     outw(w, iobase + WC_CONTROL);
2346 
2347     /* Now clear the APU control ram */
2348     for (i = 0; i < NR_APUS; i++) {
2349         for (w = 0; w < NR_APU_REGS; w++)
2350             apu_set_register(chip, i, w, 0);
2351 
2352     }
2353 }
2354 
2355 /* Enable IRQ's */
2356 static void snd_es1968_start_irq(struct es1968 *chip)
2357 {
2358     unsigned short w;
2359     w = ESM_HIRQ_DSIE | ESM_HIRQ_HW_VOLUME;
2360     if (chip->rmidi)
2361         w |= ESM_HIRQ_MPU401;
2362     outb(w, chip->io_port + 0x1A);
2363     outw(w, chip->io_port + ESM_PORT_HOST_IRQ);
2364 }
2365 
2366 #ifdef CONFIG_PM_SLEEP
2367 /*
2368  * PM support
2369  */
2370 static int es1968_suspend(struct device *dev)
2371 {
2372     struct snd_card *card = dev_get_drvdata(dev);
2373     struct es1968 *chip = card->private_data;
2374 
2375     if (! chip->do_pm)
2376         return 0;
2377 
2378     chip->in_suspend = 1;
2379     cancel_work_sync(&chip->hwvol_work);
2380     snd_power_change_state(card, SNDRV_CTL_POWER_D3hot);
2381     snd_ac97_suspend(chip->ac97);
2382     snd_es1968_bob_stop(chip);
2383     return 0;
2384 }
2385 
2386 static int es1968_resume(struct device *dev)
2387 {
2388     struct snd_card *card = dev_get_drvdata(dev);
2389     struct es1968 *chip = card->private_data;
2390     struct esschan *es;
2391 
2392     if (! chip->do_pm)
2393         return 0;
2394 
2395     snd_es1968_chip_init(chip);
2396 
2397     /* need to restore the base pointers.. */ 
2398     if (chip->dma.addr) {
2399         /* set PCMBAR */
2400         wave_set_register(chip, 0x01FC, chip->dma.addr >> 12);
2401     }
2402 
2403     snd_es1968_start_irq(chip);
2404 
2405     /* restore ac97 state */
2406     snd_ac97_resume(chip->ac97);
2407 
2408     list_for_each_entry(es, &chip->substream_list, list) {
2409         switch (es->mode) {
2410         case ESM_MODE_PLAY:
2411             snd_es1968_playback_setup(chip, es, es->substream->runtime);
2412             break;
2413         case ESM_MODE_CAPTURE:
2414             snd_es1968_capture_setup(chip, es, es->substream->runtime);
2415             break;
2416         }
2417     }
2418 
2419     /* start timer again */
2420     if (chip->bobclient)
2421         snd_es1968_bob_start(chip);
2422 
2423     snd_power_change_state(card, SNDRV_CTL_POWER_D0);
2424     chip->in_suspend = 0;
2425     return 0;
2426 }
2427 
2428 static SIMPLE_DEV_PM_OPS(es1968_pm, es1968_suspend, es1968_resume);
2429 #define ES1968_PM_OPS   &es1968_pm
2430 #else
2431 #define ES1968_PM_OPS   NULL
2432 #endif /* CONFIG_PM_SLEEP */
2433 
2434 #ifdef SUPPORT_JOYSTICK
2435 #define JOYSTICK_ADDR   0x200
2436 static int snd_es1968_create_gameport(struct es1968 *chip, int dev)
2437 {
2438     struct gameport *gp;
2439     struct resource *r;
2440     u16 val;
2441 
2442     if (!joystick[dev])
2443         return -ENODEV;
2444 
2445     r = devm_request_region(&chip->pci->dev, JOYSTICK_ADDR, 8,
2446                 "ES1968 gameport");
2447     if (!r)
2448         return -EBUSY;
2449 
2450     chip->gameport = gp = gameport_allocate_port();
2451     if (!gp) {
2452         dev_err(chip->card->dev,
2453             "cannot allocate memory for gameport\n");
2454         return -ENOMEM;
2455     }
2456 
2457     pci_read_config_word(chip->pci, ESM_LEGACY_AUDIO_CONTROL, &val);
2458     pci_write_config_word(chip->pci, ESM_LEGACY_AUDIO_CONTROL, val | 0x04);
2459 
2460     gameport_set_name(gp, "ES1968 Gameport");
2461     gameport_set_phys(gp, "pci%s/gameport0", pci_name(chip->pci));
2462     gameport_set_dev_parent(gp, &chip->pci->dev);
2463     gp->io = JOYSTICK_ADDR;
2464 
2465     gameport_register_port(gp);
2466 
2467     return 0;
2468 }
2469 
2470 static void snd_es1968_free_gameport(struct es1968 *chip)
2471 {
2472     if (chip->gameport) {
2473         gameport_unregister_port(chip->gameport);
2474         chip->gameport = NULL;
2475     }
2476 }
2477 #else
2478 static inline int snd_es1968_create_gameport(struct es1968 *chip, int dev) { return -ENOSYS; }
2479 static inline void snd_es1968_free_gameport(struct es1968 *chip) { }
2480 #endif
2481 
2482 #ifdef CONFIG_SND_ES1968_INPUT
2483 static int snd_es1968_input_register(struct es1968 *chip)
2484 {
2485     struct input_dev *input_dev;
2486     int err;
2487 
2488     input_dev = devm_input_allocate_device(&chip->pci->dev);
2489     if (!input_dev)
2490         return -ENOMEM;
2491 
2492     snprintf(chip->phys, sizeof(chip->phys), "pci-%s/input0",
2493          pci_name(chip->pci));
2494 
2495     input_dev->name = chip->card->driver;
2496     input_dev->phys = chip->phys;
2497     input_dev->id.bustype = BUS_PCI;
2498     input_dev->id.vendor  = chip->pci->vendor;
2499     input_dev->id.product = chip->pci->device;
2500     input_dev->dev.parent = &chip->pci->dev;
2501 
2502     __set_bit(EV_KEY, input_dev->evbit);
2503     __set_bit(KEY_MUTE, input_dev->keybit);
2504     __set_bit(KEY_VOLUMEDOWN, input_dev->keybit);
2505     __set_bit(KEY_VOLUMEUP, input_dev->keybit);
2506 
2507     err = input_register_device(input_dev);
2508     if (err)
2509         return err;
2510 
2511     chip->input_dev = input_dev;
2512     return 0;
2513 }
2514 #endif /* CONFIG_SND_ES1968_INPUT */
2515 
2516 #ifdef CONFIG_SND_ES1968_RADIO
2517 #define GPIO_DATA   0x60
2518 #define IO_MASK     4      /* mask      register offset from GPIO_DATA
2519                 bits 1=unmask write to given bit */
2520 #define IO_DIR      8      /* direction register offset from GPIO_DATA
2521                 bits 0/1=read/write direction */
2522 
2523 /* GPIO to TEA575x maps */
2524 struct snd_es1968_tea575x_gpio {
2525     u8 data, clk, wren, most;
2526     char *name;
2527 };
2528 
2529 static const struct snd_es1968_tea575x_gpio snd_es1968_tea575x_gpios[] = {
2530     { .data = 6, .clk = 7, .wren = 8, .most = 9, .name = "SF64-PCE2" },
2531     { .data = 7, .clk = 8, .wren = 6, .most = 10, .name = "M56VAP" },
2532 };
2533 
2534 #define get_tea575x_gpio(chip) \
2535     (&snd_es1968_tea575x_gpios[(chip)->tea575x_tuner])
2536 
2537 
2538 static void snd_es1968_tea575x_set_pins(struct snd_tea575x *tea, u8 pins)
2539 {
2540     struct es1968 *chip = tea->private_data;
2541     struct snd_es1968_tea575x_gpio gpio = *get_tea575x_gpio(chip);
2542     u16 val = 0;
2543 
2544     val |= (pins & TEA575X_DATA) ? (1 << gpio.data) : 0;
2545     val |= (pins & TEA575X_CLK)  ? (1 << gpio.clk)  : 0;
2546     val |= (pins & TEA575X_WREN) ? (1 << gpio.wren) : 0;
2547 
2548     outw(val, chip->io_port + GPIO_DATA);
2549 }
2550 
2551 static u8 snd_es1968_tea575x_get_pins(struct snd_tea575x *tea)
2552 {
2553     struct es1968 *chip = tea->private_data;
2554     struct snd_es1968_tea575x_gpio gpio = *get_tea575x_gpio(chip);
2555     u16 val = inw(chip->io_port + GPIO_DATA);
2556     u8 ret = 0;
2557 
2558     if (val & (1 << gpio.data))
2559         ret |= TEA575X_DATA;
2560     if (val & (1 << gpio.most))
2561         ret |= TEA575X_MOST;
2562 
2563     return ret;
2564 }
2565 
2566 static void snd_es1968_tea575x_set_direction(struct snd_tea575x *tea, bool output)
2567 {
2568     struct es1968 *chip = tea->private_data;
2569     unsigned long io = chip->io_port + GPIO_DATA;
2570     u16 odir = inw(io + IO_DIR);
2571     struct snd_es1968_tea575x_gpio gpio = *get_tea575x_gpio(chip);
2572 
2573     if (output) {
2574         outw(~((1 << gpio.data) | (1 << gpio.clk) | (1 << gpio.wren)),
2575             io + IO_MASK);
2576         outw(odir | (1 << gpio.data) | (1 << gpio.clk) | (1 << gpio.wren),
2577             io + IO_DIR);
2578     } else {
2579         outw(~((1 << gpio.clk) | (1 << gpio.wren) | (1 << gpio.data) | (1 << gpio.most)),
2580             io + IO_MASK);
2581         outw((odir & ~((1 << gpio.data) | (1 << gpio.most)))
2582             | (1 << gpio.clk) | (1 << gpio.wren), io + IO_DIR);
2583     }
2584 }
2585 
2586 static const struct snd_tea575x_ops snd_es1968_tea_ops = {
2587     .set_pins = snd_es1968_tea575x_set_pins,
2588     .get_pins = snd_es1968_tea575x_get_pins,
2589     .set_direction = snd_es1968_tea575x_set_direction,
2590 };
2591 #endif
2592 
2593 static void snd_es1968_free(struct snd_card *card)
2594 {
2595     struct es1968 *chip = card->private_data;
2596 
2597     cancel_work_sync(&chip->hwvol_work);
2598 
2599     if (chip->io_port) {
2600         outw(1, chip->io_port + 0x04); /* clear WP interrupts */
2601         outw(0, chip->io_port + ESM_PORT_HOST_IRQ); /* disable IRQ */
2602     }
2603 
2604 #ifdef CONFIG_SND_ES1968_RADIO
2605     snd_tea575x_exit(&chip->tea);
2606     v4l2_device_unregister(&chip->v4l2_dev);
2607 #endif
2608 
2609     snd_es1968_free_gameport(chip);
2610 }
2611 
2612 struct ess_device_list {
2613     unsigned short type;    /* chip type */
2614     unsigned short vendor;  /* subsystem vendor id */
2615 };
2616 
2617 static const struct ess_device_list pm_allowlist[] = {
2618     { TYPE_MAESTRO2E, 0x0e11 }, /* Compaq Armada */
2619     { TYPE_MAESTRO2E, 0x1028 },
2620     { TYPE_MAESTRO2E, 0x103c },
2621     { TYPE_MAESTRO2E, 0x1179 },
2622     { TYPE_MAESTRO2E, 0x14c0 }, /* HP omnibook 4150 */
2623     { TYPE_MAESTRO2E, 0x1558 },
2624     { TYPE_MAESTRO2E, 0x125d }, /* a PCI card, e.g. Terratec DMX */
2625     { TYPE_MAESTRO2, 0x125d },  /* a PCI card, e.g. SF64-PCE2 */
2626 };
2627 
2628 static const struct ess_device_list mpu_denylist[] = {
2629     { TYPE_MAESTRO2, 0x125d },
2630 };
2631 
2632 static int snd_es1968_create(struct snd_card *card,
2633                  struct pci_dev *pci,
2634                  int total_bufsize,
2635                  int play_streams,
2636                  int capt_streams,
2637                  int chip_type,
2638                  int do_pm,
2639                  int radio_nr)
2640 {
2641     struct es1968 *chip = card->private_data;
2642     int i, err;
2643 
2644     /* enable PCI device */
2645     err = pcim_enable_device(pci);
2646     if (err < 0)
2647         return err;
2648     /* check, if we can restrict PCI DMA transfers to 28 bits */
2649     if (dma_set_mask_and_coherent(&pci->dev, DMA_BIT_MASK(28))) {
2650         dev_err(card->dev,
2651             "architecture does not support 28bit PCI busmaster DMA\n");
2652         return -ENXIO;
2653     }
2654 
2655     /* Set Vars */
2656     chip->type = chip_type;
2657     spin_lock_init(&chip->reg_lock);
2658     spin_lock_init(&chip->substream_lock);
2659     INIT_LIST_HEAD(&chip->buf_list);
2660     INIT_LIST_HEAD(&chip->substream_list);
2661     mutex_init(&chip->memory_mutex);
2662     INIT_WORK(&chip->hwvol_work, es1968_update_hw_volume);
2663     chip->card = card;
2664     chip->pci = pci;
2665     chip->irq = -1;
2666     chip->total_bufsize = total_bufsize;    /* in bytes */
2667     chip->playback_streams = play_streams;
2668     chip->capture_streams = capt_streams;
2669 
2670     err = pci_request_regions(pci, "ESS Maestro");
2671     if (err < 0)
2672         return err;
2673     chip->io_port = pci_resource_start(pci, 0);
2674     if (devm_request_irq(&pci->dev, pci->irq, snd_es1968_interrupt,
2675                  IRQF_SHARED, KBUILD_MODNAME, chip)) {
2676         dev_err(card->dev, "unable to grab IRQ %d\n", pci->irq);
2677         return -EBUSY;
2678     }
2679     chip->irq = pci->irq;
2680     card->sync_irq = chip->irq;
2681     card->private_free = snd_es1968_free;
2682             
2683     /* Clear Maestro_map */
2684     for (i = 0; i < 32; i++)
2685         chip->maestro_map[i] = 0;
2686 
2687     /* Clear Apu Map */
2688     for (i = 0; i < NR_APUS; i++)
2689         chip->apu[i] = ESM_APU_FREE;
2690 
2691     /* just to be sure */
2692     pci_set_master(pci);
2693 
2694     if (do_pm > 1) {
2695         /* disable power-management if not on the allowlist */
2696         unsigned short vend;
2697         pci_read_config_word(chip->pci, PCI_SUBSYSTEM_VENDOR_ID, &vend);
2698         for (i = 0; i < (int)ARRAY_SIZE(pm_allowlist); i++) {
2699             if (chip->type == pm_allowlist[i].type &&
2700                 vend == pm_allowlist[i].vendor) {
2701                 do_pm = 1;
2702                 break;
2703             }
2704         }
2705         if (do_pm > 1) {
2706             /* not matched; disabling pm */
2707             dev_info(card->dev, "not attempting power management.\n");
2708             do_pm = 0;
2709         }
2710     }
2711     chip->do_pm = do_pm;
2712 
2713     snd_es1968_chip_init(chip);
2714 
2715 #ifdef CONFIG_SND_ES1968_RADIO
2716     /* don't play with GPIOs on laptops */
2717     if (chip->pci->subsystem_vendor != 0x125d)
2718         return 0;
2719     err = v4l2_device_register(&pci->dev, &chip->v4l2_dev);
2720     if (err < 0)
2721         return err;
2722     chip->tea.v4l2_dev = &chip->v4l2_dev;
2723     chip->tea.private_data = chip;
2724     chip->tea.radio_nr = radio_nr;
2725     chip->tea.ops = &snd_es1968_tea_ops;
2726     sprintf(chip->tea.bus_info, "PCI:%s", pci_name(pci));
2727     for (i = 0; i < ARRAY_SIZE(snd_es1968_tea575x_gpios); i++) {
2728         chip->tea575x_tuner = i;
2729         if (!snd_tea575x_init(&chip->tea, THIS_MODULE)) {
2730             dev_info(card->dev, "detected TEA575x radio type %s\n",
2731                    get_tea575x_gpio(chip)->name);
2732             strscpy(chip->tea.card, get_tea575x_gpio(chip)->name,
2733                 sizeof(chip->tea.card));
2734             break;
2735         }
2736     }
2737 #endif
2738     return 0;
2739 }
2740 
2741 
2742 /*
2743  */
2744 static int __snd_es1968_probe(struct pci_dev *pci,
2745                   const struct pci_device_id *pci_id)
2746 {
2747     static int dev;
2748     struct snd_card *card;
2749     struct es1968 *chip;
2750     unsigned int i;
2751     int err;
2752 
2753     if (dev >= SNDRV_CARDS)
2754         return -ENODEV;
2755     if (!enable[dev]) {
2756         dev++;
2757         return -ENOENT;
2758     }
2759 
2760     err = snd_devm_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE,
2761                 sizeof(*chip), &card);
2762     if (err < 0)
2763         return err;
2764     chip = card->private_data;
2765                 
2766     if (total_bufsize[dev] < 128)
2767         total_bufsize[dev] = 128;
2768     if (total_bufsize[dev] > 4096)
2769         total_bufsize[dev] = 4096;
2770     err = snd_es1968_create(card, pci,
2771                 total_bufsize[dev] * 1024, /* in bytes */
2772                 pcm_substreams_p[dev],
2773                 pcm_substreams_c[dev],
2774                 pci_id->driver_data,
2775                 use_pm[dev],
2776                 radio_nr[dev]);
2777     if (err < 0)
2778         return err;
2779 
2780     switch (chip->type) {
2781     case TYPE_MAESTRO2E:
2782         strcpy(card->driver, "ES1978");
2783         strcpy(card->shortname, "ESS ES1978 (Maestro 2E)");
2784         break;
2785     case TYPE_MAESTRO2:
2786         strcpy(card->driver, "ES1968");
2787         strcpy(card->shortname, "ESS ES1968 (Maestro 2)");
2788         break;
2789     case TYPE_MAESTRO:
2790         strcpy(card->driver, "ESM1");
2791         strcpy(card->shortname, "ESS Maestro 1");
2792         break;
2793     }
2794 
2795     err = snd_es1968_pcm(chip, 0);
2796     if (err < 0)
2797         return err;
2798 
2799     err = snd_es1968_mixer(chip);
2800     if (err < 0)
2801         return err;
2802 
2803     if (enable_mpu[dev] == 2) {
2804         /* check the deny list */
2805         unsigned short vend;
2806         pci_read_config_word(chip->pci, PCI_SUBSYSTEM_VENDOR_ID, &vend);
2807         for (i = 0; i < ARRAY_SIZE(mpu_denylist); i++) {
2808             if (chip->type == mpu_denylist[i].type &&
2809                 vend == mpu_denylist[i].vendor) {
2810                 enable_mpu[dev] = 0;
2811                 break;
2812             }
2813         }
2814     }
2815     if (enable_mpu[dev]) {
2816         err = snd_mpu401_uart_new(card, 0, MPU401_HW_MPU401,
2817                       chip->io_port + ESM_MPU401_PORT,
2818                       MPU401_INFO_INTEGRATED |
2819                       MPU401_INFO_IRQ_HOOK,
2820                       -1, &chip->rmidi);
2821         if (err < 0)
2822             dev_warn(card->dev, "skipping MPU-401 MIDI support..\n");
2823     }
2824 
2825     snd_es1968_create_gameport(chip, dev);
2826 
2827 #ifdef CONFIG_SND_ES1968_INPUT
2828     err = snd_es1968_input_register(chip);
2829     if (err)
2830         dev_warn(card->dev,
2831              "Input device registration failed with error %i", err);
2832 #endif
2833 
2834     snd_es1968_start_irq(chip);
2835 
2836     chip->clock = clock[dev];
2837     if (! chip->clock)
2838         es1968_measure_clock(chip);
2839 
2840     sprintf(card->longname, "%s at 0x%lx, irq %i",
2841         card->shortname, chip->io_port, chip->irq);
2842 
2843     err = snd_card_register(card);
2844     if (err < 0)
2845         return err;
2846     pci_set_drvdata(pci, card);
2847     dev++;
2848     return 0;
2849 }
2850 
2851 static int snd_es1968_probe(struct pci_dev *pci,
2852                 const struct pci_device_id *pci_id)
2853 {
2854     return snd_card_free_on_error(&pci->dev, __snd_es1968_probe(pci, pci_id));
2855 }
2856 
2857 static struct pci_driver es1968_driver = {
2858     .name = KBUILD_MODNAME,
2859     .id_table = snd_es1968_ids,
2860     .probe = snd_es1968_probe,
2861     .driver = {
2862         .pm = ES1968_PM_OPS,
2863     },
2864 };
2865 
2866 module_pci_driver(es1968_driver);