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