xref: /linux/sound/pci/es1968.c (revision 79790b6818e96c58fe2bffee1b418c16e64e7b80)
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 
108 MODULE_DESCRIPTION("ESS Maestro");
109 MODULE_LICENSE("GPL");
110 
111 #if IS_REACHABLE(CONFIG_GAMEPORT)
112 #define SUPPORT_JOYSTICK 1
113 #endif
114 
115 static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;	/* Index 1-MAX */
116 static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;	/* ID for this card */
117 static bool enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP;	/* Enable this card */
118 static int total_bufsize[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 1024 };
119 static int pcm_substreams_p[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 4 };
120 static int pcm_substreams_c[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 1 };
121 static int clock[SNDRV_CARDS];
122 static int use_pm[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 2};
123 static int enable_mpu[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 2};
124 #ifdef SUPPORT_JOYSTICK
125 static bool joystick[SNDRV_CARDS];
126 #endif
127 static int radio_nr[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = -1};
128 
129 module_param_array(index, int, NULL, 0444);
130 MODULE_PARM_DESC(index, "Index value for " CARD_NAME " soundcard.");
131 module_param_array(id, charp, NULL, 0444);
132 MODULE_PARM_DESC(id, "ID string for " CARD_NAME " soundcard.");
133 module_param_array(enable, bool, NULL, 0444);
134 MODULE_PARM_DESC(enable, "Enable " CARD_NAME " soundcard.");
135 module_param_array(total_bufsize, int, NULL, 0444);
136 MODULE_PARM_DESC(total_bufsize, "Total buffer size in kB.");
137 module_param_array(pcm_substreams_p, int, NULL, 0444);
138 MODULE_PARM_DESC(pcm_substreams_p, "PCM Playback substreams for " CARD_NAME " soundcard.");
139 module_param_array(pcm_substreams_c, int, NULL, 0444);
140 MODULE_PARM_DESC(pcm_substreams_c, "PCM Capture substreams for " CARD_NAME " soundcard.");
141 module_param_array(clock, int, NULL, 0444);
142 MODULE_PARM_DESC(clock, "Clock on " CARD_NAME " soundcard.  (0 = auto-detect)");
143 module_param_array(use_pm, int, NULL, 0444);
144 MODULE_PARM_DESC(use_pm, "Toggle power-management.  (0 = off, 1 = on, 2 = auto)");
145 module_param_array(enable_mpu, int, NULL, 0444);
146 MODULE_PARM_DESC(enable_mpu, "Enable MPU401.  (0 = off, 1 = on, 2 = auto)");
147 #ifdef SUPPORT_JOYSTICK
148 module_param_array(joystick, bool, NULL, 0444);
149 MODULE_PARM_DESC(joystick, "Enable joystick.");
150 #endif
151 module_param_array(radio_nr, int, NULL, 0444);
152 MODULE_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 */
427 enum 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 */
435 enum {
436 	TYPE_MAESTRO, TYPE_MAESTRO2, TYPE_MAESTRO2E
437 };
438 
439 /* DMA Hack! */
440 struct esm_memory {
441 	struct snd_dma_buffer buf;
442 	int empty;	/* status */
443 	struct list_head list;
444 };
445 
446 /* Playback Channel */
447 struct 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 	u16 wc_map[4];
477 };
478 
479 struct es1968 {
480 	/* Module Config */
481 	int total_bufsize;			/* in bytes */
482 
483 	int playback_streams, capture_streams;
484 
485 	unsigned int clock;		/* clock */
486 	/* for clock measurement */
487 	unsigned int in_measurement: 1;
488 	unsigned int measure_apu;
489 	unsigned int measure_lastpos;
490 	unsigned int measure_count;
491 
492 	/* buffer */
493 	struct snd_dma_buffer dma;
494 
495 	/* Resources... */
496 	int irq;
497 	unsigned long io_port;
498 	int type;
499 	struct pci_dev *pci;
500 	struct snd_card *card;
501 	struct snd_pcm *pcm;
502 	int do_pm;		/* power-management enabled */
503 
504 	/* DMA memory block */
505 	struct list_head buf_list;
506 
507 	/* ALSA Stuff */
508 	struct snd_ac97 *ac97;
509 	struct snd_rawmidi *rmidi;
510 
511 	spinlock_t reg_lock;
512 	unsigned int in_suspend;
513 
514 	/* Maestro Stuff */
515 	u16 maestro_map[32];
516 	int bobclient;		/* active timer instancs */
517 	int bob_freq;		/* timer frequency */
518 	struct mutex memory_mutex;	/* memory lock */
519 
520 	/* APU states */
521 	unsigned char apu[NR_APUS];
522 
523 	/* active substreams */
524 	struct list_head substream_list;
525 	spinlock_t substream_lock;
526 
527 	u16 apu_map[NR_APUS][NR_APU_REGS];
528 
529 #ifdef SUPPORT_JOYSTICK
530 	struct gameport *gameport;
531 #endif
532 
533 #ifdef CONFIG_SND_ES1968_INPUT
534 	struct input_dev *input_dev;
535 	char phys[64];			/* physical device path */
536 #else
537 	struct snd_kcontrol *master_switch; /* for h/w volume control */
538 	struct snd_kcontrol *master_volume;
539 #endif
540 	struct work_struct hwvol_work;
541 
542 #ifdef CONFIG_SND_ES1968_RADIO
543 	struct v4l2_device v4l2_dev;
544 	struct snd_tea575x tea;
545 	unsigned int tea575x_tuner;
546 #endif
547 };
548 
549 static irqreturn_t snd_es1968_interrupt(int irq, void *dev_id);
550 
551 static const struct pci_device_id snd_es1968_ids[] = {
552 	/* Maestro 1 */
553         { 0x1285, 0x0100, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_MULTIMEDIA_AUDIO << 8, 0xffff00, TYPE_MAESTRO },
554 	/* Maestro 2 */
555 	{ 0x125d, 0x1968, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_MULTIMEDIA_AUDIO << 8, 0xffff00, TYPE_MAESTRO2 },
556 	/* Maestro 2E */
557         { 0x125d, 0x1978, PCI_ANY_ID, PCI_ANY_ID, PCI_CLASS_MULTIMEDIA_AUDIO << 8, 0xffff00, TYPE_MAESTRO2E },
558 	{ 0, }
559 };
560 
561 MODULE_DEVICE_TABLE(pci, snd_es1968_ids);
562 
563 /* *********************
564    * Low Level Funcs!  *
565    *********************/
566 
567 /* no spinlock */
__maestro_write(struct es1968 * chip,u16 reg,u16 data)568 static void __maestro_write(struct es1968 *chip, u16 reg, u16 data)
569 {
570 	outw(reg, chip->io_port + ESM_INDEX);
571 	outw(data, chip->io_port + ESM_DATA);
572 	chip->maestro_map[reg] = data;
573 }
574 
maestro_write(struct es1968 * chip,u16 reg,u16 data)575 static inline void maestro_write(struct es1968 *chip, u16 reg, u16 data)
576 {
577 	unsigned long flags;
578 	spin_lock_irqsave(&chip->reg_lock, flags);
579 	__maestro_write(chip, reg, data);
580 	spin_unlock_irqrestore(&chip->reg_lock, flags);
581 }
582 
583 /* no spinlock */
__maestro_read(struct es1968 * chip,u16 reg)584 static u16 __maestro_read(struct es1968 *chip, u16 reg)
585 {
586 	if (READABLE_MAP & (1 << reg)) {
587 		outw(reg, chip->io_port + ESM_INDEX);
588 		chip->maestro_map[reg] = inw(chip->io_port + ESM_DATA);
589 	}
590 	return chip->maestro_map[reg];
591 }
592 
maestro_read(struct es1968 * chip,u16 reg)593 static inline u16 maestro_read(struct es1968 *chip, u16 reg)
594 {
595 	unsigned long flags;
596 	u16 result;
597 	spin_lock_irqsave(&chip->reg_lock, flags);
598 	result = __maestro_read(chip, reg);
599 	spin_unlock_irqrestore(&chip->reg_lock, flags);
600 	return result;
601 }
602 
603 /* Wait for the codec bus to be free */
snd_es1968_ac97_wait(struct es1968 * chip)604 static int snd_es1968_ac97_wait(struct es1968 *chip)
605 {
606 	int timeout = 100000;
607 
608 	while (timeout-- > 0) {
609 		if (!(inb(chip->io_port + ESM_AC97_INDEX) & 1))
610 			return 0;
611 		cond_resched();
612 	}
613 	dev_dbg(chip->card->dev, "ac97 timeout\n");
614 	return 1; /* timeout */
615 }
616 
snd_es1968_ac97_wait_poll(struct es1968 * chip)617 static int snd_es1968_ac97_wait_poll(struct es1968 *chip)
618 {
619 	int timeout = 100000;
620 
621 	while (timeout-- > 0) {
622 		if (!(inb(chip->io_port + ESM_AC97_INDEX) & 1))
623 			return 0;
624 	}
625 	dev_dbg(chip->card->dev, "ac97 timeout\n");
626 	return 1; /* timeout */
627 }
628 
snd_es1968_ac97_write(struct snd_ac97 * ac97,unsigned short reg,unsigned short val)629 static void snd_es1968_ac97_write(struct snd_ac97 *ac97, unsigned short reg, unsigned short val)
630 {
631 	struct es1968 *chip = ac97->private_data;
632 
633 	snd_es1968_ac97_wait(chip);
634 
635 	/* Write the bus */
636 	outw(val, chip->io_port + ESM_AC97_DATA);
637 	/*msleep(1);*/
638 	outb(reg, chip->io_port + ESM_AC97_INDEX);
639 	/*msleep(1);*/
640 }
641 
snd_es1968_ac97_read(struct snd_ac97 * ac97,unsigned short reg)642 static unsigned short snd_es1968_ac97_read(struct snd_ac97 *ac97, unsigned short reg)
643 {
644 	u16 data = 0;
645 	struct es1968 *chip = ac97->private_data;
646 
647 	snd_es1968_ac97_wait(chip);
648 
649 	outb(reg | 0x80, chip->io_port + ESM_AC97_INDEX);
650 	/*msleep(1);*/
651 
652 	if (!snd_es1968_ac97_wait_poll(chip)) {
653 		data = inw(chip->io_port + ESM_AC97_DATA);
654 		/*msleep(1);*/
655 	}
656 
657 	return data;
658 }
659 
660 /* no spinlock */
apu_index_set(struct es1968 * chip,u16 index)661 static void apu_index_set(struct es1968 *chip, u16 index)
662 {
663 	int i;
664 	__maestro_write(chip, IDR1_CRAM_POINTER, index);
665 	for (i = 0; i < 1000; i++)
666 		if (__maestro_read(chip, IDR1_CRAM_POINTER) == index)
667 			return;
668 	dev_dbg(chip->card->dev, "APU register select failed. (Timeout)\n");
669 }
670 
671 /* no spinlock */
apu_data_set(struct es1968 * chip,u16 data)672 static void apu_data_set(struct es1968 *chip, u16 data)
673 {
674 	int i;
675 	for (i = 0; i < 1000; i++) {
676 		if (__maestro_read(chip, IDR0_DATA_PORT) == data)
677 			return;
678 		__maestro_write(chip, IDR0_DATA_PORT, data);
679 	}
680 	dev_dbg(chip->card->dev, "APU register set probably failed (Timeout)!\n");
681 }
682 
683 /* no spinlock */
__apu_set_register(struct es1968 * chip,u16 channel,u8 reg,u16 data)684 static void __apu_set_register(struct es1968 *chip, u16 channel, u8 reg, u16 data)
685 {
686 	if (snd_BUG_ON(channel >= NR_APUS))
687 		return;
688 	chip->apu_map[channel][reg] = data;
689 	reg |= (channel << 4);
690 	apu_index_set(chip, reg);
691 	apu_data_set(chip, data);
692 }
693 
apu_set_register(struct es1968 * chip,u16 channel,u8 reg,u16 data)694 static void apu_set_register(struct es1968 *chip, u16 channel, u8 reg, u16 data)
695 {
696 	unsigned long flags;
697 	spin_lock_irqsave(&chip->reg_lock, flags);
698 	__apu_set_register(chip, channel, reg, data);
699 	spin_unlock_irqrestore(&chip->reg_lock, flags);
700 }
701 
__apu_get_register(struct es1968 * chip,u16 channel,u8 reg)702 static u16 __apu_get_register(struct es1968 *chip, u16 channel, u8 reg)
703 {
704 	if (snd_BUG_ON(channel >= NR_APUS))
705 		return 0;
706 	reg |= (channel << 4);
707 	apu_index_set(chip, reg);
708 	return __maestro_read(chip, IDR0_DATA_PORT);
709 }
710 
apu_get_register(struct es1968 * chip,u16 channel,u8 reg)711 static u16 apu_get_register(struct es1968 *chip, u16 channel, u8 reg)
712 {
713 	unsigned long flags;
714 	u16 v;
715 	spin_lock_irqsave(&chip->reg_lock, flags);
716 	v = __apu_get_register(chip, channel, reg);
717 	spin_unlock_irqrestore(&chip->reg_lock, flags);
718 	return v;
719 }
720 
721 #if 0 /* ASSP is not supported */
722 
723 static void assp_set_register(struct es1968 *chip, u32 reg, u32 value)
724 {
725 	unsigned long flags;
726 
727 	spin_lock_irqsave(&chip->reg_lock, flags);
728 	outl(reg, chip->io_port + ASSP_INDEX);
729 	outl(value, chip->io_port + ASSP_DATA);
730 	spin_unlock_irqrestore(&chip->reg_lock, flags);
731 }
732 
733 static u32 assp_get_register(struct es1968 *chip, u32 reg)
734 {
735 	unsigned long flags;
736 	u32 value;
737 
738 	spin_lock_irqsave(&chip->reg_lock, flags);
739 	outl(reg, chip->io_port + ASSP_INDEX);
740 	value = inl(chip->io_port + ASSP_DATA);
741 	spin_unlock_irqrestore(&chip->reg_lock, flags);
742 
743 	return value;
744 }
745 
746 #endif
747 
wave_set_register(struct es1968 * chip,u16 reg,u16 value)748 static void wave_set_register(struct es1968 *chip, u16 reg, u16 value)
749 {
750 	unsigned long flags;
751 
752 	spin_lock_irqsave(&chip->reg_lock, flags);
753 	outw(reg, chip->io_port + WC_INDEX);
754 	outw(value, chip->io_port + WC_DATA);
755 	spin_unlock_irqrestore(&chip->reg_lock, flags);
756 }
757 
wave_get_register(struct es1968 * chip,u16 reg)758 static u16 wave_get_register(struct es1968 *chip, u16 reg)
759 {
760 	unsigned long flags;
761 	u16 value;
762 
763 	spin_lock_irqsave(&chip->reg_lock, flags);
764 	outw(reg, chip->io_port + WC_INDEX);
765 	value = inw(chip->io_port + WC_DATA);
766 	spin_unlock_irqrestore(&chip->reg_lock, flags);
767 
768 	return value;
769 }
770 
771 /* *******************
772    * Bob the Timer!  *
773    *******************/
774 
snd_es1968_bob_stop(struct es1968 * chip)775 static void snd_es1968_bob_stop(struct es1968 *chip)
776 {
777 	u16 reg;
778 
779 	reg = __maestro_read(chip, 0x11);
780 	reg &= ~ESM_BOB_ENABLE;
781 	__maestro_write(chip, 0x11, reg);
782 	reg = __maestro_read(chip, 0x17);
783 	reg &= ~ESM_BOB_START;
784 	__maestro_write(chip, 0x17, reg);
785 }
786 
snd_es1968_bob_start(struct es1968 * chip)787 static void snd_es1968_bob_start(struct es1968 *chip)
788 {
789 	int prescale;
790 	int divide;
791 
792 	/* compute ideal interrupt frequency for buffer size & play rate */
793 	/* first, find best prescaler value to match freq */
794 	for (prescale = 5; prescale < 12; prescale++)
795 		if (chip->bob_freq > (ESS_SYSCLK >> (prescale + 9)))
796 			break;
797 
798 	/* next, back off prescaler whilst getting divider into optimum range */
799 	divide = 1;
800 	while ((prescale > 5) && (divide < 32)) {
801 		prescale--;
802 		divide <<= 1;
803 	}
804 	divide >>= 1;
805 
806 	/* now fine-tune the divider for best match */
807 	for (; divide < 31; divide++)
808 		if (chip->bob_freq >
809 		    ((ESS_SYSCLK >> (prescale + 9)) / (divide + 1))) break;
810 
811 	/* divide = 0 is illegal, but don't let prescale = 4! */
812 	if (divide == 0) {
813 		divide++;
814 		if (prescale > 5)
815 			prescale--;
816 	} else if (divide > 1)
817 		divide--;
818 
819 	__maestro_write(chip, 6, 0x9000 | (prescale << 5) | divide);	/* set reg */
820 
821 	/* Now set IDR 11/17 */
822 	__maestro_write(chip, 0x11, __maestro_read(chip, 0x11) | 1);
823 	__maestro_write(chip, 0x17, __maestro_read(chip, 0x17) | 1);
824 }
825 
826 /* call with substream spinlock */
snd_es1968_bob_inc(struct es1968 * chip,int freq)827 static void snd_es1968_bob_inc(struct es1968 *chip, int freq)
828 {
829 	chip->bobclient++;
830 	if (chip->bobclient == 1) {
831 		chip->bob_freq = freq;
832 		snd_es1968_bob_start(chip);
833 	} else if (chip->bob_freq < freq) {
834 		snd_es1968_bob_stop(chip);
835 		chip->bob_freq = freq;
836 		snd_es1968_bob_start(chip);
837 	}
838 }
839 
840 /* call with substream spinlock */
snd_es1968_bob_dec(struct es1968 * chip)841 static void snd_es1968_bob_dec(struct es1968 *chip)
842 {
843 	chip->bobclient--;
844 	if (chip->bobclient <= 0)
845 		snd_es1968_bob_stop(chip);
846 	else if (chip->bob_freq > ESM_BOB_FREQ) {
847 		/* check reduction of timer frequency */
848 		int max_freq = ESM_BOB_FREQ;
849 		struct esschan *es;
850 		list_for_each_entry(es, &chip->substream_list, list) {
851 			if (max_freq < es->bob_freq)
852 				max_freq = es->bob_freq;
853 		}
854 		if (max_freq != chip->bob_freq) {
855 			snd_es1968_bob_stop(chip);
856 			chip->bob_freq = max_freq;
857 			snd_es1968_bob_start(chip);
858 		}
859 	}
860 }
861 
862 static int
snd_es1968_calc_bob_rate(struct es1968 * chip,struct esschan * es,struct snd_pcm_runtime * runtime)863 snd_es1968_calc_bob_rate(struct es1968 *chip, struct esschan *es,
864 			 struct snd_pcm_runtime *runtime)
865 {
866 	/* we acquire 4 interrupts per period for precise control.. */
867 	int freq = runtime->rate * 4;
868 	if (es->fmt & ESS_FMT_STEREO)
869 		freq <<= 1;
870 	if (es->fmt & ESS_FMT_16BIT)
871 		freq <<= 1;
872 	freq /= es->frag_size;
873 	if (freq < ESM_BOB_FREQ)
874 		freq = ESM_BOB_FREQ;
875 	else if (freq > ESM_BOB_FREQ_MAX)
876 		freq = ESM_BOB_FREQ_MAX;
877 	return freq;
878 }
879 
880 
881 /*************
882  *  PCM Part *
883  *************/
884 
snd_es1968_compute_rate(struct es1968 * chip,u32 freq)885 static u32 snd_es1968_compute_rate(struct es1968 *chip, u32 freq)
886 {
887 	u32 rate = (freq << 16) / chip->clock;
888 #if 0 /* XXX: do we need this? */
889 	if (rate > 0x10000)
890 		rate = 0x10000;
891 #endif
892 	return rate;
893 }
894 
895 /* get current pointer */
896 static inline unsigned int
snd_es1968_get_dma_ptr(struct es1968 * chip,struct esschan * es)897 snd_es1968_get_dma_ptr(struct es1968 *chip, struct esschan *es)
898 {
899 	unsigned int offset;
900 
901 	offset = apu_get_register(chip, es->apu[0], 5);
902 
903 	offset -= es->base[0];
904 
905 	return (offset & 0xFFFE);	/* hardware is in words */
906 }
907 
snd_es1968_apu_set_freq(struct es1968 * chip,int apu,int freq)908 static void snd_es1968_apu_set_freq(struct es1968 *chip, int apu, int freq)
909 {
910 	apu_set_register(chip, apu, 2,
911 			   (apu_get_register(chip, apu, 2) & 0x00FF) |
912 			   ((freq & 0xff) << 8) | 0x10);
913 	apu_set_register(chip, apu, 3, freq >> 8);
914 }
915 
916 /* spin lock held */
snd_es1968_trigger_apu(struct es1968 * esm,int apu,int mode)917 static inline void snd_es1968_trigger_apu(struct es1968 *esm, int apu, int mode)
918 {
919 	/* set the APU mode */
920 	__apu_set_register(esm, apu, 0,
921 			   (__apu_get_register(esm, apu, 0) & 0xff0f) |
922 			   (mode << 4));
923 }
924 
snd_es1968_pcm_start(struct es1968 * chip,struct esschan * es)925 static void snd_es1968_pcm_start(struct es1968 *chip, struct esschan *es)
926 {
927 	spin_lock(&chip->reg_lock);
928 	__apu_set_register(chip, es->apu[0], 5, es->base[0]);
929 	snd_es1968_trigger_apu(chip, es->apu[0], es->apu_mode[0]);
930 	if (es->mode == ESM_MODE_CAPTURE) {
931 		__apu_set_register(chip, es->apu[2], 5, es->base[2]);
932 		snd_es1968_trigger_apu(chip, es->apu[2], es->apu_mode[2]);
933 	}
934 	if (es->fmt & ESS_FMT_STEREO) {
935 		__apu_set_register(chip, es->apu[1], 5, es->base[1]);
936 		snd_es1968_trigger_apu(chip, es->apu[1], es->apu_mode[1]);
937 		if (es->mode == ESM_MODE_CAPTURE) {
938 			__apu_set_register(chip, es->apu[3], 5, es->base[3]);
939 			snd_es1968_trigger_apu(chip, es->apu[3], es->apu_mode[3]);
940 		}
941 	}
942 	spin_unlock(&chip->reg_lock);
943 }
944 
snd_es1968_pcm_stop(struct es1968 * chip,struct esschan * es)945 static void snd_es1968_pcm_stop(struct es1968 *chip, struct esschan *es)
946 {
947 	spin_lock(&chip->reg_lock);
948 	snd_es1968_trigger_apu(chip, es->apu[0], 0);
949 	snd_es1968_trigger_apu(chip, es->apu[1], 0);
950 	if (es->mode == ESM_MODE_CAPTURE) {
951 		snd_es1968_trigger_apu(chip, es->apu[2], 0);
952 		snd_es1968_trigger_apu(chip, es->apu[3], 0);
953 	}
954 	spin_unlock(&chip->reg_lock);
955 }
956 
957 /* set the wavecache control reg */
snd_es1968_program_wavecache(struct es1968 * chip,struct esschan * es,int channel,u32 addr,int capture)958 static void snd_es1968_program_wavecache(struct es1968 *chip, struct esschan *es,
959 					 int channel, u32 addr, int capture)
960 {
961 	u32 tmpval = (addr - 0x10) & 0xFFF8;
962 
963 	if (! capture) {
964 		if (!(es->fmt & ESS_FMT_16BIT))
965 			tmpval |= 4;	/* 8bit */
966 		if (es->fmt & ESS_FMT_STEREO)
967 			tmpval |= 2;	/* stereo */
968 	}
969 
970 	/* set the wavecache control reg */
971 	wave_set_register(chip, es->apu[channel] << 3, tmpval);
972 
973 	es->wc_map[channel] = tmpval;
974 }
975 
976 
snd_es1968_playback_setup(struct es1968 * chip,struct esschan * es,struct snd_pcm_runtime * runtime)977 static void snd_es1968_playback_setup(struct es1968 *chip, struct esschan *es,
978 				      struct snd_pcm_runtime *runtime)
979 {
980 	u32 pa;
981 	int high_apu = 0;
982 	int channel, apu;
983 	int i, size;
984 	unsigned long flags;
985 	u32 freq;
986 
987 	size = es->dma_size >> es->wav_shift;
988 
989 	if (es->fmt & ESS_FMT_STEREO)
990 		high_apu++;
991 
992 	for (channel = 0; channel <= high_apu; channel++) {
993 		apu = es->apu[channel];
994 
995 		snd_es1968_program_wavecache(chip, es, channel, es->memory->buf.addr, 0);
996 
997 		/* Offset to PCMBAR */
998 		pa = es->memory->buf.addr;
999 		pa -= chip->dma.addr;
1000 		pa >>= 1;	/* words */
1001 
1002 		pa |= 0x00400000;	/* System RAM (Bit 22) */
1003 
1004 		if (es->fmt & ESS_FMT_STEREO) {
1005 			/* Enable stereo */
1006 			if (channel)
1007 				pa |= 0x00800000;	/* (Bit 23) */
1008 			if (es->fmt & ESS_FMT_16BIT)
1009 				pa >>= 1;
1010 		}
1011 
1012 		/* base offset of dma calcs when reading the pointer
1013 		   on this left one */
1014 		es->base[channel] = pa & 0xFFFF;
1015 
1016 		for (i = 0; i < 16; i++)
1017 			apu_set_register(chip, apu, i, 0x0000);
1018 
1019 		/* Load the buffer into the wave engine */
1020 		apu_set_register(chip, apu, 4, ((pa >> 16) & 0xFF) << 8);
1021 		apu_set_register(chip, apu, 5, pa & 0xFFFF);
1022 		apu_set_register(chip, apu, 6, (pa + size) & 0xFFFF);
1023 		/* setting loop == sample len */
1024 		apu_set_register(chip, apu, 7, size);
1025 
1026 		/* clear effects/env.. */
1027 		apu_set_register(chip, apu, 8, 0x0000);
1028 		/* set amp now to 0xd0 (?), low byte is 'amplitude dest'? */
1029 		apu_set_register(chip, apu, 9, 0xD000);
1030 
1031 		/* clear routing stuff */
1032 		apu_set_register(chip, apu, 11, 0x0000);
1033 		/* dma on, no envelopes, filter to all 1s) */
1034 		apu_set_register(chip, apu, 0, 0x400F);
1035 
1036 		if (es->fmt & ESS_FMT_16BIT)
1037 			es->apu_mode[channel] = ESM_APU_16BITLINEAR;
1038 		else
1039 			es->apu_mode[channel] = ESM_APU_8BITLINEAR;
1040 
1041 		if (es->fmt & ESS_FMT_STEREO) {
1042 			/* set panning: left or right */
1043 			/* Check: different panning. On my Canyon 3D Chipset the
1044 			   Channels are swapped. I don't know, about the output
1045 			   to the SPDif Link. Perhaps you have to change this
1046 			   and not the APU Regs 4-5. */
1047 			apu_set_register(chip, apu, 10,
1048 					 0x8F00 | (channel ? 0 : 0x10));
1049 			es->apu_mode[channel] += 1;	/* stereo */
1050 		} else
1051 			apu_set_register(chip, apu, 10, 0x8F08);
1052 	}
1053 
1054 	spin_lock_irqsave(&chip->reg_lock, flags);
1055 	/* clear WP interrupts */
1056 	outw(1, chip->io_port + 0x04);
1057 	/* enable WP ints */
1058 	outw(inw(chip->io_port + ESM_PORT_HOST_IRQ) | ESM_HIRQ_DSIE, chip->io_port + ESM_PORT_HOST_IRQ);
1059 	spin_unlock_irqrestore(&chip->reg_lock, flags);
1060 
1061 	freq = runtime->rate;
1062 	/* set frequency */
1063 	if (freq > 48000)
1064 		freq = 48000;
1065 	if (freq < 4000)
1066 		freq = 4000;
1067 
1068 	/* hmmm.. */
1069 	if (!(es->fmt & ESS_FMT_16BIT) && !(es->fmt & ESS_FMT_STEREO))
1070 		freq >>= 1;
1071 
1072 	freq = snd_es1968_compute_rate(chip, freq);
1073 
1074 	/* Load the frequency, turn on 6dB */
1075 	snd_es1968_apu_set_freq(chip, es->apu[0], freq);
1076 	snd_es1968_apu_set_freq(chip, es->apu[1], freq);
1077 }
1078 
1079 
init_capture_apu(struct es1968 * chip,struct esschan * es,int channel,unsigned int pa,unsigned int bsize,int mode,int route)1080 static void init_capture_apu(struct es1968 *chip, struct esschan *es, int channel,
1081 			     unsigned int pa, unsigned int bsize,
1082 			     int mode, int route)
1083 {
1084 	int i, apu = es->apu[channel];
1085 
1086 	es->apu_mode[channel] = mode;
1087 
1088 	/* set the wavecache control reg */
1089 	snd_es1968_program_wavecache(chip, es, channel, pa, 1);
1090 
1091 	/* Offset to PCMBAR */
1092 	pa -= chip->dma.addr;
1093 	pa >>= 1;	/* words */
1094 
1095 	/* base offset of dma calcs when reading the pointer
1096 	   on this left one */
1097 	es->base[channel] = pa & 0xFFFF;
1098 	pa |= 0x00400000;	/* bit 22 -> System RAM */
1099 
1100 	/* Begin loading the APU */
1101 	for (i = 0; i < 16; i++)
1102 		apu_set_register(chip, apu, i, 0x0000);
1103 
1104 	/* need to enable subgroups.. and we should probably
1105 	   have different groups for different /dev/dsps..  */
1106 	apu_set_register(chip, apu, 2, 0x8);
1107 
1108 	/* Load the buffer into the wave engine */
1109 	apu_set_register(chip, apu, 4, ((pa >> 16) & 0xFF) << 8);
1110 	apu_set_register(chip, apu, 5, pa & 0xFFFF);
1111 	apu_set_register(chip, apu, 6, (pa + bsize) & 0xFFFF);
1112 	apu_set_register(chip, apu, 7, bsize);
1113 	/* clear effects/env.. */
1114 	apu_set_register(chip, apu, 8, 0x00F0);
1115 	/* amplitude now?  sure.  why not.  */
1116 	apu_set_register(chip, apu, 9, 0x0000);
1117 	/* set filter tune, radius, polar pan */
1118 	apu_set_register(chip, apu, 10, 0x8F08);
1119 	/* route input */
1120 	apu_set_register(chip, apu, 11, route);
1121 	/* dma on, no envelopes, filter to all 1s) */
1122 	apu_set_register(chip, apu, 0, 0x400F);
1123 }
1124 
snd_es1968_capture_setup(struct es1968 * chip,struct esschan * es,struct snd_pcm_runtime * runtime)1125 static void snd_es1968_capture_setup(struct es1968 *chip, struct esschan *es,
1126 				     struct snd_pcm_runtime *runtime)
1127 {
1128 	int size;
1129 	u32 freq;
1130 	unsigned long flags;
1131 
1132 	size = es->dma_size >> es->wav_shift;
1133 
1134 	/* APU assignments:
1135 	   0 = mono/left SRC
1136 	   1 = right SRC
1137 	   2 = mono/left Input Mixer
1138 	   3 = right Input Mixer
1139 	*/
1140 	/* data seems to flow from the codec, through an apu into
1141 	   the 'mixbuf' bit of page, then through the SRC apu
1142 	   and out to the real 'buffer'.  ok.  sure.  */
1143 
1144 	/* input mixer (left/mono) */
1145 	/* parallel in crap, see maestro reg 0xC [8-11] */
1146 	init_capture_apu(chip, es, 2,
1147 			 es->mixbuf->buf.addr, ESM_MIXBUF_SIZE/4, /* in words */
1148 			 ESM_APU_INPUTMIXER, 0x14);
1149 	/* SRC (left/mono); get input from inputing apu */
1150 	init_capture_apu(chip, es, 0, es->memory->buf.addr, size,
1151 			 ESM_APU_SRCONVERTOR, es->apu[2]);
1152 	if (es->fmt & ESS_FMT_STEREO) {
1153 		/* input mixer (right) */
1154 		init_capture_apu(chip, es, 3,
1155 				 es->mixbuf->buf.addr + ESM_MIXBUF_SIZE/2,
1156 				 ESM_MIXBUF_SIZE/4, /* in words */
1157 				 ESM_APU_INPUTMIXER, 0x15);
1158 		/* SRC (right) */
1159 		init_capture_apu(chip, es, 1,
1160 				 es->memory->buf.addr + size*2, size,
1161 				 ESM_APU_SRCONVERTOR, es->apu[3]);
1162 	}
1163 
1164 	freq = runtime->rate;
1165 	/* Sample Rate conversion APUs don't like 0x10000 for their rate */
1166 	if (freq > 47999)
1167 		freq = 47999;
1168 	if (freq < 4000)
1169 		freq = 4000;
1170 
1171 	freq = snd_es1968_compute_rate(chip, freq);
1172 
1173 	/* Load the frequency, turn on 6dB */
1174 	snd_es1968_apu_set_freq(chip, es->apu[0], freq);
1175 	snd_es1968_apu_set_freq(chip, es->apu[1], freq);
1176 
1177 	/* fix mixer rate at 48khz.  and its _must_ be 0x10000. */
1178 	freq = 0x10000;
1179 	snd_es1968_apu_set_freq(chip, es->apu[2], freq);
1180 	snd_es1968_apu_set_freq(chip, es->apu[3], freq);
1181 
1182 	spin_lock_irqsave(&chip->reg_lock, flags);
1183 	/* clear WP interrupts */
1184 	outw(1, chip->io_port + 0x04);
1185 	/* enable WP ints */
1186 	outw(inw(chip->io_port + ESM_PORT_HOST_IRQ) | ESM_HIRQ_DSIE, chip->io_port + ESM_PORT_HOST_IRQ);
1187 	spin_unlock_irqrestore(&chip->reg_lock, flags);
1188 }
1189 
1190 /*******************
1191  *  ALSA Interface *
1192  *******************/
1193 
snd_es1968_pcm_prepare(struct snd_pcm_substream * substream)1194 static int snd_es1968_pcm_prepare(struct snd_pcm_substream *substream)
1195 {
1196 	struct es1968 *chip = snd_pcm_substream_chip(substream);
1197 	struct snd_pcm_runtime *runtime = substream->runtime;
1198 	struct esschan *es = runtime->private_data;
1199 
1200 	es->dma_size = snd_pcm_lib_buffer_bytes(substream);
1201 	es->frag_size = snd_pcm_lib_period_bytes(substream);
1202 
1203 	es->wav_shift = 1; /* maestro handles always 16bit */
1204 	es->fmt = 0;
1205 	if (snd_pcm_format_width(runtime->format) == 16)
1206 		es->fmt |= ESS_FMT_16BIT;
1207 	if (runtime->channels > 1) {
1208 		es->fmt |= ESS_FMT_STEREO;
1209 		if (es->fmt & ESS_FMT_16BIT) /* 8bit is already word shifted */
1210 			es->wav_shift++;
1211 	}
1212 	es->bob_freq = snd_es1968_calc_bob_rate(chip, es, runtime);
1213 
1214 	switch (es->mode) {
1215 	case ESM_MODE_PLAY:
1216 		snd_es1968_playback_setup(chip, es, runtime);
1217 		break;
1218 	case ESM_MODE_CAPTURE:
1219 		snd_es1968_capture_setup(chip, es, runtime);
1220 		break;
1221 	}
1222 
1223 	return 0;
1224 }
1225 
snd_es1968_pcm_trigger(struct snd_pcm_substream * substream,int cmd)1226 static int snd_es1968_pcm_trigger(struct snd_pcm_substream *substream, int cmd)
1227 {
1228 	struct es1968 *chip = snd_pcm_substream_chip(substream);
1229 	struct esschan *es = substream->runtime->private_data;
1230 
1231 	spin_lock(&chip->substream_lock);
1232 	switch (cmd) {
1233 	case SNDRV_PCM_TRIGGER_START:
1234 	case SNDRV_PCM_TRIGGER_RESUME:
1235 		if (es->running)
1236 			break;
1237 		snd_es1968_bob_inc(chip, es->bob_freq);
1238 		es->count = 0;
1239 		es->hwptr = 0;
1240 		snd_es1968_pcm_start(chip, es);
1241 		es->running = 1;
1242 		break;
1243 	case SNDRV_PCM_TRIGGER_STOP:
1244 	case SNDRV_PCM_TRIGGER_SUSPEND:
1245 		if (! es->running)
1246 			break;
1247 		snd_es1968_pcm_stop(chip, es);
1248 		es->running = 0;
1249 		snd_es1968_bob_dec(chip);
1250 		break;
1251 	}
1252 	spin_unlock(&chip->substream_lock);
1253 	return 0;
1254 }
1255 
snd_es1968_pcm_pointer(struct snd_pcm_substream * substream)1256 static snd_pcm_uframes_t snd_es1968_pcm_pointer(struct snd_pcm_substream *substream)
1257 {
1258 	struct es1968 *chip = snd_pcm_substream_chip(substream);
1259 	struct esschan *es = substream->runtime->private_data;
1260 	unsigned int ptr;
1261 
1262 	ptr = snd_es1968_get_dma_ptr(chip, es) << es->wav_shift;
1263 
1264 	return bytes_to_frames(substream->runtime, ptr % es->dma_size);
1265 }
1266 
1267 static const struct snd_pcm_hardware snd_es1968_playback = {
1268 	.info =			(SNDRV_PCM_INFO_MMAP |
1269                		         SNDRV_PCM_INFO_MMAP_VALID |
1270 				 SNDRV_PCM_INFO_INTERLEAVED |
1271 				 SNDRV_PCM_INFO_BLOCK_TRANSFER |
1272 				 /*SNDRV_PCM_INFO_PAUSE |*/
1273 				 SNDRV_PCM_INFO_RESUME),
1274 	.formats =		SNDRV_PCM_FMTBIT_U8 | SNDRV_PCM_FMTBIT_S16_LE,
1275 	.rates =		SNDRV_PCM_RATE_CONTINUOUS | SNDRV_PCM_RATE_8000_48000,
1276 	.rate_min =		4000,
1277 	.rate_max =		48000,
1278 	.channels_min =		1,
1279 	.channels_max =		2,
1280 	.buffer_bytes_max =	65536,
1281 	.period_bytes_min =	256,
1282 	.period_bytes_max =	65536,
1283 	.periods_min =		1,
1284 	.periods_max =		1024,
1285 	.fifo_size =		0,
1286 };
1287 
1288 static const struct snd_pcm_hardware snd_es1968_capture = {
1289 	.info =			(SNDRV_PCM_INFO_NONINTERLEAVED |
1290 				 SNDRV_PCM_INFO_MMAP |
1291 				 SNDRV_PCM_INFO_MMAP_VALID |
1292 				 SNDRV_PCM_INFO_BLOCK_TRANSFER |
1293 				 /*SNDRV_PCM_INFO_PAUSE |*/
1294 				 SNDRV_PCM_INFO_RESUME),
1295 	.formats =		/*SNDRV_PCM_FMTBIT_U8 |*/ SNDRV_PCM_FMTBIT_S16_LE,
1296 	.rates =		SNDRV_PCM_RATE_CONTINUOUS | SNDRV_PCM_RATE_8000_48000,
1297 	.rate_min =		4000,
1298 	.rate_max =		48000,
1299 	.channels_min =		1,
1300 	.channels_max =		2,
1301 	.buffer_bytes_max =	65536,
1302 	.period_bytes_min =	256,
1303 	.period_bytes_max =	65536,
1304 	.periods_min =		1,
1305 	.periods_max =		1024,
1306 	.fifo_size =		0,
1307 };
1308 
1309 /* *************************
1310    * DMA memory management *
1311    *************************/
1312 
1313 /* Because the Maestro can only take addresses relative to the PCM base address
1314    register :( */
1315 
calc_available_memory_size(struct es1968 * chip)1316 static int calc_available_memory_size(struct es1968 *chip)
1317 {
1318 	int max_size = 0;
1319 	struct esm_memory *buf;
1320 
1321 	mutex_lock(&chip->memory_mutex);
1322 	list_for_each_entry(buf, &chip->buf_list, list) {
1323 		if (buf->empty && buf->buf.bytes > max_size)
1324 			max_size = buf->buf.bytes;
1325 	}
1326 	mutex_unlock(&chip->memory_mutex);
1327 	if (max_size >= 128*1024)
1328 		max_size = 127*1024;
1329 	return max_size;
1330 }
1331 
1332 /* allocate a new memory chunk with the specified size */
snd_es1968_new_memory(struct es1968 * chip,int size)1333 static struct esm_memory *snd_es1968_new_memory(struct es1968 *chip, int size)
1334 {
1335 	struct esm_memory *buf;
1336 
1337 	size = ALIGN(size, ESM_MEM_ALIGN);
1338 	mutex_lock(&chip->memory_mutex);
1339 	list_for_each_entry(buf, &chip->buf_list, list) {
1340 		if (buf->empty && buf->buf.bytes >= size)
1341 			goto __found;
1342 	}
1343 	mutex_unlock(&chip->memory_mutex);
1344 	return NULL;
1345 
1346 __found:
1347 	if (buf->buf.bytes > size) {
1348 		struct esm_memory *chunk = kmalloc(sizeof(*chunk), GFP_KERNEL);
1349 		if (chunk == NULL) {
1350 			mutex_unlock(&chip->memory_mutex);
1351 			return NULL;
1352 		}
1353 		chunk->buf = buf->buf;
1354 		chunk->buf.bytes -= size;
1355 		chunk->buf.area += size;
1356 		chunk->buf.addr += size;
1357 		chunk->empty = 1;
1358 		buf->buf.bytes = size;
1359 		list_add(&chunk->list, &buf->list);
1360 	}
1361 	buf->empty = 0;
1362 	mutex_unlock(&chip->memory_mutex);
1363 	return buf;
1364 }
1365 
1366 /* free a memory chunk */
snd_es1968_free_memory(struct es1968 * chip,struct esm_memory * buf)1367 static void snd_es1968_free_memory(struct es1968 *chip, struct esm_memory *buf)
1368 {
1369 	struct esm_memory *chunk;
1370 
1371 	mutex_lock(&chip->memory_mutex);
1372 	buf->empty = 1;
1373 	if (buf->list.prev != &chip->buf_list) {
1374 		chunk = list_entry(buf->list.prev, struct esm_memory, list);
1375 		if (chunk->empty) {
1376 			chunk->buf.bytes += buf->buf.bytes;
1377 			list_del(&buf->list);
1378 			kfree(buf);
1379 			buf = chunk;
1380 		}
1381 	}
1382 	if (buf->list.next != &chip->buf_list) {
1383 		chunk = list_entry(buf->list.next, struct esm_memory, list);
1384 		if (chunk->empty) {
1385 			buf->buf.bytes += chunk->buf.bytes;
1386 			list_del(&chunk->list);
1387 			kfree(chunk);
1388 		}
1389 	}
1390 	mutex_unlock(&chip->memory_mutex);
1391 }
1392 
snd_es1968_free_dmabuf(struct es1968 * chip)1393 static void snd_es1968_free_dmabuf(struct es1968 *chip)
1394 {
1395 	struct list_head *p;
1396 
1397 	if (! chip->dma.area)
1398 		return;
1399 	snd_dma_free_pages(&chip->dma);
1400 	while ((p = chip->buf_list.next) != &chip->buf_list) {
1401 		struct esm_memory *chunk = list_entry(p, struct esm_memory, list);
1402 		list_del(p);
1403 		kfree(chunk);
1404 	}
1405 }
1406 
1407 static int
snd_es1968_init_dmabuf(struct es1968 * chip)1408 snd_es1968_init_dmabuf(struct es1968 *chip)
1409 {
1410 	int err;
1411 	struct esm_memory *chunk;
1412 
1413 	err = snd_dma_alloc_pages_fallback(SNDRV_DMA_TYPE_DEV,
1414 					   &chip->pci->dev,
1415 					   chip->total_bufsize, &chip->dma);
1416 	if (err < 0 || ! chip->dma.area) {
1417 		dev_err(chip->card->dev,
1418 			"can't allocate dma pages for size %d\n",
1419 			   chip->total_bufsize);
1420 		return -ENOMEM;
1421 	}
1422 	if ((chip->dma.addr + chip->dma.bytes - 1) & ~((1 << 28) - 1)) {
1423 		snd_dma_free_pages(&chip->dma);
1424 		dev_err(chip->card->dev, "DMA buffer beyond 256MB.\n");
1425 		return -ENOMEM;
1426 	}
1427 
1428 	INIT_LIST_HEAD(&chip->buf_list);
1429 	/* allocate an empty chunk */
1430 	chunk = kmalloc(sizeof(*chunk), GFP_KERNEL);
1431 	if (chunk == NULL) {
1432 		snd_es1968_free_dmabuf(chip);
1433 		return -ENOMEM;
1434 	}
1435 	memset(chip->dma.area, 0, ESM_MEM_ALIGN);
1436 	chunk->buf = chip->dma;
1437 	chunk->buf.area += ESM_MEM_ALIGN;
1438 	chunk->buf.addr += ESM_MEM_ALIGN;
1439 	chunk->buf.bytes -= ESM_MEM_ALIGN;
1440 	chunk->empty = 1;
1441 	list_add(&chunk->list, &chip->buf_list);
1442 
1443 	return 0;
1444 }
1445 
1446 /* setup the dma_areas */
1447 /* buffer is extracted from the pre-allocated memory chunk */
snd_es1968_hw_params(struct snd_pcm_substream * substream,struct snd_pcm_hw_params * hw_params)1448 static int snd_es1968_hw_params(struct snd_pcm_substream *substream,
1449 				struct snd_pcm_hw_params *hw_params)
1450 {
1451 	struct es1968 *chip = snd_pcm_substream_chip(substream);
1452 	struct snd_pcm_runtime *runtime = substream->runtime;
1453 	struct esschan *chan = runtime->private_data;
1454 	int size = params_buffer_bytes(hw_params);
1455 
1456 	if (chan->memory) {
1457 		if (chan->memory->buf.bytes >= size) {
1458 			runtime->dma_bytes = size;
1459 			return 0;
1460 		}
1461 		snd_es1968_free_memory(chip, chan->memory);
1462 	}
1463 	chan->memory = snd_es1968_new_memory(chip, size);
1464 	if (chan->memory == NULL) {
1465 		dev_dbg(chip->card->dev,
1466 			"cannot allocate dma buffer: size = %d\n", size);
1467 		return -ENOMEM;
1468 	}
1469 	snd_pcm_set_runtime_buffer(substream, &chan->memory->buf);
1470 	return 1; /* area was changed */
1471 }
1472 
1473 /* remove dma areas if allocated */
snd_es1968_hw_free(struct snd_pcm_substream * substream)1474 static int snd_es1968_hw_free(struct snd_pcm_substream *substream)
1475 {
1476 	struct es1968 *chip = snd_pcm_substream_chip(substream);
1477 	struct snd_pcm_runtime *runtime = substream->runtime;
1478 	struct esschan *chan;
1479 
1480 	if (runtime->private_data == NULL)
1481 		return 0;
1482 	chan = runtime->private_data;
1483 	if (chan->memory) {
1484 		snd_es1968_free_memory(chip, chan->memory);
1485 		chan->memory = NULL;
1486 	}
1487 	return 0;
1488 }
1489 
1490 
1491 /*
1492  * allocate APU pair
1493  */
snd_es1968_alloc_apu_pair(struct es1968 * chip,int type)1494 static int snd_es1968_alloc_apu_pair(struct es1968 *chip, int type)
1495 {
1496 	int apu;
1497 
1498 	for (apu = 0; apu < NR_APUS; apu += 2) {
1499 		if (chip->apu[apu] == ESM_APU_FREE &&
1500 		    chip->apu[apu + 1] == ESM_APU_FREE) {
1501 			chip->apu[apu] = chip->apu[apu + 1] = type;
1502 			return apu;
1503 		}
1504 	}
1505 	return -EBUSY;
1506 }
1507 
1508 /*
1509  * release APU pair
1510  */
snd_es1968_free_apu_pair(struct es1968 * chip,int apu)1511 static void snd_es1968_free_apu_pair(struct es1968 *chip, int apu)
1512 {
1513 	chip->apu[apu] = chip->apu[apu + 1] = ESM_APU_FREE;
1514 }
1515 
1516 
1517 /******************
1518  * PCM open/close *
1519  ******************/
1520 
snd_es1968_playback_open(struct snd_pcm_substream * substream)1521 static int snd_es1968_playback_open(struct snd_pcm_substream *substream)
1522 {
1523 	struct es1968 *chip = snd_pcm_substream_chip(substream);
1524 	struct snd_pcm_runtime *runtime = substream->runtime;
1525 	struct esschan *es;
1526 	int apu1;
1527 
1528 	/* search 2 APUs */
1529 	apu1 = snd_es1968_alloc_apu_pair(chip, ESM_APU_PCM_PLAY);
1530 	if (apu1 < 0)
1531 		return apu1;
1532 
1533 	es = kzalloc(sizeof(*es), GFP_KERNEL);
1534 	if (!es) {
1535 		snd_es1968_free_apu_pair(chip, apu1);
1536 		return -ENOMEM;
1537 	}
1538 
1539 	es->apu[0] = apu1;
1540 	es->apu[1] = apu1 + 1;
1541 	es->apu_mode[0] = 0;
1542 	es->apu_mode[1] = 0;
1543 	es->running = 0;
1544 	es->substream = substream;
1545 	es->mode = ESM_MODE_PLAY;
1546 
1547 	runtime->private_data = es;
1548 	runtime->hw = snd_es1968_playback;
1549 	runtime->hw.buffer_bytes_max = runtime->hw.period_bytes_max =
1550 		calc_available_memory_size(chip);
1551 
1552 	spin_lock_irq(&chip->substream_lock);
1553 	list_add(&es->list, &chip->substream_list);
1554 	spin_unlock_irq(&chip->substream_lock);
1555 
1556 	return 0;
1557 }
1558 
snd_es1968_capture_open(struct snd_pcm_substream * substream)1559 static int snd_es1968_capture_open(struct snd_pcm_substream *substream)
1560 {
1561 	struct snd_pcm_runtime *runtime = substream->runtime;
1562 	struct es1968 *chip = snd_pcm_substream_chip(substream);
1563 	struct esschan *es;
1564 	int apu1, apu2;
1565 
1566 	apu1 = snd_es1968_alloc_apu_pair(chip, ESM_APU_PCM_CAPTURE);
1567 	if (apu1 < 0)
1568 		return apu1;
1569 	apu2 = snd_es1968_alloc_apu_pair(chip, ESM_APU_PCM_RATECONV);
1570 	if (apu2 < 0) {
1571 		snd_es1968_free_apu_pair(chip, apu1);
1572 		return apu2;
1573 	}
1574 
1575 	es = kzalloc(sizeof(*es), GFP_KERNEL);
1576 	if (!es) {
1577 		snd_es1968_free_apu_pair(chip, apu1);
1578 		snd_es1968_free_apu_pair(chip, apu2);
1579 		return -ENOMEM;
1580 	}
1581 
1582 	es->apu[0] = apu1;
1583 	es->apu[1] = apu1 + 1;
1584 	es->apu[2] = apu2;
1585 	es->apu[3] = apu2 + 1;
1586 	es->apu_mode[0] = 0;
1587 	es->apu_mode[1] = 0;
1588 	es->apu_mode[2] = 0;
1589 	es->apu_mode[3] = 0;
1590 	es->running = 0;
1591 	es->substream = substream;
1592 	es->mode = ESM_MODE_CAPTURE;
1593 
1594 	/* get mixbuffer */
1595 	es->mixbuf = snd_es1968_new_memory(chip, ESM_MIXBUF_SIZE);
1596 	if (!es->mixbuf) {
1597 		snd_es1968_free_apu_pair(chip, apu1);
1598 		snd_es1968_free_apu_pair(chip, apu2);
1599 		kfree(es);
1600                 return -ENOMEM;
1601         }
1602 	memset(es->mixbuf->buf.area, 0, ESM_MIXBUF_SIZE);
1603 
1604 	runtime->private_data = es;
1605 	runtime->hw = snd_es1968_capture;
1606 	runtime->hw.buffer_bytes_max = runtime->hw.period_bytes_max =
1607 		calc_available_memory_size(chip) - 1024; /* keep MIXBUF size */
1608 	snd_pcm_hw_constraint_pow2(runtime, 0, SNDRV_PCM_HW_PARAM_BUFFER_BYTES);
1609 
1610 	spin_lock_irq(&chip->substream_lock);
1611 	list_add(&es->list, &chip->substream_list);
1612 	spin_unlock_irq(&chip->substream_lock);
1613 
1614 	return 0;
1615 }
1616 
snd_es1968_playback_close(struct snd_pcm_substream * substream)1617 static int snd_es1968_playback_close(struct snd_pcm_substream *substream)
1618 {
1619 	struct es1968 *chip = snd_pcm_substream_chip(substream);
1620 	struct esschan *es;
1621 
1622 	if (substream->runtime->private_data == NULL)
1623 		return 0;
1624 	es = substream->runtime->private_data;
1625 	spin_lock_irq(&chip->substream_lock);
1626 	list_del(&es->list);
1627 	spin_unlock_irq(&chip->substream_lock);
1628 	snd_es1968_free_apu_pair(chip, es->apu[0]);
1629 	kfree(es);
1630 
1631 	return 0;
1632 }
1633 
snd_es1968_capture_close(struct snd_pcm_substream * substream)1634 static int snd_es1968_capture_close(struct snd_pcm_substream *substream)
1635 {
1636 	struct es1968 *chip = snd_pcm_substream_chip(substream);
1637 	struct esschan *es;
1638 
1639 	if (substream->runtime->private_data == NULL)
1640 		return 0;
1641 	es = substream->runtime->private_data;
1642 	spin_lock_irq(&chip->substream_lock);
1643 	list_del(&es->list);
1644 	spin_unlock_irq(&chip->substream_lock);
1645 	snd_es1968_free_memory(chip, es->mixbuf);
1646 	snd_es1968_free_apu_pair(chip, es->apu[0]);
1647 	snd_es1968_free_apu_pair(chip, es->apu[2]);
1648 	kfree(es);
1649 
1650 	return 0;
1651 }
1652 
1653 static const struct snd_pcm_ops snd_es1968_playback_ops = {
1654 	.open =		snd_es1968_playback_open,
1655 	.close =	snd_es1968_playback_close,
1656 	.hw_params =	snd_es1968_hw_params,
1657 	.hw_free =	snd_es1968_hw_free,
1658 	.prepare =	snd_es1968_pcm_prepare,
1659 	.trigger =	snd_es1968_pcm_trigger,
1660 	.pointer =	snd_es1968_pcm_pointer,
1661 };
1662 
1663 static const struct snd_pcm_ops snd_es1968_capture_ops = {
1664 	.open =		snd_es1968_capture_open,
1665 	.close =	snd_es1968_capture_close,
1666 	.hw_params =	snd_es1968_hw_params,
1667 	.hw_free =	snd_es1968_hw_free,
1668 	.prepare =	snd_es1968_pcm_prepare,
1669 	.trigger =	snd_es1968_pcm_trigger,
1670 	.pointer =	snd_es1968_pcm_pointer,
1671 };
1672 
1673 
1674 /*
1675  * measure clock
1676  */
1677 #define CLOCK_MEASURE_BUFSIZE	16768	/* enough large for a single shot */
1678 
es1968_measure_clock(struct es1968 * chip)1679 static void es1968_measure_clock(struct es1968 *chip)
1680 {
1681 	int i, apu;
1682 	unsigned int pa, offset, t;
1683 	struct esm_memory *memory;
1684 	ktime_t start_time, stop_time;
1685 	ktime_t diff;
1686 
1687 	if (chip->clock == 0)
1688 		chip->clock = 48000; /* default clock value */
1689 
1690 	/* search 2 APUs (although one apu is enough) */
1691 	apu = snd_es1968_alloc_apu_pair(chip, ESM_APU_PCM_PLAY);
1692 	if (apu < 0) {
1693 		dev_err(chip->card->dev, "Hmm, cannot find empty APU pair!?\n");
1694 		return;
1695 	}
1696 	memory = snd_es1968_new_memory(chip, CLOCK_MEASURE_BUFSIZE);
1697 	if (!memory) {
1698 		dev_warn(chip->card->dev,
1699 			 "cannot allocate dma buffer - using default clock %d\n",
1700 			 chip->clock);
1701 		snd_es1968_free_apu_pair(chip, apu);
1702 		return;
1703 	}
1704 
1705 	memset(memory->buf.area, 0, CLOCK_MEASURE_BUFSIZE);
1706 
1707 	wave_set_register(chip, apu << 3, (memory->buf.addr - 0x10) & 0xfff8);
1708 
1709 	pa = (unsigned int)((memory->buf.addr - chip->dma.addr) >> 1);
1710 	pa |= 0x00400000;	/* System RAM (Bit 22) */
1711 
1712 	/* initialize apu */
1713 	for (i = 0; i < 16; i++)
1714 		apu_set_register(chip, apu, i, 0x0000);
1715 
1716 	apu_set_register(chip, apu, 0, 0x400f);
1717 	apu_set_register(chip, apu, 4, ((pa >> 16) & 0xff) << 8);
1718 	apu_set_register(chip, apu, 5, pa & 0xffff);
1719 	apu_set_register(chip, apu, 6, (pa + CLOCK_MEASURE_BUFSIZE/2) & 0xffff);
1720 	apu_set_register(chip, apu, 7, CLOCK_MEASURE_BUFSIZE/2);
1721 	apu_set_register(chip, apu, 8, 0x0000);
1722 	apu_set_register(chip, apu, 9, 0xD000);
1723 	apu_set_register(chip, apu, 10, 0x8F08);
1724 	apu_set_register(chip, apu, 11, 0x0000);
1725 	spin_lock_irq(&chip->reg_lock);
1726 	outw(1, chip->io_port + 0x04); /* clear WP interrupts */
1727 	outw(inw(chip->io_port + ESM_PORT_HOST_IRQ) | ESM_HIRQ_DSIE, chip->io_port + ESM_PORT_HOST_IRQ); /* enable WP ints */
1728 	spin_unlock_irq(&chip->reg_lock);
1729 
1730 	snd_es1968_apu_set_freq(chip, apu, ((unsigned int)48000 << 16) / chip->clock); /* 48000 Hz */
1731 
1732 	chip->in_measurement = 1;
1733 	chip->measure_apu = apu;
1734 	spin_lock_irq(&chip->reg_lock);
1735 	snd_es1968_bob_inc(chip, ESM_BOB_FREQ);
1736 	__apu_set_register(chip, apu, 5, pa & 0xffff);
1737 	snd_es1968_trigger_apu(chip, apu, ESM_APU_16BITLINEAR);
1738 	start_time = ktime_get();
1739 	spin_unlock_irq(&chip->reg_lock);
1740 	msleep(50);
1741 	spin_lock_irq(&chip->reg_lock);
1742 	offset = __apu_get_register(chip, apu, 5);
1743 	stop_time = ktime_get();
1744 	snd_es1968_trigger_apu(chip, apu, 0); /* stop */
1745 	snd_es1968_bob_dec(chip);
1746 	chip->in_measurement = 0;
1747 	spin_unlock_irq(&chip->reg_lock);
1748 
1749 	/* check the current position */
1750 	offset -= (pa & 0xffff);
1751 	offset &= 0xfffe;
1752 	offset += chip->measure_count * (CLOCK_MEASURE_BUFSIZE/2);
1753 
1754 	diff = ktime_sub(stop_time, start_time);
1755 	t = ktime_to_us(diff);
1756 	if (t == 0) {
1757 		dev_err(chip->card->dev, "?? calculation error..\n");
1758 	} else {
1759 		offset *= 1000;
1760 		offset = (offset / t) * 1000 + ((offset % t) * 1000) / t;
1761 		if (offset < 47500 || offset > 48500) {
1762 			if (offset >= 40000 && offset <= 50000)
1763 				chip->clock = (chip->clock * offset) / 48000;
1764 		}
1765 		dev_info(chip->card->dev, "clocking to %d\n", chip->clock);
1766 	}
1767 	snd_es1968_free_memory(chip, memory);
1768 	snd_es1968_free_apu_pair(chip, apu);
1769 }
1770 
1771 
1772 /*
1773  */
1774 
snd_es1968_pcm_free(struct snd_pcm * pcm)1775 static void snd_es1968_pcm_free(struct snd_pcm *pcm)
1776 {
1777 	struct es1968 *esm = pcm->private_data;
1778 	snd_es1968_free_dmabuf(esm);
1779 	esm->pcm = NULL;
1780 }
1781 
1782 static int
snd_es1968_pcm(struct es1968 * chip,int device)1783 snd_es1968_pcm(struct es1968 *chip, int device)
1784 {
1785 	struct snd_pcm *pcm;
1786 	int err;
1787 
1788 	/* get DMA buffer */
1789 	err = snd_es1968_init_dmabuf(chip);
1790 	if (err < 0)
1791 		return err;
1792 
1793 	/* set PCMBAR */
1794 	wave_set_register(chip, 0x01FC, chip->dma.addr >> 12);
1795 	wave_set_register(chip, 0x01FD, chip->dma.addr >> 12);
1796 	wave_set_register(chip, 0x01FE, chip->dma.addr >> 12);
1797 	wave_set_register(chip, 0x01FF, chip->dma.addr >> 12);
1798 
1799 	err = snd_pcm_new(chip->card, "ESS Maestro", device,
1800 			  chip->playback_streams,
1801 			  chip->capture_streams, &pcm);
1802 	if (err < 0)
1803 		return err;
1804 
1805 	pcm->private_data = chip;
1806 	pcm->private_free = snd_es1968_pcm_free;
1807 
1808 	snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &snd_es1968_playback_ops);
1809 	snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &snd_es1968_capture_ops);
1810 
1811 	pcm->info_flags = 0;
1812 
1813 	strcpy(pcm->name, "ESS Maestro");
1814 
1815 	chip->pcm = pcm;
1816 
1817 	return 0;
1818 }
1819 /*
1820  * suppress jitter on some maestros when playing stereo
1821  */
snd_es1968_suppress_jitter(struct es1968 * chip,struct esschan * es)1822 static void snd_es1968_suppress_jitter(struct es1968 *chip, struct esschan *es)
1823 {
1824 	unsigned int cp1;
1825 	unsigned int cp2;
1826 	unsigned int diff;
1827 
1828 	cp1 = __apu_get_register(chip, 0, 5);
1829 	cp2 = __apu_get_register(chip, 1, 5);
1830 	diff = (cp1 > cp2 ? cp1 - cp2 : cp2 - cp1);
1831 
1832 	if (diff > 1)
1833 		__maestro_write(chip, IDR0_DATA_PORT, cp1);
1834 }
1835 
1836 /*
1837  * update pointer
1838  */
snd_es1968_update_pcm(struct es1968 * chip,struct esschan * es)1839 static void snd_es1968_update_pcm(struct es1968 *chip, struct esschan *es)
1840 {
1841 	unsigned int hwptr;
1842 	unsigned int diff;
1843 	struct snd_pcm_substream *subs = es->substream;
1844 
1845 	if (subs == NULL || !es->running)
1846 		return;
1847 
1848 	hwptr = snd_es1968_get_dma_ptr(chip, es) << es->wav_shift;
1849 	hwptr %= es->dma_size;
1850 
1851 	diff = (es->dma_size + hwptr - es->hwptr) % es->dma_size;
1852 
1853 	es->hwptr = hwptr;
1854 	es->count += diff;
1855 
1856 	if (es->count > es->frag_size) {
1857 		spin_unlock(&chip->substream_lock);
1858 		snd_pcm_period_elapsed(subs);
1859 		spin_lock(&chip->substream_lock);
1860 		es->count %= es->frag_size;
1861 	}
1862 }
1863 
1864 /* The hardware volume works by incrementing / decrementing 2 counters
1865    (without wrap around) in response to volume button presses and then
1866    generating an interrupt. The pair of counters is stored in bits 1-3 and 5-7
1867    of a byte wide register. The meaning of bits 0 and 4 is unknown. */
es1968_update_hw_volume(struct work_struct * work)1868 static void es1968_update_hw_volume(struct work_struct *work)
1869 {
1870 	struct es1968 *chip = container_of(work, struct es1968, hwvol_work);
1871 	int x, val;
1872 
1873 	/* Figure out which volume control button was pushed,
1874 	   based on differences from the default register
1875 	   values. */
1876 	x = inb(chip->io_port + 0x1c) & 0xee;
1877 	/* Reset the volume control registers. */
1878 	outb(0x88, chip->io_port + 0x1c);
1879 	outb(0x88, chip->io_port + 0x1d);
1880 	outb(0x88, chip->io_port + 0x1e);
1881 	outb(0x88, chip->io_port + 0x1f);
1882 
1883 	if (chip->in_suspend)
1884 		return;
1885 
1886 #ifndef CONFIG_SND_ES1968_INPUT
1887 	if (! chip->master_switch || ! chip->master_volume)
1888 		return;
1889 
1890 	val = snd_ac97_read(chip->ac97, AC97_MASTER);
1891 	switch (x) {
1892 	case 0x88:
1893 		/* mute */
1894 		val ^= 0x8000;
1895 		break;
1896 	case 0xaa:
1897 		/* volume up */
1898 		if ((val & 0x7f) > 0)
1899 			val--;
1900 		if ((val & 0x7f00) > 0)
1901 			val -= 0x0100;
1902 		break;
1903 	case 0x66:
1904 		/* volume down */
1905 		if ((val & 0x7f) < 0x1f)
1906 			val++;
1907 		if ((val & 0x7f00) < 0x1f00)
1908 			val += 0x0100;
1909 		break;
1910 	}
1911 	if (snd_ac97_update(chip->ac97, AC97_MASTER, val))
1912 		snd_ctl_notify(chip->card, SNDRV_CTL_EVENT_MASK_VALUE,
1913 			       &chip->master_volume->id);
1914 #else
1915 	if (!chip->input_dev)
1916 		return;
1917 
1918 	val = 0;
1919 	switch (x) {
1920 	case 0x88:
1921 		/* The counters have not changed, yet we've received a HV
1922 		   interrupt. According to tests run by various people this
1923 		   happens when pressing the mute button. */
1924 		val = KEY_MUTE;
1925 		break;
1926 	case 0xaa:
1927 		/* counters increased by 1 -> volume up */
1928 		val = KEY_VOLUMEUP;
1929 		break;
1930 	case 0x66:
1931 		/* counters decreased by 1 -> volume down */
1932 		val = KEY_VOLUMEDOWN;
1933 		break;
1934 	}
1935 
1936 	if (val) {
1937 		input_report_key(chip->input_dev, val, 1);
1938 		input_sync(chip->input_dev);
1939 		input_report_key(chip->input_dev, val, 0);
1940 		input_sync(chip->input_dev);
1941 	}
1942 #endif
1943 }
1944 
1945 /*
1946  * interrupt handler
1947  */
snd_es1968_interrupt(int irq,void * dev_id)1948 static irqreturn_t snd_es1968_interrupt(int irq, void *dev_id)
1949 {
1950 	struct es1968 *chip = dev_id;
1951 	u32 event;
1952 
1953 	event = inb(chip->io_port + 0x1A);
1954 	if (!event)
1955 		return IRQ_NONE;
1956 
1957 	outw(inw(chip->io_port + 4) & 1, chip->io_port + 4);
1958 
1959 	if (event & ESM_HWVOL_IRQ)
1960 		schedule_work(&chip->hwvol_work);
1961 
1962 	/* else ack 'em all, i imagine */
1963 	outb(0xFF, chip->io_port + 0x1A);
1964 
1965 	if ((event & ESM_MPU401_IRQ) && chip->rmidi) {
1966 		snd_mpu401_uart_interrupt(irq, chip->rmidi->private_data);
1967 	}
1968 
1969 	if (event & ESM_SOUND_IRQ) {
1970 		struct esschan *es;
1971 		spin_lock(&chip->substream_lock);
1972 		list_for_each_entry(es, &chip->substream_list, list) {
1973 			if (es->running) {
1974 				snd_es1968_update_pcm(chip, es);
1975 				if (es->fmt & ESS_FMT_STEREO)
1976 					snd_es1968_suppress_jitter(chip, es);
1977 			}
1978 		}
1979 		spin_unlock(&chip->substream_lock);
1980 		if (chip->in_measurement) {
1981 			unsigned int curp = __apu_get_register(chip, chip->measure_apu, 5);
1982 			if (curp < chip->measure_lastpos)
1983 				chip->measure_count++;
1984 			chip->measure_lastpos = curp;
1985 		}
1986 	}
1987 
1988 	return IRQ_HANDLED;
1989 }
1990 
1991 /*
1992  *  Mixer stuff
1993  */
1994 
1995 static int
snd_es1968_mixer(struct es1968 * chip)1996 snd_es1968_mixer(struct es1968 *chip)
1997 {
1998 	struct snd_ac97_bus *pbus;
1999 	struct snd_ac97_template ac97;
2000 	int err;
2001 	static const struct snd_ac97_bus_ops ops = {
2002 		.write = snd_es1968_ac97_write,
2003 		.read = snd_es1968_ac97_read,
2004 	};
2005 
2006 	err = snd_ac97_bus(chip->card, 0, &ops, NULL, &pbus);
2007 	if (err < 0)
2008 		return err;
2009 	pbus->no_vra = 1; /* ES1968 doesn't need VRA */
2010 
2011 	memset(&ac97, 0, sizeof(ac97));
2012 	ac97.private_data = chip;
2013 	err = snd_ac97_mixer(pbus, &ac97, &chip->ac97);
2014 	if (err < 0)
2015 		return err;
2016 
2017 #ifndef CONFIG_SND_ES1968_INPUT
2018 	/* attach master switch / volumes for h/w volume control */
2019 	chip->master_switch = snd_ctl_find_id_mixer(chip->card,
2020 						    "Master Playback Switch");
2021 	chip->master_volume = snd_ctl_find_id_mixer(chip->card,
2022 						    "Master Playback Volume");
2023 #endif
2024 
2025 	return 0;
2026 }
2027 
2028 /*
2029  * reset ac97 codec
2030  */
2031 
snd_es1968_ac97_reset(struct es1968 * chip)2032 static void snd_es1968_ac97_reset(struct es1968 *chip)
2033 {
2034 	unsigned long ioaddr = chip->io_port;
2035 
2036 	unsigned short save_ringbus_a;
2037 	unsigned short save_68;
2038 	unsigned short w;
2039 	unsigned int vend;
2040 
2041 	/* save configuration */
2042 	save_ringbus_a = inw(ioaddr + 0x36);
2043 
2044 	//outw(inw(ioaddr + 0x38) & 0xfffc, ioaddr + 0x38); /* clear second codec id? */
2045 	/* set command/status address i/o to 1st codec */
2046 	outw(inw(ioaddr + 0x3a) & 0xfffc, ioaddr + 0x3a);
2047 	outw(inw(ioaddr + 0x3c) & 0xfffc, ioaddr + 0x3c);
2048 
2049 	/* disable ac link */
2050 	outw(0x0000, ioaddr + 0x36);
2051 	save_68 = inw(ioaddr + 0x68);
2052 	pci_read_config_word(chip->pci, 0x58, &w);	/* something magical with gpio and bus arb. */
2053 	pci_read_config_dword(chip->pci, PCI_SUBSYSTEM_VENDOR_ID, &vend);
2054 	if (w & 1)
2055 		save_68 |= 0x10;
2056 	outw(0xfffe, ioaddr + 0x64);	/* unmask gpio 0 */
2057 	outw(0x0001, ioaddr + 0x68);	/* gpio write */
2058 	outw(0x0000, ioaddr + 0x60);	/* write 0 to gpio 0 */
2059 	udelay(20);
2060 	outw(0x0001, ioaddr + 0x60);	/* write 1 to gpio 1 */
2061 	msleep(20);
2062 
2063 	outw(save_68 | 0x1, ioaddr + 0x68);	/* now restore .. */
2064 	outw((inw(ioaddr + 0x38) & 0xfffc) | 0x1, ioaddr + 0x38);
2065 	outw((inw(ioaddr + 0x3a) & 0xfffc) | 0x1, ioaddr + 0x3a);
2066 	outw((inw(ioaddr + 0x3c) & 0xfffc) | 0x1, ioaddr + 0x3c);
2067 
2068 	/* now the second codec */
2069 	/* disable ac link */
2070 	outw(0x0000, ioaddr + 0x36);
2071 	outw(0xfff7, ioaddr + 0x64);	/* unmask gpio 3 */
2072 	save_68 = inw(ioaddr + 0x68);
2073 	outw(0x0009, ioaddr + 0x68);	/* gpio write 0 & 3 ?? */
2074 	outw(0x0001, ioaddr + 0x60);	/* write 1 to gpio */
2075 	udelay(20);
2076 	outw(0x0009, ioaddr + 0x60);	/* write 9 to gpio */
2077 	msleep(500);
2078 	//outw(inw(ioaddr + 0x38) & 0xfffc, ioaddr + 0x38);
2079 	outw(inw(ioaddr + 0x3a) & 0xfffc, ioaddr + 0x3a);
2080 	outw(inw(ioaddr + 0x3c) & 0xfffc, ioaddr + 0x3c);
2081 
2082 #if 0				/* the loop here needs to be much better if we want it.. */
2083 	dev_info(chip->card->dev, "trying software reset\n");
2084 	/* try and do a software reset */
2085 	outb(0x80 | 0x7c, ioaddr + 0x30);
2086 	for (w = 0;; w++) {
2087 		if ((inw(ioaddr + 0x30) & 1) == 0) {
2088 			if (inb(ioaddr + 0x32) != 0)
2089 				break;
2090 
2091 			outb(0x80 | 0x7d, ioaddr + 0x30);
2092 			if (((inw(ioaddr + 0x30) & 1) == 0)
2093 			    && (inb(ioaddr + 0x32) != 0))
2094 				break;
2095 			outb(0x80 | 0x7f, ioaddr + 0x30);
2096 			if (((inw(ioaddr + 0x30) & 1) == 0)
2097 			    && (inb(ioaddr + 0x32) != 0))
2098 				break;
2099 		}
2100 
2101 		if (w > 10000) {
2102 			outb(inb(ioaddr + 0x37) | 0x08, ioaddr + 0x37);	/* do a software reset */
2103 			msleep(500);	/* oh my.. */
2104 			outb(inb(ioaddr + 0x37) & ~0x08,
2105 				ioaddr + 0x37);
2106 			udelay(1);
2107 			outw(0x80, ioaddr + 0x30);
2108 			for (w = 0; w < 10000; w++) {
2109 				if ((inw(ioaddr + 0x30) & 1) == 0)
2110 					break;
2111 			}
2112 		}
2113 	}
2114 #endif
2115 	if (vend == NEC_VERSA_SUBID1 || vend == NEC_VERSA_SUBID2) {
2116 		/* turn on external amp? */
2117 		outw(0xf9ff, ioaddr + 0x64);
2118 		outw(inw(ioaddr + 0x68) | 0x600, ioaddr + 0x68);
2119 		outw(0x0209, ioaddr + 0x60);
2120 	}
2121 
2122 	/* restore.. */
2123 	outw(save_ringbus_a, ioaddr + 0x36);
2124 
2125 	/* Turn on the 978 docking chip.
2126 	   First frob the "master output enable" bit,
2127 	   then set most of the playback volume control registers to max. */
2128 	outb(inb(ioaddr+0xc0)|(1<<5), ioaddr+0xc0);
2129 	outb(0xff, ioaddr+0xc3);
2130 	outb(0xff, ioaddr+0xc4);
2131 	outb(0xff, ioaddr+0xc6);
2132 	outb(0xff, ioaddr+0xc8);
2133 	outb(0x3f, ioaddr+0xcf);
2134 	outb(0x3f, ioaddr+0xd0);
2135 }
2136 
snd_es1968_reset(struct es1968 * chip)2137 static void snd_es1968_reset(struct es1968 *chip)
2138 {
2139 	/* Reset */
2140 	outw(ESM_RESET_MAESTRO | ESM_RESET_DIRECTSOUND,
2141 	     chip->io_port + ESM_PORT_HOST_IRQ);
2142 	udelay(10);
2143 	outw(0x0000, chip->io_port + ESM_PORT_HOST_IRQ);
2144 	udelay(10);
2145 }
2146 
2147 /*
2148  * initialize maestro chip
2149  */
snd_es1968_chip_init(struct es1968 * chip)2150 static void snd_es1968_chip_init(struct es1968 *chip)
2151 {
2152 	struct pci_dev *pci = chip->pci;
2153 	int i;
2154 	unsigned long iobase  = chip->io_port;
2155 	u16 w;
2156 	u32 n;
2157 
2158 	/* We used to muck around with pci config space that
2159 	 * we had no business messing with.  We don't know enough
2160 	 * about the machine to know which DMA mode is appropriate,
2161 	 * etc.  We were guessing wrong on some machines and making
2162 	 * them unhappy.  We now trust in the BIOS to do things right,
2163 	 * which almost certainly means a new host of problems will
2164 	 * arise with broken BIOS implementations.  screw 'em.
2165 	 * We're already intolerant of machines that don't assign
2166 	 * IRQs.
2167 	 */
2168 
2169 	/* Config Reg A */
2170 	pci_read_config_word(pci, ESM_CONFIG_A, &w);
2171 
2172 	w &= ~DMA_CLEAR;	/* Clear DMA bits */
2173 	w &= ~(PIC_SNOOP1 | PIC_SNOOP2);	/* Clear Pic Snoop Mode Bits */
2174 	w &= ~SAFEGUARD;	/* Safeguard off */
2175 	w |= POST_WRITE;	/* Posted write */
2176 	w |= PCI_TIMING;	/* PCI timing on */
2177 	/* XXX huh?  claims to be reserved.. */
2178 	w &= ~SWAP_LR;		/* swap left/right
2179 				   seems to only have effect on SB
2180 				   Emulation */
2181 	w &= ~SUBTR_DECODE;	/* Subtractive decode off */
2182 
2183 	pci_write_config_word(pci, ESM_CONFIG_A, w);
2184 
2185 	/* Config Reg B */
2186 
2187 	pci_read_config_word(pci, ESM_CONFIG_B, &w);
2188 
2189 	w &= ~(1 << 15);	/* Turn off internal clock multiplier */
2190 	/* XXX how do we know which to use? */
2191 	w &= ~(1 << 14);	/* External clock */
2192 
2193 	w &= ~SPDIF_CONFB;	/* disable S/PDIF output */
2194 	w |= HWV_CONFB;		/* HWV on */
2195 	w |= DEBOUNCE;		/* Debounce off: easier to push the HW buttons */
2196 	w &= ~GPIO_CONFB;	/* GPIO 4:5 */
2197 	w |= CHI_CONFB;		/* Disconnect from the CHI.  Enabling this made a dell 7500 work. */
2198 	w &= ~IDMA_CONFB;	/* IDMA off (undocumented) */
2199 	w &= ~MIDI_FIX;		/* MIDI fix off (undoc) */
2200 	w &= ~(1 << 1);		/* reserved, always write 0 */
2201 	w &= ~IRQ_TO_ISA;	/* IRQ to ISA off (undoc) */
2202 
2203 	pci_write_config_word(pci, ESM_CONFIG_B, w);
2204 
2205 	/* DDMA off */
2206 
2207 	pci_read_config_word(pci, ESM_DDMA, &w);
2208 	w &= ~(1 << 0);
2209 	pci_write_config_word(pci, ESM_DDMA, w);
2210 
2211 	/*
2212 	 *	Legacy mode
2213 	 */
2214 
2215 	pci_read_config_word(pci, ESM_LEGACY_AUDIO_CONTROL, &w);
2216 
2217 	w |= ESS_DISABLE_AUDIO;	/* Disable Legacy Audio */
2218 	w &= ~ESS_ENABLE_SERIAL_IRQ;	/* Disable SIRQ */
2219 	w &= ~(0x1f);		/* disable mpu irq/io, game port, fm, SB */
2220 
2221 	pci_write_config_word(pci, ESM_LEGACY_AUDIO_CONTROL, w);
2222 
2223 	/* Set up 978 docking control chip. */
2224 	pci_read_config_word(pci, 0x58, &w);
2225 	w|=1<<2;	/* Enable 978. */
2226 	w|=1<<3;	/* Turn on 978 hardware volume control. */
2227 	w&=~(1<<11);	/* Turn on 978 mixer volume control. */
2228 	pci_write_config_word(pci, 0x58, w);
2229 
2230 	/* Sound Reset */
2231 
2232 	snd_es1968_reset(chip);
2233 
2234 	/*
2235 	 *	Ring Bus Setup
2236 	 */
2237 
2238 	/* setup usual 0x34 stuff.. 0x36 may be chip specific */
2239 	outw(0xC090, iobase + ESM_RING_BUS_DEST); /* direct sound, stereo */
2240 	udelay(20);
2241 	outw(0x3000, iobase + ESM_RING_BUS_CONTR_A); /* enable ringbus/serial */
2242 	udelay(20);
2243 
2244 	/*
2245 	 *	Reset the CODEC
2246 	 */
2247 
2248 	snd_es1968_ac97_reset(chip);
2249 
2250 	/* Ring Bus Control B */
2251 
2252 	n = inl(iobase + ESM_RING_BUS_CONTR_B);
2253 	n &= ~RINGB_EN_SPDIF;	/* SPDIF off */
2254 	//w |= RINGB_EN_2CODEC;	/* enable 2nd codec */
2255 	outl(n, iobase + ESM_RING_BUS_CONTR_B);
2256 
2257 	/* Set hardware volume control registers to midpoints.
2258 	   We can tell which button was pushed based on how they change. */
2259 	outb(0x88, iobase+0x1c);
2260 	outb(0x88, iobase+0x1d);
2261 	outb(0x88, iobase+0x1e);
2262 	outb(0x88, iobase+0x1f);
2263 
2264 	/* it appears some maestros (dell 7500) only work if these are set,
2265 	   regardless of whether we use the assp or not. */
2266 
2267 	outb(0, iobase + ASSP_CONTROL_B);
2268 	outb(3, iobase + ASSP_CONTROL_A);	/* M: Reserved bits... */
2269 	outb(0, iobase + ASSP_CONTROL_C);	/* M: Disable ASSP, ASSP IRQ's and FM Port */
2270 
2271 	/*
2272 	 * set up wavecache
2273 	 */
2274 	for (i = 0; i < 16; i++) {
2275 		/* Write 0 into the buffer area 0x1E0->1EF */
2276 		outw(0x01E0 + i, iobase + WC_INDEX);
2277 		outw(0x0000, iobase + WC_DATA);
2278 
2279 		/* The 1.10 test program seem to write 0 into the buffer area
2280 		 * 0x1D0-0x1DF too.*/
2281 		outw(0x01D0 + i, iobase + WC_INDEX);
2282 		outw(0x0000, iobase + WC_DATA);
2283 	}
2284 	wave_set_register(chip, IDR7_WAVE_ROMRAM,
2285 			  (wave_get_register(chip, IDR7_WAVE_ROMRAM) & 0xFF00));
2286 	wave_set_register(chip, IDR7_WAVE_ROMRAM,
2287 			  wave_get_register(chip, IDR7_WAVE_ROMRAM) | 0x100);
2288 	wave_set_register(chip, IDR7_WAVE_ROMRAM,
2289 			  wave_get_register(chip, IDR7_WAVE_ROMRAM) & ~0x200);
2290 	wave_set_register(chip, IDR7_WAVE_ROMRAM,
2291 			  wave_get_register(chip, IDR7_WAVE_ROMRAM) | ~0x400);
2292 
2293 
2294 	maestro_write(chip, IDR2_CRAM_DATA, 0x0000);
2295 	/* Now back to the DirectSound stuff */
2296 	/* audio serial configuration.. ? */
2297 	maestro_write(chip, 0x08, 0xB004);
2298 	maestro_write(chip, 0x09, 0x001B);
2299 	maestro_write(chip, 0x0A, 0x8000);
2300 	maestro_write(chip, 0x0B, 0x3F37);
2301 	maestro_write(chip, 0x0C, 0x0098);
2302 
2303 	/* parallel in, has something to do with recording :) */
2304 	maestro_write(chip, 0x0C,
2305 		      (maestro_read(chip, 0x0C) & ~0xF000) | 0x8000);
2306 	/* parallel out */
2307 	maestro_write(chip, 0x0C,
2308 		      (maestro_read(chip, 0x0C) & ~0x0F00) | 0x0500);
2309 
2310 	maestro_write(chip, 0x0D, 0x7632);
2311 
2312 	/* Wave cache control on - test off, sg off,
2313 	   enable, enable extra chans 1Mb */
2314 
2315 	w = inw(iobase + WC_CONTROL);
2316 
2317 	w &= ~0xFA00;		/* Seems to be reserved? I don't know */
2318 	w |= 0xA000;		/* reserved... I don't know */
2319 	w &= ~0x0200;		/* Channels 56,57,58,59 as Extra Play,Rec Channel enable
2320 				   Seems to crash the Computer if enabled... */
2321 	w |= 0x0100;		/* Wave Cache Operation Enabled */
2322 	w |= 0x0080;		/* Channels 60/61 as Placback/Record enabled */
2323 	w &= ~0x0060;		/* Clear Wavtable Size */
2324 	w |= 0x0020;		/* Wavetable Size : 1MB */
2325 	/* Bit 4 is reserved */
2326 	w &= ~0x000C;		/* DMA Stuff? I don't understand what the datasheet means */
2327 	/* Bit 1 is reserved */
2328 	w &= ~0x0001;		/* Test Mode off */
2329 
2330 	outw(w, iobase + WC_CONTROL);
2331 
2332 	/* Now clear the APU control ram */
2333 	for (i = 0; i < NR_APUS; i++) {
2334 		for (w = 0; w < NR_APU_REGS; w++)
2335 			apu_set_register(chip, i, w, 0);
2336 
2337 	}
2338 }
2339 
2340 /* Enable IRQ's */
snd_es1968_start_irq(struct es1968 * chip)2341 static void snd_es1968_start_irq(struct es1968 *chip)
2342 {
2343 	unsigned short w;
2344 	w = ESM_HIRQ_DSIE | ESM_HIRQ_HW_VOLUME;
2345 	if (chip->rmidi)
2346 		w |= ESM_HIRQ_MPU401;
2347 	outb(w, chip->io_port + 0x1A);
2348 	outw(w, chip->io_port + ESM_PORT_HOST_IRQ);
2349 }
2350 
2351 /*
2352  * PM support
2353  */
es1968_suspend(struct device * dev)2354 static int es1968_suspend(struct device *dev)
2355 {
2356 	struct snd_card *card = dev_get_drvdata(dev);
2357 	struct es1968 *chip = card->private_data;
2358 
2359 	if (! chip->do_pm)
2360 		return 0;
2361 
2362 	chip->in_suspend = 1;
2363 	cancel_work_sync(&chip->hwvol_work);
2364 	snd_power_change_state(card, SNDRV_CTL_POWER_D3hot);
2365 	snd_ac97_suspend(chip->ac97);
2366 	snd_es1968_bob_stop(chip);
2367 	return 0;
2368 }
2369 
es1968_resume(struct device * dev)2370 static int es1968_resume(struct device *dev)
2371 {
2372 	struct snd_card *card = dev_get_drvdata(dev);
2373 	struct es1968 *chip = card->private_data;
2374 	struct esschan *es;
2375 
2376 	if (! chip->do_pm)
2377 		return 0;
2378 
2379 	snd_es1968_chip_init(chip);
2380 
2381 	/* need to restore the base pointers.. */
2382 	if (chip->dma.addr) {
2383 		/* set PCMBAR */
2384 		wave_set_register(chip, 0x01FC, chip->dma.addr >> 12);
2385 	}
2386 
2387 	snd_es1968_start_irq(chip);
2388 
2389 	/* restore ac97 state */
2390 	snd_ac97_resume(chip->ac97);
2391 
2392 	list_for_each_entry(es, &chip->substream_list, list) {
2393 		switch (es->mode) {
2394 		case ESM_MODE_PLAY:
2395 			snd_es1968_playback_setup(chip, es, es->substream->runtime);
2396 			break;
2397 		case ESM_MODE_CAPTURE:
2398 			snd_es1968_capture_setup(chip, es, es->substream->runtime);
2399 			break;
2400 		}
2401 	}
2402 
2403 	/* start timer again */
2404 	if (chip->bobclient)
2405 		snd_es1968_bob_start(chip);
2406 
2407 	snd_power_change_state(card, SNDRV_CTL_POWER_D0);
2408 	chip->in_suspend = 0;
2409 	return 0;
2410 }
2411 
2412 static DEFINE_SIMPLE_DEV_PM_OPS(es1968_pm, es1968_suspend, es1968_resume);
2413 
2414 #ifdef SUPPORT_JOYSTICK
2415 #define JOYSTICK_ADDR	0x200
snd_es1968_create_gameport(struct es1968 * chip,int dev)2416 static int snd_es1968_create_gameport(struct es1968 *chip, int dev)
2417 {
2418 	struct gameport *gp;
2419 	struct resource *r;
2420 	u16 val;
2421 
2422 	if (!joystick[dev])
2423 		return -ENODEV;
2424 
2425 	r = devm_request_region(&chip->pci->dev, JOYSTICK_ADDR, 8,
2426 				"ES1968 gameport");
2427 	if (!r)
2428 		return -EBUSY;
2429 
2430 	chip->gameport = gp = gameport_allocate_port();
2431 	if (!gp) {
2432 		dev_err(chip->card->dev,
2433 			"cannot allocate memory for gameport\n");
2434 		return -ENOMEM;
2435 	}
2436 
2437 	pci_read_config_word(chip->pci, ESM_LEGACY_AUDIO_CONTROL, &val);
2438 	pci_write_config_word(chip->pci, ESM_LEGACY_AUDIO_CONTROL, val | 0x04);
2439 
2440 	gameport_set_name(gp, "ES1968 Gameport");
2441 	gameport_set_phys(gp, "pci%s/gameport0", pci_name(chip->pci));
2442 	gameport_set_dev_parent(gp, &chip->pci->dev);
2443 	gp->io = JOYSTICK_ADDR;
2444 
2445 	gameport_register_port(gp);
2446 
2447 	return 0;
2448 }
2449 
snd_es1968_free_gameport(struct es1968 * chip)2450 static void snd_es1968_free_gameport(struct es1968 *chip)
2451 {
2452 	if (chip->gameport) {
2453 		gameport_unregister_port(chip->gameport);
2454 		chip->gameport = NULL;
2455 	}
2456 }
2457 #else
snd_es1968_create_gameport(struct es1968 * chip,int dev)2458 static inline int snd_es1968_create_gameport(struct es1968 *chip, int dev) { return -ENOSYS; }
snd_es1968_free_gameport(struct es1968 * chip)2459 static inline void snd_es1968_free_gameport(struct es1968 *chip) { }
2460 #endif
2461 
2462 #ifdef CONFIG_SND_ES1968_INPUT
snd_es1968_input_register(struct es1968 * chip)2463 static int snd_es1968_input_register(struct es1968 *chip)
2464 {
2465 	struct input_dev *input_dev;
2466 	int err;
2467 
2468 	input_dev = devm_input_allocate_device(&chip->pci->dev);
2469 	if (!input_dev)
2470 		return -ENOMEM;
2471 
2472 	snprintf(chip->phys, sizeof(chip->phys), "pci-%s/input0",
2473 		 pci_name(chip->pci));
2474 
2475 	input_dev->name = chip->card->driver;
2476 	input_dev->phys = chip->phys;
2477 	input_dev->id.bustype = BUS_PCI;
2478 	input_dev->id.vendor  = chip->pci->vendor;
2479 	input_dev->id.product = chip->pci->device;
2480 	input_dev->dev.parent = &chip->pci->dev;
2481 
2482 	__set_bit(EV_KEY, input_dev->evbit);
2483 	__set_bit(KEY_MUTE, input_dev->keybit);
2484 	__set_bit(KEY_VOLUMEDOWN, input_dev->keybit);
2485 	__set_bit(KEY_VOLUMEUP, input_dev->keybit);
2486 
2487 	err = input_register_device(input_dev);
2488 	if (err)
2489 		return err;
2490 
2491 	chip->input_dev = input_dev;
2492 	return 0;
2493 }
2494 #endif /* CONFIG_SND_ES1968_INPUT */
2495 
2496 #ifdef CONFIG_SND_ES1968_RADIO
2497 #define GPIO_DATA	0x60
2498 #define IO_MASK		4      /* mask      register offset from GPIO_DATA
2499 				bits 1=unmask write to given bit */
2500 #define IO_DIR		8      /* direction register offset from GPIO_DATA
2501 				bits 0/1=read/write direction */
2502 
2503 /* GPIO to TEA575x maps */
2504 struct snd_es1968_tea575x_gpio {
2505 	u8 data, clk, wren, most;
2506 	char *name;
2507 };
2508 
2509 static const struct snd_es1968_tea575x_gpio snd_es1968_tea575x_gpios[] = {
2510 	{ .data = 6, .clk = 7, .wren = 8, .most = 9, .name = "SF64-PCE2" },
2511 	{ .data = 7, .clk = 8, .wren = 6, .most = 10, .name = "M56VAP" },
2512 };
2513 
2514 #define get_tea575x_gpio(chip) \
2515 	(&snd_es1968_tea575x_gpios[(chip)->tea575x_tuner])
2516 
2517 
snd_es1968_tea575x_set_pins(struct snd_tea575x * tea,u8 pins)2518 static void snd_es1968_tea575x_set_pins(struct snd_tea575x *tea, u8 pins)
2519 {
2520 	struct es1968 *chip = tea->private_data;
2521 	struct snd_es1968_tea575x_gpio gpio = *get_tea575x_gpio(chip);
2522 	u16 val = 0;
2523 
2524 	val |= (pins & TEA575X_DATA) ? (1 << gpio.data) : 0;
2525 	val |= (pins & TEA575X_CLK)  ? (1 << gpio.clk)  : 0;
2526 	val |= (pins & TEA575X_WREN) ? (1 << gpio.wren) : 0;
2527 
2528 	outw(val, chip->io_port + GPIO_DATA);
2529 }
2530 
snd_es1968_tea575x_get_pins(struct snd_tea575x * tea)2531 static u8 snd_es1968_tea575x_get_pins(struct snd_tea575x *tea)
2532 {
2533 	struct es1968 *chip = tea->private_data;
2534 	struct snd_es1968_tea575x_gpio gpio = *get_tea575x_gpio(chip);
2535 	u16 val = inw(chip->io_port + GPIO_DATA);
2536 	u8 ret = 0;
2537 
2538 	if (val & (1 << gpio.data))
2539 		ret |= TEA575X_DATA;
2540 	if (val & (1 << gpio.most))
2541 		ret |= TEA575X_MOST;
2542 
2543 	return ret;
2544 }
2545 
snd_es1968_tea575x_set_direction(struct snd_tea575x * tea,bool output)2546 static void snd_es1968_tea575x_set_direction(struct snd_tea575x *tea, bool output)
2547 {
2548 	struct es1968 *chip = tea->private_data;
2549 	unsigned long io = chip->io_port + GPIO_DATA;
2550 	u16 odir = inw(io + IO_DIR);
2551 	struct snd_es1968_tea575x_gpio gpio = *get_tea575x_gpio(chip);
2552 
2553 	if (output) {
2554 		outw(~((1 << gpio.data) | (1 << gpio.clk) | (1 << gpio.wren)),
2555 			io + IO_MASK);
2556 		outw(odir | (1 << gpio.data) | (1 << gpio.clk) | (1 << gpio.wren),
2557 			io + IO_DIR);
2558 	} else {
2559 		outw(~((1 << gpio.clk) | (1 << gpio.wren) | (1 << gpio.data) | (1 << gpio.most)),
2560 			io + IO_MASK);
2561 		outw((odir & ~((1 << gpio.data) | (1 << gpio.most)))
2562 			| (1 << gpio.clk) | (1 << gpio.wren), io + IO_DIR);
2563 	}
2564 }
2565 
2566 static const struct snd_tea575x_ops snd_es1968_tea_ops = {
2567 	.set_pins = snd_es1968_tea575x_set_pins,
2568 	.get_pins = snd_es1968_tea575x_get_pins,
2569 	.set_direction = snd_es1968_tea575x_set_direction,
2570 };
2571 #endif
2572 
snd_es1968_free(struct snd_card * card)2573 static void snd_es1968_free(struct snd_card *card)
2574 {
2575 	struct es1968 *chip = card->private_data;
2576 
2577 	cancel_work_sync(&chip->hwvol_work);
2578 
2579 	if (chip->io_port) {
2580 		outw(1, chip->io_port + 0x04); /* clear WP interrupts */
2581 		outw(0, chip->io_port + ESM_PORT_HOST_IRQ); /* disable IRQ */
2582 	}
2583 
2584 #ifdef CONFIG_SND_ES1968_RADIO
2585 	snd_tea575x_exit(&chip->tea);
2586 	v4l2_device_unregister(&chip->v4l2_dev);
2587 #endif
2588 
2589 	snd_es1968_free_gameport(chip);
2590 }
2591 
2592 struct ess_device_list {
2593 	unsigned short type;	/* chip type */
2594 	unsigned short vendor;	/* subsystem vendor id */
2595 };
2596 
2597 static const struct ess_device_list pm_allowlist[] = {
2598 	{ TYPE_MAESTRO2E, 0x0e11 },	/* Compaq Armada */
2599 	{ TYPE_MAESTRO2E, 0x1028 },
2600 	{ TYPE_MAESTRO2E, 0x103c },
2601 	{ TYPE_MAESTRO2E, 0x1179 },
2602 	{ TYPE_MAESTRO2E, 0x14c0 },	/* HP omnibook 4150 */
2603 	{ TYPE_MAESTRO2E, 0x1558 },
2604 	{ TYPE_MAESTRO2E, 0x125d },	/* a PCI card, e.g. Terratec DMX */
2605 	{ TYPE_MAESTRO2, 0x125d },	/* a PCI card, e.g. SF64-PCE2 */
2606 };
2607 
2608 static const struct ess_device_list mpu_denylist[] = {
2609 	{ TYPE_MAESTRO2, 0x125d },
2610 };
2611 
snd_es1968_create(struct snd_card * card,struct pci_dev * pci,int total_bufsize,int play_streams,int capt_streams,int chip_type,int do_pm,int radio_nr)2612 static int snd_es1968_create(struct snd_card *card,
2613 			     struct pci_dev *pci,
2614 			     int total_bufsize,
2615 			     int play_streams,
2616 			     int capt_streams,
2617 			     int chip_type,
2618 			     int do_pm,
2619 			     int radio_nr)
2620 {
2621 	struct es1968 *chip = card->private_data;
2622 	int i, err;
2623 
2624 	/* enable PCI device */
2625 	err = pcim_enable_device(pci);
2626 	if (err < 0)
2627 		return err;
2628 	/* check, if we can restrict PCI DMA transfers to 28 bits */
2629 	if (dma_set_mask_and_coherent(&pci->dev, DMA_BIT_MASK(28))) {
2630 		dev_err(card->dev,
2631 			"architecture does not support 28bit PCI busmaster DMA\n");
2632 		return -ENXIO;
2633 	}
2634 
2635 	/* Set Vars */
2636 	chip->type = chip_type;
2637 	spin_lock_init(&chip->reg_lock);
2638 	spin_lock_init(&chip->substream_lock);
2639 	INIT_LIST_HEAD(&chip->buf_list);
2640 	INIT_LIST_HEAD(&chip->substream_list);
2641 	mutex_init(&chip->memory_mutex);
2642 	INIT_WORK(&chip->hwvol_work, es1968_update_hw_volume);
2643 	chip->card = card;
2644 	chip->pci = pci;
2645 	chip->irq = -1;
2646 	chip->total_bufsize = total_bufsize;	/* in bytes */
2647 	chip->playback_streams = play_streams;
2648 	chip->capture_streams = capt_streams;
2649 
2650 	err = pci_request_regions(pci, "ESS Maestro");
2651 	if (err < 0)
2652 		return err;
2653 	chip->io_port = pci_resource_start(pci, 0);
2654 	if (devm_request_irq(&pci->dev, pci->irq, snd_es1968_interrupt,
2655 			     IRQF_SHARED, KBUILD_MODNAME, chip)) {
2656 		dev_err(card->dev, "unable to grab IRQ %d\n", pci->irq);
2657 		return -EBUSY;
2658 	}
2659 	chip->irq = pci->irq;
2660 	card->sync_irq = chip->irq;
2661 	card->private_free = snd_es1968_free;
2662 
2663 	/* Clear Maestro_map */
2664 	for (i = 0; i < 32; i++)
2665 		chip->maestro_map[i] = 0;
2666 
2667 	/* Clear Apu Map */
2668 	for (i = 0; i < NR_APUS; i++)
2669 		chip->apu[i] = ESM_APU_FREE;
2670 
2671 	/* just to be sure */
2672 	pci_set_master(pci);
2673 
2674 	if (do_pm > 1) {
2675 		/* disable power-management if not on the allowlist */
2676 		unsigned short vend;
2677 		pci_read_config_word(chip->pci, PCI_SUBSYSTEM_VENDOR_ID, &vend);
2678 		for (i = 0; i < (int)ARRAY_SIZE(pm_allowlist); i++) {
2679 			if (chip->type == pm_allowlist[i].type &&
2680 			    vend == pm_allowlist[i].vendor) {
2681 				do_pm = 1;
2682 				break;
2683 			}
2684 		}
2685 		if (do_pm > 1) {
2686 			/* not matched; disabling pm */
2687 			dev_info(card->dev, "not attempting power management.\n");
2688 			do_pm = 0;
2689 		}
2690 	}
2691 	chip->do_pm = do_pm;
2692 
2693 	snd_es1968_chip_init(chip);
2694 
2695 #ifdef CONFIG_SND_ES1968_RADIO
2696 	/* don't play with GPIOs on laptops */
2697 	if (chip->pci->subsystem_vendor != 0x125d)
2698 		return 0;
2699 	err = v4l2_device_register(&pci->dev, &chip->v4l2_dev);
2700 	if (err < 0)
2701 		return err;
2702 	chip->tea.v4l2_dev = &chip->v4l2_dev;
2703 	chip->tea.private_data = chip;
2704 	chip->tea.radio_nr = radio_nr;
2705 	chip->tea.ops = &snd_es1968_tea_ops;
2706 	sprintf(chip->tea.bus_info, "PCI:%s", pci_name(pci));
2707 	for (i = 0; i < ARRAY_SIZE(snd_es1968_tea575x_gpios); i++) {
2708 		chip->tea575x_tuner = i;
2709 		if (!snd_tea575x_init(&chip->tea, THIS_MODULE)) {
2710 			dev_info(card->dev, "detected TEA575x radio type %s\n",
2711 				   get_tea575x_gpio(chip)->name);
2712 			strscpy(chip->tea.card, get_tea575x_gpio(chip)->name,
2713 				sizeof(chip->tea.card));
2714 			break;
2715 		}
2716 	}
2717 #endif
2718 	return 0;
2719 }
2720 
2721 
2722 /*
2723  */
__snd_es1968_probe(struct pci_dev * pci,const struct pci_device_id * pci_id)2724 static int __snd_es1968_probe(struct pci_dev *pci,
2725 			      const struct pci_device_id *pci_id)
2726 {
2727 	static int dev;
2728 	struct snd_card *card;
2729 	struct es1968 *chip;
2730 	unsigned int i;
2731 	int err;
2732 
2733 	if (dev >= SNDRV_CARDS)
2734 		return -ENODEV;
2735 	if (!enable[dev]) {
2736 		dev++;
2737 		return -ENOENT;
2738 	}
2739 
2740 	err = snd_devm_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE,
2741 				sizeof(*chip), &card);
2742 	if (err < 0)
2743 		return err;
2744 	chip = card->private_data;
2745 
2746 	if (total_bufsize[dev] < 128)
2747 		total_bufsize[dev] = 128;
2748 	if (total_bufsize[dev] > 4096)
2749 		total_bufsize[dev] = 4096;
2750 	err = snd_es1968_create(card, pci,
2751 				total_bufsize[dev] * 1024, /* in bytes */
2752 				pcm_substreams_p[dev],
2753 				pcm_substreams_c[dev],
2754 				pci_id->driver_data,
2755 				use_pm[dev],
2756 				radio_nr[dev]);
2757 	if (err < 0)
2758 		return err;
2759 
2760 	switch (chip->type) {
2761 	case TYPE_MAESTRO2E:
2762 		strcpy(card->driver, "ES1978");
2763 		strcpy(card->shortname, "ESS ES1978 (Maestro 2E)");
2764 		break;
2765 	case TYPE_MAESTRO2:
2766 		strcpy(card->driver, "ES1968");
2767 		strcpy(card->shortname, "ESS ES1968 (Maestro 2)");
2768 		break;
2769 	case TYPE_MAESTRO:
2770 		strcpy(card->driver, "ESM1");
2771 		strcpy(card->shortname, "ESS Maestro 1");
2772 		break;
2773 	}
2774 
2775 	err = snd_es1968_pcm(chip, 0);
2776 	if (err < 0)
2777 		return err;
2778 
2779 	err = snd_es1968_mixer(chip);
2780 	if (err < 0)
2781 		return err;
2782 
2783 	if (enable_mpu[dev] == 2) {
2784 		/* check the deny list */
2785 		unsigned short vend;
2786 		pci_read_config_word(chip->pci, PCI_SUBSYSTEM_VENDOR_ID, &vend);
2787 		for (i = 0; i < ARRAY_SIZE(mpu_denylist); i++) {
2788 			if (chip->type == mpu_denylist[i].type &&
2789 			    vend == mpu_denylist[i].vendor) {
2790 				enable_mpu[dev] = 0;
2791 				break;
2792 			}
2793 		}
2794 	}
2795 	if (enable_mpu[dev]) {
2796 		err = snd_mpu401_uart_new(card, 0, MPU401_HW_MPU401,
2797 					  chip->io_port + ESM_MPU401_PORT,
2798 					  MPU401_INFO_INTEGRATED |
2799 					  MPU401_INFO_IRQ_HOOK,
2800 					  -1, &chip->rmidi);
2801 		if (err < 0)
2802 			dev_warn(card->dev, "skipping MPU-401 MIDI support..\n");
2803 	}
2804 
2805 	snd_es1968_create_gameport(chip, dev);
2806 
2807 #ifdef CONFIG_SND_ES1968_INPUT
2808 	err = snd_es1968_input_register(chip);
2809 	if (err)
2810 		dev_warn(card->dev,
2811 			 "Input device registration failed with error %i", err);
2812 #endif
2813 
2814 	snd_es1968_start_irq(chip);
2815 
2816 	chip->clock = clock[dev];
2817 	if (! chip->clock)
2818 		es1968_measure_clock(chip);
2819 
2820 	sprintf(card->longname, "%s at 0x%lx, irq %i",
2821 		card->shortname, chip->io_port, chip->irq);
2822 
2823 	err = snd_card_register(card);
2824 	if (err < 0)
2825 		return err;
2826 	pci_set_drvdata(pci, card);
2827 	dev++;
2828 	return 0;
2829 }
2830 
snd_es1968_probe(struct pci_dev * pci,const struct pci_device_id * pci_id)2831 static int snd_es1968_probe(struct pci_dev *pci,
2832 			    const struct pci_device_id *pci_id)
2833 {
2834 	return snd_card_free_on_error(&pci->dev, __snd_es1968_probe(pci, pci_id));
2835 }
2836 
2837 static struct pci_driver es1968_driver = {
2838 	.name = KBUILD_MODNAME,
2839 	.id_table = snd_es1968_ids,
2840 	.probe = snd_es1968_probe,
2841 	.driver = {
2842 		.pm = &es1968_pm,
2843 	},
2844 };
2845 
2846 module_pci_driver(es1968_driver);
2847