cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

es1968.c (78523B)


      1// SPDX-License-Identifier: GPL-2.0-or-later
      2/*
      3 *  Driver for ESS Maestro 1/2/2E Sound Card (started 21.8.99)
      4 *  Copyright (c) by Matze Braun <MatzeBraun@gmx.de>.
      5 *                   Takashi Iwai <tiwai@suse.de>
      6 *                  
      7 *  Most of the driver code comes from Zach Brown(zab@redhat.com)
      8 *	Alan Cox OSS Driver
      9 *  Rewritted from card-es1938.c source.
     10 *
     11 *  TODO:
     12 *   Perhaps Synth
     13 *
     14 *  Notes from Zach Brown about the driver code
     15 *
     16 *  Hardware Description
     17 *
     18 *	A working Maestro setup contains the Maestro chip wired to a 
     19 *	codec or 2.  In the Maestro we have the APUs, the ASSP, and the
     20 *	Wavecache.  The APUs can be though of as virtual audio routing
     21 *	channels.  They can take data from a number of sources and perform
     22 *	basic encodings of the data.  The wavecache is a storehouse for
     23 *	PCM data.  Typically it deals with PCI and interracts with the
     24 *	APUs.  The ASSP is a wacky DSP like device that ESS is loth
     25 *	to release docs on.  Thankfully it isn't required on the Maestro
     26 *	until you start doing insane things like FM emulation and surround
     27 *	encoding.  The codecs are almost always AC-97 compliant codecs, 
     28 *	but it appears that early Maestros may have had PT101 (an ESS
     29 *	part?) wired to them.  The only real difference in the Maestro
     30 *	families is external goop like docking capability, memory for
     31 *	the ASSP, and initialization differences.
     32 *
     33 *  Driver Operation
     34 *
     35 *	We only drive the APU/Wavecache as typical DACs and drive the
     36 *	mixers in the codecs.  There are 64 APUs.  We assign 6 to each
     37 *	/dev/dsp? device.  2 channels for output, and 4 channels for
     38 *	input.
     39 *
     40 *	Each APU can do a number of things, but we only really use
     41 *	3 basic functions.  For playback we use them to convert PCM
     42 *	data fetched over PCI by the wavecahche into analog data that
     43 *	is handed to the codec.  One APU for mono, and a pair for stereo.
     44 *	When in stereo, the combination of smarts in the APU and Wavecache
     45 *	decide which wavecache gets the left or right channel.
     46 *
     47 *	For record we still use the old overly mono system.  For each in
     48 *	coming channel the data comes in from the codec, through a 'input'
     49 *	APU, through another rate converter APU, and then into memory via
     50 *	the wavecache and PCI.  If its stereo, we mash it back into LRLR in
     51 *	software.  The pass between the 2 APUs is supposedly what requires us
     52 *	to have a 512 byte buffer sitting around in wavecache/memory.
     53 *
     54 *	The wavecache makes our life even more fun.  First off, it can
     55 *	only address the first 28 bits of PCI address space, making it
     56 *	useless on quite a few architectures.  Secondly, its insane.
     57 *	It claims to fetch from 4 regions of PCI space, each 4 meg in length.
     58 *	But that doesn't really work.  You can only use 1 region.  So all our
     59 *	allocations have to be in 4meg of each other.  Booo.  Hiss.
     60 *	So we have a module parameter, dsps_order, that is the order of
     61 *	the number of dsps to provide.  All their buffer space is allocated
     62 *	on open time.  The sonicvibes OSS routines we inherited really want
     63 *	power of 2 buffers, so we have all those next to each other, then
     64 *	512 byte regions for the recording wavecaches.  This ends up
     65 *	wasting quite a bit of memory.  The only fixes I can see would be 
     66 *	getting a kernel allocator that could work in zones, or figuring out
     67 *	just how to coerce the WP into doing what we want.
     68 *
     69 *	The indirection of the various registers means we have to spinlock
     70 *	nearly all register accesses.  We have the main register indirection
     71 *	like the wave cache, maestro registers, etc.  Then we have beasts
     72 *	like the APU interface that is indirect registers gotten at through
     73 *	the main maestro indirection.  Ouch.  We spinlock around the actual
     74 *	ports on a per card basis.  This means spinlock activity at each IO
     75 *	operation, but the only IO operation clusters are in non critical 
     76 *	paths and it makes the code far easier to follow.  Interrupts are
     77 *	blocked while holding the locks because the int handler has to
     78 *	get at some of them :(.  The mixer interface doesn't, however.
     79 *	We also have an OSS state lock that is thrown around in a few
     80 *	places.
     81 */
     82
     83#include <linux/io.h>
     84#include <linux/delay.h>
     85#include <linux/interrupt.h>
     86#include <linux/init.h>
     87#include <linux/pci.h>
     88#include <linux/dma-mapping.h>
     89#include <linux/slab.h>
     90#include <linux/gameport.h>
     91#include <linux/module.h>
     92#include <linux/mutex.h>
     93#include <linux/input.h>
     94
     95#include <sound/core.h>
     96#include <sound/pcm.h>
     97#include <sound/mpu401.h>
     98#include <sound/ac97_codec.h>
     99#include <sound/initval.h>
    100
    101#ifdef CONFIG_SND_ES1968_RADIO
    102#include <media/drv-intf/tea575x.h>
    103#endif
    104
    105#define CARD_NAME "ESS Maestro1/2"
    106#define DRIVER_NAME "ES1968"
    107
    108MODULE_DESCRIPTION("ESS Maestro");
    109MODULE_LICENSE("GPL");
    110
    111#if IS_REACHABLE(CONFIG_GAMEPORT)
    112#define SUPPORT_JOYSTICK 1
    113#endif
    114
    115static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;	/* Index 1-MAX */
    116static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;	/* ID for this card */
    117static bool enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP;	/* Enable this card */
    118static int total_bufsize[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 1024 };
    119static int pcm_substreams_p[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 4 };
    120static int pcm_substreams_c[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 1 };
    121static int clock[SNDRV_CARDS];
    122static int use_pm[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 2};
    123static int enable_mpu[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 2};
    124#ifdef SUPPORT_JOYSTICK
    125static bool joystick[SNDRV_CARDS];
    126#endif
    127static int radio_nr[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = -1};
    128
    129module_param_array(index, int, NULL, 0444);
    130MODULE_PARM_DESC(index, "Index value for " CARD_NAME " soundcard.");
    131module_param_array(id, charp, NULL, 0444);
    132MODULE_PARM_DESC(id, "ID string for " CARD_NAME " soundcard.");
    133module_param_array(enable, bool, NULL, 0444);
    134MODULE_PARM_DESC(enable, "Enable " CARD_NAME " soundcard.");
    135module_param_array(total_bufsize, int, NULL, 0444);
    136MODULE_PARM_DESC(total_bufsize, "Total buffer size in kB.");
    137module_param_array(pcm_substreams_p, int, NULL, 0444);
    138MODULE_PARM_DESC(pcm_substreams_p, "PCM Playback substreams for " CARD_NAME " soundcard.");
    139module_param_array(pcm_substreams_c, int, NULL, 0444);
    140MODULE_PARM_DESC(pcm_substreams_c, "PCM Capture substreams for " CARD_NAME " soundcard.");
    141module_param_array(clock, int, NULL, 0444);
    142MODULE_PARM_DESC(clock, "Clock on " CARD_NAME " soundcard.  (0 = auto-detect)");
    143module_param_array(use_pm, int, NULL, 0444);
    144MODULE_PARM_DESC(use_pm, "Toggle power-management.  (0 = off, 1 = on, 2 = auto)");
    145module_param_array(enable_mpu, int, NULL, 0444);
    146MODULE_PARM_DESC(enable_mpu, "Enable MPU401.  (0 = off, 1 = on, 2 = auto)");
    147#ifdef SUPPORT_JOYSTICK
    148module_param_array(joystick, bool, NULL, 0444);
    149MODULE_PARM_DESC(joystick, "Enable joystick.");
    150#endif
    151module_param_array(radio_nr, int, NULL, 0444);
    152MODULE_PARM_DESC(radio_nr, "Radio device numbers");
    153
    154
    155
    156#define NR_APUS			64
    157#define NR_APU_REGS		16
    158
    159/* NEC Versas ? */
    160#define NEC_VERSA_SUBID1	0x80581033
    161#define NEC_VERSA_SUBID2	0x803c1033
    162
    163/* Mode Flags */
    164#define ESS_FMT_STEREO     	0x01
    165#define ESS_FMT_16BIT      	0x02
    166
    167#define DAC_RUNNING		1
    168#define ADC_RUNNING		2
    169
    170/* Values for the ESM_LEGACY_AUDIO_CONTROL */
    171
    172#define ESS_DISABLE_AUDIO	0x8000
    173#define ESS_ENABLE_SERIAL_IRQ	0x4000
    174#define IO_ADRESS_ALIAS		0x0020
    175#define MPU401_IRQ_ENABLE	0x0010
    176#define MPU401_IO_ENABLE	0x0008
    177#define GAME_IO_ENABLE		0x0004
    178#define FM_IO_ENABLE		0x0002
    179#define SB_IO_ENABLE		0x0001
    180
    181/* Values for the ESM_CONFIG_A */
    182
    183#define PIC_SNOOP1		0x4000
    184#define PIC_SNOOP2		0x2000
    185#define SAFEGUARD		0x0800
    186#define DMA_CLEAR		0x0700
    187#define DMA_DDMA		0x0000
    188#define DMA_TDMA		0x0100
    189#define DMA_PCPCI		0x0200
    190#define POST_WRITE		0x0080
    191#define PCI_TIMING		0x0040
    192#define SWAP_LR			0x0020
    193#define SUBTR_DECODE		0x0002
    194
    195/* Values for the ESM_CONFIG_B */
    196
    197#define SPDIF_CONFB		0x0100
    198#define HWV_CONFB		0x0080
    199#define DEBOUNCE		0x0040
    200#define GPIO_CONFB		0x0020
    201#define CHI_CONFB		0x0010
    202#define IDMA_CONFB		0x0008	/*undoc */
    203#define MIDI_FIX		0x0004	/*undoc */
    204#define IRQ_TO_ISA		0x0001	/*undoc */
    205
    206/* Values for Ring Bus Control B */
    207#define	RINGB_2CODEC_ID_MASK	0x0003
    208#define RINGB_DIS_VALIDATION	0x0008
    209#define RINGB_EN_SPDIF		0x0010
    210#define	RINGB_EN_2CODEC		0x0020
    211#define RINGB_SING_BIT_DUAL	0x0040
    212
    213/* ****Port Addresses**** */
    214
    215/*   Write & Read */
    216#define ESM_INDEX		0x02
    217#define ESM_DATA		0x00
    218
    219/*   AC97 + RingBus */
    220#define ESM_AC97_INDEX		0x30
    221#define	ESM_AC97_DATA		0x32
    222#define ESM_RING_BUS_DEST	0x34
    223#define ESM_RING_BUS_CONTR_A	0x36
    224#define ESM_RING_BUS_CONTR_B	0x38
    225#define ESM_RING_BUS_SDO	0x3A
    226
    227/*   WaveCache*/
    228#define WC_INDEX		0x10
    229#define WC_DATA			0x12
    230#define WC_CONTROL		0x14
    231
    232/*   ASSP*/
    233#define ASSP_INDEX		0x80
    234#define ASSP_MEMORY		0x82
    235#define ASSP_DATA		0x84
    236#define ASSP_CONTROL_A		0xA2
    237#define ASSP_CONTROL_B		0xA4
    238#define ASSP_CONTROL_C		0xA6
    239#define ASSP_HOSTW_INDEX	0xA8
    240#define ASSP_HOSTW_DATA		0xAA
    241#define ASSP_HOSTW_IRQ		0xAC
    242/* Midi */
    243#define ESM_MPU401_PORT		0x98
    244/* Others */
    245#define ESM_PORT_HOST_IRQ	0x18
    246
    247#define IDR0_DATA_PORT		0x00
    248#define IDR1_CRAM_POINTER	0x01
    249#define IDR2_CRAM_DATA		0x02
    250#define IDR3_WAVE_DATA		0x03
    251#define IDR4_WAVE_PTR_LOW	0x04
    252#define IDR5_WAVE_PTR_HI	0x05
    253#define IDR6_TIMER_CTRL		0x06
    254#define IDR7_WAVE_ROMRAM	0x07
    255
    256#define WRITEABLE_MAP		0xEFFFFF
    257#define READABLE_MAP		0x64003F
    258
    259/* PCI Register */
    260
    261#define ESM_LEGACY_AUDIO_CONTROL 0x40
    262#define ESM_ACPI_COMMAND	0x54
    263#define ESM_CONFIG_A		0x50
    264#define ESM_CONFIG_B		0x52
    265#define ESM_DDMA		0x60
    266
    267/* Bob Bits */
    268#define ESM_BOB_ENABLE		0x0001
    269#define ESM_BOB_START		0x0001
    270
    271/* Host IRQ Control Bits */
    272#define ESM_RESET_MAESTRO	0x8000
    273#define ESM_RESET_DIRECTSOUND   0x4000
    274#define ESM_HIRQ_ClkRun		0x0100
    275#define ESM_HIRQ_HW_VOLUME	0x0040
    276#define ESM_HIRQ_HARPO		0x0030	/* What's that? */
    277#define ESM_HIRQ_ASSP		0x0010
    278#define	ESM_HIRQ_DSIE		0x0004
    279#define ESM_HIRQ_MPU401		0x0002
    280#define ESM_HIRQ_SB		0x0001
    281
    282/* Host IRQ Status Bits */
    283#define ESM_MPU401_IRQ		0x02
    284#define ESM_SB_IRQ		0x01
    285#define ESM_SOUND_IRQ		0x04
    286#define	ESM_ASSP_IRQ		0x10
    287#define ESM_HWVOL_IRQ		0x40
    288
    289#define ESS_SYSCLK		50000000
    290#define ESM_BOB_FREQ 		200
    291#define ESM_BOB_FREQ_MAX	800
    292
    293#define ESM_FREQ_ESM1  		(49152000L / 1024L)	/* default rate 48000 */
    294#define ESM_FREQ_ESM2  		(50000000L / 1024L)
    295
    296/* APU Modes: reg 0x00, bit 4-7 */
    297#define ESM_APU_MODE_SHIFT	4
    298#define ESM_APU_MODE_MASK	(0xf << 4)
    299#define	ESM_APU_OFF		0x00
    300#define	ESM_APU_16BITLINEAR	0x01	/* 16-Bit Linear Sample Player */
    301#define	ESM_APU_16BITSTEREO	0x02	/* 16-Bit Stereo Sample Player */
    302#define	ESM_APU_8BITLINEAR	0x03	/* 8-Bit Linear Sample Player */
    303#define	ESM_APU_8BITSTEREO	0x04	/* 8-Bit Stereo Sample Player */
    304#define	ESM_APU_8BITDIFF	0x05	/* 8-Bit Differential Sample Playrer */
    305#define	ESM_APU_DIGITALDELAY	0x06	/* Digital Delay Line */
    306#define	ESM_APU_DUALTAP		0x07	/* Dual Tap Reader */
    307#define	ESM_APU_CORRELATOR	0x08	/* Correlator */
    308#define	ESM_APU_INPUTMIXER	0x09	/* Input Mixer */
    309#define	ESM_APU_WAVETABLE	0x0A	/* Wave Table Mode */
    310#define	ESM_APU_SRCONVERTOR	0x0B	/* Sample Rate Convertor */
    311#define	ESM_APU_16BITPINGPONG	0x0C	/* 16-Bit Ping-Pong Sample Player */
    312#define	ESM_APU_RESERVED1	0x0D	/* Reserved 1 */
    313#define	ESM_APU_RESERVED2	0x0E	/* Reserved 2 */
    314#define	ESM_APU_RESERVED3	0x0F	/* Reserved 3 */
    315
    316/* reg 0x00 */
    317#define ESM_APU_FILTER_Q_SHIFT		0
    318#define ESM_APU_FILTER_Q_MASK		(3 << 0)
    319/* APU Filtey Q Control */
    320#define ESM_APU_FILTER_LESSQ	0x00
    321#define ESM_APU_FILTER_MOREQ	0x03
    322
    323#define ESM_APU_FILTER_TYPE_SHIFT	2
    324#define ESM_APU_FILTER_TYPE_MASK	(3 << 2)
    325#define ESM_APU_ENV_TYPE_SHIFT		8
    326#define ESM_APU_ENV_TYPE_MASK		(3 << 8)
    327#define ESM_APU_ENV_STATE_SHIFT		10
    328#define ESM_APU_ENV_STATE_MASK		(3 << 10)
    329#define ESM_APU_END_CURVE		(1 << 12)
    330#define ESM_APU_INT_ON_LOOP		(1 << 13)
    331#define ESM_APU_DMA_ENABLE		(1 << 14)
    332
    333/* reg 0x02 */
    334#define ESM_APU_SUBMIX_GROUP_SHIRT	0
    335#define ESM_APU_SUBMIX_GROUP_MASK	(7 << 0)
    336#define ESM_APU_SUBMIX_MODE		(1 << 3)
    337#define ESM_APU_6dB			(1 << 4)
    338#define ESM_APU_DUAL_EFFECT		(1 << 5)
    339#define ESM_APU_EFFECT_CHANNELS_SHIFT	6
    340#define ESM_APU_EFFECT_CHANNELS_MASK	(3 << 6)
    341
    342/* reg 0x03 */
    343#define ESM_APU_STEP_SIZE_MASK		0x0fff
    344
    345/* reg 0x04 */
    346#define ESM_APU_PHASE_SHIFT		0
    347#define ESM_APU_PHASE_MASK		(0xff << 0)
    348#define ESM_APU_WAVE64K_PAGE_SHIFT	8	/* most 8bit of wave start offset */
    349#define ESM_APU_WAVE64K_PAGE_MASK	(0xff << 8)
    350
    351/* reg 0x05 - wave start offset */
    352/* reg 0x06 - wave end offset */
    353/* reg 0x07 - wave loop length */
    354
    355/* reg 0x08 */
    356#define ESM_APU_EFFECT_GAIN_SHIFT	0
    357#define ESM_APU_EFFECT_GAIN_MASK	(0xff << 0)
    358#define ESM_APU_TREMOLO_DEPTH_SHIFT	8
    359#define ESM_APU_TREMOLO_DEPTH_MASK	(0xf << 8)
    360#define ESM_APU_TREMOLO_RATE_SHIFT	12
    361#define ESM_APU_TREMOLO_RATE_MASK	(0xf << 12)
    362
    363/* reg 0x09 */
    364/* bit 0-7 amplitude dest? */
    365#define ESM_APU_AMPLITUDE_NOW_SHIFT	8
    366#define ESM_APU_AMPLITUDE_NOW_MASK	(0xff << 8)
    367
    368/* reg 0x0a */
    369#define ESM_APU_POLAR_PAN_SHIFT		0
    370#define ESM_APU_POLAR_PAN_MASK		(0x3f << 0)
    371/* Polar Pan Control */
    372#define	ESM_APU_PAN_CENTER_CIRCLE		0x00
    373#define	ESM_APU_PAN_MIDDLE_RADIUS		0x01
    374#define	ESM_APU_PAN_OUTSIDE_RADIUS		0x02
    375
    376#define ESM_APU_FILTER_TUNING_SHIFT	8
    377#define ESM_APU_FILTER_TUNING_MASK	(0xff << 8)
    378
    379/* reg 0x0b */
    380#define ESM_APU_DATA_SRC_A_SHIFT	0
    381#define ESM_APU_DATA_SRC_A_MASK		(0x7f << 0)
    382#define ESM_APU_INV_POL_A		(1 << 7)
    383#define ESM_APU_DATA_SRC_B_SHIFT	8
    384#define ESM_APU_DATA_SRC_B_MASK		(0x7f << 8)
    385#define ESM_APU_INV_POL_B		(1 << 15)
    386
    387#define ESM_APU_VIBRATO_RATE_SHIFT	0
    388#define ESM_APU_VIBRATO_RATE_MASK	(0xf << 0)
    389#define ESM_APU_VIBRATO_DEPTH_SHIFT	4
    390#define ESM_APU_VIBRATO_DEPTH_MASK	(0xf << 4)
    391#define ESM_APU_VIBRATO_PHASE_SHIFT	8
    392#define ESM_APU_VIBRATO_PHASE_MASK	(0xff << 8)
    393
    394/* reg 0x0c */
    395#define ESM_APU_RADIUS_SELECT		(1 << 6)
    396
    397/* APU Filter Control */
    398#define	ESM_APU_FILTER_2POLE_LOPASS	0x00
    399#define	ESM_APU_FILTER_2POLE_BANDPASS	0x01
    400#define	ESM_APU_FILTER_2POLE_HIPASS	0x02
    401#define	ESM_APU_FILTER_1POLE_LOPASS	0x03
    402#define	ESM_APU_FILTER_1POLE_HIPASS	0x04
    403#define	ESM_APU_FILTER_OFF		0x05
    404
    405/* APU ATFP Type */
    406#define	ESM_APU_ATFP_AMPLITUDE			0x00
    407#define	ESM_APU_ATFP_TREMELO			0x01
    408#define	ESM_APU_ATFP_FILTER			0x02
    409#define	ESM_APU_ATFP_PAN			0x03
    410
    411/* APU ATFP Flags */
    412#define	ESM_APU_ATFP_FLG_OFF			0x00
    413#define	ESM_APU_ATFP_FLG_WAIT			0x01
    414#define	ESM_APU_ATFP_FLG_DONE			0x02
    415#define	ESM_APU_ATFP_FLG_INPROCESS		0x03
    416
    417
    418/* capture mixing buffer size */
    419#define ESM_MEM_ALIGN		0x1000
    420#define ESM_MIXBUF_SIZE		0x400
    421
    422#define ESM_MODE_PLAY		0
    423#define ESM_MODE_CAPTURE	1
    424
    425
    426/* APU use in the driver */
    427enum snd_enum_apu_type {
    428	ESM_APU_PCM_PLAY,
    429	ESM_APU_PCM_CAPTURE,
    430	ESM_APU_PCM_RATECONV,
    431	ESM_APU_FREE
    432};
    433
    434/* chip type */
    435enum {
    436	TYPE_MAESTRO, TYPE_MAESTRO2, TYPE_MAESTRO2E
    437};
    438
    439/* DMA Hack! */
    440struct esm_memory {
    441	struct snd_dma_buffer buf;
    442	int empty;	/* status */
    443	struct list_head list;
    444};
    445
    446/* Playback Channel */
    447struct esschan {
    448	int running;
    449
    450	u8 apu[4];
    451	u8 apu_mode[4];
    452
    453	/* playback/capture pcm buffer */
    454	struct esm_memory *memory;
    455	/* capture mixer buffer */
    456	struct esm_memory *mixbuf;
    457
    458	unsigned int hwptr;	/* current hw pointer in bytes */
    459	unsigned int count;	/* sample counter in bytes */
    460	unsigned int dma_size;	/* total buffer size in bytes */
    461	unsigned int frag_size;	/* period size in bytes */
    462	unsigned int wav_shift;
    463	u16 base[4];		/* offset for ptr */
    464
    465	/* stereo/16bit flag */
    466	unsigned char fmt;
    467	int mode;	/* playback / capture */
    468
    469	int bob_freq;	/* required timer frequency */
    470
    471	struct snd_pcm_substream *substream;
    472
    473	/* linked list */
    474	struct list_head list;
    475
    476#ifdef CONFIG_PM_SLEEP
    477	u16 wc_map[4];
    478#endif
    479};
    480
    481struct es1968 {
    482	/* Module Config */
    483	int total_bufsize;			/* in bytes */
    484
    485	int playback_streams, capture_streams;
    486
    487	unsigned int clock;		/* clock */
    488	/* for clock measurement */
    489	unsigned int in_measurement: 1;
    490	unsigned int measure_apu;
    491	unsigned int measure_lastpos;
    492	unsigned int measure_count;
    493
    494	/* buffer */
    495	struct snd_dma_buffer dma;
    496
    497	/* Resources... */
    498	int irq;
    499	unsigned long io_port;
    500	int type;
    501	struct pci_dev *pci;
    502	struct snd_card *card;
    503	struct snd_pcm *pcm;
    504	int do_pm;		/* power-management enabled */
    505
    506	/* DMA memory block */
    507	struct list_head buf_list;
    508
    509	/* ALSA Stuff */
    510	struct snd_ac97 *ac97;
    511	struct snd_rawmidi *rmidi;
    512
    513	spinlock_t reg_lock;
    514	unsigned int in_suspend;
    515
    516	/* Maestro Stuff */
    517	u16 maestro_map[32];
    518	int bobclient;		/* active timer instancs */
    519	int bob_freq;		/* timer frequency */
    520	struct mutex memory_mutex;	/* memory lock */
    521
    522	/* APU states */
    523	unsigned char apu[NR_APUS];
    524
    525	/* active substreams */
    526	struct list_head substream_list;
    527	spinlock_t substream_lock;
    528
    529#ifdef CONFIG_PM_SLEEP
    530	u16 apu_map[NR_APUS][NR_APU_REGS];
    531#endif
    532
    533#ifdef SUPPORT_JOYSTICK
    534	struct gameport *gameport;
    535#endif
    536
    537#ifdef CONFIG_SND_ES1968_INPUT
    538	struct input_dev *input_dev;
    539	char phys[64];			/* physical device path */
    540#else
    541	struct snd_kcontrol *master_switch; /* for h/w volume control */
    542	struct snd_kcontrol *master_volume;
    543#endif
    544	struct work_struct hwvol_work;
    545
    546#ifdef CONFIG_SND_ES1968_RADIO
    547	struct v4l2_device v4l2_dev;
    548	struct snd_tea575x tea;
    549	unsigned int tea575x_tuner;
    550#endif
    551};
    552
    553static irqreturn_t snd_es1968_interrupt(int irq, void *dev_id);
    554
    555static const struct pci_device_id snd_es1968_ids[] = {
    556	/* Maestro 1 */
    557        { 0x1285, 0x0100, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_MULTIMEDIA_AUDIO << 8, 0xffff00, TYPE_MAESTRO },
    558	/* Maestro 2 */
    559	{ 0x125d, 0x1968, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_MULTIMEDIA_AUDIO << 8, 0xffff00, TYPE_MAESTRO2 },
    560	/* Maestro 2E */
    561        { 0x125d, 0x1978, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_MULTIMEDIA_AUDIO << 8, 0xffff00, TYPE_MAESTRO2E },
    562	{ 0, }
    563};
    564
    565MODULE_DEVICE_TABLE(pci, snd_es1968_ids);
    566
    567/* *********************
    568   * Low Level Funcs!  *
    569   *********************/
    570
    571/* no spinlock */
    572static void __maestro_write(struct es1968 *chip, u16 reg, u16 data)
    573{
    574	outw(reg, chip->io_port + ESM_INDEX);
    575	outw(data, chip->io_port + ESM_DATA);
    576	chip->maestro_map[reg] = data;
    577}
    578
    579static inline void maestro_write(struct es1968 *chip, u16 reg, u16 data)
    580{
    581	unsigned long flags;
    582	spin_lock_irqsave(&chip->reg_lock, flags);
    583	__maestro_write(chip, reg, data);
    584	spin_unlock_irqrestore(&chip->reg_lock, flags);
    585}
    586
    587/* no spinlock */
    588static u16 __maestro_read(struct es1968 *chip, u16 reg)
    589{
    590	if (READABLE_MAP & (1 << reg)) {
    591		outw(reg, chip->io_port + ESM_INDEX);
    592		chip->maestro_map[reg] = inw(chip->io_port + ESM_DATA);
    593	}
    594	return chip->maestro_map[reg];
    595}
    596
    597static inline u16 maestro_read(struct es1968 *chip, u16 reg)
    598{
    599	unsigned long flags;
    600	u16 result;
    601	spin_lock_irqsave(&chip->reg_lock, flags);
    602	result = __maestro_read(chip, reg);
    603	spin_unlock_irqrestore(&chip->reg_lock, flags);
    604	return result;
    605}
    606
    607/* Wait for the codec bus to be free */
    608static int snd_es1968_ac97_wait(struct es1968 *chip)
    609{
    610	int timeout = 100000;
    611
    612	while (timeout-- > 0) {
    613		if (!(inb(chip->io_port + ESM_AC97_INDEX) & 1))
    614			return 0;
    615		cond_resched();
    616	}
    617	dev_dbg(chip->card->dev, "ac97 timeout\n");
    618	return 1; /* timeout */
    619}
    620
    621static int snd_es1968_ac97_wait_poll(struct es1968 *chip)
    622{
    623	int timeout = 100000;
    624
    625	while (timeout-- > 0) {
    626		if (!(inb(chip->io_port + ESM_AC97_INDEX) & 1))
    627			return 0;
    628	}
    629	dev_dbg(chip->card->dev, "ac97 timeout\n");
    630	return 1; /* timeout */
    631}
    632
    633static void snd_es1968_ac97_write(struct snd_ac97 *ac97, unsigned short reg, unsigned short val)
    634{
    635	struct es1968 *chip = ac97->private_data;
    636
    637	snd_es1968_ac97_wait(chip);
    638
    639	/* Write the bus */
    640	outw(val, chip->io_port + ESM_AC97_DATA);
    641	/*msleep(1);*/
    642	outb(reg, chip->io_port + ESM_AC97_INDEX);
    643	/*msleep(1);*/
    644}
    645
    646static unsigned short snd_es1968_ac97_read(struct snd_ac97 *ac97, unsigned short reg)
    647{
    648	u16 data = 0;
    649	struct es1968 *chip = ac97->private_data;
    650
    651	snd_es1968_ac97_wait(chip);
    652
    653	outb(reg | 0x80, chip->io_port + ESM_AC97_INDEX);
    654	/*msleep(1);*/
    655
    656	if (!snd_es1968_ac97_wait_poll(chip)) {
    657		data = inw(chip->io_port + ESM_AC97_DATA);
    658		/*msleep(1);*/
    659	}
    660
    661	return data;
    662}
    663
    664/* no spinlock */
    665static void apu_index_set(struct es1968 *chip, u16 index)
    666{
    667	int i;
    668	__maestro_write(chip, IDR1_CRAM_POINTER, index);
    669	for (i = 0; i < 1000; i++)
    670		if (__maestro_read(chip, IDR1_CRAM_POINTER) == index)
    671			return;
    672	dev_dbg(chip->card->dev, "APU register select failed. (Timeout)\n");
    673}
    674
    675/* no spinlock */
    676static void apu_data_set(struct es1968 *chip, u16 data)
    677{
    678	int i;
    679	for (i = 0; i < 1000; i++) {
    680		if (__maestro_read(chip, IDR0_DATA_PORT) == data)
    681			return;
    682		__maestro_write(chip, IDR0_DATA_PORT, data);
    683	}
    684	dev_dbg(chip->card->dev, "APU register set probably failed (Timeout)!\n");
    685}
    686
    687/* no spinlock */
    688static void __apu_set_register(struct es1968 *chip, u16 channel, u8 reg, u16 data)
    689{
    690	if (snd_BUG_ON(channel >= NR_APUS))
    691		return;
    692#ifdef CONFIG_PM_SLEEP
    693	chip->apu_map[channel][reg] = data;
    694#endif
    695	reg |= (channel << 4);
    696	apu_index_set(chip, reg);
    697	apu_data_set(chip, data);
    698}
    699
    700static void apu_set_register(struct es1968 *chip, u16 channel, u8 reg, u16 data)
    701{
    702	unsigned long flags;
    703	spin_lock_irqsave(&chip->reg_lock, flags);
    704	__apu_set_register(chip, channel, reg, data);
    705	spin_unlock_irqrestore(&chip->reg_lock, flags);
    706}
    707
    708static u16 __apu_get_register(struct es1968 *chip, u16 channel, u8 reg)
    709{
    710	if (snd_BUG_ON(channel >= NR_APUS))
    711		return 0;
    712	reg |= (channel << 4);
    713	apu_index_set(chip, reg);
    714	return __maestro_read(chip, IDR0_DATA_PORT);
    715}
    716
    717static u16 apu_get_register(struct es1968 *chip, u16 channel, u8 reg)
    718{
    719	unsigned long flags;
    720	u16 v;
    721	spin_lock_irqsave(&chip->reg_lock, flags);
    722	v = __apu_get_register(chip, channel, reg);
    723	spin_unlock_irqrestore(&chip->reg_lock, flags);
    724	return v;
    725}
    726
    727#if 0 /* ASSP is not supported */
    728
    729static void assp_set_register(struct es1968 *chip, u32 reg, u32 value)
    730{
    731	unsigned long flags;
    732
    733	spin_lock_irqsave(&chip->reg_lock, flags);
    734	outl(reg, chip->io_port + ASSP_INDEX);
    735	outl(value, chip->io_port + ASSP_DATA);
    736	spin_unlock_irqrestore(&chip->reg_lock, flags);
    737}
    738
    739static u32 assp_get_register(struct es1968 *chip, u32 reg)
    740{
    741	unsigned long flags;
    742	u32 value;
    743
    744	spin_lock_irqsave(&chip->reg_lock, flags);
    745	outl(reg, chip->io_port + ASSP_INDEX);
    746	value = inl(chip->io_port + ASSP_DATA);
    747	spin_unlock_irqrestore(&chip->reg_lock, flags);
    748
    749	return value;
    750}
    751
    752#endif
    753
    754static void wave_set_register(struct es1968 *chip, u16 reg, u16 value)
    755{
    756	unsigned long flags;
    757
    758	spin_lock_irqsave(&chip->reg_lock, flags);
    759	outw(reg, chip->io_port + WC_INDEX);
    760	outw(value, chip->io_port + WC_DATA);
    761	spin_unlock_irqrestore(&chip->reg_lock, flags);
    762}
    763
    764static u16 wave_get_register(struct es1968 *chip, u16 reg)
    765{
    766	unsigned long flags;
    767	u16 value;
    768
    769	spin_lock_irqsave(&chip->reg_lock, flags);
    770	outw(reg, chip->io_port + WC_INDEX);
    771	value = inw(chip->io_port + WC_DATA);
    772	spin_unlock_irqrestore(&chip->reg_lock, flags);
    773
    774	return value;
    775}
    776
    777/* *******************
    778   * Bob the Timer!  *
    779   *******************/
    780
    781static void snd_es1968_bob_stop(struct es1968 *chip)
    782{
    783	u16 reg;
    784
    785	reg = __maestro_read(chip, 0x11);
    786	reg &= ~ESM_BOB_ENABLE;
    787	__maestro_write(chip, 0x11, reg);
    788	reg = __maestro_read(chip, 0x17);
    789	reg &= ~ESM_BOB_START;
    790	__maestro_write(chip, 0x17, reg);
    791}
    792
    793static void snd_es1968_bob_start(struct es1968 *chip)
    794{
    795	int prescale;
    796	int divide;
    797
    798	/* compute ideal interrupt frequency for buffer size & play rate */
    799	/* first, find best prescaler value to match freq */
    800	for (prescale = 5; prescale < 12; prescale++)
    801		if (chip->bob_freq > (ESS_SYSCLK >> (prescale + 9)))
    802			break;
    803
    804	/* next, back off prescaler whilst getting divider into optimum range */
    805	divide = 1;
    806	while ((prescale > 5) && (divide < 32)) {
    807		prescale--;
    808		divide <<= 1;
    809	}
    810	divide >>= 1;
    811
    812	/* now fine-tune the divider for best match */
    813	for (; divide < 31; divide++)
    814		if (chip->bob_freq >
    815		    ((ESS_SYSCLK >> (prescale + 9)) / (divide + 1))) break;
    816
    817	/* divide = 0 is illegal, but don't let prescale = 4! */
    818	if (divide == 0) {
    819		divide++;
    820		if (prescale > 5)
    821			prescale--;
    822	} else if (divide > 1)
    823		divide--;
    824
    825	__maestro_write(chip, 6, 0x9000 | (prescale << 5) | divide);	/* set reg */
    826
    827	/* Now set IDR 11/17 */
    828	__maestro_write(chip, 0x11, __maestro_read(chip, 0x11) | 1);
    829	__maestro_write(chip, 0x17, __maestro_read(chip, 0x17) | 1);
    830}
    831
    832/* call with substream spinlock */
    833static void snd_es1968_bob_inc(struct es1968 *chip, int freq)
    834{
    835	chip->bobclient++;
    836	if (chip->bobclient == 1) {
    837		chip->bob_freq = freq;
    838		snd_es1968_bob_start(chip);
    839	} else if (chip->bob_freq < freq) {
    840		snd_es1968_bob_stop(chip);
    841		chip->bob_freq = freq;
    842		snd_es1968_bob_start(chip);
    843	}
    844}
    845
    846/* call with substream spinlock */
    847static void snd_es1968_bob_dec(struct es1968 *chip)
    848{
    849	chip->bobclient--;
    850	if (chip->bobclient <= 0)
    851		snd_es1968_bob_stop(chip);
    852	else if (chip->bob_freq > ESM_BOB_FREQ) {
    853		/* check reduction of timer frequency */
    854		int max_freq = ESM_BOB_FREQ;
    855		struct esschan *es;
    856		list_for_each_entry(es, &chip->substream_list, list) {
    857			if (max_freq < es->bob_freq)
    858				max_freq = es->bob_freq;
    859		}
    860		if (max_freq != chip->bob_freq) {
    861			snd_es1968_bob_stop(chip);
    862			chip->bob_freq = max_freq;
    863			snd_es1968_bob_start(chip);
    864		}
    865	}
    866}
    867
    868static int
    869snd_es1968_calc_bob_rate(struct es1968 *chip, struct esschan *es,
    870			 struct snd_pcm_runtime *runtime)
    871{
    872	/* we acquire 4 interrupts per period for precise control.. */
    873	int freq = runtime->rate * 4;
    874	if (es->fmt & ESS_FMT_STEREO)
    875		freq <<= 1;
    876	if (es->fmt & ESS_FMT_16BIT)
    877		freq <<= 1;
    878	freq /= es->frag_size;
    879	if (freq < ESM_BOB_FREQ)
    880		freq = ESM_BOB_FREQ;
    881	else if (freq > ESM_BOB_FREQ_MAX)
    882		freq = ESM_BOB_FREQ_MAX;
    883	return freq;
    884}
    885
    886
    887/*************
    888 *  PCM Part *
    889 *************/
    890
    891static u32 snd_es1968_compute_rate(struct es1968 *chip, u32 freq)
    892{
    893	u32 rate = (freq << 16) / chip->clock;
    894#if 0 /* XXX: do we need this? */ 
    895	if (rate > 0x10000)
    896		rate = 0x10000;
    897#endif
    898	return rate;
    899}
    900
    901/* get current pointer */
    902static inline unsigned int
    903snd_es1968_get_dma_ptr(struct es1968 *chip, struct esschan *es)
    904{
    905	unsigned int offset;
    906
    907	offset = apu_get_register(chip, es->apu[0], 5);
    908
    909	offset -= es->base[0];
    910
    911	return (offset & 0xFFFE);	/* hardware is in words */
    912}
    913
    914static void snd_es1968_apu_set_freq(struct es1968 *chip, int apu, int freq)
    915{
    916	apu_set_register(chip, apu, 2,
    917			   (apu_get_register(chip, apu, 2) & 0x00FF) |
    918			   ((freq & 0xff) << 8) | 0x10);
    919	apu_set_register(chip, apu, 3, freq >> 8);
    920}
    921
    922/* spin lock held */
    923static inline void snd_es1968_trigger_apu(struct es1968 *esm, int apu, int mode)
    924{
    925	/* set the APU mode */
    926	__apu_set_register(esm, apu, 0,
    927			   (__apu_get_register(esm, apu, 0) & 0xff0f) |
    928			   (mode << 4));
    929}
    930
    931static void snd_es1968_pcm_start(struct es1968 *chip, struct esschan *es)
    932{
    933	spin_lock(&chip->reg_lock);
    934	__apu_set_register(chip, es->apu[0], 5, es->base[0]);
    935	snd_es1968_trigger_apu(chip, es->apu[0], es->apu_mode[0]);
    936	if (es->mode == ESM_MODE_CAPTURE) {
    937		__apu_set_register(chip, es->apu[2], 5, es->base[2]);
    938		snd_es1968_trigger_apu(chip, es->apu[2], es->apu_mode[2]);
    939	}
    940	if (es->fmt & ESS_FMT_STEREO) {
    941		__apu_set_register(chip, es->apu[1], 5, es->base[1]);
    942		snd_es1968_trigger_apu(chip, es->apu[1], es->apu_mode[1]);
    943		if (es->mode == ESM_MODE_CAPTURE) {
    944			__apu_set_register(chip, es->apu[3], 5, es->base[3]);
    945			snd_es1968_trigger_apu(chip, es->apu[3], es->apu_mode[3]);
    946		}
    947	}
    948	spin_unlock(&chip->reg_lock);
    949}
    950
    951static void snd_es1968_pcm_stop(struct es1968 *chip, struct esschan *es)
    952{
    953	spin_lock(&chip->reg_lock);
    954	snd_es1968_trigger_apu(chip, es->apu[0], 0);
    955	snd_es1968_trigger_apu(chip, es->apu[1], 0);
    956	if (es->mode == ESM_MODE_CAPTURE) {
    957		snd_es1968_trigger_apu(chip, es->apu[2], 0);
    958		snd_es1968_trigger_apu(chip, es->apu[3], 0);
    959	}
    960	spin_unlock(&chip->reg_lock);
    961}
    962
    963/* set the wavecache control reg */
    964static void snd_es1968_program_wavecache(struct es1968 *chip, struct esschan *es,
    965					 int channel, u32 addr, int capture)
    966{
    967	u32 tmpval = (addr - 0x10) & 0xFFF8;
    968
    969	if (! capture) {
    970		if (!(es->fmt & ESS_FMT_16BIT))
    971			tmpval |= 4;	/* 8bit */
    972		if (es->fmt & ESS_FMT_STEREO)
    973			tmpval |= 2;	/* stereo */
    974	}
    975
    976	/* set the wavecache control reg */
    977	wave_set_register(chip, es->apu[channel] << 3, tmpval);
    978
    979#ifdef CONFIG_PM_SLEEP
    980	es->wc_map[channel] = tmpval;
    981#endif
    982}
    983
    984
    985static void snd_es1968_playback_setup(struct es1968 *chip, struct esschan *es,
    986				      struct snd_pcm_runtime *runtime)
    987{
    988	u32 pa;
    989	int high_apu = 0;
    990	int channel, apu;
    991	int i, size;
    992	unsigned long flags;
    993	u32 freq;
    994
    995	size = es->dma_size >> es->wav_shift;
    996
    997	if (es->fmt & ESS_FMT_STEREO)
    998		high_apu++;
    999
   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
   1088static 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
   1133static 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
   1202static 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
   1234static 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
   1264static 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
   1275static 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
   1296static 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
   1324static 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 */
   1341static 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 */
   1375static 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
   1401static 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
   1415static int
   1416snd_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 */
   1456static 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 */
   1482static 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 */
   1502static 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 */
   1519static 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
   1529static 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
   1567static 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
   1625static 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
   1642static 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
   1661static 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
   1671static 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
   1687static 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
   1783static 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
   1790static int
   1791snd_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 */
   1830static 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 */
   1847static 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. */
   1876static 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 */
   1956static 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
   2003static int
   2004snd_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
   2047static 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
   2152static 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 */
   2165static 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 */
   2356static 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 */
   2370static 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
   2386static 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
   2428static 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
   2436static 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
   2470static 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
   2478static inline int snd_es1968_create_gameport(struct es1968 *chip, int dev) { return -ENOSYS; }
   2479static inline void snd_es1968_free_gameport(struct es1968 *chip) { }
   2480#endif
   2481
   2482#ifdef CONFIG_SND_ES1968_INPUT
   2483static 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 */
   2524struct snd_es1968_tea575x_gpio {
   2525	u8 data, clk, wren, most;
   2526	char *name;
   2527};
   2528
   2529static 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
   2538static 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
   2551static 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
   2566static 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
   2586static 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
   2593static 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
   2612struct ess_device_list {
   2613	unsigned short type;	/* chip type */
   2614	unsigned short vendor;	/* subsystem vendor id */
   2615};
   2616
   2617static 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
   2628static const struct ess_device_list mpu_denylist[] = {
   2629	{ TYPE_MAESTRO2, 0x125d },
   2630};
   2631
   2632static 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 */
   2744static 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
   2851static 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
   2857static 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
   2866module_pci_driver(es1968_driver);