• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/components/opensource/linux/linux-2.6.36/sound/isa/gus/

Lines Matching refs:gus

28 #include <sound/gus.h>
37 static int snd_gus_init_dma_irq(struct snd_gus_card * gus, int latches);
39 int snd_gus_use_inc(struct snd_gus_card * gus)
41 if (!try_module_get(gus->card->module))
46 void snd_gus_use_dec(struct snd_gus_card * gus)
48 module_put(gus->card->module);
62 struct snd_gus_card *gus = snd_kcontrol_chip(kcontrol);
64 ucontrol->value.integer.value[0] = gus->joystick_dac & 31;
70 struct snd_gus_card *gus = snd_kcontrol_chip(kcontrol);
76 spin_lock_irqsave(&gus->reg_lock, flags);
77 change = gus->joystick_dac != nval;
78 gus->joystick_dac = nval;
79 snd_gf1_write8(gus, SNDRV_GF1_GB_JOYSTICK_DAC_LEVEL, gus->joystick_dac);
80 spin_unlock_irqrestore(&gus->reg_lock, flags);
92 static void snd_gus_init_control(struct snd_gus_card *gus)
94 if (!gus->ace_flag)
95 snd_ctl_add(gus->card, snd_ctl_new1(&snd_gus_joystick_control, gus));
102 static int snd_gus_free(struct snd_gus_card *gus)
104 if (gus->gf1.res_port2 == NULL)
106 snd_gf1_stop(gus);
107 snd_gus_init_dma_irq(gus, 0);
109 release_and_free_resource(gus->gf1.res_port1);
110 release_and_free_resource(gus->gf1.res_port2);
111 if (gus->gf1.irq >= 0)
112 free_irq(gus->gf1.irq, (void *) gus);
113 if (gus->gf1.dma1 >= 0) {
114 disable_dma(gus->gf1.dma1);
115 free_dma(gus->gf1.dma1);
117 if (!gus->equal_dma && gus->gf1.dma2 >= 0) {
118 disable_dma(gus->gf1.dma2);
119 free_dma(gus->gf1.dma2);
121 kfree(gus);
127 struct snd_gus_card *gus = device->device_data;
128 return snd_gus_free(gus);
140 struct snd_gus_card *gus;
147 gus = kzalloc(sizeof(*gus), GFP_KERNEL);
148 if (gus == NULL)
150 spin_lock_init(&gus->reg_lock);
151 spin_lock_init(&gus->voice_alloc);
152 spin_lock_init(&gus->active_voice_lock);
153 spin_lock_init(&gus->event_lock);
154 spin_lock_init(&gus->dma_lock);
155 spin_lock_init(&gus->pcm_volume_level_lock);
156 spin_lock_init(&gus->uart_cmd_lock);
157 mutex_init(&gus->dma_mutex);
158 gus->gf1.irq = -1;
159 gus->gf1.dma1 = -1;
160 gus->gf1.dma2 = -1;
161 gus->card = card;
162 gus->gf1.port = port;
164 gus->gf1.reg_page = GUSP(gus, GF1PAGE);
165 gus->gf1.reg_regsel = GUSP(gus, GF1REGSEL);
166 gus->gf1.reg_data8 = GUSP(gus, GF1DATAHIGH);
167 gus->gf1.reg_data16 = GUSP(gus, GF1DATALOW);
168 gus->gf1.reg_irqstat = GUSP(gus, IRQSTAT);
169 gus->gf1.reg_dram = GUSP(gus, DRAM);
170 gus->gf1.reg_timerctrl = GUSP(gus, TIMERCNTRL);
171 gus->gf1.reg_timerdata = GUSP(gus, TIMERDATA);
173 if ((gus->gf1.res_port1 = request_region(port, 16, "GUS GF1 (Adlib/SB)")) == NULL) {
174 snd_printk(KERN_ERR "gus: can't grab SB port 0x%lx\n", port);
175 snd_gus_free(gus);
178 if ((gus->gf1.res_port2 = request_region(port + 0x100, 12, "GUS GF1 (Synth)")) == NULL) {
179 snd_printk(KERN_ERR "gus: can't grab synth port 0x%lx\n", port + 0x100);
180 snd_gus_free(gus);
183 if (irq >= 0 && request_irq(irq, snd_gus_interrupt, IRQF_DISABLED, "GUS GF1", (void *) gus)) {
184 snd_printk(KERN_ERR "gus: can't grab irq %d\n", irq);
185 snd_gus_free(gus);
188 gus->gf1.irq = irq;
190 snd_printk(KERN_ERR "gus: can't grab DMA1 %d\n", dma1);
191 snd_gus_free(gus);
194 gus->gf1.dma1 = dma1;
197 snd_printk(KERN_ERR "gus: can't grab DMA2 %d\n", dma2);
198 snd_gus_free(gus);
201 gus->gf1.dma2 = dma2;
203 gus->gf1.dma2 = gus->gf1.dma1;
204 gus->equal_dma = 1;
206 gus->timer_dev = timer_dev;
217 gus->gf1.effect = effect ? 1 : 0;
218 gus->gf1.active_voices = voices;
219 gus->gf1.pcm_channels = pcm_channels;
220 gus->gf1.volume_ramp = 25;
221 gus->gf1.smooth_pan = 1;
222 if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, gus, &ops)) < 0) {
223 snd_gus_free(gus);
226 *rgus = gus;
234 static int snd_gus_detect_memory(struct snd_gus_card * gus)
239 snd_gf1_poke(gus, 0L, 0xaa);
240 snd_gf1_poke(gus, 1L, 0x55);
241 if (snd_gf1_peek(gus, 0L) != 0xaa || snd_gf1_peek(gus, 1L) != 0x55) {
242 snd_printk(KERN_ERR "plain GF1 card at 0x%lx without onboard DRAM?\n", gus->gf1.port);
247 snd_gf1_poke(gus, local, d);
248 snd_gf1_poke(gus, local + 1, d + 1);
249 if (snd_gf1_peek(gus, local) != d ||
250 snd_gf1_peek(gus, local + 1) != d + 1 ||
251 snd_gf1_peek(gus, 0L) != 0xaa)
254 gus->gf1.memory = idx << 18;
255 for (l = 0, local = gus->gf1.memory; l < 4; l++, local -= 256 * 1024) {
256 gus->gf1.mem_alloc.banks_8[l].address =
257 gus->gf1.mem_alloc.banks_8[l].size = 0;
258 gus->gf1.mem_alloc.banks_16[l].address = l << 18;
259 gus->gf1.mem_alloc.banks_16[l].size = local > 0 ? 256 * 1024 : 0;
261 gus->gf1.mem_alloc.banks_8[0].size = gus->gf1.memory;
265 static int snd_gus_init_dma_irq(struct snd_gus_card * gus, int latches)
275 if (snd_BUG_ON(!gus))
277 card = gus->card;
281 gus->mix_cntrl_reg &= 0xf8;
282 gus->mix_cntrl_reg |= 0x01; /* disable MIC, LINE IN, enable LINE OUT */
283 if (gus->codec_flag || gus->ess_flag) {
284 gus->mix_cntrl_reg &= ~1; /* enable LINE IN */
285 gus->mix_cntrl_reg |= 4; /* enable MIC */
287 dma1 = gus->gf1.dma1;
290 dma2 = gus->gf1.dma2;
293 dma1 |= gus->equal_dma ? 0x40 : (dma2 << 3);
299 irq = gus->gf1.irq;
308 spin_lock_irqsave(&gus->reg_lock, flags);
309 outb(5, GUSP(gus, REGCNTRLS));
310 outb(gus->mix_cntrl_reg, GUSP(gus, MIXCNTRLREG));
311 outb(0x00, GUSP(gus, IRQDMACNTRLREG));
312 outb(0, GUSP(gus, REGCNTRLS));
313 spin_unlock_irqrestore(&gus->reg_lock, flags);
317 spin_lock_irqsave(&gus->reg_lock, flags);
318 outb(0x00 | gus->mix_cntrl_reg, GUSP(gus, MIXCNTRLREG));
319 outb(dma1, GUSP(gus, IRQDMACNTRLREG));
321 outb(0x40 | gus->mix_cntrl_reg, GUSP(gus, MIXCNTRLREG));
322 outb(irq, GUSP(gus, IRQDMACNTRLREG));
324 spin_unlock_irqrestore(&gus->reg_lock, flags);
328 spin_lock_irqsave(&gus->reg_lock, flags);
329 outb(0x00 | gus->mix_cntrl_reg, GUSP(gus, MIXCNTRLREG));
330 outb(dma1, GUSP(gus, IRQDMACNTRLREG));
332 outb(0x40 | gus->mix_cntrl_reg, GUSP(gus, MIXCNTRLREG));
333 outb(irq, GUSP(gus, IRQDMACNTRLREG));
335 spin_unlock_irqrestore(&gus->reg_lock, flags);
337 snd_gf1_delay(gus);
340 gus->mix_cntrl_reg |= 0x08; /* enable latches */
342 gus->mix_cntrl_reg &= ~0x08; /* disable latches */
343 spin_lock_irqsave(&gus->reg_lock, flags);
344 outb(gus->mix_cntrl_reg, GUSP(gus, MIXCNTRLREG));
345 outb(0, GUSP(gus, GF1PAGE));
346 spin_unlock_irqrestore(&gus->reg_lock, flags);
351 static int snd_gus_check_version(struct snd_gus_card * gus)
357 card = gus->card;
358 spin_lock_irqsave(&gus->reg_lock, flags);
359 outb(0x20, GUSP(gus, REGCNTRLS));
360 val = inb(GUSP(gus, REGCNTRLS));
361 rev = inb(GUSP(gus, BOARDVERSION));
362 spin_unlock_irqrestore(&gus->reg_lock, flags);
363 snd_printdd("GF1 [0x%lx] init - val = 0x%x, rev = 0x%x\n", gus->gf1.port, val, rev);
368 gus->ics_flag = 1;
370 gus->ics_flipped = 1;
378 gus->max_flag = 1;
382 gus->ace_flag = 1;
386 gus->ess_flag = 1;
388 snd_printk(KERN_ERR "unknown GF1 revision number at 0x%lx - 0x%x (0x%x)\n", gus->gf1.port, rev, val);
394 gus->uart_enable = 1; /* standard GUSes doesn't have midi uart trouble */
395 snd_gus_init_control(gus);
399 int snd_gus_initialize(struct snd_gus_card *gus)
403 if (!gus->interwave) {
404 if ((err = snd_gus_check_version(gus)) < 0) {
408 if ((err = snd_gus_detect_memory(gus)) < 0)
411 if ((err = snd_gus_init_dma_irq(gus, 1)) < 0)
413 snd_gf1_start(gus);
414 gus->initialized = 1;
440 /* gus.c */