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